class Extant::Attribute

Attributes

coercer_class[RW]
definition[RW]
has_been_coereced[RW]
is_unset[RW]
name[RW]
pre_coerce_value[RW]
value[R]
value_has_changed[RW]

Public Class Methods

new(name, value, definition) click to toggle source
# File lib/extant/attribute.rb, line 5
def initialize(name, value, definition)
  self.name = name
  self.has_been_coereced = false
  self.definition = definition

  if UnsetValue == value
    @value = nil
    self.is_unset = true
  else
    set_value(value)
  end
end

Public Instance Methods

coerced?() click to toggle source
# File lib/extant/attribute.rb, line 23
def coerced?
  !!has_been_coereced
end
coercer_name() click to toggle source
# File lib/extant/attribute.rb, line 39
def coercer_name
  coercer_class.try(:coercer_name)
end
has_changed?() click to toggle source
# File lib/extant/attribute.rb, line 27
def has_changed?
  !!value_has_changed
end
inspect() click to toggle source
# File lib/extant/attribute.rb, line 43
def inspect
  "<Extant::Attribute:#{self.object_id} Name: :#{name} Value: #{value.inspect}>"
end
set?() click to toggle source
# File lib/extant/attribute.rb, line 35
def set?
  !is_unset
end
unset?() click to toggle source
# File lib/extant/attribute.rb, line 31
def unset?
  !set?
end
value=(val) click to toggle source
# File lib/extant/attribute.rb, line 18
def value=(val)
  set_value(val)
  self.value_has_changed = true
end

Private Instance Methods

set_value(val) click to toggle source
# File lib/extant/attribute.rb, line 53
def set_value(val)
  self.pre_coerce_value = val

  @value = if coercer_class
    coercer = coercer_class.new(val)
    coercer.coerce.tap { self.has_been_coereced = coercer.coerced? }
  else
    self.has_been_coereced = true
    val
  end

  if UncoercedValue == @value
    @value = nil

    if definition.allow_nil && pre_coerce_value == nil
      self.has_been_coereced = true
    end
  end

  self.is_unset = false
end