like_query 0.2.0 → 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.
- checksums.yaml +4 -4
- data/lib/like_query/formatter.rb +32 -0
- data/lib/like_query/model_extensions.rb +22 -17
- data/lib/like_query/version.rb +1 -1
- data/lib/like_query.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0cb474c6c4f84bd5197241f8aba6fba22a65e8eb186b390eb62ed92ebb1c6900
|
4
|
+
data.tar.gz: 573d9725dd2467394fbfaf7ac8ddc0ad85fae5e6461f10f23df83f9471811a6c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dfe938db839e0a98b4a086cd8c9ef22db27f5d752ddf8749b93a4144a75ea1a9ea7c1a3b77900077fee92cd7293082083d567cbaa223bf143f3216cc6dfae2b0
|
7
|
+
data.tar.gz: b9ba846502a4a31f3b53565679b7d7befe2c59978c362099cf03b242087f5dba3daeeb4ad9d4f6393acbfeaa13afc0dfaf153057732982e441ff23beb8822845
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module LikeQuery
|
2
|
+
class Formatter
|
3
|
+
|
4
|
+
#== Translate columns for more convenient usage
|
5
|
+
# second parameter is always a Array of Arrays
|
6
|
+
# Example:
|
7
|
+
# translate_columns('d:50', [[:d,:diameter], ['w', 'width']], case_sensitive: false)
|
8
|
+
# => "diameter:50"
|
9
|
+
def self.translate_columns(search_string, column_translations, case_sensitive: true)
|
10
|
+
search_string.split(' ').map do |str|
|
11
|
+
|
12
|
+
reg = (case_sensitive ? /^[a-z_]+(?=:)/ : /^[a-zA-Z_]+(?=:)/)
|
13
|
+
|
14
|
+
column = if case_sensitive
|
15
|
+
str.match(reg)
|
16
|
+
else
|
17
|
+
str.downcase.match(reg)
|
18
|
+
end
|
19
|
+
if column
|
20
|
+
column_translations.each do |tr|
|
21
|
+
key = (case_sensitive ? tr.first : tr.first.downcase).to_s
|
22
|
+
if column.to_s == key
|
23
|
+
str = str.sub(reg, tr.second.to_s)
|
24
|
+
break
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
str
|
29
|
+
end.join(' ')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -54,18 +54,20 @@ module LikeQuery
|
|
54
54
|
end
|
55
55
|
|
56
56
|
end
|
57
|
-
|
57
|
+
|
58
|
+
queries.push("(#{q.compact.join(' OR ')})")
|
58
59
|
end
|
59
60
|
|
60
61
|
if associations.present?
|
61
62
|
r = left_outer_joins(associations).where(queries.join(" AND "))
|
62
|
-
dbg(->{"RESULT => #{r.to_sql}"})
|
63
|
+
dbg(-> { "RESULT => #{r.to_sql}" })
|
63
64
|
r
|
64
65
|
else
|
65
66
|
r = where(queries.join(" AND "))
|
66
|
-
dbg(->{"RESULT => #{r.to_sql}"})
|
67
|
+
dbg(-> { "RESULT => #{r.to_sql}" })
|
67
68
|
r
|
68
69
|
end
|
70
|
+
|
69
71
|
end
|
70
72
|
|
71
73
|
def generate_hash(output_schema = nil, limit: 50, image: nil, url: nil)
|
@@ -98,8 +100,10 @@ module LikeQuery
|
|
98
100
|
|
99
101
|
def format_string_element(str)
|
100
102
|
|
101
|
-
|
102
|
-
|
103
|
+
column = str.match(/^[a-z_]+(?=:)/)
|
104
|
+
_str = (column ? str.match(/(?<=:)[\s\S]+/) : str).to_s
|
105
|
+
match_number = _str.match(/^(\d+(?:\.\d+)?)$/)
|
106
|
+
match_range = _str.match(/^(\d+(?:\.\d+)?)(\.\.)(\d+(?:\.\d+)?)$/)
|
103
107
|
|
104
108
|
res = if match_range
|
105
109
|
mr = match_range.to_s
|
@@ -114,11 +118,10 @@ module LikeQuery
|
|
114
118
|
float_until: mn,
|
115
119
|
}
|
116
120
|
else
|
117
|
-
{
|
118
|
-
string: "%#{str}%"
|
119
|
-
}
|
121
|
+
{}
|
120
122
|
end
|
121
|
-
res[:string] =
|
123
|
+
res[:string] = _str
|
124
|
+
res[:column] = column.to_s.to_sym if column
|
122
125
|
res
|
123
126
|
end
|
124
127
|
|
@@ -132,18 +135,20 @@ module LikeQuery
|
|
132
135
|
end
|
133
136
|
arel = base_object.arel_table[schema_column]
|
134
137
|
|
135
|
-
if search_string[:
|
138
|
+
if !search_string[:column] || schema_column == search_string[:column]
|
139
|
+
if search_string[:float_from] && [:float, :decimal, :big_decimal, :integer, :bigint].include?(type)
|
136
140
|
|
137
|
-
|
138
|
-
|
139
|
-
|
141
|
+
q = arel.between(search_string[:float_from]..search_string[:float_until]).to_sql
|
142
|
+
dbg(" Query from number-field => #{q}")
|
143
|
+
q
|
140
144
|
|
141
|
-
|
145
|
+
else
|
142
146
|
|
143
|
-
|
144
|
-
|
145
|
-
|
147
|
+
q = arel.matches("%#{search_string[:string]}%").to_sql
|
148
|
+
dbg(" Query from string-field => #{q}")
|
149
|
+
q
|
146
150
|
|
151
|
+
end
|
147
152
|
end
|
148
153
|
end
|
149
154
|
|
data/lib/like_query/version.rb
CHANGED
data/lib/like_query.rb
CHANGED
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.
|
4
|
+
version: 0.3.0
|
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-
|
11
|
+
date: 2024-11-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -35,6 +35,7 @@ files:
|
|
35
35
|
- lib/like_query.rb
|
36
36
|
- lib/like_query/collect.rb
|
37
37
|
- lib/like_query/extender.rb
|
38
|
+
- lib/like_query/formatter.rb
|
38
39
|
- lib/like_query/model_extensions.rb
|
39
40
|
- lib/like_query/railtie.rb
|
40
41
|
- lib/like_query/version.rb
|