class Terrazine::TypeMap
PG type map updater
Public Class Methods
assign_elements_type(types, parent)
click to toggle source
# File lib/terrazine/type_map.rb, line 30 def assign_elements_type(types, parent) parent.elements_type = if types.count == 1 select_text_decoder(types.shift).new else type = types.shift assign_elements_type(types, select_text_decoder(type)) end parent end
fetch_text_decoder(type)
click to toggle source
# File lib/terrazine/type_map.rb, line 19 def fetch_text_decoder(type) # decoder inside decoder # as example array of arrays with integers - type == [:array, :array, :integer] if type.is_a?(Array) decoder = new_text_decoder type.shift assign_elements_type type, decoder else new_text_decoder type end end
new_text_decoder(type)
click to toggle source
# File lib/terrazine/type_map.rb, line 40 def new_text_decoder(type) select_text_decoder(type).new end
select_text_decoder(type)
click to toggle source
# File lib/terrazine/type_map.rb, line 44 def select_text_decoder(type) decoder = { array: PG::TextDecoder::Array, float: PG::TextDecoder::Float, boolaen: PG::TextDecoder::Boolean, integer: PG::TextDecoder::Integer, date: PG::TextDecoder::TimestampWithoutTimeZone, hstore: Hstore, json: PG::TextDecoder::JSON }[type] raise "Undefined decoder #{type}" unless decoder decoder end
update(pg_result, types)
click to toggle source
# File lib/terrazine/type_map.rb, line 8 def update(pg_result, types) # TODO! why it sometimes column_map? t_m = pg_result.type_map columns_map = t_m.is_a?(PG::TypeMapByColumn) ? t_m : t_m.build_column_map(pg_result) coders = columns_map.coders.dup types.each do |name, type| coders[pg_result.fnumber(name.to_s)] = fetch_text_decoder type end pg_result.type_map = PG::TypeMapByColumn.new coders end