dynamic_query 0.1.4 → 0.2.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.
- data/lib/dynamic_query/version.rb +2 -2
- data/lib/dynamic_query.rb +32 -15
- metadata +3 -3
data/lib/dynamic_query.rb
CHANGED
@@ -86,26 +86,43 @@ module DynamicQuery
|
|
86
86
|
def statement(query)
|
87
87
|
query ||= { 'or_1' => { 'and_1' => { :column => '', :operator => '', :value1 => '', :value2 => '' } } }
|
88
88
|
or_stat = []
|
89
|
-
query.select { |k,
|
90
|
-
and_stat = []
|
89
|
+
query.select { |k, v| k =~ /^or_\d+$/ && v.kind_of?(Hash) }.each do |or_key, or_val|
|
90
|
+
and_stat = [[]]
|
91
91
|
or_val.each do |and_key, and_val|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
92
|
+
if and_val.kind_of?(Hash) && @columns.include?(and_val[:column])
|
93
|
+
case and_val[:operator]
|
94
|
+
when '=', '>', '>=', '<', '<=', '!=', 'LIKE', 'NOT LIKE'
|
95
|
+
unless and_val[:value1].blank?
|
96
|
+
and_stat[0] << "#{and_val[:column]} #{and_val[:operator]} ?"
|
97
|
+
and_stat << and_val[:value1]
|
98
|
+
end
|
99
|
+
when 'IN', 'NOT IN'
|
100
|
+
unless and_val[:value1].delete(',').blank?
|
101
|
+
and_stat[0] << "#{and_val[:column]} #{and_val[:operator]} (?)"
|
102
|
+
and_stat << and_val[:value1].split(/,/).delete_if { |word| word.blank? }.map { |word| word.strip }
|
103
|
+
end
|
104
|
+
when 'BETWEEN', 'NOT BETWEEN'
|
105
|
+
unless and_val[:value1].blank? || and_val[:value2].blank?
|
106
|
+
and_stat[0] << "#{and_val[:column]} #{and_val[:operator]} ? AND ?"
|
107
|
+
and_stat << and_val[:value1] << and_val[:value2]
|
108
|
+
end
|
109
|
+
when 'IS NULL', 'IS NOT NULL'
|
110
|
+
and_stat[0] << "#{and_val[:column]} #{and_val[:operator]}"
|
111
|
+
end
|
101
112
|
end
|
102
113
|
end
|
114
|
+
|
115
|
+
and_stat[0] = and_stat[0].join(' AND ')
|
116
|
+
or_stat << and_stat unless and_stat[0].empty?
|
117
|
+
end
|
103
118
|
|
104
|
-
|
105
|
-
|
119
|
+
or_stat.each { |and_stat| and_stat[0] = "(#{and_stat[0]})" }
|
120
|
+
stat = []; params = []
|
121
|
+
or_stat.each do |and_stat|
|
122
|
+
stat << and_stat.shift
|
123
|
+
params = params + and_stat
|
106
124
|
end
|
107
|
-
|
108
|
-
or_stat = or_stat.join(' OR ')
|
125
|
+
params.unshift(stat.join(' OR '))
|
109
126
|
end
|
110
127
|
|
111
128
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dynamic_query
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -143,7 +143,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
143
143
|
version: '0'
|
144
144
|
segments:
|
145
145
|
- 0
|
146
|
-
hash:
|
146
|
+
hash: 2346444755047590570
|
147
147
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
148
|
none: false
|
149
149
|
requirements:
|
@@ -155,5 +155,5 @@ rubyforge_project:
|
|
155
155
|
rubygems_version: 1.8.24
|
156
156
|
signing_key:
|
157
157
|
specification_version: 3
|
158
|
-
summary: dynamic_query-0.
|
158
|
+
summary: dynamic_query-0.2.0
|
159
159
|
test_files: []
|