activerecord-where-any-of 1.1.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cf959bf2a2e069a95f05871354445d3e985d6843af07a6801784c5d6e578bf14
4
- data.tar.gz: 1ab3c71933752ce016aec12f9c5dd3740f65cfd521713b5c3b28ddf551e6c734
3
+ metadata.gz: 89757a8e0b56e3133e9220af6d3dc0521d49148c3e61036465f7e5d562f93c4f
4
+ data.tar.gz: a70d52c50687a60db29191d9dbdf5bd3199225e8b456710bf3eab53924cbb3a2
5
5
  SHA512:
6
- metadata.gz: b87241a975b1f0ad7e341d7840d58b1fea1180994ee892762c7e157ee4cbfe494bade5661f73e405a9caf59814b25de9e1f351e17b424ac272c6b26ca9d10d44
7
- data.tar.gz: 46df15413eadd5a146ffbdc53a89935663b7b5811a7acabfdbfe45dc9c8dc594fb73e5b16a193129481a9864a7cf920bced02b8bf3ddcef25bb334649a474a5a
6
+ metadata.gz: 70bd1922ac95437f98da846af4580a2dcece793675e84ae3df1fe6bc9ba619ac59b5be7ae0ed35b9a89f68536f4364645e684c889a047e0ed9ed9f88701ce437
7
+ data.tar.gz: 4c9c0426a3a31e539f94783e14e1882fdf6b74d248e746a777ea80088f3aa758fe8ebc16a48682cb897dc3c8a3fd7eab160383475fe4cd25c590eb2b3554078d
@@ -1,8 +1,8 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'activerecord-where-any-of'
3
- s.version = '1.1.1'
3
+ s.version = '1.1.2'
4
4
  s.license = 'MIT'
5
- s.date = '2016-12-25'
5
+ s.date = '2020-05-12'
6
6
  s.summary = 'A simple mixin to ActiveRecord::Base that allows use of OR arel relations.'
7
7
  s.description = 'Should work in Rails 3, 4, & 5. However, in Rails 5 use of #or is prefered.'
8
8
  s.description = File.read(File.expand_path('../README.md', __FILE__))[/Description:\n-+\s*(.*?)\n\n/m, 1]
@@ -2,20 +2,60 @@
2
2
  module ActiveRecord
3
3
  module WhereAnyOfMixin
4
4
 
5
+ INVALID_RELATION_VALUES = %i[
6
+ bind
7
+ eager_load
8
+ group
9
+ union_ordering
10
+ union
11
+ unscope
12
+ window
13
+ with
14
+ ]
15
+
16
+ RELATION_VALUES_TO_COPY = %i[
17
+ includes
18
+ joined_includes
19
+ joins
20
+ left_outer_joins
21
+ preload
22
+ references
23
+ ]
24
+
5
25
  def where_any_of(*conditions)
6
26
  # Rails 5 comes with an #or method for relations, so we can just use that
7
27
  # It is advised that once on Rails 5, this gem should be removed.
28
+
29
+ # Do our best to preserve joins from the conditions into the outer relation
30
+ values_to_copy = {}
31
+
8
32
  conditions = conditions.map do |c|
9
- if c.is_a? Symbol or c.is_a? String
10
- self.unscoped.send(c)
11
- else
12
- c
33
+ c = self.unscoped.send(c) if c.is_a? Symbol or c.is_a? String
34
+ raise ArgumentError, "Unsupported argument type: #{c.class.name}" unless c.is_a?(ActiveRecord::Relation)
35
+
36
+ INVALID_RELATION_VALUES.each do |m|
37
+ raise ArgumentError, "Unsupported condition contains #{m} values" if c.send("#{m}_values").present?
13
38
  end
39
+
40
+ RELATION_VALUES_TO_COPY.each do |m|
41
+ values = c.send("#{m}_values").presence or next
42
+ values_to_copy[m] ||= []
43
+ values_to_copy[m].concat(values)
44
+ end
45
+
46
+ # Only preserve the where clause of the condition
47
+ c2 = ActiveRecord::Relation.new(c.klass)
48
+ c2.where_clause = c.where_clause
49
+ c2
14
50
  end
51
+
15
52
  if conditions.empty?
16
53
  all.none
17
54
  else
18
- all.merge conditions.reduce(:or)
55
+ all_with_copied_values = values_to_copy.reduce(all) do |s, (key, values)|
56
+ s.send(key, values)
57
+ end
58
+ all_with_copied_values.merge conditions.reduce(:or)
19
59
  end
20
60
  end
21
61
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-where-any-of
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - David McCullars
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-25 00:00:00.000000000 Z
11
+ date: 2020-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord