class Sphene::Attribute

Attributes

default[R]
model[R]
name[R]
type[R]

Public Class Methods

new(name, model, type: Types::Default, default: nil) click to toggle source
# File lib/sphene/attribute.rb, line 7
def initialize(name, model, type: Types::Default, default: nil)
  @name = name
  @model = model
  @type = type
  @default = default
end

Public Instance Methods

value() click to toggle source
# File lib/sphene/attribute.rb, line 14
def value
  return default_value unless ivar_defined?(:@value_before_cast)
  return @value if ivar_defined?(:@value)
  @value = type.cast(@value_before_cast)
end
value=(value) click to toggle source
# File lib/sphene/attribute.rb, line 20
def value=(value)
  remove_ivar(:@value) if ivar_defined?(:@value)
  @value_before_cast = value
end

Private Instance Methods

default_value() click to toggle source
# File lib/sphene/attribute.rb, line 27
def default_value
  return default unless default.respond_to?(:call)
  model.instance_exec(&default)
end
ivar_defined?(name) click to toggle source
# File lib/sphene/attribute.rb, line 32
def ivar_defined?(name)
  instance_variable_defined?(name)
end
remove_ivar(name) click to toggle source
# File lib/sphene/attribute.rb, line 36
def remove_ivar(name)
  remove_instance_variable(name)
end