Class ActionWebService::API::Base
In: vendor/rails/actionwebservice/lib/action_web_service/api.rb
Parent: Object

A web service API class specifies the methods that will be available for invocation for an API. It also contains metadata such as the method type signature hints.

It is not intended to be instantiated.

It is attached to web service implementation classes like ActionWebService::Base and ActionController::Base derivatives by using container.web_service_api, where container is an ActionController::Base or a ActionWebService::Base.

See ActionWebService::Container::Direct::ClassMethods for an example of use.

Methods

Included Modules

ActionWebService::SignatureTypes

Public Class methods

API methods have a name, which must be the Ruby method name to use when performing the invocation on the web service object.

The signatures for the method input parameters and return value can by specified in options.

A signature is an array of one or more parameter specifiers. A parameter specifier can be one of the following:

  • A symbol or string of representing one of the Action Web Service base types. See ActionWebService::SignatureTypes for a canonical list of the base types.
  • The Class object of the parameter type
  • A single-element Array containing one of the two preceding items. This will cause Action Web Service to treat the parameter at that position as an array containing only values of the given type.
  • A Hash containing as key the name of the parameter, and as value one of the three preceding items

If no method input parameter or method return value signatures are given, the method is assumed to take no parameters and/or return no values of interest, and any values that are received by the server will be discarded and ignored.

Valid options:

:expects
Signature for the method input parameters
:returns
Signature for the method return value
:expects_and_returns
Signature for both input parameters and return value

[Source]

    # File vendor/rails/actionwebservice/lib/action_web_service/api.rb, line 64
64:         def api_method(name, options={})
65:           unless options.is_a?(Hash)
66:             raise(ActionWebServiceError, "Expected a Hash for options")
67:           end
68:           validate_options([:expects, :returns, :expects_and_returns], options.keys)
69:           if options[:expects_and_returns]
70:             expects = options[:expects_and_returns]
71:             returns = options[:expects_and_returns]
72:           else
73:             expects = options[:expects]
74:             returns = options[:returns]
75:           end
76:           expects = canonical_signature(expects)
77:           returns = canonical_signature(returns)
78:           if expects
79:             expects.each do |type|
80:               type = type.element_type if type.is_a?(ArrayType)
81:               if type.type_class.ancestors.include?(ActiveRecord::Base) && !allow_active_record_expects
82:                 raise(ActionWebServiceError, "ActiveRecord model classes not allowed in :expects")
83:               end
84:             end
85:           end
86:           name = name.to_sym
87:           public_name = public_api_method_name(name)
88:           method = Method.new(name, public_name, expects, returns)
89:           write_inheritable_hash("api_methods", name => method)
90:           write_inheritable_hash("api_public_method_names", public_name => name)
91:         end

The Method instance for the given API method name, if any

[Source]

     # File vendor/rails/actionwebservice/lib/action_web_service/api.rb, line 130
130:         def api_method_instance(method_name)
131:           api_methods[method_name]
132:         end

The corresponding service method name for the given public method name

[Source]

     # File vendor/rails/actionwebservice/lib/action_web_service/api.rb, line 114
114:         def api_method_name(public_name)
115:           api_public_method_names[public_name]
116:         end

A Hash containing all service methods on this API, and their associated metadata.

[Source]

     # File vendor/rails/actionwebservice/lib/action_web_service/api.rb, line 120
120:         def api_methods
121:           read_inheritable_attribute("api_methods") || {}
122:         end

The Method instance for the default API method, if any

[Source]

     # File vendor/rails/actionwebservice/lib/action_web_service/api.rb, line 135
135:         def default_api_method_instance
136:           return nil unless name = default_api_method
137:           instance = read_inheritable_attribute("default_api_method_instance")
138:           if instance && instance.name == name
139:             return instance
140:           end
141:           instance = Method.new(name, public_api_method_name(name), nil, nil)
142:           write_inheritable_attribute("default_api_method_instance", instance)
143:           instance
144:         end

Whether the given method name is a service method on this API

[Source]

    # File vendor/rails/actionwebservice/lib/action_web_service/api.rb, line 94
94:         def has_api_method?(name)
95:           api_methods.has_key?(name)
96:         end

Whether the given public method name has a corresponding service method on this API

[Source]

     # File vendor/rails/actionwebservice/lib/action_web_service/api.rb, line 100
100:         def has_public_api_method?(public_name)
101:           api_public_method_names.has_key?(public_name)
102:         end

The Method instance for the given public API method name, if any

[Source]

     # File vendor/rails/actionwebservice/lib/action_web_service/api.rb, line 125
125:         def public_api_method_instance(public_method_name)
126:           api_method_instance(api_method_name(public_method_name))
127:         end

The corresponding public method name for the given service method name

[Source]

     # File vendor/rails/actionwebservice/lib/action_web_service/api.rb, line 105
105:         def public_api_method_name(name)
106:           if inflect_names
107:             name.to_s.camelize
108:           else
109:             name.to_s
110:           end
111:         end

[Validate]