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