Method: Ink::Model#initialize

Defined in:
lib/webink/model.rb

#initialize(data) ⇒ Model

Constructor

Keys from the data parameter will be converted into instance variables with getters and setters in place. The data parameter can be an Array of length of the defined fields or without the primary key. The order needs to be the same as the defined fields. The primary key has no setter, but adds a getter called pk for convenience.

param data:

Hash of String => Objects or Array of Objects



137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
# File 'lib/webink/model.rb', line 137

def initialize(data)
  if self.class.respond_to? :fields
    i = 0
    self.class.fields.each do |k,v|
      if data.is_a? Array
        if data.length < self.class.fields.length - 1 or
            data.length > self.class.fields.length
          raise LoadError.new(<<ERR)
Model cannot be loaded, wrong number or arguments #{data.length} expected
#{self.class.fields.length} or #{self.class.fields.length - 1}
ERR
        end
        if self.class.primary_key != k or
            data.length == self.class.fields.length
          init_field k, data[i]
          i += 1
        else
          init_field self.class.primary_key, nil
        end
      else
        if not data.key?(k.to_s) and self.class.primary_key != k
          raise LoadError.new(<<ERR)
Model cannot be loaded, argument missing: #{k}
ERR
        end
        init_field k, data[k.to_s]
      end
    end
    if self.class.respond_to? :foreign
      self.class.foreign.each do |k,v|
        init_foreign k
      end
    end
  else
    data.each do |k,v|
      init_no_fields k, v
    end
  end
end