提交 c11cc309 编写于 作者: L Leon Breedt

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
上级 0591c53e
......@@ -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
......
......@@ -204,6 +204,16 @@ def expects_to_hash(params)
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 @@ def to_s
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
......
......@@ -10,19 +10,20 @@ def canonical_signature(signature)
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 @@ def derived_from?(ancestor, child)
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 @@ def structured?
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
......
......@@ -91,6 +91,11 @@ def test_parameter_hash
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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册