querier 0.0.10 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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