class Seedog::DSL::Record
Public Class Methods
new(evaluator, model, upsert_attributes)
click to toggle source
# File lib/seedog/dsl/record.rb, line 4 def initialize(evaluator, model, upsert_attributes) @evaluator = evaluator @model = model @upsert_attributes = upsert_attributes @attrs = {}.with_indifferent_access end
Public Instance Methods
call(&block)
click to toggle source
# File lib/seedog/dsl/record.rb, line 15 def call(&block) instance_exec(&block) if block before_attrs = instance.attributes.with_indifferent_access.slice(*@attrs.keys) if instance.new_record? puts "\33[32mCreate #{@model.model_class.name.underscore} #{@upsert_attributes.merge(@attrs)}\33[0m" @evaluator.changed = true elsif before_attrs != @attrs puts "Update #{@model.model_class.name.underscore} #{@upsert_attributes.merge(before_attrs)} to #{@upsert_attributes.merge(@attrs)}" @evaluator.changed = true end if !@evaluator.dry_run && @evaluator.changed instance.assign_attributes(@attrs) instance.save!(validate: @evaluator.config.validate) end end
method_missing(method, arg)
click to toggle source
# File lib/seedog/dsl/record.rb, line 11 def method_missing(method, arg) @attrs[method] = arg end
Private Instance Methods
instance()
click to toggle source
# File lib/seedog/dsl/record.rb, line 36 def instance @instance ||= @model.model_class.find_or_initialize_by(@upsert_attributes) end