class ActiveRecordUniquenessViaDb::Builder

Attributes

always_block[RW]
attr_name[RW]
attrs_to_rescue[RW]
block[RW]
error_options[RW]
record[RW]

Public Class Methods

call(record, attr_name, always_block, error_options, &block) click to toggle source
# File lib/active_record_uniqueness_via_db/builder.rb, line 21
def self.call(record, attr_name, always_block, error_options, &block)
  new(record, attr_name, always_block, error_options, &block).call
end
new(record, attr_name, always_block, error_options, &block) click to toggle source
# File lib/active_record_uniqueness_via_db/builder.rb, line 5
def initialize(record, attr_name, always_block, error_options, &block)
  @record          = record
  @block           = block
  @attr_name       = attr_name
  @always_block    = always_block
  @error_options   = error_options
  @attrs_to_rescue = record.
    instance_variable_get("@#{ActiveRecordUniquenessViaDb::ATTRS_IVAR}") || {}
  @attrs_to_rescue.delete(attr_name)
end

Public Instance Methods

call() click to toggle source
# File lib/active_record_uniqueness_via_db/builder.rb, line 16
def call
  via_db? ? @attrs_to_rescue[attr_name] = error_options : block.call
  specify_attributes_to_rescue_db_error
end

Private Instance Methods

specify_attributes_to_rescue_db_error() click to toggle source
# File lib/active_record_uniqueness_via_db/builder.rb, line 27
def specify_attributes_to_rescue_db_error
  record.instance_variable_set(
    "@#{ActiveRecordUniquenessViaDb::ATTRS_IVAR}",
    attrs_to_rescue
  )
end
via_db?() click to toggle source
# File lib/active_record_uniqueness_via_db/builder.rb, line 34
def via_db?
  record.changed? && !always_block
end