Module: E2Model::InstanceMethods

Defined in:
lib/engine2/core.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#skip_save_refreshObject

Returns the value of attribute skip_save_refresh.



162
163
164
# File 'lib/engine2/core.rb', line 162

def skip_save_refresh
  @skip_save_refresh
end

#validate_fieldsObject

Returns the value of attribute validate_fields.



162
163
164
# File 'lib/engine2/core.rb', line 162

def validate_fields
  @validate_fields
end

Instance Method Details

#_save_refreshObject



173
174
175
# File 'lib/engine2/core.rb', line 173

def _save_refresh
    super unless skip_save_refresh
end

#after_destroyObject



219
220
221
222
223
224
# File 'lib/engine2/core.rb', line 219

def after_destroy
    model.after_destroy_processors.each_pair do |name, proc|
        proc.(self, name, model.type_info.fetch(name))
    end if model.after_destroy_processors
    super
end

#after_saveObject



200
201
202
203
204
205
206
207
208
209
210
# File 'lib/engine2/core.rb', line 200

def after_save
    unless model.dummies.empty?
        @values.merge!(@dummy_fields)
        @dummy_fields = nil
    end
    model.after_save_processors.each_pair do |name, proc|
        proc.(self, name, model.type_info.fetch(name))
    end if model.after_save_processors

    super
end

#auto_validateObject



232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
# File 'lib/engine2/core.rb', line 232

def auto_validate
    type_info = model.type_info
    @validate_fields.each do |name| # || type_info.keys
        info = type_info[name]
        next if info[:primary_key] && !model.natural_key

        value = values[name].to_s
        value.strip! unless info[:dont_strip]
        if value.empty?
            if req = info[:required]
                errors.add(name, req[:message]) if !req[:if] || req[:if].(self)
            end
        else
            info[:validations].each_pair do |validation, args|
                validation_proc = Engine2::Validations[validation] || args[:lambda] # swap ?
                raise E2Error.new("Validation not found for field '#{name}' of type #{validation}") unless validation_proc
                if result = validation_proc.(self, name, info)
                    errors.add(name, result)
                    break
                end
            end
        end
    end

    # if errors.empty? && model.natural_key && new?
    #     unless model.dataset.where(model.primary_keys_hash(primary_key_values)).empty? # optimize the keys part
    #         model.primary_keys.each{|pk| errors.add(pk, "must be unique")}
    #     end
    # end
end

#before_destroyObject



212
213
214
215
216
217
# File 'lib/engine2/core.rb', line 212

def before_destroy
    model.before_destroy_processors.each_pair do |name, proc|
        proc.(self, name, model.type_info.fetch(name))
    end if model.before_destroy_processors
    super
end

#before_saveObject



180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
# File 'lib/engine2/core.rb', line 180

def before_save
    super
    model.before_save_processors.each_pair do |name, proc|
        proc.(self, name, model.type_info.fetch(name))
    end if model.before_save_processors

    unless model.dummies.empty?
        dummies = {}
        model.dummies.each do |d|
            dummies[d] = values.delete(d)
        end
        @dummy_fields = dummies
    end

    unless self.pk
        sequence = model.type_info[model.primary_key][:sequence]
        self[model.primary_key] = sequence.lit if sequence
    end
end

#has_primary_key?Boolean

Returns:

  • (Boolean)


164
165
166
167
# File 'lib/engine2/core.rb', line 164

def has_primary_key?
    pk = self.pk
    pk.is_a?(Array) ? !pk.all?{|k|k.nil?} : !pk.nil?
end

#primary_key_valuesObject



169
170
171
# File 'lib/engine2/core.rb', line 169

def primary_key_values
    model.primary_keys.map{|k|@values[k]}
end

#validateObject



226
227
228
229
230
# File 'lib/engine2/core.rb', line 226

def validate
    super
    auto_validate
    validation
end

#validationObject



177
178
# File 'lib/engine2/core.rb', line 177

def validation
end