aboutsummaryrefslogtreecommitdiffstats
path: root/actionwebservice
diff options
context:
space:
mode:
authorLeon Breedt <bitserf@gmail.com>2005-04-17 17:20:44 +0000
committerLeon Breedt <bitserf@gmail.com>2005-04-17 17:20:44 +0000
commitc11cc309fa7eb83f76237d022b119802bd7a4968 (patch)
tree631c7ee5922c8956d2cace6be5d9c4cd6dc31ef9 /actionwebservice
parent0591c53efde948fd49a00aa23bdfc2ca26fca434 (diff)
downloadrails-c11cc309fa7eb83f76237d022b119802bd7a4968.tar.gz
rails-c11cc309fa7eb83f76237d022b119802bd7a4968.tar.bz2
rails-c11cc309fa7eb83f76237d022b119802bd7a4968.zip
add backwards compatibility for the public API change made to #api_methods, as it is
being used in some apps. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1197 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionwebservice')
-rw-r--r--actionwebservice/CHANGELOG3
-rw-r--r--actionwebservice/lib/action_web_service/api.rb22
-rw-r--r--actionwebservice/lib/action_web_service/support/signature_types.rb15
-rw-r--r--actionwebservice/test/api_test.rb5
4 files changed, 37 insertions, 8 deletions
diff --git a/actionwebservice/CHANGELOG b/actionwebservice/CHANGELOG
index f9aaf225a6..7c07ed5368 100644
--- a/actionwebservice/CHANGELOG
+++ b/actionwebservice/CHANGELOG
@@ -4,8 +4,7 @@
* Add scaffolding via ActionController::Base.web_service_scaffold for quick testing using a web browser
-* ActionWebService::API::Base#api_methods now returns a hash containing ActionWebService::API::Method objects
- instead of hashes
+* ActionWebService::API::Base#api_methods now returns a hash containing ActionWebService::API::Method objects instead of hashes. However, ActionWebService::API::Method defines a #[]() backwards compatibility method so any existing code utilizing this will still work.
* The :layered dispatching mode can now be used with SOAP as well, allowing you to support SOAP and XML-RPC clients for APIs like the metaWeblog API
diff --git a/actionwebservice/lib/action_web_service/api.rb b/actionwebservice/lib/action_web_service/api.rb
index 87ac1b164e..d4a42f99ef 100644
--- a/actionwebservice/lib/action_web_service/api.rb
+++ b/actionwebservice/lib/action_web_service/api.rb
@@ -204,6 +204,16 @@ module ActionWebService # :nodoc:
h
end
+ # Backwards compatibility with previous API
+ def [](sig_type)
+ case sig_type
+ when :expects
+ @expects.map{|x| compat_signature_entry(x)}
+ when :returns
+ @returns.map{|x| compat_signature_entry(x)}
+ end
+ end
+
# String representation of this method
def to_s
fqn = ""
@@ -215,6 +225,18 @@ module ActionWebService # :nodoc:
end
private
+ def compat_signature_entry(entry)
+ if entry.array?
+ [compat_signature_entry(entry.element_type)]
+ else
+ if entry.spec.is_a?(Hash)
+ {entry.spec.keys.first => entry.type_class}
+ else
+ entry.type_class
+ end
+ end
+ end
+
def friendly_param(type, show_name=true)
name = type.name.to_s
type_type = type.array?? type.element_type.type.to_s : type.type.to_s
diff --git a/actionwebservice/lib/action_web_service/support/signature_types.rb b/actionwebservice/lib/action_web_service/support/signature_types.rb
index 65f63d16e1..4ab4a08d9b 100644
--- a/actionwebservice/lib/action_web_service/support/signature_types.rb
+++ b/actionwebservice/lib/action_web_service/support/signature_types.rb
@@ -10,19 +10,20 @@ module ActionWebService # :nodoc:
end
def canonical_signature_entry(spec, i)
+ orig_spec = spec
name = "param#{i}"
if spec.is_a?(Hash)
name, spec = spec.keys.first, spec.values.first
end
type = spec
if spec.is_a?(Array)
- ArrayType.new(canonical_signature_entry(spec[0], 0), name)
+ ArrayType.new(orig_spec, canonical_signature_entry(spec[0], 0), name)
else
type = canonical_type(type)
if type.is_a?(Symbol)
- BaseType.new(type, name)
+ BaseType.new(orig_spec, type, name)
else
- StructuredType.new(type, name)
+ StructuredType.new(orig_spec, type, name)
end
end
end
@@ -126,11 +127,13 @@ module ActionWebService # :nodoc:
class BaseType # :nodoc:
include SignatureTypes
+ attr :spec
attr :type
attr :type_class
attr :name
- def initialize(type, name)
+ def initialize(spec, type, name)
+ @spec = spec
@type = canonical_type(type)
@type_class = canonical_type_class(@type)
@name = name
@@ -152,8 +155,8 @@ module ActionWebService # :nodoc:
class ArrayType < BaseType # :nodoc:
attr :element_type
- def initialize(element_type, name)
- super(Array, name)
+ def initialize(spec, element_type, name)
+ super(spec, Array, name)
@element_type = element_type
end
diff --git a/actionwebservice/test/api_test.rb b/actionwebservice/test/api_test.rb
index 2278a8213e..83d7196273 100644
--- a/actionwebservice/test/api_test.rb
+++ b/actionwebservice/test/api_test.rb
@@ -91,6 +91,11 @@ class TC_API < Test::Unit::TestCase
assert_equal({:appkey => 5, :publish => false}, hash)
end
+ def test_api_methods_compat
+ sig = API.api_methods[:named_signature][:expects]
+ assert_equal [{:appkey=>Integer}, {:publish=>TrueClass}], sig
+ end
+
def test_to_s
assert_equal 'void Expects(int param0, bool param1)', APITest::API.api_methods[:expects].to_s
end