Class: WiseGopher::Column

Inherits:
Object
  • Object
show all
Defined in:
lib/wise_gopher/column.rb

Overview

Cast query columns and transform value

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, type_symbol, transform: nil, as: nil) ⇒ Column

Returns a new instance of Column.



8
9
10
11
12
13
# 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_symbol = type_symbol
  @transform = transform&.to_proc
end

Instance Attribute Details

#aliasObject (readonly)

Returns the value of attribute alias.



6
7
8
# File 'lib/wise_gopher/column.rb', line 6

def alias
  @alias
end

#nameObject (readonly)

Returns the value of attribute name.



6
7
8
# File 'lib/wise_gopher/column.rb', line 6

def name
  @name
end

Instance Method Details

#cast(value) ⇒ Object



15
16
17
18
19
# 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) ⇒ Object



25
26
27
28
29
30
31
# File 'lib/wise_gopher/column.rb', line 25

def define_getter(row_class)
  column = self

  row_class.define_method(@alias) do
    instance_variable_get(column.instance_variable_name)
  end
end

#instance_variable_nameObject



33
34
35
# File 'lib/wise_gopher/column.rb', line 33

def instance_variable_name
  @instance_variable_name ||= "@#{@alias.tr("?!", "")}"
end

#typeObject



21
22
23
# File 'lib/wise_gopher/column.rb', line 21

def type
  @type ||= ActiveRecord::Type.lookup type_symbol
end