like_query 0.1.4 → 0.1.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4cbeab01984ef5c872a39167c49487b4ad47ed80db8c44f5bac94b2db3dc0c7d
4
- data.tar.gz: 49bd373e430ca83c3b533913b5adf83aa2191bc8fbaab6ad1c19c85cd014d577
3
+ metadata.gz: c7de4a5d2ad260480095855c658997269624ccb606be9e38bd054342404bd7ad
4
+ data.tar.gz: 11f20847057ba089d2cf7020799f420bcf1f99ef2bc7aa09ed5a9a266a614725
5
5
  SHA512:
6
- metadata.gz: e3ca7b08324a456eb2440d765d359c154378db6fb833d377be1236f7021f7acb0420a879af59d6558bd511888c50126edb80c8618b731ad6d1c2f429a6b47a04
7
- data.tar.gz: da945a9c6f70920557841285aa792274c32f22f1aa79884ce041d21789e3b5d2882f1af3be6583335c6ca627f576b53a5ad7bb7086ed8ca36b012c6acee42175
6
+ metadata.gz: e2540e87f1eabbab29fd0f032e99e98029dfdfe6c558b7793fc3d63d8635171f76b110cd56ee0c34beca883908c1a32063c610f8af52f4f52223050e830006af
7
+ data.tar.gz: 458da755375fc2651a95a13f1c4722da0f85711f9742ba701fd0aa79b528f377852b01c222c1423287d7c731ed36dacc0eef61512b03271d89ae07599141aa3e
@@ -1,16 +1,20 @@
1
1
  module LikeQuery
2
2
  module ModelExtensions
3
3
 
4
- def like(search_string, schema = nil)
4
+ def like(search_string, schema = nil, debug: false)
5
5
 
6
6
  search_string = '' if !search_string
7
7
  search_string = search_string.to_s unless search_string.is_a?(String)
8
+ schema = [schema] if schema.is_a?(Symbol)
9
+ @debug_like_query = debug
8
10
 
9
11
  raise 'like can only be called from a model' if self == ApplicationRecord
12
+ if schema.first.is_a?(Array) && schema.length >= 2
13
+ raise "only one array can be given: Either schema as one array or as multiple args, not as array"
14
+ end
10
15
 
11
16
  queries = nil
12
17
  associations = []
13
- schema = [schema] if schema.is_a?(Symbol)
14
18
  @like_query_schema = schema
15
19
 
16
20
  search_string.split(' ').each do |s|
@@ -18,13 +22,13 @@ module LikeQuery
18
22
  f_str = format_string_element(s)
19
23
 
20
24
  q = nil
21
- if schema.first.is_a?(Array) && schema.length >= 2
22
- raise "only one array can be given: Either schema as one array or as multiple args, not as array"
23
- end
25
+
24
26
  (schema.first.is_a?(Array) ? schema.first : schema).each do |p|
27
+ dbg("• Iterate schema => #{p}")
25
28
  enum_lab = enum_keys(p, s)
26
29
  if enum_lab.present?
27
30
  q = arel_table[p].in(enum_lab)
31
+ dbg(-> { " Query from enum => #{q.to_sql}" })
28
32
  elsif p.is_a?(Hash)
29
33
  p.each do |k, v|
30
34
  assoc = reflect_on_association(k)
@@ -101,23 +105,25 @@ module LikeQuery
101
105
  match_number = str.match(/^(\d+(?:\.\d+)?)$/)
102
106
  match_range = str.match(/^(\d+(?:\.\d+)?)(\.\.)(\d+(?:\.\d+)?)$/)
103
107
 
104
- if match_range
105
- mr = match_range.to_s
106
- {
107
- float_from: mr.split('..').first.to_f,
108
- float_until: mr.split('..').last.to_f,
109
- }
110
- elsif match_number
111
- mn = match_number.to_s
112
- {
113
- float_from: mn,
114
- float_until: mn,
115
- }
116
- else
117
- {
118
- string: "%#{str}%"
119
- }
120
- end
108
+ res = if match_range
109
+ mr = match_range.to_s
110
+ {
111
+ float_from: mr.split('..').first.to_f,
112
+ float_until: mr.split('..').last.to_f,
113
+ }
114
+ elsif match_number
115
+ mn = match_number.to_s
116
+ {
117
+ float_from: mn,
118
+ float_until: mn,
119
+ }
120
+ else
121
+ {
122
+ string: "%#{str}%"
123
+ }
124
+ end
125
+ res[:string] = "%#{str}%"
126
+ res
121
127
  end
122
128
 
123
129
  def create_arel(schema_column, search_string, association = nil)
@@ -130,13 +136,31 @@ module LikeQuery
130
136
  end
131
137
  arel = base_object.arel_table[schema_column]
132
138
 
133
- if search_string[:float_from]
134
- if [:float, :decimal, :big_decimal, :integer, :bigint].include?(type)
135
- arel.between(search_string[:float_from]..search_string[:float_until])
136
- end
139
+ if search_string[:float_from] && [:float, :decimal, :big_decimal, :integer, :bigint].include?(type)
140
+
141
+ q = arel.between(search_string[:float_from]..search_string[:float_until])
142
+ dbg(-> { " Query from string-field => #{q.to_sql}" })
143
+ q
144
+
145
+ else
146
+
147
+ q = arel.matches(search_string[:string])
148
+ dbg(-> { " Query from string-field => #{q.to_sql}" })
149
+ q
150
+
151
+ end
152
+ end
153
+
154
+ def dbg(label)
155
+
156
+ return unless @debug_like_query
157
+
158
+ if label.is_a?(Proc)
159
+ lab = label.call
137
160
  else
138
- arel.matches(search_string[:string])
161
+ lab = label
139
162
  end
163
+ Rails.logger.debug("LikeQuery: #{lab}")
140
164
  end
141
165
  end
142
166
  end
@@ -1,3 +1,3 @@
1
1
  module LikeQuery
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.6"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: like_query
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - christian
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-11-21 00:00:00.000000000 Z
11
+ date: 2024-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails