class Querier

Constants

PARAM_NAME_INDEX
PARAM_VALUE_INDEX

Attributes

active_record_class[RW]
query[R]
query_execution_count[R]
query_params[R]
query_template[R]

Public Class Methods

new(template_query_params = {}) click to toggle source
# File lib/querier.rb, line 16
def initialize(template_query_params = {})
  @active_record_class = self.class.active_record_class || self.class.superclass.active_record_class
  @query_params = template_query_params
  @query = fill_query_params
end

Public Instance Methods

cached_result(format: :hash) click to toggle source
# File lib/querier_bkp.rb, line 28
def cached_result(format: :hash)
  raise 'query not executed yet' if @query_execution_count.eql?(0)

  case format
  when :hash
    @execution_cached_result
  when :open_struct
    hash_to_open_struct(dataset: @execution_cached_result)
  else
    raise 'invalid value type'
  end
end
exec_query() click to toggle source
# File lib/querier.rb, line 26
def exec_query
  decorate_dataset_format(@active_record_class.connection.exec_query(@query))
end
execute() click to toggle source
# File lib/querier.rb, line 22
def execute
  @active_record_class.connection.execute(@query)
end
field_group_and_count(field_name:, sort_element_index: nil, reverse_sort: true) click to toggle source
# File lib/querier_bkp.rb, line 54
def field_group_and_count(field_name:, sort_element_index: nil, reverse_sort: true)
  count_result = cached_result(format: :open_struct).group_by(&field_name).map { |k, v| [k, v.count] }

  unless sort_element_index.nil?
    count_result = count_result.sort_by { |el| el[sort_element_index] }
    count_result.reverse! if reverse_sort.eql? true
  end

  count_result
end
select_all() click to toggle source
# File lib/querier.rb, line 30
def select_all
  decorate_dataset_format(@active_record_class.connection.select_all(@query))
end
select_one() click to toggle source
# File lib/querier.rb, line 34
def select_one
  @active_record_class.connection.select_one(@query)
end
select_rows() click to toggle source
# File lib/querier.rb, line 42
def select_rows
  @active_record_class.connection.select_rows(@query)
end
select_value() click to toggle source
# File lib/querier.rb, line 46
def select_value
  @active_record_class.connection.select_value(@query)
end
select_values() click to toggle source
# File lib/querier.rb, line 38
def select_values
  @active_record_class.connection.select_values(@query)
end
structured_results() click to toggle source
# File lib/querier_bkp.rb, line 41
def structured_results
  hash_to_open_struct(dataset: execute)
end
to_file() click to toggle source
# File lib/querier_bkp.rb, line 49
def to_file
  file_name = "querier #{Time.now.strftime '[%d-%m-%Y]-[%Hh %Mm %Ss]'}.sql"
  File.write "tmp/#{file_name}", to_sql
end
to_sql() click to toggle source
# File lib/querier_bkp.rb, line 45
def to_sql
  fill_query_params(query_template: @query_template, query_params: @query_params)
end

Private Instance Methods

decorate_dataset_format(dataset) click to toggle source
# File lib/querier.rb, line 52
def decorate_dataset_format(dataset)
  def dataset.as_hash
    map(&:symbolize_keys)
  end

  def dataset.as_struct
    map { |record| OpenStruct.new(record) }
  end

  dataset
end
fill_query_params() click to toggle source
# File lib/querier.rb, line 72
def fill_query_params
  query = @query_template.dup

  @query_params.each_pair do |query_param|
    query_param_name = query_param[PARAM_NAME_INDEX].to_s

    query.gsub!(/\${#{query_param_name}}/,
                get_param_value(raw_query_param: query_param[PARAM_VALUE_INDEX], 
                                quotefy_param: true))

    query.gsub!(/\${#{query_param_name}\/no_quote}/,
                get_param_value(raw_query_param: query_param[PARAM_VALUE_INDEX],
                                quotefy_param: false))
  end

  query
end
get_param_value(raw_query_param:, quotefy_param: true) click to toggle source
# File lib/querier.rb, line 64
def get_param_value(raw_query_param:, quotefy_param: true)
  if raw_query_param.instance_of?(String) && quotefy_param
    @active_record_class.connection.quote(raw_query_param.to_s)
  else
    raw_query_param.to_s
  end
end
hash_to_open_struct(dataset:) click to toggle source
# File lib/querier_bkp.rb, line 67
def hash_to_open_struct(dataset:)
  dataset.map { |record| OpenStruct.new(record.symbolize_keys!) }
end