querier 0.0.10 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -14
  3. data/lib/querier.rb +43 -35
  4. metadata +4 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f15f96f79aea614fe9eec3fa44a8ed7c6f51009c4bdb6ee18316aef6577b41f9
4
- data.tar.gz: e4d5d7abe1357c899a4f6e45fa407a3fedc831779aa5af1b999dd51917986cb0
3
+ metadata.gz: 0ec1f9125483e0166d0996f231ff42f06a9ac5e7cc2da9b2e0d31ea9c62947f4
4
+ data.tar.gz: 8866efc382250a6d3e3a3a6e76cf164f31786c8c2dc42a838afe89339e8025fc
5
5
  SHA512:
6
- metadata.gz: 0baf3ced087fa4a9a5c1525fa0b8ae4076290a8d8af8d9be5257d83c610becf469fba2624e73ea3689d78a20cf28df811830c67bfba89198b8e148c421e4e33c
7
- data.tar.gz: eeae2b170e2268b7569f8aaa531de5e7a49a702ad99746c32c8269c2cc0679ecd4e5d054c9a189e00ab1270faa1d3762c76efcc761c1a5c0510d8a0ecd41acbe
6
+ metadata.gz: 2e84803fd02bc35e4f94f7ffadaeadf89fdf6235bb0f4c4cb6c6c3b6f857dc391bc1bef6b316cd1f37e1a854c6021cc83d82670130d0a6c9fa43ea75865b8ba6
7
+ data.tar.gz: a1b0d4fa64e0d1d14c01fdf297b5868bd5e50eb4bf104f6cd63c54711f10ec7279f59c49ec2f2df7fe9a4fcf12c193b711fac0e86028db1faf29a5865f715ccd
data/README.md CHANGED
@@ -1,22 +1,11 @@
1
1
  # querier
2
2
 
3
3
  # class UserQuerier < Querier
4
- QUERY_TEMPLATE = <<-END_OF_QUERY_TEMPLATE
5
-
6
- SELECT
7
- *
8
- FROM
9
- users
10
- WHERE
11
- name = {?user_name}
12
- AND active = {?active}
13
-
14
- END_OF_QUERY_TEMPLATE
15
-
4
+ @active_record_class = ApplicationRecord
16
5
  def initialize user_name:, active:
17
- @query_template = QUERY_TEMPLATE
6
+ @query_template = "SELECT * FROM users WHERE name = ${user_name} AND active = ${active}"
18
7
  super
19
8
  end
20
9
  end
21
10
 
22
- # UserQuerier.new(user_name: 'foo', active: true).execute
11
+ # UserQuerier.new(user_name: 'foo', active: true).execute
data/lib/querier.rb CHANGED
@@ -2,71 +2,79 @@ class Querier
2
2
  PARAM_NAME_INDEX = 0
3
3
  PARAM_VALUE_INDEX = 1
4
4
 
5
+ @active_record_class = ActiveRecord::Base
6
+ # based on rubocop's tips at: https://www.rubydoc.info/gems/rubocop/RuboCop/Cop/Style/ClassVars
7
+ # solution here: https://www.ruby-lang.org/en/documentation/faq/8/
8
+ class << self
9
+ attr_accessor :active_record_class
10
+ end
11
+
5
12
  attr_reader :query_execution_count, :query_template, :query_params
6
-
7
- def initialize **template_query_params
13
+
14
+ def initialize(template_query_params)
15
+ @active_record_class = self.class.active_record_class || self.class.superclass.active_record_class
8
16
  @query_execution_count = 0
9
17
  @query_params = template_query_params.dup
10
18
  end
11
19
 
12
20
  def execute
13
21
  @query_execution_count += 1
14
- @execution_cached_result = ActiveRecord::Base.connection.select_all(fill_query_params(query_template: @query_template, query_params: @query_params))
15
- @execution_cached_result = execution_cached_result.map! { |record| record.symbolize_keys! }
16
- end
22
+ @execution_cached_result = @active_record_class.connection.select_all(fill_query_params(query_template: @query_template,
23
+ query_params: @query_params)).map(&:symbolize_keys!)
24
+ end
17
25
 
18
- def cached_result format: :hash
26
+ def cached_result(format: :hash)
19
27
  raise 'query not executed yet' if @query_execution_count.eql?(0)
20
-
21
- case format.to_s
22
- when 'hash'
23
- @execution_cached_result
24
- when 'open_struct'
25
- hash_to_open_struct(dataset: @execution_cached_result)
26
- else
27
- raise 'invalid value type'
28
+
29
+ case format
30
+ when :hash
31
+ @execution_cached_result
32
+ when :open_struct
33
+ hash_to_open_struct(dataset: @execution_cached_result)
34
+ else
35
+ raise 'invalid value type'
28
36
  end
29
37
  end
30
-
38
+
31
39
  def structured_results
32
- hash_to_open_struct dataset: self.execute
33
- end
40
+ hash_to_open_struct(dataset: execute)
41
+ end
34
42
 
35
43
  def to_sql
36
44
  fill_query_params(query_template: @query_template, query_params: @query_params)
37
45
  end
38
46
 
39
47
  def to_file
40
- file_name = "querier #{Time.now.strftime "[%d-%m-%Y]-[%Hh %Mm %Ss]"}.sql"
41
- File.open("tmp/#{file_name}", 'w') {|f| f << self.to_sql}
48
+ file_name = "querier #{Time.now.strftime '[%d-%m-%Y]-[%Hh %Mm %Ss]'}.sql"
49
+ File.write "tmp/#{file_name}", to_sql
42
50
  end
43
51
 
44
- def field_group_and_count field_name:, sort_element_index: nil, reverse_sort: true
45
- count_result = self.cached_results(format: :open_struct).group_by(&field_name).map {|k, v| [k, v.count]}
46
-
52
+ def field_group_and_count(field_name:, sort_element_index: nil, reverse_sort: true)
53
+ count_result = cached_result(format: :open_struct).group_by(&field_name).map { |k, v| [k, v.count] }
54
+
47
55
  unless sort_element_index.nil?
48
- count_result = count_result.sort_by {|el| el[sort_element_index]}
56
+ count_result = count_result.sort_by { |el| el[sort_element_index] }
49
57
  count_result.reverse! if reverse_sort.eql? true
50
58
  end
51
-
59
+
52
60
  count_result
53
- end
61
+ end
54
62
 
55
63
  private
56
64
 
57
- def hash_to_open_struct dataset:
58
- dataset.map {|record| OpenStruct.new(record.symbolize_keys!)}
59
- end
60
-
61
- def get_param_value raw_query_param:, quotefy_param: true
65
+ def hash_to_open_struct(dataset:)
66
+ dataset.map { |record| OpenStruct.new(record.symbolize_keys!) }
67
+ end
68
+
69
+ def get_param_value(raw_query_param:, quotefy_param: true)
62
70
  # where's String#quote when we need it?
63
- raw_query_param.class.eql?(String) && quotefy_param ? "'#{raw_query_param.to_s}'" : raw_query_param.to_s
71
+ raw_query_param.instance_of?(String) && quotefy_param ? "'#{raw_query_param.to_s}'" : raw_query_param.to_s
64
72
  end
65
73
 
66
- def fill_query_params query_template:, query_params:
74
+ def fill_query_params(query_template:, query_params:)
67
75
  query = query_template.dup
68
-
69
- query_params.each do |query_param|
76
+
77
+ query_params.each_pair do |query_param|
70
78
  query_param_name = query_param[PARAM_NAME_INDEX].to_s
71
79
 
72
80
  query.gsub!(/\${#{query_param_name}}/,
@@ -80,4 +88,4 @@ class Querier
80
88
 
81
89
  query
82
90
  end
83
- end
91
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: querier
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gedean Dias
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-28 00:00:00.000000000 Z
11
+ date: 2021-08-30 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Active Record queries with variable number of params
14
14
  email: gedean.dias@gmail.com
@@ -30,14 +30,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 2.7.0
33
+ version: 3.0.2
34
34
  required_rubygems_version: !ruby/object:Gem::Requirement
35
35
  requirements:
36
36
  - - ">="
37
37
  - !ruby/object:Gem::Version
38
38
  version: '0'
39
39
  requirements: []
40
- rubygems_version: 3.2.3
40
+ rubygems_version: 3.2.26
41
41
  signing_key:
42
42
  specification_version: 4
43
43
  summary: Active Record Querier