actionwebservice 1.0.0 → 1.1.0
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.
- data/CHANGELOG +27 -2
- data/Rakefile +11 -3
- data/lib/action_web_service/api.rb +4 -0
- data/lib/action_web_service/base.rb +5 -1
- data/lib/action_web_service/casting.rb +10 -0
- data/lib/action_web_service/client/soap_client.rb +10 -2
- data/lib/action_web_service/protocol/soap_protocol/marshaler.rb +27 -23
- data/lib/action_web_service/protocol/xmlrpc_protocol.rb +2 -2
- data/lib/action_web_service/scaffolding.rb +33 -24
- data/lib/action_web_service/struct.rb +3 -0
- data/lib/action_web_service/support/signature_types.rb +3 -3
- data/lib/action_web_service/templates/scaffolds/layout.rhtml +4 -4
- data/lib/action_web_service/templates/scaffolds/parameters.rhtml +3 -4
- data/lib/action_web_service/version.rb +2 -2
- data/test/abstract_client.rb +62 -6
- data/test/abstract_unit.rb +25 -1
- data/test/client_soap_test.rb +43 -0
- data/test/client_xmlrpc_test.rb +45 -2
- data/test/fixtures/db_definitions/mysql.sql +7 -0
- data/test/fixtures/users.yml +10 -0
- data/test/scaffolded_controller_test.rb +80 -2
- metadata +122 -116
data/CHANGELOG
CHANGED
@@ -1,8 +1,34 @@
|
|
1
|
+
*1.1.0* (March 27th, 2005)
|
2
|
+
|
3
|
+
* Make ActiveWebService::Struct type reloadable
|
4
|
+
|
5
|
+
* Fix scaffolding action when one of the members of a structural type has date or time type
|
6
|
+
|
7
|
+
* Remove extra index hash when generating scaffold html for parameters of structural type #4374 [joe@mjg2.com]
|
8
|
+
|
9
|
+
* Fix Scaffold Fails with Struct as a Parameter #4363 [joe@mjg2.com]
|
10
|
+
|
11
|
+
* Fix soap type registration of multidimensional arrays (#4232)
|
12
|
+
|
13
|
+
* Fix that marshaler couldn't handle ActiveRecord models defined in a different namespace (#2392).
|
14
|
+
|
15
|
+
* Fix that marshaler couldn't handle structs with members of ActiveRecord type (#1889).
|
16
|
+
|
17
|
+
* Fix that marshaler couldn't handle nil values for inner structs (#3576).
|
18
|
+
|
19
|
+
* Fix that changes to ActiveWebService::API::Base required restarting of the server (#2390).
|
20
|
+
|
21
|
+
* Fix scaffolding for signatures with :date, :time and :base64 types (#3321, #2769, #2078).
|
22
|
+
|
23
|
+
* Fix for incorrect casting of TrueClass/FalseClass instances (#2633, #3421).
|
24
|
+
|
25
|
+
* Fix for incompatibility problems with SOAP4R 1.5.5 (#2553) [Kent Sibilev]
|
26
|
+
|
27
|
+
|
1
28
|
*1.0.0* (December 13th, 2005)
|
2
29
|
|
3
30
|
* Become part of Rails 1.0
|
4
31
|
|
5
|
-
|
6
32
|
*0.9.4* (December 7th, 2005)
|
7
33
|
|
8
34
|
* Update from LGPL to MIT license as per Minero Aoki's permission. [Marcel Molina Jr.]
|
@@ -11,7 +37,6 @@
|
|
11
37
|
|
12
38
|
* Fix that XML-RPC date/time values did not have well-defined behaviour (#2516, #2534). This fix has one caveat, in that we can't support pre-1970 dates from XML-RPC clients.
|
13
39
|
|
14
|
-
|
15
40
|
*0.9.3* (November 7th, 2005)
|
16
41
|
|
17
42
|
* Upgraded to Action Pack 1.11.0 and Active Record 1.13.0
|
data/Rakefile
CHANGED
@@ -30,12 +30,20 @@ Rake::TestTask.new { |t|
|
|
30
30
|
t.verbose = true
|
31
31
|
}
|
32
32
|
|
33
|
+
SCHEMA_PATH = File.join(File.dirname(__FILE__), *%w(test fixtures db_definitions))
|
34
|
+
|
35
|
+
desc 'Build the MySQL test database'
|
36
|
+
task :build_database do
|
37
|
+
%x( mysqladmin create activewebservice_unittest )
|
38
|
+
%x( mysql activewebservice_unittest < #{File.join(SCHEMA_PATH, 'mysql.sql')} )
|
39
|
+
end
|
40
|
+
|
33
41
|
|
34
42
|
# Generate the RDoc documentation
|
35
43
|
Rake::RDocTask.new { |rdoc|
|
36
44
|
rdoc.rdoc_dir = 'doc'
|
37
45
|
rdoc.title = "Action Web Service -- Web services for Action Pack"
|
38
|
-
rdoc.options << '--line-numbers --inline-source
|
46
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
39
47
|
rdoc.template = "#{ENV['template']}.rb" if ENV['template']
|
40
48
|
rdoc.rdoc_files.include('README')
|
41
49
|
rdoc.rdoc_files.include('CHANGELOG')
|
@@ -63,8 +71,8 @@ spec = Gem::Specification.new do |s|
|
|
63
71
|
s.rubyforge_project = "aws"
|
64
72
|
s.homepage = "http://www.rubyonrails.org"
|
65
73
|
|
66
|
-
s.add_dependency('actionpack', '= 1.
|
67
|
-
s.add_dependency('activerecord', '= 1.
|
74
|
+
s.add_dependency('actionpack', '= 1.12.0' + PKG_BUILD)
|
75
|
+
s.add_dependency('activerecord', '= 1.14.0' + PKG_BUILD)
|
68
76
|
|
69
77
|
s.has_rdoc = true
|
70
78
|
s.requirements << 'none'
|
@@ -14,6 +14,10 @@ module ActionWebService # :nodoc:
|
|
14
14
|
# See ActionWebService::Container::Direct::ClassMethods for an example
|
15
15
|
# of use.
|
16
16
|
class Base
|
17
|
+
# Action WebService API subclasses should be reloaded by the dispatcher in Rails
|
18
|
+
# when Dependencies.mechanism = :load.
|
19
|
+
include Reloadable::Subclasses
|
20
|
+
|
17
21
|
# Whether to transform the public API method names into camel-cased names
|
18
22
|
class_inheritable_option :inflect_names, true
|
19
23
|
|
@@ -25,12 +25,16 @@ module ActionWebService # :nodoc:
|
|
25
25
|
# api_method :delete_person, :expects => [:int]
|
26
26
|
# end
|
27
27
|
#
|
28
|
-
# class SearchCriteria <
|
28
|
+
# class SearchCriteria < ActionWebService::Struct
|
29
29
|
# member :firstname, :string
|
30
30
|
# member :lastname, :string
|
31
31
|
# member :email, :string
|
32
32
|
# end
|
33
33
|
class Base
|
34
|
+
# Action WebService subclasses should be reloaded by the dispatcher in Rails
|
35
|
+
# when Dependencies.mechanism = :load.
|
36
|
+
include Reloadable::Subclasses
|
37
|
+
|
34
38
|
# Whether to report exceptions back to the caller in the protocol's exception
|
35
39
|
# format
|
36
40
|
class_inheritable_option :web_service_exception_reporting, true
|
@@ -41,6 +41,11 @@ module ActionWebService # :nodoc:
|
|
41
41
|
def cast(value, signature_type) # :nodoc:
|
42
42
|
return value if signature_type.nil? # signature.length != params.length
|
43
43
|
return nil if value.nil?
|
44
|
+
# XMLRPC protocol doesn't support nil values. It uses false instead.
|
45
|
+
# It should never happen for SOAP.
|
46
|
+
if signature_type.structured? && value.equal?(false)
|
47
|
+
return nil
|
48
|
+
end
|
44
49
|
unless signature_type.array? || signature_type.structured?
|
45
50
|
return value if canonical_type(value.class) == signature_type.type
|
46
51
|
end
|
@@ -91,10 +96,13 @@ module ActionWebService # :nodoc:
|
|
91
96
|
when :float
|
92
97
|
Float(value)
|
93
98
|
when :time
|
99
|
+
value = "#{value['2']}/#{value['3']}/#{value['1']} #{value['4']}:#{value['5']}:#{value['6']}" if value.kind_of?(Hash)
|
94
100
|
Time.parse(value.to_s)
|
95
101
|
when :date
|
102
|
+
value = "#{value['2']}/#{value['3']}/#{value['1']}" if value.kind_of?(Hash)
|
96
103
|
Date.parse(value.to_s)
|
97
104
|
when :datetime
|
105
|
+
value = "#{value['2']}/#{value['3']}/#{value['1']} #{value['4']}:#{value['5']}:#{value['6']}" if value.kind_of?(Hash)
|
98
106
|
DateTime.parse(value.to_s)
|
99
107
|
end
|
100
108
|
end
|
@@ -108,6 +116,8 @@ module ActionWebService # :nodoc:
|
|
108
116
|
value.each_pair do |name, val|
|
109
117
|
type = klass.respond_to?(:member_type) ? klass.member_type(name) : nil
|
110
118
|
val = cast(val, type) if type
|
119
|
+
# See http://dev.rubyonrails.com/ticket/3567
|
120
|
+
val = val.to_time if val.is_a?(XMLRPC::DateTime)
|
111
121
|
obj.__send__("#{name}=", val) if obj.respond_to?(name)
|
112
122
|
end
|
113
123
|
elsif value.respond_to?(:attributes)
|
@@ -80,12 +80,20 @@ module ActionWebService # :nodoc:
|
|
80
80
|
if expects
|
81
81
|
expects.each do |type|
|
82
82
|
type_binding = @protocol.marshaler.lookup_type(type)
|
83
|
-
|
83
|
+
if SOAP::Version >= "1.5.5"
|
84
|
+
param_def << ['in', type.name.to_s, [type_binding.type.type_class.to_s]]
|
85
|
+
else
|
86
|
+
param_def << ['in', type.name, type_binding.mapping]
|
87
|
+
end
|
84
88
|
end
|
85
89
|
end
|
86
90
|
if returns
|
87
91
|
type_binding = @protocol.marshaler.lookup_type(returns[0])
|
88
|
-
|
92
|
+
if SOAP::Version >= "1.5.5"
|
93
|
+
param_def << ['retval', 'return', [type_binding.type.type_class.to_s]]
|
94
|
+
else
|
95
|
+
param_def << ['retval', 'return', type_binding.mapping]
|
96
|
+
end
|
89
97
|
end
|
90
98
|
driver.add_method(qname, action, method.name.to_s, param_def)
|
91
99
|
end
|
@@ -32,43 +32,47 @@ module ActionWebService
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def ruby_to_soap(obj)
|
35
|
-
SOAP::Mapping.obj2soap(obj, @registry)
|
35
|
+
soap = SOAP::Mapping.obj2soap(obj, @registry)
|
36
|
+
soap.elename = XSD::QName.new if SOAP::Version >= "1.5.5" && soap.elename == XSD::QName::EMPTY
|
37
|
+
soap
|
36
38
|
end
|
37
39
|
|
38
40
|
def register_type(type)
|
39
41
|
return @type2binding[type] if @type2binding.has_key?(type)
|
40
42
|
|
41
|
-
type_class = type.array?? type.element_type.type_class : type.type_class
|
42
|
-
type_type = type.array?? type.element_type : type
|
43
|
-
type_binding = nil
|
44
|
-
if (mapping = @registry.find_mapped_soap_class(type_class) rescue nil)
|
45
|
-
qname = mapping[2] ? mapping[2][:type] : nil
|
46
|
-
qname ||= soap_base_type_name(mapping[0])
|
47
|
-
type_binding = SoapBinding.new(self, qname, type_type, mapping)
|
48
|
-
else
|
49
|
-
qname = XSD::QName.new(@namespace, soap_type_name(type_class.name))
|
50
|
-
@registry.add(type_class,
|
51
|
-
SOAP::SOAPStruct,
|
52
|
-
typed_struct_factory(type_class),
|
53
|
-
{ :type => qname })
|
54
|
-
mapping = @registry.find_mapped_soap_class(type_class)
|
55
|
-
type_binding = SoapBinding.new(self, qname, type_type, mapping)
|
56
|
-
end
|
57
|
-
|
58
|
-
array_binding = nil
|
59
43
|
if type.array?
|
60
44
|
array_mapping = @registry.find_mapped_soap_class(Array)
|
61
45
|
qname = XSD::QName.new(@namespace, soap_type_name(type.element_type.type_class.name) + 'Array')
|
62
|
-
|
46
|
+
element_type_binding = register_type(type.element_type)
|
47
|
+
@type2binding[type] = SoapBinding.new(self, qname, type, array_mapping, element_type_binding)
|
48
|
+
elsif (mapping = @registry.find_mapped_soap_class(type.type_class) rescue nil)
|
49
|
+
qname = mapping[2] ? mapping[2][:type] : nil
|
50
|
+
qname ||= soap_base_type_name(mapping[0])
|
51
|
+
@type2binding[type] = SoapBinding.new(self, qname, type, mapping)
|
52
|
+
else
|
53
|
+
qname = XSD::QName.new(@namespace, soap_type_name(type.type_class.name))
|
54
|
+
@registry.add(type.type_class,
|
55
|
+
SOAP::SOAPStruct,
|
56
|
+
typed_struct_factory(type.type_class),
|
57
|
+
{ :type => qname })
|
58
|
+
mapping = @registry.find_mapped_soap_class(type.type_class)
|
59
|
+
@type2binding[type] = SoapBinding.new(self, qname, type, mapping)
|
60
|
+
end
|
61
|
+
|
62
|
+
if type.structured?
|
63
|
+
type.each_member do |m_name, m_type|
|
64
|
+
register_type(m_type)
|
65
|
+
end
|
63
66
|
end
|
64
|
-
|
65
|
-
@type2binding[type] = array_binding ? array_binding : type_binding
|
67
|
+
|
66
68
|
@type2binding[type]
|
67
69
|
end
|
68
70
|
alias :lookup_type :register_type
|
69
71
|
|
70
72
|
def annotate_arrays(binding, value)
|
71
|
-
if
|
73
|
+
if value.nil?
|
74
|
+
return
|
75
|
+
elsif binding.type.array?
|
72
76
|
mark_typed_array(value, binding.element_binding.qname)
|
73
77
|
if binding.element_binding.type.custom?
|
74
78
|
value.each do |element|
|
@@ -50,10 +50,10 @@ module ActionWebService # :nodoc:
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def encode_response(method_name, return_value, return_type, protocol_options={})
|
53
|
-
return_value
|
54
|
-
if return_type
|
53
|
+
if return_value && return_type
|
55
54
|
return_value = value_to_xmlrpc_wire_format(return_value, return_type)
|
56
55
|
end
|
56
|
+
return_value = false if return_value.nil?
|
57
57
|
raw_response = XMLRPC::Marshal.dump_response(return_value)
|
58
58
|
Response.new(raw_response, 'text/xml', return_value)
|
59
59
|
end
|
@@ -65,16 +65,13 @@ module ActionWebService
|
|
65
65
|
when :xmlrpc
|
66
66
|
@protocol = Protocol::XmlRpc::XmlRpcProtocol.create(self)
|
67
67
|
end
|
68
|
-
@invocation_cgi = request.respond_to?(:cgi) ? request.cgi : nil
|
69
68
|
bm = Benchmark.measure do
|
70
69
|
@protocol.register_api(@scaffold_service.api)
|
71
70
|
post_params = params['method_params'] ? params['method_params'].dup : nil
|
72
71
|
params = []
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
end
|
77
|
-
end
|
72
|
+
@scaffold_method.expects.each_with_index do |spec, i|
|
73
|
+
params << post_params[i.to_s]
|
74
|
+
end if @scaffold_method.expects
|
78
75
|
params = @scaffold_method.cast_expects(params)
|
79
76
|
method_name = public_method_name(@scaffold_service.name, @scaffold_method.public_name)
|
80
77
|
@method_request_xml = @protocol.encode_request(method_name, params, @scaffold_method.expects)
|
@@ -130,14 +127,8 @@ module ActionWebService
|
|
130
127
|
end
|
131
128
|
|
132
129
|
def reset_invocation_response
|
133
|
-
|
134
|
-
|
135
|
-
@response = ::ActionController::CgiResponse.new(@invocation_cgi)
|
136
|
-
else
|
137
|
-
@response = ::ActionController::TestResponse.new
|
138
|
-
end
|
139
|
-
response.template = template
|
140
|
-
@performed_render = false
|
130
|
+
erase_render_results
|
131
|
+
@response.headers = ::ActionController::AbstractResponse::DEFAULT_HEADERS.merge("cookie" => [])
|
141
132
|
end
|
142
133
|
|
143
134
|
def public_method_name(service_name, method_name)
|
@@ -173,18 +164,21 @@ module ActionWebService
|
|
173
164
|
end
|
174
165
|
|
175
166
|
module Helpers # :nodoc:
|
176
|
-
def method_parameter_input_fields(method, type, field_name_base)
|
167
|
+
def method_parameter_input_fields(method, type, field_name_base, idx, was_structured=false)
|
177
168
|
if type.array?
|
178
169
|
return content_tag('em', "Typed array input fields not supported yet (#{type.name})")
|
179
170
|
end
|
180
171
|
if type.structured?
|
172
|
+
return content_tag('em', "Nested structural types not supported yet (#{type.name})") if was_structured
|
181
173
|
parameters = ""
|
182
174
|
type.each_member do |member_name, member_type|
|
183
175
|
label = method_parameter_label(member_name, member_type)
|
184
176
|
nested_content = method_parameter_input_fields(
|
185
177
|
method,
|
186
178
|
member_type,
|
187
|
-
field_name_base
|
179
|
+
"#{field_name_base}[#{idx}][#{member_name}]",
|
180
|
+
idx,
|
181
|
+
true)
|
188
182
|
if member_type.custom?
|
189
183
|
parameters << content_tag('li', label)
|
190
184
|
parameters << content_tag('ul', nested_content)
|
@@ -194,20 +188,35 @@ module ActionWebService
|
|
194
188
|
end
|
195
189
|
content_tag('ul', parameters)
|
196
190
|
else
|
191
|
+
# If the data source was structured previously we already have the index set
|
192
|
+
field_name_base = "#{field_name_base}[#{idx}]" unless was_structured
|
193
|
+
|
197
194
|
case type.type
|
198
195
|
when :int
|
199
|
-
text_field_tag field_name_base
|
196
|
+
text_field_tag "#{field_name_base}"
|
200
197
|
when :string
|
201
|
-
text_field_tag field_name_base
|
198
|
+
text_field_tag "#{field_name_base}"
|
199
|
+
when :base64
|
200
|
+
text_area_tag "#{field_name_base}", nil, :size => "40x5"
|
202
201
|
when :bool
|
203
|
-
radio_button_tag(field_name_base, "true") + " True" +
|
204
|
-
radio_button_tag(field_name_base, "false") + "False"
|
202
|
+
radio_button_tag("#{field_name_base}", "true") + " True" +
|
203
|
+
radio_button_tag("#{field_name_base}", "false") + "False"
|
205
204
|
when :float
|
206
|
-
text_field_tag field_name_base
|
207
|
-
when :time
|
208
|
-
|
205
|
+
text_field_tag "#{field_name_base}"
|
206
|
+
when :time, :datetime
|
207
|
+
time = Time.now
|
208
|
+
i = 0
|
209
|
+
%w|year month day hour minute second|.map do |name|
|
210
|
+
i += 1
|
211
|
+
send("select_#{name}", time, :prefix => "#{field_name_base}[#{i}]", :discard_type => true)
|
212
|
+
end.join
|
209
213
|
when :date
|
210
|
-
|
214
|
+
date = Date.today
|
215
|
+
i = 0
|
216
|
+
%w|year month day|.map do |name|
|
217
|
+
i += 1
|
218
|
+
send("select_#{name}", date, :prefix => "#{field_name_base}[#{i}]", :discard_type => true)
|
219
|
+
end.join
|
211
220
|
end
|
212
221
|
end
|
213
222
|
end
|
@@ -19,6 +19,9 @@ module ActionWebService
|
|
19
19
|
# Active Record model classes are already implicitly supported in method
|
20
20
|
# signatures.
|
21
21
|
class Struct
|
22
|
+
# Action WebService Struct subclasses should be reloaded by the dispatcher in Rails
|
23
|
+
# when Dependencies.mechanism = :load.
|
24
|
+
include Reloadable::Subclasses
|
22
25
|
|
23
26
|
# If a Hash is given as argument to an ActionWebService::Struct constructor,
|
24
27
|
# it can contain initial values for the structure member.
|
@@ -53,9 +53,9 @@ module ActionWebService # :nodoc:
|
|
53
53
|
case name
|
54
54
|
when :int, :integer, :fixnum, :bignum
|
55
55
|
:int
|
56
|
-
when :string
|
56
|
+
when :string, :text
|
57
57
|
:string
|
58
|
-
when :base64
|
58
|
+
when :base64, :binary
|
59
59
|
:base64
|
60
60
|
when :bool, :boolean
|
61
61
|
:bool
|
@@ -203,7 +203,7 @@ module ActionWebService # :nodoc:
|
|
203
203
|
elsif @type_class.respond_to?(:columns)
|
204
204
|
i = -1
|
205
205
|
@type_class.columns.each do |column|
|
206
|
-
yield column.name, canonical_signature_entry(column.
|
206
|
+
yield column.name, canonical_signature_entry(column.type, i += 1)
|
207
207
|
end
|
208
208
|
end
|
209
209
|
end
|
@@ -26,7 +26,7 @@
|
|
26
26
|
display: table;
|
27
27
|
}
|
28
28
|
|
29
|
-
#
|
29
|
+
#errorExplanation {
|
30
30
|
width: 400px;
|
31
31
|
border: 2px solid red;
|
32
32
|
padding: 7px;
|
@@ -35,7 +35,7 @@
|
|
35
35
|
background-color: #f0f0f0;
|
36
36
|
}
|
37
37
|
|
38
|
-
#
|
38
|
+
#errorExplanation h2 {
|
39
39
|
text-align: left;
|
40
40
|
font-weight: bold;
|
41
41
|
padding: 5px 5px 5px 15px;
|
@@ -45,13 +45,13 @@
|
|
45
45
|
color: #fff;
|
46
46
|
}
|
47
47
|
|
48
|
-
#
|
48
|
+
#errorExplanation p {
|
49
49
|
color: #333;
|
50
50
|
margin-bottom: 0;
|
51
51
|
padding: 5px;
|
52
52
|
}
|
53
53
|
|
54
|
-
#
|
54
|
+
#errorExplanation ul li {
|
55
55
|
font-size: 12px;
|
56
56
|
list-style: square;
|
57
57
|
}
|
@@ -10,20 +10,19 @@
|
|
10
10
|
</p>
|
11
11
|
|
12
12
|
<% if @scaffold_method.expects %>
|
13
|
-
<% i = 0 %>
|
14
13
|
|
15
14
|
<strong>Method Parameters:</strong><br />
|
16
|
-
<% @scaffold_method.expects.
|
15
|
+
<% @scaffold_method.expects.each_with_index do |type, i| %>
|
17
16
|
<p>
|
18
17
|
<label for="method_params[<%= i %>]"><%= method_parameter_label(type.name, type) %> </label><br />
|
19
|
-
<%= method_parameter_input_fields(@scaffold_method, type, "method_params
|
18
|
+
<%= method_parameter_input_fields(@scaffold_method, type, "method_params", i) %>
|
20
19
|
</p>
|
21
|
-
<% i += 1 %>
|
22
20
|
<% end %>
|
23
21
|
|
24
22
|
<% end %>
|
25
23
|
|
26
24
|
<%= submit_tag "Invoke" %>
|
25
|
+
<%= end_form_tag %>
|
27
26
|
|
28
27
|
<p>
|
29
28
|
<%= link_to "Back", :action => @scaffold_action_name %>
|
data/test/abstract_client.rb
CHANGED
@@ -12,17 +12,49 @@ module ClientTest
|
|
12
12
|
firstnames == other.firstnames && lastname == other.lastname
|
13
13
|
end
|
14
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
|
15
41
|
|
16
42
|
class API < ActionWebService::API::Base
|
17
43
|
api_method :void
|
18
|
-
api_method :normal,
|
19
|
-
api_method :array_return,
|
20
|
-
api_method :struct_pass,
|
21
|
-
api_method :
|
22
|
-
api_method :
|
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}]
|
23
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]
|
24
56
|
end
|
25
|
-
|
57
|
+
|
26
58
|
class NullLogOut
|
27
59
|
def <<(*args); end
|
28
60
|
end
|
@@ -65,6 +97,14 @@ module ClientTest
|
|
65
97
|
@value_struct_pass = @method_params
|
66
98
|
true
|
67
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
|
68
108
|
|
69
109
|
def client_container
|
70
110
|
50
|
@@ -77,6 +117,22 @@ module ClientTest
|
|
77
117
|
def thrower
|
78
118
|
raise "Hi"
|
79
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
|
80
136
|
end
|
81
137
|
|
82
138
|
class AbstractClientLet < WEBrick::HTTPServlet::AbstractServlet
|
data/test/abstract_unit.rb
CHANGED
@@ -5,10 +5,34 @@ $:.unshift(File.dirname(__FILE__) + '/../../actionpack/lib')
|
|
5
5
|
$:.unshift(File.dirname(__FILE__) + '/../../activerecord/lib')
|
6
6
|
|
7
7
|
require 'test/unit'
|
8
|
-
require 'active_record'
|
9
8
|
require 'action_web_service'
|
10
9
|
require 'action_controller'
|
11
10
|
require 'action_controller/test_process'
|
12
11
|
|
13
12
|
ActionController::Base.logger = nil
|
14
13
|
ActionController::Base.ignore_missing_templates = true
|
14
|
+
|
15
|
+
begin
|
16
|
+
PATH_TO_AR = File.dirname(__FILE__) + '/../../activerecord'
|
17
|
+
require "#{PATH_TO_AR}/lib/active_record" unless Object.const_defined?(:ActiveRecord)
|
18
|
+
require "#{PATH_TO_AR}/lib/active_record/fixtures" unless Object.const_defined?(:Fixtures)
|
19
|
+
rescue Object => e
|
20
|
+
fail "\nFailed to load activerecord: #{e}"
|
21
|
+
end
|
22
|
+
|
23
|
+
ActiveRecord::Base.establish_connection(
|
24
|
+
:adapter => "mysql",
|
25
|
+
:username => "rails",
|
26
|
+
:encoding => "utf8",
|
27
|
+
:database => "activewebservice_unittest"
|
28
|
+
)
|
29
|
+
ActiveRecord::Base.connection
|
30
|
+
|
31
|
+
Test::Unit::TestCase.fixture_path = "#{File.dirname(__FILE__)}/fixtures/"
|
32
|
+
|
33
|
+
# restore default raw_post functionality
|
34
|
+
class ActionController::TestRequest
|
35
|
+
def raw_post
|
36
|
+
super
|
37
|
+
end
|
38
|
+
end
|
data/test/client_soap_test.rb
CHANGED
@@ -49,6 +49,8 @@ end
|
|
49
49
|
class TC_ClientSoap < Test::Unit::TestCase
|
50
50
|
include ClientTest
|
51
51
|
include ClientSoapTest
|
52
|
+
|
53
|
+
fixtures :users
|
52
54
|
|
53
55
|
def setup
|
54
56
|
@server = SoapServer.instance
|
@@ -88,6 +90,16 @@ class TC_ClientSoap < Test::Unit::TestCase
|
|
88
90
|
assert_equal(true, @client.struct_pass([new_person]))
|
89
91
|
assert_equal([[new_person]], @container.value_struct_pass)
|
90
92
|
end
|
93
|
+
|
94
|
+
def test_nil_struct_return
|
95
|
+
assert_nil @client.nil_struct_return
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_inner_nil
|
99
|
+
outer = @client.inner_nil
|
100
|
+
assert_equal 'outer', outer.name
|
101
|
+
assert_nil outer.inner
|
102
|
+
end
|
91
103
|
|
92
104
|
def test_client_container
|
93
105
|
assert_equal(50, ClientContainer.new.get_client.client_container)
|
@@ -106,4 +118,35 @@ class TC_ClientSoap < Test::Unit::TestCase
|
|
106
118
|
assert_equal([5, 6], @container.value_normal)
|
107
119
|
@container.value_normal = nil
|
108
120
|
end
|
121
|
+
|
122
|
+
def test_model_return
|
123
|
+
user = @client.user_return
|
124
|
+
assert_equal 1, user.id
|
125
|
+
assert_equal 'Kent', user.name
|
126
|
+
assert user.active?
|
127
|
+
assert_kind_of Date, user.created_on
|
128
|
+
assert_equal Date.today, user.created_on
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_with_model
|
132
|
+
with_model = @client.with_model_return
|
133
|
+
assert_equal 'Kent', with_model.user.name
|
134
|
+
assert_equal 2, with_model.users.size
|
135
|
+
with_model.users.each do |user|
|
136
|
+
assert_kind_of User, user
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def test_scoped_model_return
|
141
|
+
scoped_model = @client.scoped_model_return
|
142
|
+
assert_kind_of Accounting::User, scoped_model
|
143
|
+
assert_equal 'Kent', scoped_model.name
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_multi_dim_return
|
147
|
+
md_struct = @client.multi_dim_return
|
148
|
+
assert_kind_of Array, md_struct.pref
|
149
|
+
assert_equal 2, md_struct.pref.size
|
150
|
+
assert_kind_of Array, md_struct.pref[0]
|
151
|
+
end
|
109
152
|
end
|
data/test/client_xmlrpc_test.rb
CHANGED
@@ -12,7 +12,7 @@ module ClientXmlRpcTest
|
|
12
12
|
test_request.env['HTTP_CONTENT_TYPE'] = 'text/xml'
|
13
13
|
test_request.env['RAW_POST_DATA'] = req.body
|
14
14
|
response = ActionController::TestResponse.new
|
15
|
-
@controller.process(test_request, response)
|
15
|
+
@controller.process(test_request, response)
|
16
16
|
res.header['content-type'] = 'text/xml'
|
17
17
|
res.body = response.body
|
18
18
|
# puts res.body
|
@@ -44,6 +44,8 @@ end
|
|
44
44
|
class TC_ClientXmlRpc < Test::Unit::TestCase
|
45
45
|
include ClientTest
|
46
46
|
include ClientXmlRpcTest
|
47
|
+
|
48
|
+
fixtures :users
|
47
49
|
|
48
50
|
def setup
|
49
51
|
@server = XmlRpcServer.instance
|
@@ -83,6 +85,16 @@ class TC_ClientXmlRpc < Test::Unit::TestCase
|
|
83
85
|
assert_equal(true, @client.struct_pass([new_person]))
|
84
86
|
assert_equal([[new_person]], @container.value_struct_pass)
|
85
87
|
end
|
88
|
+
|
89
|
+
def test_nil_struct_return
|
90
|
+
assert_equal false, @client.nil_struct_return
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_inner_nil
|
94
|
+
outer = @client.inner_nil
|
95
|
+
assert_equal 'outer', outer.name
|
96
|
+
assert_nil outer.inner
|
97
|
+
end
|
86
98
|
|
87
99
|
def test_client_container
|
88
100
|
assert_equal(50, ClientContainer.new.get_client.client_container)
|
@@ -90,7 +102,7 @@ class TC_ClientXmlRpc < Test::Unit::TestCase
|
|
90
102
|
|
91
103
|
def test_named_parameters
|
92
104
|
assert(@container.value_named_parameters.nil?)
|
93
|
-
assert_equal(
|
105
|
+
assert_equal(false, @client.named_parameters("xxx", 7))
|
94
106
|
assert_equal(["xxx", 7], @container.value_named_parameters)
|
95
107
|
end
|
96
108
|
|
@@ -105,4 +117,35 @@ class TC_ClientXmlRpc < Test::Unit::TestCase
|
|
105
117
|
@client.normal
|
106
118
|
end
|
107
119
|
end
|
120
|
+
|
121
|
+
def test_model_return
|
122
|
+
user = @client.user_return
|
123
|
+
assert_equal 1, user.id
|
124
|
+
assert_equal 'Kent', user.name
|
125
|
+
assert user.active?
|
126
|
+
assert_kind_of Time, user.created_on
|
127
|
+
assert_equal Time.utc(Time.now.year, Time.now.month, Time.now.day), user.created_on
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_with_model
|
131
|
+
with_model = @client.with_model_return
|
132
|
+
assert_equal 'Kent', with_model.user.name
|
133
|
+
assert_equal 2, with_model.users.size
|
134
|
+
with_model.users.each do |user|
|
135
|
+
assert_kind_of User, user
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def test_scoped_model_return
|
140
|
+
scoped_model = @client.scoped_model_return
|
141
|
+
assert_kind_of Accounting::User, scoped_model
|
142
|
+
assert_equal 'Kent', scoped_model.name
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_multi_dim_return
|
146
|
+
md_struct = @client.multi_dim_return
|
147
|
+
assert_kind_of Array, md_struct.pref
|
148
|
+
assert_equal 2, md_struct.pref.size
|
149
|
+
assert_kind_of Array, md_struct.pref[0]
|
150
|
+
end
|
108
151
|
end
|
@@ -2,11 +2,15 @@ require File.dirname(__FILE__) + '/abstract_unit'
|
|
2
2
|
|
3
3
|
ActionController::Routing::Routes.draw do |map|
|
4
4
|
map.connect '', :controller => 'scaffolded'
|
5
|
+
map.connect ':controller/:action/:id'
|
5
6
|
end
|
6
7
|
|
8
|
+
ActionController::Base.template_root = '.'
|
9
|
+
|
7
10
|
class ScaffoldPerson < ActionWebService::Struct
|
8
|
-
member :id,
|
9
|
-
member :name,
|
11
|
+
member :id, :int
|
12
|
+
member :name, :string
|
13
|
+
member :birth, :date
|
10
14
|
|
11
15
|
def ==(other)
|
12
16
|
self.id == other.id && self.name == other.name
|
@@ -15,7 +19,12 @@ end
|
|
15
19
|
|
16
20
|
class ScaffoldedControllerTestAPI < ActionWebService::API::Base
|
17
21
|
api_method :hello, :expects => [{:integer=>:int}, :string], :returns => [:bool]
|
22
|
+
api_method :hello_struct_param, :expects => [{:person => ScaffoldPerson}], :returns => [:bool]
|
23
|
+
api_method :date_of_birth, :expects => [ScaffoldPerson], :returns => [:string]
|
18
24
|
api_method :bye, :returns => [[ScaffoldPerson]]
|
25
|
+
api_method :date_diff, :expects => [{:start_date => :date}, {:end_date => :date}], :returns => [:int]
|
26
|
+
api_method :time_diff, :expects => [{:start_time => :time}, {:end_time => :time}], :returns => [:int]
|
27
|
+
api_method :base64_upcase, :expects => [:base64], :returns => [:base64]
|
19
28
|
end
|
20
29
|
|
21
30
|
class ScaffoldedController < ActionController::Base
|
@@ -25,6 +34,14 @@ class ScaffoldedController < ActionController::Base
|
|
25
34
|
def hello(int, string)
|
26
35
|
0
|
27
36
|
end
|
37
|
+
|
38
|
+
def hello_struct_param(person)
|
39
|
+
0
|
40
|
+
end
|
41
|
+
|
42
|
+
def date_of_birth(person)
|
43
|
+
person.birth.to_s
|
44
|
+
end
|
28
45
|
|
29
46
|
def bye
|
30
47
|
[ScaffoldPerson.new(:id => 1, :name => "leon"), ScaffoldPerson.new(:id => 2, :name => "paul")]
|
@@ -33,6 +50,18 @@ class ScaffoldedController < ActionController::Base
|
|
33
50
|
def rescue_action(e)
|
34
51
|
raise e
|
35
52
|
end
|
53
|
+
|
54
|
+
def date_diff(start_date, end_date)
|
55
|
+
end_date - start_date
|
56
|
+
end
|
57
|
+
|
58
|
+
def time_diff(start_time, end_time)
|
59
|
+
end_time - start_time
|
60
|
+
end
|
61
|
+
|
62
|
+
def base64_upcase(data)
|
63
|
+
data.upcase
|
64
|
+
end
|
36
65
|
end
|
37
66
|
|
38
67
|
class ScaffoldedControllerTest < Test::Unit::TestCase
|
@@ -51,6 +80,12 @@ class ScaffoldedControllerTest < Test::Unit::TestCase
|
|
51
80
|
get :scaffold_invoke_method_params, :service => 'scaffolded', :method => 'Hello'
|
52
81
|
assert_rendered_file 'parameters.rhtml'
|
53
82
|
end
|
83
|
+
|
84
|
+
def test_scaffold_invoke_method_params_with_struct
|
85
|
+
get :scaffold_invoke_method_params, :service => 'scaffolded', :method => 'HelloStructParam'
|
86
|
+
assert_rendered_file 'parameters.rhtml'
|
87
|
+
assert_tag :tag => 'input', :attributes => {:name => "method_params[0][name]"}
|
88
|
+
end
|
54
89
|
|
55
90
|
def test_scaffold_invoke_submit_hello
|
56
91
|
post :scaffold_invoke_submit, :service => 'scaffolded', :method => 'Hello', :method_params => {'0' => '5', '1' => 'hello world'}
|
@@ -64,4 +99,47 @@ class ScaffoldedControllerTest < Test::Unit::TestCase
|
|
64
99
|
persons = [ScaffoldPerson.new(:id => 1, :name => "leon"), ScaffoldPerson.new(:id => 2, :name => "paul")]
|
65
100
|
assert_equal persons, @controller.instance_eval{ @method_return_value }
|
66
101
|
end
|
102
|
+
|
103
|
+
def test_scaffold_date_params
|
104
|
+
get :scaffold_invoke_method_params, :service => 'scaffolded', :method => 'DateDiff'
|
105
|
+
(0..1).each do |param|
|
106
|
+
(1..3).each do |date_part|
|
107
|
+
assert_tag :tag => 'select', :attributes => {:name => "method_params[#{param}][#{date_part}]"},
|
108
|
+
:children => {:greater_than => 1, :only => {:tag => 'option'}}
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
post :scaffold_invoke_submit, :service => 'scaffolded', :method => 'DateDiff',
|
113
|
+
:method_params => {'0' => {'1' => '2006', '2' => '2', '3' => '1'}, '1' => {'1' => '2006', '2' => '2', '3' => '2'}}
|
114
|
+
assert_equal 1, @controller.instance_eval{ @method_return_value }
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_scaffold_struct_date_params
|
118
|
+
post :scaffold_invoke_submit, :service => 'scaffolded', :method => 'DateOfBirth',
|
119
|
+
:method_params => {'0' => {'birth' => {'1' => '2006', '2' => '2', '3' => '1'}, 'id' => '1', 'name' => 'person'}}
|
120
|
+
assert_equal '2006-02-01', @controller.instance_eval{ @method_return_value }
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_scaffold_time_params
|
124
|
+
get :scaffold_invoke_method_params, :service => 'scaffolded', :method => 'TimeDiff'
|
125
|
+
(0..1).each do |param|
|
126
|
+
(1..6).each do |date_part|
|
127
|
+
assert_tag :tag => 'select', :attributes => {:name => "method_params[#{param}][#{date_part}]"},
|
128
|
+
:children => {:greater_than => 1, :only => {:tag => 'option'}}
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
post :scaffold_invoke_submit, :service => 'scaffolded', :method => 'TimeDiff',
|
133
|
+
:method_params => {'0' => {'1' => '2006', '2' => '2', '3' => '1', '4' => '1', '5' => '1', '6' => '1'},
|
134
|
+
'1' => {'1' => '2006', '2' => '2', '3' => '2', '4' => '1', '5' => '1', '6' => '1'}}
|
135
|
+
assert_equal 86400, @controller.instance_eval{ @method_return_value }
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_scaffold_base64
|
139
|
+
get :scaffold_invoke_method_params, :service => 'scaffolded', :method => 'Base64Upcase'
|
140
|
+
assert_tag :tag => 'textarea', :attributes => {:name => 'method_params[0]'}
|
141
|
+
|
142
|
+
post :scaffold_invoke_submit, :service => 'scaffolded', :method => 'Base64Upcase', :method_params => {'0' => 'scaffold'}
|
143
|
+
assert_equal 'SCAFFOLD', @controller.instance_eval{ @method_return_value }
|
144
|
+
end
|
67
145
|
end
|
metadata
CHANGED
@@ -3,11 +3,11 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: actionwebservice
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.
|
7
|
-
date:
|
6
|
+
version: 1.1.0
|
7
|
+
date: 2006-03-27 00:00:00 -06:00
|
8
8
|
summary: Web service support for Action Pack.
|
9
9
|
require_paths:
|
10
|
-
|
10
|
+
- lib
|
11
11
|
email: bitserf@gmail.com
|
12
12
|
homepage: http://www.rubyonrails.org
|
13
13
|
rubyforge_project: aws
|
@@ -18,129 +18,135 @@ bindir: bin
|
|
18
18
|
has_rdoc: true
|
19
19
|
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
20
|
requirements:
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
version: 0.0.0
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
25
24
|
version:
|
26
25
|
platform: ruby
|
27
26
|
signing_key:
|
28
27
|
cert_chain:
|
29
28
|
authors:
|
30
|
-
|
29
|
+
- Leon Breedt
|
31
30
|
files:
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
31
|
+
- Rakefile
|
32
|
+
- setup.rb
|
33
|
+
- README
|
34
|
+
- TODO
|
35
|
+
- CHANGELOG
|
36
|
+
- MIT-LICENSE
|
37
|
+
- examples/googlesearch
|
38
|
+
- examples/metaWeblog
|
39
|
+
- examples/googlesearch/autoloading
|
40
|
+
- examples/googlesearch/delegated
|
41
|
+
- examples/googlesearch/direct
|
42
|
+
- examples/googlesearch/README
|
43
|
+
- examples/googlesearch/autoloading/google_search_api.rb
|
44
|
+
- examples/googlesearch/autoloading/google_search_controller.rb
|
45
|
+
- examples/googlesearch/delegated/google_search_service.rb
|
46
|
+
- examples/googlesearch/delegated/search_controller.rb
|
47
|
+
- examples/googlesearch/direct/google_search_api.rb
|
48
|
+
- examples/googlesearch/direct/search_controller.rb
|
49
|
+
- examples/metaWeblog/apis
|
50
|
+
- examples/metaWeblog/controllers
|
51
|
+
- examples/metaWeblog/README
|
52
|
+
- examples/metaWeblog/apis/blogger_api.rb
|
53
|
+
- examples/metaWeblog/apis/blogger_service.rb
|
54
|
+
- examples/metaWeblog/apis/meta_weblog_api.rb
|
55
|
+
- examples/metaWeblog/apis/meta_weblog_service.rb
|
56
|
+
- examples/metaWeblog/controllers/xmlrpc_controller.rb
|
57
|
+
- lib/action_web_service
|
58
|
+
- lib/action_web_service.rb
|
59
|
+
- lib/action_web_service/api.rb
|
60
|
+
- lib/action_web_service/base.rb
|
61
|
+
- lib/action_web_service/casting.rb
|
62
|
+
- lib/action_web_service/client
|
63
|
+
- lib/action_web_service/client.rb
|
64
|
+
- lib/action_web_service/container
|
65
|
+
- lib/action_web_service/container.rb
|
66
|
+
- lib/action_web_service/dispatcher
|
67
|
+
- lib/action_web_service/dispatcher.rb
|
68
|
+
- lib/action_web_service/invocation.rb
|
69
|
+
- lib/action_web_service/protocol
|
70
|
+
- lib/action_web_service/protocol.rb
|
71
|
+
- lib/action_web_service/scaffolding.rb
|
72
|
+
- lib/action_web_service/struct.rb
|
73
|
+
- lib/action_web_service/support
|
74
|
+
- lib/action_web_service/templates
|
75
|
+
- lib/action_web_service/test_invoke.rb
|
76
|
+
- lib/action_web_service/version.rb
|
77
|
+
- lib/action_web_service/client/base.rb
|
78
|
+
- lib/action_web_service/client/soap_client.rb
|
79
|
+
- lib/action_web_service/client/xmlrpc_client.rb
|
80
|
+
- lib/action_web_service/container/action_controller_container.rb
|
81
|
+
- lib/action_web_service/container/delegated_container.rb
|
82
|
+
- lib/action_web_service/container/direct_container.rb
|
83
|
+
- lib/action_web_service/dispatcher/abstract.rb
|
84
|
+
- lib/action_web_service/dispatcher/action_controller_dispatcher.rb
|
85
|
+
- lib/action_web_service/protocol/abstract.rb
|
86
|
+
- lib/action_web_service/protocol/discovery.rb
|
87
|
+
- lib/action_web_service/protocol/soap_protocol
|
88
|
+
- lib/action_web_service/protocol/soap_protocol.rb
|
89
|
+
- lib/action_web_service/protocol/xmlrpc_protocol.rb
|
90
|
+
- lib/action_web_service/protocol/soap_protocol/marshaler.rb
|
91
|
+
- lib/action_web_service/support/class_inheritable_options.rb
|
92
|
+
- lib/action_web_service/support/signature_types.rb
|
93
|
+
- lib/action_web_service/templates/scaffolds
|
94
|
+
- lib/action_web_service/templates/scaffolds/layout.rhtml
|
95
|
+
- lib/action_web_service/templates/scaffolds/methods.rhtml
|
96
|
+
- lib/action_web_service/templates/scaffolds/parameters.rhtml
|
97
|
+
- lib/action_web_service/templates/scaffolds/result.rhtml
|
98
|
+
- test/abstract_client.rb
|
99
|
+
- test/abstract_dispatcher.rb
|
100
|
+
- test/abstract_unit.rb
|
101
|
+
- test/api_test.rb
|
102
|
+
- test/apis
|
103
|
+
- test/base_test.rb
|
104
|
+
- test/casting_test.rb
|
105
|
+
- test/client_soap_test.rb
|
106
|
+
- test/client_xmlrpc_test.rb
|
107
|
+
- test/container_test.rb
|
108
|
+
- test/dispatcher_action_controller_soap_test.rb
|
109
|
+
- test/dispatcher_action_controller_xmlrpc_test.rb
|
110
|
+
- test/fixtures
|
111
|
+
- test/gencov
|
112
|
+
- test/invocation_test.rb
|
113
|
+
- test/run
|
114
|
+
- test/scaffolded_controller_test.rb
|
115
|
+
- test/struct_test.rb
|
116
|
+
- test/test_invoke_test.rb
|
117
|
+
- test/apis/auto_load_api.rb
|
118
|
+
- test/apis/broken_auto_load_api.rb
|
119
|
+
- test/fixtures/db_definitions
|
120
|
+
- test/fixtures/users.yml
|
121
|
+
- test/fixtures/db_definitions/mysql.sql
|
119
122
|
test_files: []
|
123
|
+
|
120
124
|
rdoc_options: []
|
125
|
+
|
121
126
|
extra_rdoc_files: []
|
127
|
+
|
122
128
|
executables: []
|
129
|
+
|
123
130
|
extensions: []
|
131
|
+
|
124
132
|
requirements:
|
125
|
-
|
133
|
+
- none
|
126
134
|
dependencies:
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
version: 1.13.2
|
146
|
-
version:
|
135
|
+
- !ruby/object:Gem::Dependency
|
136
|
+
name: actionpack
|
137
|
+
version_requirement:
|
138
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
139
|
+
requirements:
|
140
|
+
- - "="
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: 1.12.0
|
143
|
+
version:
|
144
|
+
- !ruby/object:Gem::Dependency
|
145
|
+
name: activerecord
|
146
|
+
version_requirement:
|
147
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
148
|
+
requirements:
|
149
|
+
- - "="
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: 1.14.0
|
152
|
+
version:
|