removing log dir from .gitignore
[monkeycharger.git] / vendor / rails / actionwebservice / test / abstract_client.rb
blob467c4e0d5b21f385ba5dd65fa5f8094920ded5ea
1 require File.dirname(__FILE__) + '/abstract_unit'
2 require 'webrick'
3 require 'webrick/log'
4 require 'singleton'
6 module ClientTest
7   class Person < ActionWebService::Struct
8     member :firstnames, [:string]
9     member :lastname,   :string
11     def ==(other)
12       firstnames == other.firstnames && lastname == other.lastname
13     end
14   end
15   
16   class Inner < ActionWebService::Struct
17     member :name, :string
18   end
19   
20   class Outer < ActionWebService::Struct
21     member :name, :string
22     member :inner, Inner
23   end
25   class User < ActiveRecord::Base
26   end
27   
28   module Accounting
29     class User < ActiveRecord::Base
30     end
31   end
32   
33   class WithModel < ActionWebService::Struct
34     member :user, User
35     member :users, [User]
36   end
37   
38   class WithMultiDimArray < ActionWebService::Struct
39     member :pref, [[:string]]
40   end
42   class API < ActionWebService::API::Base
43     api_method :void
44     api_method :normal,               :expects => [:int, :int], :returns => [:int]
45     api_method :array_return,         :returns => [[Person]]
46     api_method :struct_pass,          :expects => [[Person]], :returns => [:bool]
47     api_method :nil_struct_return,    :returns => [Person] 
48     api_method :inner_nil,            :returns => [Outer]
49     api_method :client_container,     :returns => [:int]
50     api_method :named_parameters,     :expects => [{:key=>:string}, {:id=>:int}]
51     api_method :thrower
52     api_method :user_return,          :returns => [User]
53     api_method :with_model_return,    :returns => [WithModel]
54     api_method :scoped_model_return,  :returns => [Accounting::User]
55     api_method :multi_dim_return,     :returns => [WithMultiDimArray]
56   end
57   
58   class NullLogOut
59     def <<(*args); end
60   end
62   class Container < ActionController::Base
63     web_service_api API
65     attr_accessor :value_void
66     attr_accessor :value_normal
67     attr_accessor :value_array_return
68     attr_accessor :value_struct_pass
69     attr_accessor :value_named_parameters
71     def initialize
72       @value_void = nil
73       @value_normal = nil
74       @value_array_return = nil
75       @value_struct_pass = nil
76       @value_named_parameters = nil
77     end
79     def void
80       @value_void = @method_params
81     end
83     def normal
84       @value_normal = @method_params
85       5
86     end
88     def array_return
89       person = Person.new
90       person.firstnames = ["one", "two"]
91       person.lastname = "last"
92       @value_array_return = [person]
93     end
95     def struct_pass
96       @value_struct_pass = @method_params
97       true
98     end
99     
100     def nil_struct_return
101       nil
102     end
103     
104     def inner_nil
105       Outer.new :name => 'outer', :inner => nil
106     end
108     def client_container
109       50
110     end
112     def named_parameters
113       @value_named_parameters = @method_params
114     end
116     def thrower
117       raise "Hi"
118     end
119     
120     def user_return
121       User.find(1)
122     end
123     
124     def with_model_return
125       WithModel.new :user => User.find(1), :users => User.find(:all)
126     end
127     
128     def scoped_model_return
129       Accounting::User.find(1)
130     end
131     
132     def multi_dim_return
133       WithMultiDimArray.new :pref => [%w{pref1 value1}, %w{pref2 value2}]
134     end
135   end
137   class AbstractClientLet < WEBrick::HTTPServlet::AbstractServlet
138     def initialize(controller)
139       @controller = controller
140     end
142     def get_instance(*args)
143       self
144     end
146     def require_path_info?
147       false
148     end
149   
150     def do_GET(req, res)
151       raise WEBrick::HTTPStatus::MethodNotAllowed, "GET request not allowed."
152     end
153   
154     def do_POST(req, res)
155       raise NotImplementedError
156     end
157   end
159   class AbstractServer
160     include ClientTest
161     include Singleton
162     attr :container
163     def initialize
164       @container = Container.new
165       @clientlet = create_clientlet(@container)
166       log = WEBrick::BasicLog.new(NullLogOut.new)
167       @server = WEBrick::HTTPServer.new(:Port => server_port, :Logger => log, :AccessLog => log)
168       @server.mount('/', @clientlet)
169       @thr = Thread.new { @server.start }
170       until @server.status == :Running; end
171       at_exit { @server.stop; @thr.join }
172     end
173     
174     protected
175       def create_clientlet
176         raise NotImplementedError
177       end
179       def server_port
180         raise NotImplementedError
181       end
182   end