activerecord-filter 5.0.0 → 5.0.0.1
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/active_record/filter.rb +11 -27
- data/lib/active_record/filter/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1fe442ec2d9469a50ef10c77bb05d728407be95
|
4
|
+
data.tar.gz: d6670cedb256f494a36d7af5ffa2a582398ffd16
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c42f5aab8ec42ea638761946ba345e2b79900c426b8fec9d794cb2715c787ce3792db73229529656bdafe6e9141e4266dd05187be38bdd040582218638e49eb4
|
7
|
+
data.tar.gz: 459451d4a977fcf775047da9677ddf9011f88572436ac15d81f48044e6856ec0de832d32179a71a8f4d5783258f112053c3977739e230c9a7d5ca42a66ed4052
|
data/lib/active_record/filter.rb
CHANGED
@@ -3,13 +3,6 @@ require 'arel/extensions'
|
|
3
3
|
require 'action_controller/metal/strong_parameters'
|
4
4
|
|
5
5
|
class ActiveRecord::UnkownFilterError < NoMethodError
|
6
|
-
attr_reader :klass, :filter
|
7
|
-
|
8
|
-
def initialize(klass, filter)
|
9
|
-
@klass = klass
|
10
|
-
@filter = filter.to_s
|
11
|
-
super("unkown filter #{filter.inspect} for #{klass}.")
|
12
|
-
end
|
13
6
|
end
|
14
7
|
|
15
8
|
module ActiveRecord::Filter
|
@@ -47,28 +40,15 @@ module ActiveRecord::Filter
|
|
47
40
|
|
48
41
|
def filter_for(key, value, options={})
|
49
42
|
column = columns_hash[key.to_s]
|
43
|
+
|
50
44
|
if column && column.array
|
51
45
|
all.filter_for_array(key, value, options)
|
52
46
|
elsif column
|
53
47
|
all.send("filter_for_#{column.type}", key, value, options)
|
48
|
+
elsif relation = reflect_on_association(key)
|
49
|
+
self.send("filter_for_#{relation.macro}", relation, value)
|
54
50
|
else
|
55
|
-
|
56
|
-
self.send("filter_for_#{relation.macro}", relation, value)
|
57
|
-
else
|
58
|
-
# Custom filter, try to guess based on value
|
59
|
-
method = if value.is_a?(Hash) || value.is_a?(ActionController::Parameters)
|
60
|
-
"filter_for_#{value.values.first.class.to_s.downcase}"
|
61
|
-
else
|
62
|
-
"filter_for_#{value.class.to_s.downcase}"
|
63
|
-
end
|
64
|
-
|
65
|
-
puts method, all.respond_to?(method)
|
66
|
-
if all.respond_to?(method)
|
67
|
-
all.send(method, key, value, options)
|
68
|
-
else
|
69
|
-
raise ActiveRecord::UnkownFilterError.new(self, key)
|
70
|
-
end
|
71
|
-
end
|
51
|
+
raise ActiveRecord::UnkownFilterError.new("Unkown filter \"#{key}\" for #{self}.")
|
72
52
|
end
|
73
53
|
end
|
74
54
|
|
@@ -161,8 +141,10 @@ module ActiveRecord::Filter
|
|
161
141
|
# # TODO support nil. Currently rails params encode nil as empty strings,
|
162
142
|
# # and we can't tell which is desired, so do both
|
163
143
|
# where(table[column].eq(value).or(table[column].eq(nil)))
|
164
|
-
|
144
|
+
elsif value.respond_to?(send_method)
|
165
145
|
where(table[column].eq(value.try(:send, send_method)))
|
146
|
+
else
|
147
|
+
raise ActiveRecord::UnkownFilterError.new("Unkown type for #{column}. (type #{value.class})")
|
166
148
|
end
|
167
149
|
end
|
168
150
|
end
|
@@ -238,10 +220,12 @@ module ActiveRecord::Filter
|
|
238
220
|
resource = all
|
239
221
|
|
240
222
|
options = {}
|
241
|
-
if
|
223
|
+
if connection.class.name == 'ActiveRecord::ConnectionAdapters::SunstoneAPIAdapter'
|
224
|
+
options[:table_alias] = relation.name
|
225
|
+
elsif resource.klass == relation.klass
|
242
226
|
options[:table_alias] = "#{relation.name}_#{relation.klass.table_name}"
|
243
227
|
end
|
244
|
-
|
228
|
+
|
245
229
|
if value.is_a?(Hash) || value.class.name == "ActionController::Parameters".freeze
|
246
230
|
resource = resource.joins(relation.name) #if !resource.references?(relation.name)
|
247
231
|
resource = resource.merge(relation.klass.filter(value, options))
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-filter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.0.0
|
4
|
+
version: 5.0.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Bracy
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -242,7 +242,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
242
242
|
version: '0'
|
243
243
|
requirements: []
|
244
244
|
rubyforge_project:
|
245
|
-
rubygems_version: 2.
|
245
|
+
rubygems_version: 2.6.4
|
246
246
|
signing_key:
|
247
247
|
specification_version: 4
|
248
248
|
summary: A safe way to accept user parameters and query against your ActiveRecord
|