module E2Model::InstanceMethods

Attributes

skip_save_refresh[RW]
validate_fields[RW]

Public Instance Methods

_save_refresh() click to toggle source
Calls superclass method
# File lib/engine2/core.rb, line 229
def _save_refresh
    super unless skip_save_refresh
end
after_destroy() click to toggle source
Calls superclass method
# File lib/engine2/core.rb, line 275
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_save() click to toggle source
Calls superclass method
# File lib/engine2/core.rb, line 256
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_validate() click to toggle source
# File lib/engine2/core.rb, line 288
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 value.frozen? || 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_destroy() click to toggle source
Calls superclass method
# File lib/engine2/core.rb, line 268
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_save() click to toggle source
Calls superclass method
# File lib/engine2/core.rb, line 236
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?() click to toggle source
# File lib/engine2/core.rb, line 220
def has_primary_key?
    pk = self.pk
    pk.is_a?(Array) ? !pk.all?{|k|k.nil?} : !pk.nil?
end
key?(key) click to toggle source
# File lib/engine2/core.rb, line 216
def key? key
    @values.key? key
end
primary_key_values() click to toggle source
# File lib/engine2/core.rb, line 225
def primary_key_values
    model.primary_keys.map{|k|@values[k]}
end
validate() click to toggle source
Calls superclass method
# File lib/engine2/core.rb, line 282
def validate
    super
    auto_validate
    validation
end
validation() click to toggle source
# File lib/engine2/core.rb, line 233
def validation
end