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 +4 -4
- data/README.md +6 -1
- data/lib/activerecord_any_of/alternative_builder.rb +26 -7
- data/lib/activerecord_any_of/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 92f4fcfc4f4e943285de5882c8133e38d44b4decea581d2b0685c4133626f254
|
4
|
+
data.tar.gz: a64bf9c0d9e3e65555af122a46d764024df99288c1d6bf096ef0d1ee4b099bd4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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](
|
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
|
-
|
100
|
+
query.children.map { |c| values_for(c) }
|
85
101
|
else
|
86
|
-
|
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), *
|
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), *
|
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
|
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:
|
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-
|
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: '
|
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: '
|
29
|
+
version: '6'
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '8'
|