aboutsummaryrefslogtreecommitdiffstats
path: root/actionservice/lib/action_service/client/xmlrpc.rb
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2005-02-18 23:43:09 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2005-02-18 23:43:09 +0000
commit7a67d0f617db7d2962b6c3b80466e21570b244bf (patch)
tree56fa640e31f4f7f22d34a246bc1b197706a07e3a /actionservice/lib/action_service/client/xmlrpc.rb
parentfdecb6843ba8c5b0f718225f343017e11fa7f711 (diff)
downloadrails-7a67d0f617db7d2962b6c3b80466e21570b244bf.tar.gz
rails-7a67d0f617db7d2962b6c3b80466e21570b244bf.tar.bz2
rails-7a67d0f617db7d2962b6c3b80466e21570b244bf.zip
Renamed Action Service to Action Web Service
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@669 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionservice/lib/action_service/client/xmlrpc.rb')
-rw-r--r--actionservice/lib/action_service/client/xmlrpc.rb76
1 files changed, 0 insertions, 76 deletions
diff --git a/actionservice/lib/action_service/client/xmlrpc.rb b/actionservice/lib/action_service/client/xmlrpc.rb
deleted file mode 100644
index d0d007f871..0000000000
--- a/actionservice/lib/action_service/client/xmlrpc.rb
+++ /dev/null
@@ -1,76 +0,0 @@
-require 'uri'
-require 'xmlrpc/client'
-
-module ActionService # :nodoc:
- module Client # :nodoc:
-
- # Implements XML-RPC client support
- #
- # ==== Example Usage
- #
- # class BloggerAPI < ActionService::API::Base
- # inflect_names false
- # api_method :getRecentPosts, :returns => [[Blog::Post]]
- # end
- #
- # blog = ActionService::Client::XmlRpc.new(BloggerAPI, "http://.../RPC", :handler_name => "blogger")
- # posts = blog.getRecentPosts
- class XmlRpc < Base
-
- # Creates a new web service client using the XML-RPC protocol.
- #
- # +api+ must be an ActionService::API::Base derivative, and
- # +endpoint_uri+ must point at the relevant URL to which protocol requests
- # will be sent with HTTP POST.
- #
- # Valid options:
- # [<tt>:handler_name</tt>] If the remote server defines its services inside special
- # handler (the Blogger API uses a <tt>"blogger"</tt> handler name for example),
- # provide it here, or your method calls will fail
- def initialize(api, endpoint_uri, options={})
- @api = api
- @handler_name = options[:handler_name]
- @client = XMLRPC::Client.new2(endpoint_uri, options[:proxy], options[:timeout])
- end
-
- protected
- def perform_invocation(method_name, args)
- args = transform_outgoing_method_params(method_name, args)
- ok, return_value = @client.call2(public_name(method_name), *args)
- return transform_return_value(method_name, return_value) if ok
- raise(ClientError, "#{return_value.faultCode}: #{return_value.faultString}")
- end
-
- def transform_outgoing_method_params(method_name, params)
- info = @api.api_methods[method_name.to_sym]
- signature = info[:expects]
- signature_length = signature.nil?? 0 : signature.length
- if signature_length != params.length
- raise(ProtocolError, "API declares #{public_name(method_name)} to accept " +
- "#{signature_length} parameters, but #{params.length} parameters " +
- "were supplied")
- end
- if signature_length > 0
- signature = Protocol::XmlRpc::XmlRpcProtocol.transform_array_types(signature)
- (1..signature.size).each do |i|
- i -= 1
- params[i] = Protocol::XmlRpc::XmlRpcProtocol.ruby_to_xmlrpc(params[i], signature[i])
- end
- end
- params
- end
-
- def transform_return_value(method_name, return_value)
- info = @api.api_methods[method_name.to_sym]
- return true unless signature = info[:returns]
- signature = Protocol::XmlRpc::XmlRpcProtocol.transform_array_types(signature)
- Protocol::XmlRpc::XmlRpcProtocol.xmlrpc_to_ruby(return_value, signature[0])
- end
-
- def public_name(method_name)
- public_name = @api.public_api_method_name(method_name)
- @handler_name ? "#{@handler_name}.#{public_name}" : public_name
- end
- end
- end
-end