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