Class ActionWebService::Struct
In: actionwebservice/lib/action_web_service/struct.rb
Parent: Object

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
  end
  person = Person.new(:id => 5, :firstname => 'john', :lastname => 'doe')

Active Record model classes are already implicitly supported in method signatures.

Methods

[]   each_pair   member   new  

Public Class methods

Creates a structure member with the specified name and type. Generates accessor methods for reading and writing the member value.

[Source]

# File actionwebservice/lib/action_web_service/struct.rb, line 45
      def member(name, type)
        name = name.to_sym
        type = ActionWebService::SignatureTypes.canonical_signature_entry({ name => type }, 0)
        write_inheritable_hash("struct_members", name => type)
        class_eval "def \#{name}; @\#{name}; end\ndef \#{name}=(value); @\#{name} = value; end\n"
      end

If a Hash is given as argument to an ActionWebService::Struct constructor, it can contain initial values for the structure member.

[Source]

# File actionwebservice/lib/action_web_service/struct.rb, line 24
    def initialize(values={})
      if values.is_a?(Hash)
        values.map{|k,v| __send__('%s=' % k.to_s, v)}
      end
    end

Public Instance methods

The member with the given name

[Source]

# File actionwebservice/lib/action_web_service/struct.rb, line 31
    def [](name)
      send(name.to_s)
    end

Iterates through each member

[Source]

# File actionwebservice/lib/action_web_service/struct.rb, line 36
    def each_pair(&block)
      self.class.members.each do |name, type|
        yield name, self.__send__(name)
      end
    end

[Validate]