Module: Origami::StandardObject::ClassMethods

Defined in:
lib/origami/object.rb

Overview

:nodoc:all

Instance Method Summary collapse

Instance Method Details

#define_field_methods(field) ⇒ Object



131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/origami/object.rb', line 131

def define_field_methods(field)

    #
    # Getter method.
    #
    getter = field.to_s
    remove_method(getter) rescue NameError
    define_method(getter) do
        obj = self[field]
        obj.is_a?(Reference) ? obj.solve : obj
    end

    #
    # Setter method.
    #
    setter = field.to_s + "="
    remove_method(setter) rescue NameError
    define_method(setter) do |value|
        self[field] = value
    end

    # Setter method returning self.
    setter_self = "set" + field.to_s
    remove_method(setter_self) rescue NameError
    define_method(setter_self) do |value|
        self[field] = value
        self
    end
end

#field(name, attributes) ⇒ Object



117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/origami/object.rb', line 117

def field(name, attributes)
    if attributes[:Required] == true and attributes.has_key?(:Default) and attributes[:Type] == Name
        self.add_type_info(self, name, attributes[:Default])
    end

    if @fields.has_key?(name)
        @fields[name].merge! attributes
    else
        @fields[name] = attributes
    end

    define_field_methods(name)
end

#fieldsObject



113
114
115
# File 'lib/origami/object.rb', line 113

def fields
    @fields
end

#hint_type(name) ⇒ Object



173
174
175
176
177
# File 'lib/origami/object.rb', line 173

def hint_type(name)
    if @fields.has_key?(name)
        @fields[name][:Type]
    end
end

#inherited(subclass) ⇒ Object



109
110
111
# File 'lib/origami/object.rb', line 109

def inherited(subclass)
    subclass.instance_variable_set(:@fields, Hash[@fields.map{|name, attributes| [name, attributes.clone]}])
end

#required_fieldsObject

Returns an array of required fields for the current Object.



164
165
166
167
168
169
170
171
# File 'lib/origami/object.rb', line 164

def required_fields
    fields = []
    @fields.each_pair do |name, attributes|
        fields << name if attributes[:Required] == true
    end

    fields
end