class WiseGopher::Column

Cast query columns and transform value

Attributes

alias[R]
name[R]
type[R]

Public Class Methods

new(name, type_symbol, transform: nil, as: nil) click to toggle source
# File lib/wise_gopher/column.rb, line 8
def initialize(name, type_symbol, transform: nil, as: nil)
  @alias     = as&.to_s.freeze || name.to_s.freeze
  @name      = name.to_s.freeze
  @type      = ActiveRecord::Type.lookup type_symbol
  @transform = transform&.to_proc
end

Public Instance Methods

cast(value) click to toggle source
# File lib/wise_gopher/column.rb, line 15
def cast(value)
  casted_value = @type.deserialize(value)

  @transform ? transform_value(casted_value) : casted_value
end
define_getter(row_class) click to toggle source
# File lib/wise_gopher/column.rb, line 21
def define_getter(row_class)
  column = self

  row_class.define_method(@alias) do
    instance_variable_get(column.instance_variable_name)
  end
end
instance_variable_name() click to toggle source
# File lib/wise_gopher/column.rb, line 29
def instance_variable_name
  @instance_variable_name ||= "@#{@alias.tr("?!", "")}"
end

Private Instance Methods

transform_value(value) click to toggle source
# File lib/wise_gopher/column.rb, line 35
def transform_value(value)
  case @transform.arity
  when 0 then value.instance_exec(&@transform)
  else
    value.instance_eval(&@transform)
  end
end