rubyjedi-actionwebservice 2.3.5.20100615120735

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