keeguon-actionwebservice 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. data/CHANGELOG +335 -0
  2. data/MIT-LICENSE +21 -0
  3. data/README +381 -0
  4. data/Rakefile +184 -0
  5. data/TODO +32 -0
  6. data/examples/googlesearch/README +143 -0
  7. data/examples/googlesearch/autoloading/google_search_api.rb +51 -0
  8. data/examples/googlesearch/autoloading/google_search_controller.rb +58 -0
  9. data/examples/googlesearch/delegated/google_search_service.rb +109 -0
  10. data/examples/googlesearch/delegated/search_controller.rb +8 -0
  11. data/examples/googlesearch/direct/google_search_api.rb +51 -0
  12. data/examples/googlesearch/direct/search_controller.rb +59 -0
  13. data/examples/metaWeblog/README +17 -0
  14. data/examples/metaWeblog/apis/blogger_api.rb +61 -0
  15. data/examples/metaWeblog/apis/blogger_service.rb +35 -0
  16. data/examples/metaWeblog/apis/meta_weblog_api.rb +68 -0
  17. data/examples/metaWeblog/apis/meta_weblog_service.rb +49 -0
  18. data/examples/metaWeblog/controllers/xmlrpc_controller.rb +17 -0
  19. data/generators/web_service/USAGE +28 -0
  20. data/generators/web_service/templates/api_definition.rb +6 -0
  21. data/generators/web_service/templates/controller.rb +9 -0
  22. data/generators/web_service/templates/functional_test.rb +20 -0
  23. data/generators/web_service/web_service_generator.rb +30 -0
  24. data/lib/action_web_service/acts_as_web_service.rb +26 -0
  25. data/lib/action_web_service/api.rb +298 -0
  26. data/lib/action_web_service/base.rb +39 -0
  27. data/lib/action_web_service/casting.rb +160 -0
  28. data/lib/action_web_service/client/base.rb +29 -0
  29. data/lib/action_web_service/client/soap_client.rb +114 -0
  30. data/lib/action_web_service/client/xmlrpc_client.rb +59 -0
  31. data/lib/action_web_service/client.rb +4 -0
  32. data/lib/action_web_service/container/action_controller_container.rb +94 -0
  33. data/lib/action_web_service/container/delegated_container.rb +87 -0
  34. data/lib/action_web_service/container/direct_container.rb +70 -0
  35. data/lib/action_web_service/container.rb +4 -0
  36. data/lib/action_web_service/dispatcher/abstract.rb +209 -0
  37. data/lib/action_web_service/dispatcher/action_controller_dispatcher.rb +420 -0
  38. data/lib/action_web_service/dispatcher.rb +3 -0
  39. data/lib/action_web_service/invocation.rb +203 -0
  40. data/lib/action_web_service/protocol/abstract.rb +113 -0
  41. data/lib/action_web_service/protocol/discovery.rb +38 -0
  42. data/lib/action_web_service/protocol/soap_protocol/marshaler.rb +243 -0
  43. data/lib/action_web_service/protocol/soap_protocol.rb +181 -0
  44. data/lib/action_web_service/protocol/xmlrpc_protocol.rb +124 -0
  45. data/lib/action_web_service/protocol.rb +5 -0
  46. data/lib/action_web_service/scaffolding.rb +282 -0
  47. data/lib/action_web_service/simple.rb +54 -0
  48. data/lib/action_web_service/string_to_datetime_for_soap.rb +17 -0
  49. data/lib/action_web_service/struct.rb +69 -0
  50. data/lib/action_web_service/support/class_inheritable_options.rb +27 -0
  51. data/lib/action_web_service/support/signature_types.rb +262 -0
  52. data/lib/action_web_service/templates/scaffolds/layout.html.erb +65 -0
  53. data/lib/action_web_service/templates/scaffolds/methods.html.erb +6 -0
  54. data/lib/action_web_service/templates/scaffolds/parameters.html.erb +29 -0
  55. data/lib/action_web_service/templates/scaffolds/result.html.erb +30 -0
  56. data/lib/action_web_service/test_invoke.rb +111 -0
  57. data/lib/action_web_service/version.rb +10 -0
  58. data/lib/action_web_service.rb +61 -0
  59. data/lib/actionwebservice.rb +2 -0
  60. data/setup.rb +1380 -0
  61. data/test/abstract_client.rb +185 -0
  62. data/test/abstract_dispatcher.rb +550 -0
  63. data/test/abstract_unit.rb +44 -0
  64. data/test/api_test.rb +103 -0
  65. data/test/apis/auto_load_api.rb +4 -0
  66. data/test/apis/broken_auto_load_api.rb +3 -0
  67. data/test/base_test.rb +43 -0
  68. data/test/casting_test.rb +96 -0
  69. data/test/client_soap_test.rb +157 -0
  70. data/test/client_xmlrpc_test.rb +155 -0
  71. data/test/container_test.rb +76 -0
  72. data/test/dispatcher_action_controller_soap_test.rb +147 -0
  73. data/test/dispatcher_action_controller_xmlrpc_test.rb +60 -0
  74. data/test/fixtures/db_definitions/mysql.sql +8 -0
  75. data/test/fixtures/db_definitions/sqlite3.sql +8 -0
  76. data/test/fixtures/users.yml +12 -0
  77. data/test/gencov +3 -0
  78. data/test/invocation_test.rb +187 -0
  79. data/test/run +6 -0
  80. data/test/scaffolded_controller_test.rb +148 -0
  81. data/test/struct_test.rb +85 -0
  82. data/test/test_invoke_test.rb +114 -0
  83. metadata +175 -0
@@ -0,0 +1,185 @@
1
+ # encoding: UTF-8
2
+ require 'abstract_unit'
3
+ require 'webrick'
4
+ require 'webrick/log'
5
+ require 'singleton'
6
+
7
+ module ClientTest
8
+ class Person < ActionWebService::Struct
9
+ member :firstnames, [:string]
10
+ member :lastname, :string
11
+
12
+ def ==(other)
13
+ firstnames == other.firstnames && lastname == other.lastname
14
+ end
15
+ end
16
+
17
+ class Inner < ActionWebService::Struct
18
+ member :name, :string
19
+ end
20
+
21
+ class Outer < ActionWebService::Struct
22
+ member :name, :string
23
+ member :inner, Inner
24
+ end
25
+
26
+ class User < ActiveRecord::Base
27
+ end
28
+
29
+ module Accounting
30
+ class User < ActiveRecord::Base
31
+ end
32
+ end
33
+
34
+ class WithModel < ActionWebService::Struct
35
+ member :user, User
36
+ member :users, [User]
37
+ end
38
+
39
+ class WithMultiDimArray < ActionWebService::Struct
40
+ member :pref, [[:string]]
41
+ end
42
+
43
+ class API < ActionWebService::API::Base
44
+ api_method :void
45
+ api_method :normal, :expects => [:int, :int], :returns => [:int]
46
+ api_method :array_return, :returns => [[Person]]
47
+ api_method :struct_pass, :expects => [[Person]], :returns => [:bool]
48
+ api_method :nil_struct_return, :returns => [Person]
49
+ api_method :inner_nil, :returns => [Outer]
50
+ api_method :client_container, :returns => [:int]
51
+ api_method :named_parameters, :expects => [{:key=>:string}, {:id=>:int}]
52
+ api_method :thrower
53
+ api_method :user_return, :returns => [User]
54
+ api_method :with_model_return, :returns => [WithModel]
55
+ api_method :scoped_model_return, :returns => [Accounting::User]
56
+ api_method :multi_dim_return, :returns => [WithMultiDimArray]
57
+ end
58
+
59
+ class NullLogOut
60
+ def <<(*args); end
61
+ end
62
+
63
+ class Container < ActionController::Base
64
+ acts_as_web_service
65
+ web_service_api API
66
+
67
+ attr_accessor :value_void
68
+ attr_accessor :value_normal
69
+ attr_accessor :value_array_return
70
+ attr_accessor :value_struct_pass
71
+ attr_accessor :value_named_parameters
72
+
73
+ def initialize
74
+ @value_void = nil
75
+ @value_normal = nil
76
+ @value_array_return = nil
77
+ @value_struct_pass = nil
78
+ @value_named_parameters = nil
79
+ end
80
+
81
+ def void
82
+ @value_void = @method_params
83
+ end
84
+
85
+ def normal
86
+ @value_normal = @method_params
87
+ 5
88
+ end
89
+
90
+ def array_return
91
+ person = Person.new
92
+ person.firstnames = ["one", "two"]
93
+ person.lastname = "last"
94
+ @value_array_return = [person]
95
+ end
96
+
97
+ def struct_pass
98
+ @value_struct_pass = @method_params
99
+ true
100
+ end
101
+
102
+ def nil_struct_return
103
+ nil
104
+ end
105
+
106
+ def inner_nil
107
+ Outer.new :name => 'outer', :inner => nil
108
+ end
109
+
110
+ def client_container
111
+ 50
112
+ end
113
+
114
+ def named_parameters
115
+ @value_named_parameters = @method_params
116
+ end
117
+
118
+ def thrower
119
+ raise "Hi"
120
+ end
121
+
122
+ def user_return
123
+ User.find(1)
124
+ end
125
+
126
+ def with_model_return
127
+ WithModel.new :user => User.find(1), :users => User.find(:all)
128
+ end
129
+
130
+ def scoped_model_return
131
+ Accounting::User.find(1)
132
+ end
133
+
134
+ def multi_dim_return
135
+ WithMultiDimArray.new :pref => [%w{pref1 value1}, %w{pref2 value2}]
136
+ end
137
+ end
138
+
139
+ class AbstractClientLet < WEBrick::HTTPServlet::AbstractServlet
140
+ def initialize(controller)
141
+ @controller = controller
142
+ end
143
+
144
+ def get_instance(*args)
145
+ self
146
+ end
147
+
148
+ def require_path_info?
149
+ false
150
+ end
151
+
152
+ def do_GET(req, res)
153
+ raise WEBrick::HTTPStatus::MethodNotAllowed, "GET request not allowed."
154
+ end
155
+
156
+ def do_POST(req, res)
157
+ raise NotImplementedError
158
+ end
159
+ end
160
+
161
+ class AbstractServer
162
+ include ClientTest
163
+ include Singleton
164
+ attr :container
165
+ def initialize
166
+ @container = Container.new
167
+ @clientlet = create_clientlet(@container)
168
+ log = WEBrick::BasicLog.new(NullLogOut.new)
169
+ @server = WEBrick::HTTPServer.new(:Port => server_port, :Logger => log, :AccessLog => [])
170
+ @server.mount('/', @clientlet)
171
+ @thr = Thread.new { @server.start }
172
+ until @server.status == :Running; end
173
+ at_exit { @server.stop; @thr.join }
174
+ end
175
+
176
+ protected
177
+ def create_clientlet
178
+ raise NotImplementedError
179
+ end
180
+
181
+ def server_port
182
+ raise NotImplementedError
183
+ end
184
+ end
185
+ end