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.



200
201
202
# File 'lib/engine2/core.rb', line 200

def skip_save_refresh
  @skip_save_refresh
end

#validate_fieldsObject

Returns the value of attribute validate_fields.



200
201
202
# File 'lib/engine2/core.rb', line 200

def validate_fields
  @validate_fields
end

Instance Method Details

#_save_refreshObject



211
212
213
# File 'lib/engine2/core.rb', line 211

def _save_refresh
    super unless skip_save_refresh
end

#after_destroyObject



257
258
259
260
261
262
# File 'lib/engine2/core.rb', line 257

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



238
239
240
241
242
243
244
245
246
247
248
# File 'lib/engine2/core.rb', line 238

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



270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
# File 'lib/engine2/core.rb', line 270

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



250
251
252
253
254
255
# File 'lib/engine2/core.rb', line 250

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



218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
# File 'lib/engine2/core.rb', line 218

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)


202
203
204
205
# File 'lib/engine2/core.rb', line 202

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

#primary_key_valuesObject



207
208
209
# File 'lib/engine2/core.rb', line 207

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

#validateObject



264
265
266
267
268
# File 'lib/engine2/core.rb', line 264

def validate
    super
    auto_validate
    validation
end

#validationObject



215
216
# File 'lib/engine2/core.rb', line 215

def validation
end