class Structural::Model::Field

Attributes

model[R]
name[R]
options[R]

Public Class Methods

new(model, name, options) click to toggle source
# File lib/structural/model/field.rb, line 4
def initialize(model, name, options)
  @model = model
  @name = name
  @options = options
end

Public Instance Methods

cast(value) click to toggle source
# File lib/structural/model/field.rb, line 28
def cast(value)
  TypeCasts.cast(options.fetch(:type, value.class), value)
end
default() click to toggle source
# File lib/structural/model/field.rb, line 54
def default
  options.fetch(:default)
end
default?() click to toggle source
# File lib/structural/model/field.rb, line 50
def default?
  options.has_key?(:default)
end
default_value() click to toggle source
# File lib/structural/model/field.rb, line 40
def default_value
  @default_value ||= proc do
    if default?
      default
    else
      raise MissingAttributeError, key
    end
  end
end
define() click to toggle source
# File lib/structural/model/field.rb, line 10
def define
  Definer.method_memoize(model, name, ivar_name) { |data| value_of(data) }
  Definer.method(model, "#{name}?") { |obj| presence_of(obj.data) }
  hook_define
end
hook_define() click to toggle source
# File lib/structural/model/field.rb, line 16
def hook_define
end
ivar_name() click to toggle source
# File lib/structural/model/field.rb, line 36
def ivar_name
  @ivar_name ||= "@#{@name}"
end
key() click to toggle source
# File lib/structural/model/field.rb, line 32
def key
  options.fetch(:key, name).to_sym
end
presence_of(data) click to toggle source
# File lib/structural/model/field.rb, line 24
def presence_of(data)
  data.has_key?(key) && !data.fetch(key).nil?
end
value_of(data) click to toggle source
# File lib/structural/model/field.rb, line 19
def value_of(data)
  value = data.fetch(key, &default_value)
  cast(value)
end