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.



154
155
156
# File 'lib/engine2/core.rb', line 154

def skip_save_refresh
  @skip_save_refresh
end

#validate_fieldsObject

Returns the value of attribute validate_fields.



154
155
156
# File 'lib/engine2/core.rb', line 154

def validate_fields
  @validate_fields
end

Instance Method Details

#_save_refreshObject



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

def _save_refresh
    super unless skip_save_refresh
end

#after_destroyObject



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

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



192
193
194
195
196
197
198
199
200
201
202
# File 'lib/engine2/core.rb', line 192

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



224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
# File 'lib/engine2/core.rb', line 224

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 "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



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

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



172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
# File 'lib/engine2/core.rb', line 172

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)


156
157
158
159
# File 'lib/engine2/core.rb', line 156

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

#primary_key_valuesObject



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

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

#validateObject



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

def validate
    super
    auto_validate
    validation
end

#validationObject



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

def validation
end