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