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