dougbarth-actionwebservice 2.1.1 → 2.3.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +3 -22
- data/lib/action_web_service.rb +3 -3
- data/lib/action_web_service/casting.rb +7 -2
- data/lib/action_web_service/dispatcher/action_controller_dispatcher.rb +1 -1
- data/lib/action_web_service/protocol/abstract.rb +4 -4
- data/lib/action_web_service/scaffolding.rb +6 -8
- data/lib/action_web_service/version.rb +2 -2
- data/test/abstract_dispatcher.rb +3 -2
- data/test/abstract_unit.rb +8 -2
- data/test/api_test.rb +1 -1
- data/test/base_test.rb +1 -1
- data/test/casting_test.rb +8 -0
- data/test/client_soap_test.rb +3 -1
- data/test/client_xmlrpc_test.rb +3 -1
- data/test/dispatcher_action_controller_soap_test.rb +2 -1
- data/test/scaffolded_controller_test.rb +6 -6
- data/test/test_invoke_test.rb +1 -1
- metadata +11 -8
data/Rakefile
CHANGED
@@ -38,25 +38,6 @@ task :build_database do
|
|
38
38
|
%x( mysql -uroot actionwebservice_unittest < #{File.join(SCHEMA_PATH, 'mysql.sql')} )
|
39
39
|
end
|
40
40
|
|
41
|
-
desc 'Print file list for gemspec file.'
|
42
|
-
task :list_files do
|
43
|
-
s_files = [ "Rakefile", "setup.rb", "README", "TODO", "CHANGELOG", "MIT-LICENSE" ]
|
44
|
-
s_files = s_files + Dir.glob( "examples/**/*" ).delete_if { |item| item.match( /\.(svn|git)/ ) }
|
45
|
-
s_files = s_files + Dir.glob( "lib/**/*" ).delete_if { |item| item.match( /\.(svn|git)/ ) }
|
46
|
-
s_files = s_files + Dir.glob( "test/**/*" ).delete_if { |item| item.match( /\.(svn|git)/ ) }
|
47
|
-
s_files = s_files + Dir.glob( "generators/**/*" ).delete_if { |item| item.match( /\.(svn|git)/ ) }
|
48
|
-
puts "#{s_files.inspect}"
|
49
|
-
end
|
50
|
-
|
51
|
-
desc 'Checks gemspec for methods disallowed by GitHub\'s $SAFE=3 build environment.'
|
52
|
-
task :check_for_github do
|
53
|
-
require 'rubygems/specification'
|
54
|
-
data = File.read('actionwebservice.gemspec')
|
55
|
-
spec = nil
|
56
|
-
Thread.new { spec = eval("$SAFE = 3\n#{data}") }.join
|
57
|
-
puts "Success! Gem should build at GitHub." if spec.class == Gem::Specification
|
58
|
-
end
|
59
|
-
|
60
41
|
|
61
42
|
# Generate the RDoc documentation
|
62
43
|
Rake::RDocTask.new { |rdoc|
|
@@ -91,8 +72,8 @@ spec = Gem::Specification.new do |s|
|
|
91
72
|
s.rubyforge_project = "aws"
|
92
73
|
s.homepage = "http://www.rubyonrails.org"
|
93
74
|
|
94
|
-
s.add_dependency('actionpack', '= 2.
|
95
|
-
s.add_dependency('activerecord', '= 2.
|
75
|
+
s.add_dependency('actionpack', '= 2.3.3' + PKG_BUILD)
|
76
|
+
s.add_dependency('activerecord', '= 2.3.3' + PKG_BUILD)
|
96
77
|
|
97
78
|
s.has_rdoc = true
|
98
79
|
s.requirements << 'none'
|
@@ -189,4 +170,4 @@ task :release => [ :package ] do
|
|
189
170
|
rubyforge = RubyForge.new
|
190
171
|
rubyforge.login
|
191
172
|
rubyforge.add_release(PKG_NAME, PKG_NAME, "REL #{PKG_VERSION}", *packages)
|
192
|
-
end
|
173
|
+
end
|
data/lib/action_web_service.rb
CHANGED
@@ -27,9 +27,9 @@ begin
|
|
27
27
|
require 'active_record'
|
28
28
|
rescue LoadError
|
29
29
|
require 'rubygems'
|
30
|
-
gem 'activesupport', '>= 2.
|
31
|
-
gem 'actionpack', '>= 2.
|
32
|
-
gem 'activerecord', '>= 2.
|
30
|
+
gem 'activesupport', '>= 2.3.0'
|
31
|
+
gem 'actionpack', '>= 2.3.0'
|
32
|
+
gem 'activerecord', '>= 2.3.0'
|
33
33
|
end
|
34
34
|
|
35
35
|
$:.unshift(File.dirname(__FILE__) + "/action_web_service/vendor/")
|
@@ -117,8 +117,13 @@ module ActionWebService # :nodoc:
|
|
117
117
|
|
118
118
|
def cast_to_structured_type(value, signature_type) # :nodoc:
|
119
119
|
obj = nil
|
120
|
-
|
121
|
-
|
120
|
+
# if the canonical classes are the same or if the given value is of
|
121
|
+
# a type that is derived from the signature_type do not attempt to
|
122
|
+
# "cast" the value into the signature_type as it's already good to go
|
123
|
+
obj = (
|
124
|
+
canonical_type(value.class) == canonical_type(signature_type.type) or
|
125
|
+
derived_from?(signature_type.type, value.class)
|
126
|
+
) ? value : signature_type.type_class.new
|
122
127
|
if value.respond_to?(:each_pair)
|
123
128
|
klass = signature_type.type_class
|
124
129
|
value.each_pair do |name, val|
|
@@ -165,7 +165,7 @@ module ActionWebService # :nodoc:
|
|
165
165
|
private
|
166
166
|
def base_uri
|
167
167
|
host = request.host_with_port
|
168
|
-
relative_url_root =
|
168
|
+
relative_url_root = ::ActionController::Base.relative_url_root
|
169
169
|
scheme = request.ssl? ? 'https' : 'http'
|
170
170
|
'%s://%s%s/%s/' % [scheme, host, relative_url_root, self.class.controller_path]
|
171
171
|
end
|
@@ -12,7 +12,7 @@ module ActionWebService # :nodoc:
|
|
12
12
|
|
13
13
|
def encode_action_pack_request(service_name, public_method_name, raw_body, options={})
|
14
14
|
klass = options[:request_class] || SimpleActionPackRequest
|
15
|
-
request = klass.new
|
15
|
+
request = klass.new({})
|
16
16
|
request.request_parameters['action'] = service_name.to_s
|
17
17
|
request.env['RAW_POST_DATA'] = raw_body
|
18
18
|
request.env['REQUEST_METHOD'] = 'POST'
|
@@ -71,9 +71,9 @@ module ActionWebService # :nodoc:
|
|
71
71
|
end
|
72
72
|
end
|
73
73
|
|
74
|
-
class SimpleActionPackRequest < ActionController::
|
75
|
-
def initialize
|
76
|
-
@env =
|
74
|
+
class SimpleActionPackRequest < ActionController::Request # :nodoc:
|
75
|
+
def initialize(env = {})
|
76
|
+
@env = env
|
77
77
|
@qparams = {}
|
78
78
|
@rparams = {}
|
79
79
|
@cookies = {}
|
@@ -69,7 +69,7 @@ module ActionWebService
|
|
69
69
|
post_params = params['method_params'] ? params['method_params'].dup : nil
|
70
70
|
params = []
|
71
71
|
@scaffold_method.expects.each_with_index do |spec, i|
|
72
|
-
params << post_params[i.to_s]
|
72
|
+
params << post_params[i.to_s]
|
73
73
|
end if @scaffold_method.expects
|
74
74
|
params = @scaffold_method.cast_expects(params)
|
75
75
|
method_name = public_method_name(@scaffold_service.name, @scaffold_method.public_name)
|
@@ -87,7 +87,6 @@ module ActionWebService
|
|
87
87
|
@method_return_value = @scaffold_method.cast_returns(obj)
|
88
88
|
end
|
89
89
|
@method_elapsed = bm.real
|
90
|
-
add_instance_variables_to_assigns
|
91
90
|
reset_invocation_response
|
92
91
|
render_invocation_scaffold 'result'
|
93
92
|
end
|
@@ -102,16 +101,15 @@ module ActionWebService
|
|
102
101
|
@scaffold_service = @scaffold_container.services.find{ |x| x.name == params['service'] }
|
103
102
|
@scaffold_method = @scaffold_service.api_methods[params['method']]
|
104
103
|
end
|
105
|
-
add_instance_variables_to_assigns
|
106
104
|
end
|
107
105
|
|
108
106
|
def render_invocation_scaffold(action)
|
109
107
|
customized_template = "\#{self.class.controller_path}/#{action_name}/\#{action}"
|
110
108
|
default_template = scaffold_path(action)
|
111
|
-
|
112
|
-
content = @template.
|
113
|
-
|
114
|
-
content = @template.
|
109
|
+
begin
|
110
|
+
content = @template.render(:file => customized_template)
|
111
|
+
rescue ActionView::MissingTemplate
|
112
|
+
content = @template.render(:file => default_template)
|
115
113
|
end
|
116
114
|
@template.instance_variable_set("@content_for_layout", content)
|
117
115
|
if self.active_layout.nil?
|
@@ -127,7 +125,7 @@ module ActionWebService
|
|
127
125
|
|
128
126
|
def reset_invocation_response
|
129
127
|
erase_render_results
|
130
|
-
response.
|
128
|
+
response.instance_variable_set :@header, Rack::Utils::HeaderHash.new(::ActionController::Response::DEFAULT_HEADERS.merge("cookie" => []))
|
131
129
|
end
|
132
130
|
|
133
131
|
def public_method_name(service_name, method_name)
|
data/test/abstract_dispatcher.rb
CHANGED
@@ -358,7 +358,7 @@ module DispatcherCommonTests
|
|
358
358
|
response = ActionController::TestResponse.new
|
359
359
|
controller.process(request, response)
|
360
360
|
# puts response.body
|
361
|
-
assert(response.
|
361
|
+
assert(response.status =~ /^500/)
|
362
362
|
end
|
363
363
|
send_garbage_request.call
|
364
364
|
controller.class.web_service_exception_reporting = false
|
@@ -538,7 +538,8 @@ module DispatcherCommonTests
|
|
538
538
|
|
539
539
|
def http_method_allowed?(method)
|
540
540
|
method = method.to_s.upcase
|
541
|
-
test_request = ActionController::TestRequest.new
|
541
|
+
test_request = ActionController::TestRequest.new
|
542
|
+
test_request.action = 'api'
|
542
543
|
test_response = ActionController::TestResponse.new
|
543
544
|
test_request.env['REQUEST_METHOD'] = method
|
544
545
|
result = @direct_controller.process(test_request, test_response)
|
data/test/abstract_unit.rb
CHANGED
@@ -4,7 +4,9 @@ require 'rubygems'
|
|
4
4
|
require 'test/unit'
|
5
5
|
require 'action_web_service'
|
6
6
|
require 'action_controller'
|
7
|
-
require 'action_controller/
|
7
|
+
require 'action_controller/test_case'
|
8
|
+
require 'action_view'
|
9
|
+
require 'action_view/test_case'
|
8
10
|
|
9
11
|
# Show backtraces for deprecated behavior for quicker cleanup.
|
10
12
|
ActiveSupport::Deprecation.debug = true
|
@@ -14,6 +16,7 @@ ActiveRecord::Base.logger = ActionController::Base.logger = Logger.new("debug.lo
|
|
14
16
|
|
15
17
|
begin
|
16
18
|
require 'activerecord'
|
19
|
+
require "active_record/test_case"
|
17
20
|
require "active_record/fixtures" unless Object.const_defined?(:Fixtures)
|
18
21
|
rescue LoadError => e
|
19
22
|
fail "\nFailed to load activerecord: #{e}"
|
@@ -30,4 +33,7 @@ ActiveRecord::Base.configurations = {
|
|
30
33
|
|
31
34
|
ActiveRecord::Base.establish_connection 'mysql'
|
32
35
|
|
33
|
-
|
36
|
+
class ActiveSupport::TestCase
|
37
|
+
include ActiveRecord::TestFixtures
|
38
|
+
self.fixture_path = "#{File.dirname(__FILE__)}/fixtures/"
|
39
|
+
end
|
data/test/api_test.rb
CHANGED
data/test/base_test.rb
CHANGED
@@ -34,7 +34,7 @@ module BaseTest
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
class TC_Base <
|
37
|
+
class TC_Base < ActiveSupport::TestCase
|
38
38
|
def test_options
|
39
39
|
assert(BaseTest::PristineService.web_service_api.inflect_names == false)
|
40
40
|
assert(BaseTest::Service.web_service_api.inflect_names == true)
|
data/test/casting_test.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/abstract_unit'
|
2
2
|
|
3
3
|
module CastingTest
|
4
|
+
class A < ActionWebService::Struct; end
|
5
|
+
class B < A; end
|
4
6
|
class API < ActionWebService::API::Base
|
5
7
|
api_method :int, :expects => [:int]
|
6
8
|
api_method :str, :expects => [:string]
|
@@ -14,6 +16,8 @@ module CastingTest
|
|
14
16
|
api_method :int_array, :expects => [[:int]]
|
15
17
|
api_method :str_array, :expects => [[:string]]
|
16
18
|
api_method :bool_array, :expects => [[:bool]]
|
19
|
+
|
20
|
+
api_method :a, :expects => [A]
|
17
21
|
end
|
18
22
|
end
|
19
23
|
|
@@ -78,6 +82,10 @@ class TC_Casting < Test::Unit::TestCase
|
|
78
82
|
cast_expects(:int_array, ['1', '2.021', '4'])
|
79
83
|
end
|
80
84
|
end
|
85
|
+
|
86
|
+
def test_structured_type_casting_with_polymorphism
|
87
|
+
assert cast_expects(:a, B.new)[0].is_a?(B)
|
88
|
+
end
|
81
89
|
|
82
90
|
private
|
83
91
|
def cast_expects(method_name, *args)
|
data/test/client_soap_test.rb
CHANGED
@@ -19,6 +19,8 @@ module ClientSoapTest
|
|
19
19
|
rescue Exception => e
|
20
20
|
$stderr.puts e.message
|
21
21
|
$stderr.puts e.backtrace.join("\n")
|
22
|
+
ensure
|
23
|
+
ActiveRecord::Base.clear_active_connections!
|
22
24
|
end
|
23
25
|
end
|
24
26
|
|
@@ -46,7 +48,7 @@ module ClientSoapTest
|
|
46
48
|
end
|
47
49
|
end
|
48
50
|
|
49
|
-
class TC_ClientSoap <
|
51
|
+
class TC_ClientSoap < ActiveSupport::TestCase
|
50
52
|
include ClientTest
|
51
53
|
include ClientSoapTest
|
52
54
|
|
data/test/client_xmlrpc_test.rb
CHANGED
@@ -18,6 +18,8 @@ module ClientXmlRpcTest
|
|
18
18
|
rescue Exception => e
|
19
19
|
$stderr.puts e.message
|
20
20
|
$stderr.puts e.backtrace.join("\n")
|
21
|
+
ensure
|
22
|
+
ActiveRecord::Base.clear_active_connections!
|
21
23
|
end
|
22
24
|
end
|
23
25
|
|
@@ -40,7 +42,7 @@ module ClientXmlRpcTest
|
|
40
42
|
end
|
41
43
|
end
|
42
44
|
|
43
|
-
class TC_ClientXmlRpc <
|
45
|
+
class TC_ClientXmlRpc < ActiveSupport::TestCase
|
44
46
|
include ClientTest
|
45
47
|
include ClientXmlRpcTest
|
46
48
|
|
@@ -129,7 +129,8 @@ class TC_DispatcherActionControllerSoap < Test::Unit::TestCase
|
|
129
129
|
end
|
130
130
|
|
131
131
|
def ensure_valid_wsdl_action(controller)
|
132
|
-
test_request = ActionController::TestRequest.new
|
132
|
+
test_request = ActionController::TestRequest.new
|
133
|
+
test_request.action = 'wsdl'
|
133
134
|
test_response = ActionController::TestResponse.new
|
134
135
|
wsdl = controller.process(test_request, test_response).body
|
135
136
|
ensure_valid_wsdl(controller, wsdl, DispatcherTest::WsdlNamespace)
|
@@ -64,12 +64,12 @@ class ScaffoldedController < ActionController::Base
|
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
67
|
-
class ScaffoldedControllerTest <
|
68
|
-
def setup
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
end
|
67
|
+
class ScaffoldedControllerTest < ActionController::TestCase
|
68
|
+
# def setup
|
69
|
+
# @controller = ScaffoldedController.new
|
70
|
+
# @request = ActionController::TestRequest.new
|
71
|
+
# @response = ActionController::TestResponse.new
|
72
|
+
# end
|
73
73
|
|
74
74
|
def test_scaffold_invoke
|
75
75
|
get :scaffold_invoke
|
data/test/test_invoke_test.rb
CHANGED
@@ -49,7 +49,7 @@ class TestInvokeLayeredController < TestController
|
|
49
49
|
web_service(:two) { @service_two ||= TestInvokeService.new }
|
50
50
|
end
|
51
51
|
|
52
|
-
class TestInvokeTest <
|
52
|
+
class TestInvokeTest < ActiveSupport::TestCase
|
53
53
|
def setup
|
54
54
|
@request = ActionController::TestRequest.new
|
55
55
|
@response = ActionController::TestResponse.new
|
metadata
CHANGED
@@ -1,34 +1,36 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dougbarth-actionwebservice
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leon Breedt, Kent Sibilev
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-05-16 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: actionpack
|
17
|
+
type: :runtime
|
17
18
|
version_requirement:
|
18
19
|
version_requirements: !ruby/object:Gem::Requirement
|
19
20
|
requirements:
|
20
|
-
- - "
|
21
|
+
- - "="
|
21
22
|
- !ruby/object:Gem::Version
|
22
|
-
version: 2.
|
23
|
+
version: 2.3.3
|
23
24
|
version:
|
24
25
|
- !ruby/object:Gem::Dependency
|
25
26
|
name: activerecord
|
27
|
+
type: :runtime
|
26
28
|
version_requirement:
|
27
29
|
version_requirements: !ruby/object:Gem::Requirement
|
28
30
|
requirements:
|
29
|
-
- - "
|
31
|
+
- - "="
|
30
32
|
- !ruby/object:Gem::Version
|
31
|
-
version: 2.
|
33
|
+
version: 2.3.3
|
32
34
|
version:
|
33
35
|
description: Adds WSDL/SOAP and XML-RPC web service support to Action Pack
|
34
36
|
email: bitserf@gmail.com, ksibilev@yahoo.com
|
@@ -140,6 +142,7 @@ files:
|
|
140
142
|
- generators/web_service/web_service_generator.rb
|
141
143
|
has_rdoc: true
|
142
144
|
homepage: http://www.rubyonrails.org
|
145
|
+
licenses:
|
143
146
|
post_install_message:
|
144
147
|
rdoc_options: []
|
145
148
|
|
@@ -160,7 +163,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
160
163
|
requirements:
|
161
164
|
- none
|
162
165
|
rubyforge_project: aws
|
163
|
-
rubygems_version: 1.
|
166
|
+
rubygems_version: 1.3.5
|
164
167
|
signing_key:
|
165
168
|
specification_version: 2
|
166
169
|
summary: Web service support for Action Pack.
|