activerecord_any_of 2.0 → 2.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3f426526955604bce6800c7d7b84913cd198ad0a0b821be1e5fa7dc5b0bb215b
4
- data.tar.gz: '08597e05b96433c2bd29cd95750beba918810fe50c320733bb864e93b273eeb1'
3
+ metadata.gz: 92f4fcfc4f4e943285de5882c8133e38d44b4decea581d2b0685c4133626f254
4
+ data.tar.gz: a64bf9c0d9e3e65555af122a46d764024df99288c1d6bf096ef0d1ee4b099bd4
5
5
  SHA512:
6
- metadata.gz: a4451ade0e580f14d30f943989c3263e1ee322bfb6d9a32483c29407c1f9b3e96e4781b7ec9a6adda3ae02675c711f0d4e6009e8c88d378fc1786ad02e33660b
7
- data.tar.gz: e64bb560165f871e14687b27bab765d30e5a575bce057b1387a58115ec40cb8b7b15707228675f0ade9847bfeb94f7326239c97d38fd13cc1bc78d24b03bb428
6
+ metadata.gz: 02d35b9440b45546546a6daa1f08aa2973d8000fbc906d4df9f670cb554bc28e2c5d696b42e096106675704aa951251997c426e7fb2a1bca5deddfa462885d20
7
+ data.tar.gz: f9d2faab578bc6ff582a352d79d05feea0402707cb7f50606b32e16361b229167fadf1bb194bc1ad573e38c56fb4f1ff13e07214206035d979bca2f93aa37b6c
data/README.md CHANGED
@@ -1,10 +1,15 @@
1
1
  # ActiverecordAnyOf
2
2
 
3
+ > Warning! Development of activerecord_any_of is now happening on
4
+ > [Gitlab](https://gitlab.com/oelmekki/activerecord_any_of).
5
+ >
6
+ > Please go there for issues and merge requests.
7
+
3
8
  ## Introduction
4
9
 
5
10
  This gem provides `#any_of` and `#none_of` on ActiveRecord.
6
11
 
7
- `#any_of` is inspired by [any_of from mongoid](http://two.mongoid.org/docs/querying/criteria.html#any_of).
12
+ `#any_of` is inspired by [any_of from mongoid](https://www.mongodb.com/docs/mongoid/current/reference/queries/#any-of-behavior).
8
13
 
9
14
  It was released before `#or` was implemented in ActiveRecord. Its main purpose was to both :
10
15
 
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiverecordAnyOf
4
+ IS_RAILS_6 = ActiveRecord.version.to_s.between?('6', '7')
5
+
4
6
  # Main class allowing to build alternative conditions for the query.
5
7
  class AlternativeBuilder
6
8
  def initialize(match_type, context, *queries)
@@ -78,15 +80,26 @@ module ActiverecordAnyOf
78
80
  end
79
81
  end
80
82
 
83
+ def values_for(query)
84
+ return unless query.respond_to?(:right)
85
+
86
+ if query.right.is_a?(Array)
87
+ values = query.right
88
+ values.map!(&:value) unless IS_RAILS_6
89
+ values
90
+ else
91
+ return unless query.right.respond_to?(:value)
92
+
93
+ query.right.value
94
+ end
95
+ end
96
+
81
97
  def queries_bind_values
82
98
  queries.map do |query|
83
99
  if query.respond_to?(:children)
84
- map_multiple_bind_values(query)
100
+ query.children.map { |c| values_for(c) }
85
101
  else
86
- next unless query.respond_to?(:right)
87
- next unless query.right.respond_to?(:value)
88
-
89
- query.right.value
102
+ values_for(query)
90
103
  end
91
104
  end.flatten.compact
92
105
  end
@@ -110,13 +123,19 @@ module ActiverecordAnyOf
110
123
  ::Regexp.last_match(2)&.gsub(/=\ \$\d+/, '= ?') or match
111
124
  end
112
125
  end
126
+
127
+ def bind_values
128
+ queries_bind_values.tap do |values|
129
+ values.map!(&:value) if IS_RAILS_6
130
+ end
131
+ end
113
132
  end
114
133
 
115
134
  # Returns records that match any of the conditions, ie `#any_of`.
116
135
  class PositiveBuilder < Builder
117
136
  def build
118
137
  relation = if queries && queries_bind_values.any?
119
- where([unprepare_query(queries.reduce(:or).to_sql), *queries_bind_values])
138
+ where([unprepare_query(queries.reduce(:or).to_sql), *bind_values])
120
139
  else
121
140
  where(queries.reduce(:or).to_sql)
122
141
  end
@@ -129,7 +148,7 @@ module ActiverecordAnyOf
129
148
  class NegativeBuilder < Builder
130
149
  def build
131
150
  relation = if queries && queries_bind_values.any?
132
- where.not([unprepare_query(queries.reduce(:or).to_sql), *queries_bind_values])
151
+ where.not([unprepare_query(queries.reduce(:or).to_sql), *bind_values])
133
152
  else
134
153
  where.not(queries.reduce(:or).to_sql)
135
154
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiverecordAnyOf
4
- VERSION = '2.0'
4
+ VERSION = '2.0.2'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord_any_of
3
3
  version: !ruby/object:Gem::Version
4
- version: '2.0'
4
+ version: 2.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Olivier El Mekki
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-24 00:00:00.000000000 Z
11
+ date: 2023-07-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,7 +16,7 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '7'
19
+ version: '6'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: '8'
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: '7'
29
+ version: '6'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '8'