Class: ActionWebService::Struct
- Inherits:
-
Object
- Object
- ActionWebService::Struct
- Defined in:
- lib/action_web_service/struct.rb
Overview
To send structured types across the wire, derive from ActionWebService::Struct, and use member
to declare structure members.
ActionWebService::Struct should be used in method signatures when you want to accept or return structured types that have no Active Record model class representations, or you don’t want to expose your entire Active Record model to remote callers.
Example
class Person < ActionWebService::Struct
member :id, :int
member :firstnames, [:string]
member :lastname, :string
member :email, :string, :nillable => true
end
person = Person.new(:id => 5, :firstname => 'john', :lastname => 'doe')
Active Record model classes are already implicitly supported in method signatures.
Class Method Summary collapse
-
.member(name, type, options = {}) ⇒ Object
Creates a structure member with the specified
name
andtype
. -
.member_type(name) ⇒ Object
:nodoc:.
-
.members ⇒ Object
:nodoc:.
Instance Method Summary collapse
-
#[](name) ⇒ Object
The member with the given name.
-
#each_pair(&block) ⇒ Object
Iterates through each member.
-
#initialize(values = {}, check_hash = false) ⇒ Struct
constructor
If a Hash is given as argument to an ActionWebService::Struct constructor, it can contain initial values for the structure member.
Constructor Details
#initialize(values = {}, check_hash = false) ⇒ Struct
If a Hash is given as argument to an ActionWebService::Struct constructor, it can contain initial values for the structure member. Values passed within the Hash that do not reflect member within the Struct will raise a NoMethodError unless the optional check_hash boolean is true.
27 28 29 30 31 |
# File 'lib/action_web_service/struct.rb', line 27 def initialize(values={}, check_hash = false) if values.is_a?(Hash) values.map { |k,v| __send__("#{k}=", v) unless (check_hash && !self.respond_to?("#{k}=") ) } end end |
Class Method Details
.member(name, type, options = {}) ⇒ Object
Creates a structure member with the specified name
and type
. Additional wsdl schema properties may be specified in the optional hash options
. Generates accessor methods for reading and writing the member value.
52 53 54 55 56 57 58 59 60 |
# File 'lib/action_web_service/struct.rb', line 52 def member(name, type, ={}) name = name.to_sym type = ActionWebService::SignatureTypes.canonical_signature_entry({ name => type }, 0) self.struct_members = self.struct_members.merge({ name => [type, ] }) class_eval <<-END def #{name}; @#{name}; end def #{name}=(value); @#{name} = value; end END end |
.member_type(name) ⇒ Object
:nodoc:
66 67 68 69 |
# File 'lib/action_web_service/struct.rb', line 66 def member_type(name) # :nodoc: type, = members[name.to_sym] type end |
.members ⇒ Object
:nodoc:
62 63 64 |
# File 'lib/action_web_service/struct.rb', line 62 def members # :nodoc: self.struct_members end |
Instance Method Details
#[](name) ⇒ Object
The member with the given name
34 35 36 |
# File 'lib/action_web_service/struct.rb', line 34 def [](name) send(name.to_s) end |
#each_pair(&block) ⇒ Object
Iterates through each member
39 40 41 42 43 |
# File 'lib/action_web_service/struct.rb', line 39 def each_pair(&block) self.class.members.each do |name, type| yield name, self.__send__(name) end end |