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.
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:
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:
# 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 corresponding service method name for the given public method name
# 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.
# 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
# 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
# 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
# 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