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.



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

def skip_save_refresh
  @skip_save_refresh
end

#validate_fieldsObject

Returns the value of attribute validate_fields.



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

def validate_fields
  @validate_fields
end

Instance Method Details

#_save_refreshObject



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

def _save_refresh
    super unless skip_save_refresh
end

#after_destroyObject



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

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



246
247
248
249
250
251
252
253
254
255
256
# File 'lib/engine2/core.rb', line 246

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



278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
# File 'lib/engine2/core.rb', line 278

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



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

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



226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
# File 'lib/engine2/core.rb', line 226

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



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

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

#key?(key) ⇒ Boolean



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

def key? key
    @values.key? key
end

#primary_key_valuesObject



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

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

#validateObject



272
273
274
275
276
# File 'lib/engine2/core.rb', line 272

def validate
    super
    auto_validate
    validation
end

#validationObject



223
224
# File 'lib/engine2/core.rb', line 223

def validation
end