interview 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/interview/version.rb +1 -1
- data/lib/interview.rb +69 -29
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f72fac32d421925cb9de553456f7d05725c4307
|
4
|
+
data.tar.gz: f1fdabaee5c509642c1b927fa8ac45d757d71415
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a2a38a6cafd9890b5cf2d4b4aae750c6b7c8207d7cbaec77a8bf71d6d7d9986f2a6dd3505bfcb8cf260a2c900970eff8308e71a6fbd435020c9bb36881ea44a3
|
7
|
+
data.tar.gz: 18de1347ac17165a494057db3c5ac79c03168508ba29fa1f7b69b3d9f89703f8bab73a18d1eec961415771a2a05c18a9b3e04f643b6e74e05d60edf3a26aec78
|
data/lib/interview/version.rb
CHANGED
data/lib/interview.rb
CHANGED
@@ -89,9 +89,9 @@ module ActiveRecord
|
|
89
89
|
# todo: auslagern in eigenes gem
|
90
90
|
def self.filter(filter)
|
91
91
|
relation = self
|
92
|
-
self.joins_for_filter(filter).each do |join_table|
|
93
|
-
|
94
|
-
end
|
92
|
+
# self.joins_for_filter(filter).each do |join_table|
|
93
|
+
# relation = relation.joins(join_table)
|
94
|
+
# end
|
95
95
|
return relation.where(*self.filter_to_sql(filter))
|
96
96
|
end
|
97
97
|
|
@@ -104,8 +104,35 @@ module ActiveRecord
|
|
104
104
|
end
|
105
105
|
return join_tables.uniq
|
106
106
|
end
|
107
|
-
|
107
|
+
|
108
108
|
def self.filter_to_sql(filter)
|
109
|
+
if filter.is_a? Hash # todo
|
110
|
+
result = hash_filter_to_sql(filter)
|
111
|
+
elsif filter.respond_to? :each
|
112
|
+
result = filter_combination_to_sql(filter)
|
113
|
+
end # todo: else
|
114
|
+
puts result.first
|
115
|
+
return result
|
116
|
+
end
|
117
|
+
|
118
|
+
def self.filter_combination_to_sql(filter)
|
119
|
+
if [:and, :or].include? filter.first
|
120
|
+
combination = filter.first
|
121
|
+
filter = filter[1..-1]
|
122
|
+
end
|
123
|
+
combination ||= :or
|
124
|
+
sqls = []
|
125
|
+
values = []
|
126
|
+
filter.each do |f|
|
127
|
+
f = self.filter_to_sql(f)
|
128
|
+
sqls << f.first
|
129
|
+
values += f[1..-1]
|
130
|
+
end
|
131
|
+
sql = '(' + sqls.join(" #{combination.to_s.upcase} ") + ')'
|
132
|
+
return [sql] + values
|
133
|
+
end
|
134
|
+
|
135
|
+
def self.hash_filter_to_sql(filter)
|
109
136
|
sqls = []
|
110
137
|
values = []
|
111
138
|
filter.each do |attr, filter|
|
@@ -133,7 +160,7 @@ module ActiveRecord
|
|
133
160
|
return [sql] + values
|
134
161
|
end
|
135
162
|
|
136
|
-
def self.string_filter_to_sql(attr, filter)
|
163
|
+
def self.string_filter_to_sql(attr, filter, not_filter=false)
|
137
164
|
if filter.respond_to?(:each)
|
138
165
|
sql = "#{attr} in (?)"
|
139
166
|
else
|
@@ -141,22 +168,12 @@ module ActiveRecord
|
|
141
168
|
end
|
142
169
|
return [sql, filter]
|
143
170
|
end
|
144
|
-
|
145
|
-
def self.number_filter_to_sql(attr, filter)
|
146
|
-
if filter.respond_to?(:each)
|
147
|
-
|
148
|
-
values = [filter]
|
149
|
-
elsif filter.respond_to?(:each)
|
150
|
-
sqls = []
|
151
|
-
values = []
|
152
|
-
filter.each do |f|
|
153
|
-
result = self.number_filter_to_sql(attr, f)
|
154
|
-
sqls << result.first
|
155
|
-
values += results[1..-1]
|
156
|
-
end
|
157
|
-
sql = sqls.join(' OR ')
|
171
|
+
|
172
|
+
def self.number_filter_to_sql(attr, filter, not_filter=false)
|
173
|
+
if filter.respond_to?(:each)
|
174
|
+
return self.value_combination_to_sql(attr, filter, :number)
|
158
175
|
elsif filter.is_a? String
|
159
|
-
unless result = filter.match(/^([
|
176
|
+
unless result = filter.match(/^([!<>=]*)(\d+\.?\d*)$/)
|
160
177
|
raise "invalid number filter: '#{filter}'"
|
161
178
|
end
|
162
179
|
operator = result[1] != '' ? result[1] : '='
|
@@ -170,7 +187,7 @@ module ActiveRecord
|
|
170
187
|
return [sql] + values
|
171
188
|
end
|
172
189
|
|
173
|
-
def self.date_filter_to_sql(attr, filter)
|
190
|
+
def self.date_filter_to_sql(attr, filter, not_filter=false)
|
174
191
|
if filter.respond_to?(:each)
|
175
192
|
if filter.size != 2
|
176
193
|
raise "invalid date filter: #{filter.inspect} 2 elements expected, #{filter.size} given"
|
@@ -184,18 +201,41 @@ module ActiveRecord
|
|
184
201
|
return [sql] + values
|
185
202
|
end
|
186
203
|
|
187
|
-
def self.boolean_filter_to_sql(attr, filter)
|
204
|
+
def self.boolean_filter_to_sql(attr, filter, not_filter=false)
|
188
205
|
return ["#{attr} = ?", filter]
|
189
206
|
end
|
190
|
-
|
191
|
-
def self.assoc_filter_to_sql(attr, filter)
|
207
|
+
|
208
|
+
def self.assoc_filter_to_sql(attr, filter, not_filter=false)
|
209
|
+
if filter.respond_to?(:each)
|
210
|
+
return self.value_combination_to_sql(attr, filter, :assoc)
|
211
|
+
end
|
192
212
|
assoc = self.reflect_on_association(attr)
|
193
|
-
if assoc.macro == :
|
194
|
-
|
195
|
-
|
196
|
-
|
213
|
+
if assoc.macro == :has_and_belongs_to_many
|
214
|
+
number_filter = self.number_filter_to_sql(assoc.association_foreign_key, filter)
|
215
|
+
values = number_filter[1..-1]
|
216
|
+
sql = "id #{ not_filter ? 'NOT ' : ''}IN (SELECT #{assoc.foreign_key} FROM #{assoc.join_table} WHERE #{number_filter.first})"
|
217
|
+
end # todo: erweitern
|
218
|
+
return [sql] + values
|
219
|
+
end
|
220
|
+
|
221
|
+
def self.value_combination_to_sql(attr, filter, filter_type)
|
222
|
+
# todo: check if set is possible
|
223
|
+
if filter.first == :not
|
224
|
+
return self.send("#{filter_type}_filter_to_sql", attr, filter[1], true)
|
225
|
+
elsif [:and, :or].include? filter.first
|
226
|
+
combination = filter.first
|
227
|
+
filter = filter[1..-1]
|
197
228
|
end
|
198
|
-
|
229
|
+
combination ||= :or
|
230
|
+
sqls = []
|
231
|
+
values = []
|
232
|
+
filter.each do |f|
|
233
|
+
f = self.send("#{filter_type}_filter_to_sql", attr, f)
|
234
|
+
sqls << f.first
|
235
|
+
values += f[1..-1]
|
236
|
+
end
|
237
|
+
sql = '(' + sqls.join(" #{combination.to_s.upcase} ") + ')'
|
238
|
+
return [sql] + values
|
199
239
|
end
|
200
240
|
|
201
241
|
def self.human_name(options={})
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: interview
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jannes Köhler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-08-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|