mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
5f3f44e76f
and test for this git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@680 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
131 lines
2.9 KiB
Ruby
131 lines
2.9 KiB
Ruby
require File.dirname(__FILE__) + '/abstract_unit'
|
|
require 'webrick'
|
|
require 'webrick/log'
|
|
require 'singleton'
|
|
|
|
module ClientTest
|
|
class Person < ActionWebService::Struct
|
|
member :firstnames, [:string]
|
|
member :lastname, :string
|
|
|
|
def ==(other)
|
|
firstnames == other.firstnames && lastname == other.lastname
|
|
end
|
|
end
|
|
|
|
class API < ActionWebService::API::Base
|
|
api_method :void
|
|
api_method :normal, :expects => [:int, :int], :returns => [:int]
|
|
api_method :array_return, :returns => [[Person]]
|
|
api_method :struct_pass, :expects => [[Person]], :returns => [:bool]
|
|
api_method :client_container, :returns => [:int]
|
|
api_method :named_parameters, :expects => [{:key=>:string}, {:id=>:int}]
|
|
end
|
|
|
|
class NullLogOut
|
|
def <<(*args); end
|
|
end
|
|
|
|
class Container < ActionController::Base
|
|
web_service_api API
|
|
|
|
attr :value_void
|
|
attr :value_normal
|
|
attr :value_array_return
|
|
attr :value_struct_pass
|
|
attr :value_named_parameters
|
|
|
|
def initialize
|
|
@session = @assigns = {}
|
|
@value_void = nil
|
|
@value_normal = nil
|
|
@value_array_return = nil
|
|
@value_struct_pass = nil
|
|
@value_named_parameters = nil
|
|
end
|
|
|
|
def void
|
|
@value_void = @method_params
|
|
end
|
|
|
|
def normal
|
|
@value_normal = @method_params
|
|
5
|
|
end
|
|
|
|
def array_return
|
|
person = Person.new
|
|
person.firstnames = ["one", "two"]
|
|
person.lastname = "last"
|
|
@value_array_return = [person]
|
|
end
|
|
|
|
def struct_pass
|
|
@value_struct_pass = @method_params
|
|
true
|
|
end
|
|
|
|
def client_container
|
|
50
|
|
end
|
|
|
|
def named_parameters
|
|
@value_named_parameters = @method_params
|
|
end
|
|
|
|
def protocol_request(request)
|
|
probe_request_protocol(request)
|
|
end
|
|
|
|
def dispatch_request(protocol_request)
|
|
dispatch_protocol_request(protocol_request)
|
|
end
|
|
end
|
|
|
|
class AbstractClientLet < WEBrick::HTTPServlet::AbstractServlet
|
|
def initialize(controller)
|
|
@controller = controller
|
|
end
|
|
|
|
def get_instance(*args)
|
|
self
|
|
end
|
|
|
|
def require_path_info?
|
|
false
|
|
end
|
|
|
|
def do_GET(req, res)
|
|
raise WEBrick::HTTPStatus::MethodNotAllowed, "GET request not allowed."
|
|
end
|
|
|
|
def do_POST(req, res)
|
|
raise NotImplementedError
|
|
end
|
|
end
|
|
|
|
class AbstractServer
|
|
include ClientTest
|
|
include Singleton
|
|
attr :container
|
|
def initialize
|
|
@container = Container.new
|
|
@clientlet = create_clientlet(@container)
|
|
log = WEBrick::BasicLog.new(NullLogOut.new)
|
|
@server = WEBrick::HTTPServer.new(:Port => server_port, :Logger => log, :AccessLog => log)
|
|
@server.mount('/', @clientlet)
|
|
@thr = Thread.new { @server.start }
|
|
until @server.status == :Running; end
|
|
at_exit { @server.stop; @thr.join }
|
|
end
|
|
|
|
protected
|
|
def create_clientlet
|
|
raise NotImplementedError
|
|
end
|
|
|
|
def server_port
|
|
raise NotImplementedError
|
|
end
|
|
end
|
|
end
|