Module: ActionWebService::Container::ActionController::ClassMethods
- Defined in:
- lib/action_web_service/container/action_controller_container.rb
Instance Method Summary collapse
-
#require_web_service_api(name) ⇒ Object
:nodoc:.
-
#web_client_api(name, protocol, endpoint_uri, options = {}) ⇒ Object
Creates a client for accessing remote web services, using the given
protocol
to communicate with theendpoint_uri
. -
#web_service_api_with_require(definition = nil) ⇒ Object
:nodoc:.
Instance Method Details
#require_web_service_api(name) ⇒ Object
:nodoc:
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 |
# File 'lib/action_web_service/container/action_controller_container.rb', line 55 def require_web_service_api(name) # :nodoc: case name when String, Symbol file_name = name.to_s.underscore + "_api" class_name = file_name.camelize class_names = [class_name, class_name.sub(/Api$/, 'API')] begin require_dependency(file_name) rescue LoadError => load_error requiree = / -- (.*?)(\.rb)?$/.match(load_error).to_a[1] msg = requiree == file_name ? "Missing API definition file in apis/#{file_name}.rb" : "Can't load file: #{requiree}" raise LoadError.new(msg).copy_blame!(load_error) end klass = nil class_names.each do |name| klass = name.constantize rescue nil break unless klass.nil? end unless klass raise(NameError, "neither #{class_names[0]} or #{class_names[1]} found") end klass else raise(ArgumentError, "expected String or Symbol argument") end end |
#web_client_api(name, protocol, endpoint_uri, options = {}) ⇒ Object
Creates a client for accessing remote web services, using the given protocol
to communicate with the endpoint_uri
.
Example
class MyController < ActionController::Base
web_client_api :blogger, :xmlrpc, "http://blogger.com/myblog/api/RPC2", :handler_name => 'blogger'
end
In this example, a protected method named blogger
will now exist on the controller, and calling it will return the XML-RPC client object for working with that remote service.
options
is the set of protocol client specific options (see a protocol client class for details).
If your API definition does not exist on the load path with the correct rules for it to be found using name
, you can pass in the API definition class via options
, using a key of :api
32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/action_web_service/container/action_controller_container.rb', line 32 def web_client_api(name, protocol, endpoint_uri, ={}) unless method_defined?(name) api_klass = .delete(:api) || require_web_service_api(name) class_eval do define_method(name) do create_web_service_client(api_klass, protocol, endpoint_uri, ) end protected name end end end |
#web_service_api_with_require(definition = nil) ⇒ Object
:nodoc:
44 45 46 47 48 49 50 51 52 53 |
# File 'lib/action_web_service/container/action_controller_container.rb', line 44 def web_service_api_with_require(definition=nil) # :nodoc: return web_service_api_without_require if definition.nil? case definition when String, Symbol klass = require_web_service_api(definition) else klass = definition end web_service_api_without_require(klass) end |