static public Method

Base.api_method(name, options={})

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

# File action_web_service/api.rb, line 68
def api_method(name, options={})
  unless options.is_a?(Hash)
    raise(ActionWebServiceError, "Expected a Hash for options")
  end
  validate_options([:expects, :returns, :expects_and_returns], options.keys)
  if options[:expects_and_returns]
    expects = options[:expects_and_returns]
    returns = options[:expects_and_returns]
  else
    expects = options[:expects]
    returns = options[:returns]
  end
  expects = canonical_signature(expects)
  returns = canonical_signature(returns)
  if expects
    expects.each do |type|
      type = type.element_type if type.is_a?(ArrayType)
      if type.type_class.ancestors.include?(ActiveRecord::Base) && !allow_active_record_expects
        raise(ActionWebServiceError, "ActiveRecord model classes not allowed in :expects")
      end
    end
  end
  name = name.to_sym
  public_name = public_api_method_name(name)
  method = Method.new(name, public_name, expects, returns)
  write_inheritable_hash("api_methods", name => method)
  write_inheritable_hash("api_public_method_names", public_name => name)
end
Comments

Have your say
Please use Textile formatting (click here for a cheat sheet). Use <code/> and <pre/> for code samples.
Click here to login with OpenID to to post comments.