Module: ActionWebService::Container::ActionController::ClassMethods

Defined in:
lib/action_web_service/container/action_controller_container.rb

Instance Method Summary collapse

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
81
# 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]
      requiree = / -- (.*?)(\.rb)?$/.match(load_error.to_s).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, options={})
  unless method_defined?(name)
    api_klass = options.delete(:api) || require_web_service_api(name)
    class_eval do
      define_method(name) do
        create_web_service_client(api_klass, protocol, endpoint_uri, options)
      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