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,261 @@
1
+ module ActionWebService # :nodoc:
2
+ # Action Web Service supports the following base types in a signature:
3
+ #
4
+ # [<tt>:int</tt>] Represents an integer value, will be cast to an integer using <tt>Integer(value)</tt>
5
+ # [<tt>:string</tt>] Represents a string value, will be cast to an string using the <tt>to_s</tt> method on an object
6
+ # [<tt>:base64</tt>] Represents a Base 64 value, will contain the binary bytes of a Base 64 value sent by the caller
7
+ # [<tt>:bool</tt>] Represents a boolean value, whatever is passed will be cast to boolean (<tt>true</tt>, '1', 'true', 'y', 'yes' are taken to represent true; <tt>false</tt>, '0', 'false', 'n', 'no' and <tt>nil</tt> represent false)
8
+ # [<tt>:float</tt>] Represents a floating point value, will be cast to a float using <tt>Float(value)</tt>
9
+ # [<tt>:time</tt>] Represents a timestamp, will be cast to a <tt>Time</tt> object
10
+ # [<tt>:datetime</tt>] Represents a timestamp, will be cast to a <tt>DateTime</tt> object
11
+ # [<tt>:date</tt>] Represents a date, will be cast to a <tt>Date</tt> object
12
+ #
13
+ # For structured types, you'll need to pass in the Class objects of
14
+ # ActionWebService::Struct and ActiveRecord::Base derivatives.
15
+ module SignatureTypes
16
+ def canonical_signature(signature) # :nodoc:
17
+ return nil if signature.nil?
18
+ unless signature.is_a?(Array)
19
+ raise(ActionWebServiceError, "Expected signature to be an Array")
20
+ end
21
+ i = -1
22
+ signature.map{ |spec| canonical_signature_entry(spec, i += 1) }
23
+ end
24
+
25
+ def canonical_signature_entry(spec, i) # :nodoc:
26
+ orig_spec = spec
27
+ name = "param#{i}"
28
+ if spec.is_a?(Hash)
29
+ name, spec = spec.keys.first, spec.values.first
30
+ end
31
+ type = spec
32
+ if spec.is_a?(Array)
33
+ ArrayType.new(orig_spec, canonical_signature_entry(spec[0], 0), name)
34
+ else
35
+ type = canonical_type(type)
36
+ if type.is_a?(Symbol)
37
+ BaseType.new(orig_spec, type, name)
38
+ else
39
+ if type.is_a?(Hash)
40
+ complexity, type = type.keys.first.to_sym, type.values.first
41
+ end
42
+ element = complexity || :complex
43
+ element == :simple ? SimpleType.new(orig_spec, type, name) : StructuredType.new(orig_spec, type, name)
44
+ end
45
+ end
46
+ end
47
+
48
+ def canonical_type(type) # :nodoc:
49
+ type_name = symbol_name(type) || class_to_type_name(type)
50
+ type = type_name || type
51
+ return canonical_type_name(type) if type.is_a?(Symbol)
52
+ type
53
+ end
54
+
55
+ def canonical_type_name(name) # :nodoc:
56
+ name = name.to_sym
57
+ case name
58
+ when :int, :integer, :fixnum, :bignum
59
+ :int
60
+ when :string, :text
61
+ :string
62
+ when :base64, :binary
63
+ :base64
64
+ when :bool, :boolean
65
+ :bool
66
+ when :float, :double
67
+ :float
68
+ when :decimal
69
+ :decimal
70
+ when :time, :timestamp
71
+ :time
72
+ when :datetime
73
+ :datetime
74
+ when :date
75
+ :date
76
+ else
77
+ raise(TypeError, "#{name} is not a valid base type")
78
+ end
79
+ end
80
+
81
+ def canonical_type_class(type) # :nodoc:
82
+ type = canonical_type(type)
83
+ type.is_a?(Symbol) ? type_name_to_class(type) : type
84
+ end
85
+
86
+ def symbol_name(name) # :nodoc:
87
+ return name.to_sym if name.is_a?(Symbol) || name.is_a?(String)
88
+ nil
89
+ end
90
+
91
+ def class_to_type_name(klass) # :nodoc:
92
+ klass = klass.class unless klass.is_a?(Class)
93
+ if derived_from?(Integer, klass) || derived_from?(Fixnum, klass) || derived_from?(Bignum, klass)
94
+ :int
95
+ elsif klass == String
96
+ :string
97
+ elsif klass == Base64
98
+ :base64
99
+ elsif klass == TrueClass || klass == FalseClass
100
+ :bool
101
+ elsif derived_from?(Float, klass)
102
+ :float
103
+ elsif RUBY_VERSION < '1.9' && derived_from?(Precision, klass)
104
+ :float
105
+ elsif derived_from?(Numeric, klass)
106
+ :float
107
+ elsif klass == Time
108
+ :time
109
+ elsif klass == DateTime
110
+ :datetime
111
+ elsif klass == Date
112
+ :date
113
+ else
114
+ nil
115
+ end
116
+ end
117
+
118
+ def type_name_to_class(name) # :nodoc:
119
+ case canonical_type_name(name)
120
+ when :int
121
+ Integer
122
+ when :string
123
+ String
124
+ when :base64
125
+ Base64
126
+ when :bool
127
+ TrueClass
128
+ when :float
129
+ Float
130
+ when :decimal
131
+ BigDecimal
132
+ when :time
133
+ Time
134
+ when :date
135
+ Date
136
+ when :datetime
137
+ DateTime
138
+ else
139
+ nil
140
+ end
141
+ end
142
+
143
+ def derived_from?(ancestor, child) # :nodoc:
144
+ child.ancestors.include?(ancestor)
145
+ end
146
+
147
+ module_function :type_name_to_class
148
+ module_function :class_to_type_name
149
+ module_function :symbol_name
150
+ module_function :canonical_type_class
151
+ module_function :canonical_type_name
152
+ module_function :canonical_type
153
+ module_function :canonical_signature_entry
154
+ module_function :canonical_signature
155
+ module_function :derived_from?
156
+ end
157
+
158
+ class BaseType # :nodoc:
159
+ include SignatureTypes
160
+
161
+ attr :spec
162
+ attr :type
163
+ attr :type_class
164
+ attr :name
165
+
166
+ def initialize(spec, type, name)
167
+ @spec = spec
168
+ @type = canonical_type(type)
169
+ @type_class = canonical_type_class(@type)
170
+ @name = name
171
+ end
172
+
173
+ def custom?
174
+ false
175
+ end
176
+
177
+ def array?
178
+ false
179
+ end
180
+
181
+ def structured?
182
+ false
183
+ end
184
+
185
+ def simple?
186
+ false
187
+ end
188
+
189
+ def human_name(show_name=true)
190
+ type_type = array? ? element_type.type.to_s : self.type.to_s
191
+ str = array? ? (type_type + '[]') : type_type
192
+ show_name ? (str + " " + name.to_s) : str
193
+ end
194
+ end
195
+
196
+ class ArrayType < BaseType # :nodoc:
197
+ attr :element_type
198
+
199
+ def initialize(spec, element_type, name)
200
+ super(spec, Array, name)
201
+ @element_type = element_type
202
+ end
203
+
204
+ def custom?
205
+ true
206
+ end
207
+
208
+ def array?
209
+ true
210
+ end
211
+ end
212
+
213
+ class StructuredType < BaseType # :nodoc:
214
+ def each_member
215
+ if @type_class.respond_to?(:members)
216
+ @type_class.members.each do |name, type_options|
217
+ type, options = type_options
218
+ yield name, type, options
219
+ end
220
+ elsif @type_class.respond_to?(:columns)
221
+ i = -1
222
+ @type_class.columns.each do |column|
223
+ yield column.name, canonical_signature_entry(column.type, i += 1)
224
+ end
225
+ end
226
+ end
227
+
228
+ def custom?
229
+ true
230
+ end
231
+
232
+ def structured?
233
+ true
234
+ end
235
+ end
236
+
237
+ class SimpleType < BaseType # :nodoc:
238
+ def base
239
+ @type_class.restriction_base if @type_class.respond_to?(:restriction_base)
240
+ end
241
+
242
+ def restrictions
243
+ if @type_class.respond_to?(:restrictions)
244
+ @type_class.restrictions.each do |name, value|
245
+ yield name, value
246
+ end
247
+ end
248
+ end
249
+
250
+ def custom?
251
+ true
252
+ end
253
+
254
+ def simple?
255
+ true
256
+ end
257
+ end
258
+
259
+ class Base64 < String # :nodoc:
260
+ end
261
+ end
@@ -0,0 +1,65 @@
1
+ <html>
2
+ <head>
3
+ <title><%= @scaffold_class.wsdl_service_name %> Web Service</title>
4
+ <style>
5
+ body { background-color: #fff; color: #333; }
6
+
7
+ body, p, ol, ul, td {
8
+ font-family: verdana, arial, helvetica, sans-serif;
9
+ font-size: 13px;
10
+ line-height: 18px;
11
+ }
12
+
13
+ pre {
14
+ background-color: #eee;
15
+ padding: 10px;
16
+ font-size: 11px;
17
+ }
18
+
19
+ a { color: #000; }
20
+ a:visited { color: #666; }
21
+ a:hover { color: #fff; background-color:#000; }
22
+
23
+ .fieldWithErrors {
24
+ padding: 2px;
25
+ background-color: red;
26
+ display: table;
27
+ }
28
+
29
+ #errorExplanation {
30
+ width: 400px;
31
+ border: 2px solid red;
32
+ padding: 7px;
33
+ padding-bottom: 12px;
34
+ margin-bottom: 20px;
35
+ background-color: #f0f0f0;
36
+ }
37
+
38
+ #errorExplanation h2 {
39
+ text-align: left;
40
+ font-weight: bold;
41
+ padding: 5px 5px 5px 15px;
42
+ font-size: 12px;
43
+ margin: -7px;
44
+ background-color: #c00;
45
+ color: #fff;
46
+ }
47
+
48
+ #errorExplanation p {
49
+ color: #333;
50
+ margin-bottom: 0;
51
+ padding: 5px;
52
+ }
53
+
54
+ #errorExplanation ul li {
55
+ font-size: 12px;
56
+ list-style: square;
57
+ }
58
+ </style>
59
+ </head>
60
+ <body>
61
+
62
+ <%= @content_for_layout %>
63
+
64
+ </body>
65
+ </html>
@@ -0,0 +1,6 @@
1
+ <% @scaffold_container.services.each do |service| %>
2
+
3
+ <h4>API Methods for <%= service %></h4>
4
+ <%= service_method_list(service) %>
5
+
6
+ <% end %>
@@ -0,0 +1,29 @@
1
+ <h4>Method Invocation Details for <em><%= @scaffold_service %>#<%= @scaffold_method.public_name %></em></h4>
2
+
3
+ <% form_tag(:action => @scaffold_action_name + '_submit') do -%>
4
+ <%= hidden_field_tag "service", @scaffold_service.name %>
5
+ <%= hidden_field_tag "method", @scaffold_method.public_name %>
6
+
7
+ <p>
8
+ <label for="protocol">Protocol:</label><br />
9
+ <%= select_tag 'protocol', options_for_select([['SOAP', 'soap'], ['XML-RPC', 'xmlrpc']], params['protocol']) %>
10
+ </p>
11
+
12
+ <% if @scaffold_method.expects %>
13
+
14
+ <strong>Method Parameters:</strong><br />
15
+ <% @scaffold_method.expects.each_with_index do |type, i| %>
16
+ <p>
17
+ <label for="method_params[<%= i %>]"><%= method_parameter_label(type.name, type) %> </label><br />
18
+ <%= method_parameter_input_fields(@scaffold_method, type, "method_params", i) %>
19
+ </p>
20
+ <% end %>
21
+
22
+ <% end %>
23
+
24
+ <%= submit_tag "Invoke" %>
25
+ <% end -%>
26
+
27
+ <p>
28
+ <%= link_to "Back", :action => @scaffold_action_name %>
29
+ </p>
@@ -0,0 +1,30 @@
1
+ <h4>Method Invocation Result for <em><%= @scaffold_service %>#<%= @scaffold_method.public_name %></em></h4>
2
+
3
+ <p>
4
+ Invocation took <tt><%= '%f' % @method_elapsed %></tt> seconds
5
+ </p>
6
+
7
+ <p>
8
+ <strong>Return Value:</strong><br />
9
+ <pre>
10
+ <%= h @method_return_value.inspect %>
11
+ </pre>
12
+ </p>
13
+
14
+ <p>
15
+ <strong>Request XML:</strong><br />
16
+ <pre>
17
+ <%= h @method_request_xml %>
18
+ </pre>
19
+ </p>
20
+
21
+ <p>
22
+ <strong>Response XML:</strong><br />
23
+ <pre>
24
+ <%= h @method_response_xml %>
25
+ </pre>
26
+ </p>
27
+
28
+ <p>
29
+ <%= link_to "Back", :action => @scaffold_action_name + '_method_params', :method => @scaffold_method.public_name, :service => @scaffold_service.name %>
30
+ </p>
@@ -0,0 +1,110 @@
1
+ require 'test/unit'
2
+
3
+ module Test # :nodoc:
4
+ module Unit # :nodoc:
5
+ class TestCase # :nodoc:
6
+ private
7
+ # invoke the specified API method
8
+ def invoke_direct(method_name, *args)
9
+ prepare_request('api', 'api', method_name, *args)
10
+ @controller.process(@request, @response)
11
+ decode_rpc_response
12
+ end
13
+ alias_method :invoke, :invoke_direct
14
+
15
+ # invoke the specified API method on the specified service
16
+ def invoke_delegated(service_name, method_name, *args)
17
+ prepare_request(service_name.to_s, service_name, method_name, *args)
18
+ @controller.process(@request, @response)
19
+ decode_rpc_response
20
+ end
21
+
22
+ # invoke the specified layered API method on the correct service
23
+ def invoke_layered(service_name, method_name, *args)
24
+ prepare_request('api', service_name, method_name, *args)
25
+ @controller.process(@request, @response)
26
+ decode_rpc_response
27
+ end
28
+
29
+ # ---------------------- internal ---------------------------
30
+
31
+ def prepare_request(action, service_name, api_method_name, *args)
32
+ @request.recycle!
33
+ @request.request_parameters['action'] = action
34
+ @request.env['REQUEST_METHOD'] = 'POST'
35
+ @request.env['HTTP_CONTENT_TYPE'] = 'text/xml'
36
+ @request.env['RAW_POST_DATA'] = encode_rpc_call(service_name, api_method_name, *args)
37
+ case protocol
38
+ when ActionWebService::Protocol::Soap::SoapProtocol
39
+ soap_action = "/#{@controller.controller_name}/#{service_name}/#{public_method_name(service_name, api_method_name)}"
40
+ @request.env['HTTP_SOAPACTION'] = soap_action
41
+ when ActionWebService::Protocol::XmlRpc::XmlRpcProtocol
42
+ @request.env.delete('HTTP_SOAPACTION')
43
+ end
44
+ end
45
+
46
+ def encode_rpc_call(service_name, api_method_name, *args)
47
+ case @controller.web_service_dispatching_mode
48
+ when :direct
49
+ api = @controller.class.web_service_api
50
+ when :delegated, :layered
51
+ api = @controller.web_service_object(service_name.to_sym).class.web_service_api
52
+ end
53
+ protocol.register_api(api)
54
+ method = api.api_methods[api_method_name.to_sym]
55
+ raise ArgumentError, "wrong number of arguments for rpc call (#{args.length} for #{method.expects.length})" if method && method.expects && args.length != method.expects.length
56
+ protocol.encode_request(public_method_name(service_name, api_method_name), args.dup, method.expects)
57
+ end
58
+
59
+ def decode_rpc_response
60
+ public_method_name, return_value = protocol.decode_response(@response.body)
61
+ exception = is_exception?(return_value)
62
+ raise exception if exception
63
+ return_value
64
+ end
65
+
66
+ def public_method_name(service_name, api_method_name)
67
+ public_name = service_api(service_name).public_api_method_name(api_method_name)
68
+ if @controller.web_service_dispatching_mode == :layered && protocol.is_a?(ActionWebService::Protocol::XmlRpc::XmlRpcProtocol)
69
+ '%s.%s' % [service_name.to_s, public_name]
70
+ else
71
+ public_name
72
+ end
73
+ end
74
+
75
+ def service_api(service_name)
76
+ case @controller.web_service_dispatching_mode
77
+ when :direct
78
+ @controller.class.web_service_api
79
+ when :delegated, :layered
80
+ @controller.web_service_object(service_name.to_sym).class.web_service_api
81
+ end
82
+ end
83
+
84
+ def protocol
85
+ if @protocol.nil?
86
+ @protocol ||= ActionWebService::Protocol::Soap::SoapProtocol.create(@controller)
87
+ else
88
+ case @protocol
89
+ when :xmlrpc
90
+ @protocol = ActionWebService::Protocol::XmlRpc::XmlRpcProtocol.create(@controller)
91
+ when :soap
92
+ @protocol = ActionWebService::Protocol::Soap::SoapProtocol.create(@controller)
93
+ else
94
+ @protocol
95
+ end
96
+ end
97
+ end
98
+
99
+ def is_exception?(obj)
100
+ case protocol
101
+ when :soap, ActionWebService::Protocol::Soap::SoapProtocol
102
+ (obj.respond_to?(:detail) && obj.detail.respond_to?(:cause) && \
103
+ obj.detail.cause.is_a?(Exception)) ? obj.detail.cause : nil
104
+ when :xmlrpc, ActionWebService::Protocol::XmlRpc::XmlRpcProtocol
105
+ obj.is_a?(XMLRPC::FaultException) ? obj : nil
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,9 @@
1
+ module ActionWebService
2
+ module VERSION #:nodoc:
3
+ MAJOR = 2
4
+ MINOR = 3
5
+ TINY = 5
6
+
7
+ STRING = [MAJOR, MINOR, TINY].join('.')
8
+ end
9
+ end
@@ -0,0 +1,60 @@
1
+ #--
2
+ # Copyright (C) 2005 Leon Breedt
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #++
23
+
24
+ begin
25
+ require 'active_support'
26
+ require 'action_controller'
27
+ require 'active_record'
28
+ rescue LoadError
29
+ require 'rubygems'
30
+ gem 'activesupport', '~> 2.3.0'
31
+ gem 'actionpack', '~> 2.3.0'
32
+ gem 'activerecord', '~> 2.3.0'
33
+ end
34
+
35
+ $:.unshift(File.dirname(__FILE__) + "/action_web_service/vendor/")
36
+
37
+ require 'action_web_service/string_to_datetime_for_soap'
38
+ require 'action_web_service/support/class_inheritable_options'
39
+ require 'action_web_service/support/signature_types'
40
+ require 'action_web_service/base'
41
+ require 'action_web_service/client'
42
+ require 'action_web_service/invocation'
43
+ require 'action_web_service/api'
44
+ require 'action_web_service/casting'
45
+ require 'action_web_service/simple'
46
+ require 'action_web_service/struct'
47
+ require 'action_web_service/container'
48
+ require 'action_web_service/protocol'
49
+ require 'action_web_service/dispatcher'
50
+ require 'action_web_service/scaffolding'
51
+ require 'action_web_service/acts_as_web_service'
52
+
53
+ ActionWebService::Base.class_eval do
54
+ include ActionWebService::Container::Direct
55
+ include ActionWebService::Invocation
56
+ end
57
+
58
+ ActionController::Base.class_eval do
59
+ include ActionWebService::ActsAsWebService
60
+ end
@@ -0,0 +1 @@
1
+ require 'action_web_service'