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