interview 0.0.7 → 0.0.8
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/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
|