class MR::ReadModel::Field

Attributes

ivar_name[R]
method_name[R]
name[R]
type[R]
value[R]

Public Class Methods

new(name, type) click to toggle source
# File lib/mr/read_model/fields.rb, line 124
def initialize(name, type)
  @name = name.to_s
  @type = type.to_sym
  unless MR::TypeConverter.valid?(@type)
    raise InvalidFieldTypeError, "`#{@type}` is not a valid field type"
  end

  @method_name    = @name
  @ivar_name      = "@#{@name}"
  @attribute_name = @name
  @converter      = nil
end

Public Instance Methods

define_on(model_class) click to toggle source
# File lib/mr/read_model/fields.rb, line 142
def define_on(model_class)
  field = self
  model_class.class_eval do

    define_method(field.method_name) do
      instance_variable_get(field.ivar_name) ||
      instance_variable_set(field.ivar_name, field.read(self.read_model_data))
    end

  end
end
read(data) click to toggle source
# File lib/mr/read_model/fields.rb, line 137
def read(data)
  @converter ||= MR::TypeConverter.new(determine_ar_column_class(data))
  @converter.send(@type, data[@attribute_name])
end

Private Instance Methods

determine_ar_column_class(data) click to toggle source
# File lib/mr/read_model/fields.rb, line 156
def determine_ar_column_class(data)
  data.class.columns.first.class if data.class.respond_to?(:columns)
end