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
protocolto 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 |