arel_toolkit 0.4.2 → 0.4.3
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/.github/workflows/develop.yml +4 -2
- data/Appraisals +4 -0
- data/CHANGELOG.md +13 -0
- data/Gemfile.lock +19 -20
- data/arel_toolkit.gemspec +3 -4
- data/gemfiles/active_record_6.gemfile +7 -0
- data/gemfiles/active_record_6.gemfile.lock +210 -0
- data/gemfiles/arel_gems.gemfile.lock +5 -6
- data/gemfiles/default.gemfile.lock +5 -6
- data/lib/arel/extensions.rb +1 -0
- data/lib/arel/extensions/delete_statement.rb +3 -3
- data/lib/arel/extensions/function.rb +1 -1
- data/lib/arel/extensions/infer.rb +1 -1
- data/lib/arel/extensions/insert_statement.rb +1 -1
- data/lib/arel/extensions/select_core.rb +21 -7
- data/lib/arel/extensions/top.rb +8 -0
- data/lib/arel/extensions/update_statement.rb +1 -1
- data/lib/arel/middleware/cache_accessor.rb +35 -0
- data/lib/arel/middleware/chain.rb +53 -29
- data/lib/arel/middleware/database_executor.rb +11 -2
- data/lib/arel/middleware/no_op_cache.rb +9 -0
- data/lib/arel_toolkit.rb +1 -0
- data/lib/arel_toolkit/version.rb +1 -1
- metadata +18 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 28d6dfc92b5aebf97e6a22fa4ded2583f5d2184b1f0a8afc7ea4bc1951805b6d
|
4
|
+
data.tar.gz: 9c72d8926233ec968b2c864886a422848bb0fd85c7e2828e86db0b9cee21144a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7aaab2a35e519f4c85ce56135efa0374b8806318791913c351b797972827e0c10a5e4b9d17f6d21d8abed7508db17170a199ec4186dc16a9036a4e460a767ca0
|
7
|
+
data.tar.gz: 127121759494230ea9d82b7499812f942c44026f4ff7d22dc08b45d0b5a60ce1505b11bc4c6136391005aef17ef2932565e6266c189fd521c0869dac455bdf47
|
@@ -47,8 +47,10 @@ jobs:
|
|
47
47
|
- name: Rebase
|
48
48
|
if: matrix.rebase
|
49
49
|
run: |
|
50
|
-
|
51
|
-
|
50
|
+
export GIT_AUTHOR_NAME=${CI_COMMIT_AUTHOR_NAME=GithubCI}
|
51
|
+
export GIT_AUTHOR_EMAIL=${CI_COMMIT_AUTHOR_EMAIL=ci@github.comm}
|
52
|
+
export GIT_COMMITTER_NAME=${GIT_AUTHOR_NAME}
|
53
|
+
export GIT_COMMITTER_EMAIL=${GIT_AUTHOR_EMAIL}
|
52
54
|
git fetch origin $GITHUB_REF
|
53
55
|
git rebase $GITHUB_SHA
|
54
56
|
|
data/Appraisals
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [v0.4.3](https://github.com/mvgijssel/arel_toolkit/tree/v0.4.3) (2020-11-09)
|
4
|
+
|
5
|
+
[Full Changelog](https://github.com/mvgijssel/arel_toolkit/compare/v0.4.2...v0.4.3)
|
6
|
+
|
7
|
+
**Implemented enhancements:**
|
8
|
+
|
9
|
+
- Upgrade active\_record to 6 [\#167](https://github.com/mvgijssel/arel_toolkit/pull/167) ([khaleksa](https://github.com/khaleksa))
|
10
|
+
- Bump json from 2.2.0 to 2.3.1 [\#166](https://github.com/mvgijssel/arel_toolkit/pull/166) ([dependabot[bot]](https://github.com/apps/dependabot))
|
11
|
+
- Bump activesupport from 5.2.3 to 5.2.4.3 [\#165](https://github.com/mvgijssel/arel_toolkit/pull/165) ([dependabot[bot]](https://github.com/apps/dependabot))
|
12
|
+
- Update rake requirement from ~\> 10.0 to ~\> 13.0 [\#161](https://github.com/mvgijssel/arel_toolkit/pull/161) ([dependabot[bot]](https://github.com/apps/dependabot))
|
13
|
+
- Bump nokogiri from 1.10.4 to 1.10.8 [\#160](https://github.com/mvgijssel/arel_toolkit/pull/160) ([dependabot[bot]](https://github.com/apps/dependabot))
|
14
|
+
- Adds cache mechanism to middleware [\#154](https://github.com/mvgijssel/arel_toolkit/pull/154) ([Willianvdv](https://github.com/Willianvdv))
|
15
|
+
|
3
16
|
## [v0.4.2](https://github.com/mvgijssel/arel_toolkit/tree/v0.4.2) (2020-01-08)
|
4
17
|
|
5
18
|
[Full Changelog](https://github.com/mvgijssel/arel_toolkit/compare/v0.4.1...v0.4.2)
|
data/Gemfile.lock
CHANGED
@@ -1,22 +1,21 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
arel_toolkit (0.4.
|
5
|
-
activerecord
|
6
|
-
arel (~> 9.0.0)
|
4
|
+
arel_toolkit (0.4.3)
|
5
|
+
activerecord
|
7
6
|
pg (~> 1.1.4)
|
8
|
-
pg_query (~> 1.
|
7
|
+
pg_query (~> 1.2.0)
|
9
8
|
|
10
9
|
GEM
|
11
10
|
remote: https://rubygems.org/
|
12
11
|
specs:
|
13
|
-
activemodel (5.2.3)
|
14
|
-
activesupport (= 5.2.3)
|
15
|
-
activerecord (5.2.3)
|
16
|
-
activemodel (= 5.2.3)
|
17
|
-
activesupport (= 5.2.3)
|
12
|
+
activemodel (5.2.4.3)
|
13
|
+
activesupport (= 5.2.4.3)
|
14
|
+
activerecord (5.2.4.3)
|
15
|
+
activemodel (= 5.2.4.3)
|
16
|
+
activesupport (= 5.2.4.3)
|
18
17
|
arel (>= 9.0)
|
19
|
-
activesupport (5.2.3)
|
18
|
+
activesupport (5.2.4.3)
|
20
19
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
21
20
|
i18n (>= 0.7, < 2)
|
22
21
|
minitest (~> 5.1)
|
@@ -36,7 +35,7 @@ GEM
|
|
36
35
|
binding_of_caller (0.8.0)
|
37
36
|
debug_inspector (>= 0.0.1)
|
38
37
|
coderay (1.1.2)
|
39
|
-
concurrent-ruby (1.1.
|
38
|
+
concurrent-ruby (1.1.6)
|
40
39
|
database_cleaner (1.7.0)
|
41
40
|
debug_inspector (0.0.3)
|
42
41
|
diff-lcs (1.3)
|
@@ -77,11 +76,11 @@ GEM
|
|
77
76
|
guard (~> 2.0)
|
78
77
|
rubocop (~> 0.20)
|
79
78
|
hirb (0.7.3)
|
80
|
-
i18n (1.
|
79
|
+
i18n (1.8.2)
|
81
80
|
concurrent-ruby (~> 1.0)
|
82
81
|
interception (0.5)
|
83
82
|
jaro_winkler (1.5.3)
|
84
|
-
json (2.
|
83
|
+
json (2.3.1)
|
85
84
|
listen (3.1.5)
|
86
85
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
87
86
|
rb-inotify (~> 0.9, >= 0.9.7)
|
@@ -90,11 +89,11 @@ GEM
|
|
90
89
|
memory_profiler (0.9.14)
|
91
90
|
method_source (0.9.2)
|
92
91
|
mini_portile2 (2.4.0)
|
93
|
-
minitest (5.
|
92
|
+
minitest (5.14.1)
|
94
93
|
multi_json (1.14.1)
|
95
94
|
multipart-post (2.1.1)
|
96
95
|
nenv (0.3.0)
|
97
|
-
nokogiri (1.10.
|
96
|
+
nokogiri (1.10.8)
|
98
97
|
mini_portile2 (~> 2.4.0)
|
99
98
|
notiffany (0.1.1)
|
100
99
|
nenv (~> 0.1)
|
@@ -105,7 +104,7 @@ GEM
|
|
105
104
|
parser (2.6.3.0)
|
106
105
|
ast (~> 2.4.0)
|
107
106
|
pg (1.1.4)
|
108
|
-
pg_query (1.
|
107
|
+
pg_query (1.2.0)
|
109
108
|
pry (0.12.2)
|
110
109
|
coderay (~> 1.1.0)
|
111
110
|
method_source (~> 0.9.0)
|
@@ -125,7 +124,7 @@ GEM
|
|
125
124
|
pry (>= 0.9.11)
|
126
125
|
public_suffix (4.0.1)
|
127
126
|
rainbow (3.0.0)
|
128
|
-
rake (
|
127
|
+
rake (13.0.1)
|
129
128
|
rake-compiler (1.0.7)
|
130
129
|
rake
|
131
130
|
rb-fsevent (0.10.3)
|
@@ -170,7 +169,7 @@ GEM
|
|
170
169
|
stackprof (0.2.13)
|
171
170
|
thor (0.20.3)
|
172
171
|
thread_safe (0.3.6)
|
173
|
-
tzinfo (1.2.
|
172
|
+
tzinfo (1.2.7)
|
174
173
|
thread_safe (~> 0.1)
|
175
174
|
unicode-display_width (1.6.0)
|
176
175
|
yard (0.9.20)
|
@@ -197,7 +196,7 @@ DEPENDENCIES
|
|
197
196
|
pry-nav
|
198
197
|
pry-rescue
|
199
198
|
pry-stack_explorer
|
200
|
-
rake (~>
|
199
|
+
rake (~> 13.0)
|
201
200
|
rake-compiler (~> 1.0)
|
202
201
|
rspec (~> 3.8)
|
203
202
|
rubocop (= 0.71.0)
|
@@ -206,4 +205,4 @@ DEPENDENCIES
|
|
206
205
|
stackprof (~> 0.2)
|
207
206
|
|
208
207
|
BUNDLED WITH
|
209
|
-
2.
|
208
|
+
2.1.4
|
data/arel_toolkit.gemspec
CHANGED
@@ -25,15 +25,14 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.require_paths = ['lib']
|
26
26
|
spec.extensions = ['ext/pg_result_init/extconf.rb']
|
27
27
|
|
28
|
-
spec.add_dependency '
|
29
|
-
spec.add_dependency 'activerecord', '~> 5.2.0'
|
28
|
+
spec.add_dependency 'activerecord'
|
30
29
|
spec.add_dependency 'pg', '~> 1.1.4'
|
31
|
-
spec.add_dependency 'pg_query', '~> 1.
|
30
|
+
spec.add_dependency 'pg_query', '~> 1.2.0'
|
32
31
|
|
33
32
|
spec.add_development_dependency 'bundler', '~> 2.0'
|
34
33
|
spec.add_development_dependency 'dpl', '~> 1.10.11'
|
35
34
|
spec.add_development_dependency 'github_changelog_generator', '~> 1.15'
|
36
|
-
spec.add_development_dependency 'rake', '~>
|
35
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
37
36
|
spec.add_development_dependency 'rake-compiler', '~> 1.0'
|
38
37
|
spec.add_development_dependency 'rspec', '~> 3.8'
|
39
38
|
spec.add_development_dependency 'approvals', '~> 0.0.24'
|
@@ -0,0 +1,210 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ..
|
3
|
+
specs:
|
4
|
+
arel_toolkit (0.4.2)
|
5
|
+
activerecord
|
6
|
+
pg (~> 1.1.4)
|
7
|
+
pg_query (~> 1.2.0)
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: https://rubygems.org/
|
11
|
+
specs:
|
12
|
+
activemodel (6.0.0)
|
13
|
+
activesupport (= 6.0.0)
|
14
|
+
activerecord (6.0.0)
|
15
|
+
activemodel (= 6.0.0)
|
16
|
+
activesupport (= 6.0.0)
|
17
|
+
activesupport (6.0.0)
|
18
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
19
|
+
i18n (>= 0.7, < 2)
|
20
|
+
minitest (~> 5.1)
|
21
|
+
tzinfo (~> 1.1)
|
22
|
+
zeitwerk (~> 2.1, >= 2.1.8)
|
23
|
+
addressable (2.7.0)
|
24
|
+
public_suffix (>= 2.0.2, < 5.0)
|
25
|
+
ansi (1.5.0)
|
26
|
+
appraisal (2.2.0)
|
27
|
+
bundler
|
28
|
+
rake
|
29
|
+
thor (>= 0.14.0)
|
30
|
+
approvals (0.0.24)
|
31
|
+
nokogiri (~> 1.6)
|
32
|
+
thor (~> 0.18)
|
33
|
+
ast (2.4.1)
|
34
|
+
binding_of_caller (0.8.0)
|
35
|
+
debug_inspector (>= 0.0.1)
|
36
|
+
coderay (1.1.3)
|
37
|
+
concurrent-ruby (1.1.7)
|
38
|
+
database_cleaner (1.7.0)
|
39
|
+
debug_inspector (0.0.3)
|
40
|
+
diff-lcs (1.4.4)
|
41
|
+
docile (1.3.2)
|
42
|
+
dpl (1.10.15)
|
43
|
+
faraday (1.1.0)
|
44
|
+
multipart-post (>= 1.2, < 3)
|
45
|
+
ruby2_keywords
|
46
|
+
faraday-http-cache (2.2.0)
|
47
|
+
faraday (>= 0.8)
|
48
|
+
ffi (1.13.1)
|
49
|
+
formatador (0.2.5)
|
50
|
+
github_changelog_generator (1.15.2)
|
51
|
+
activesupport
|
52
|
+
faraday-http-cache
|
53
|
+
multi_json
|
54
|
+
octokit (~> 4.6)
|
55
|
+
rainbow (>= 2.2.1)
|
56
|
+
rake (>= 10.0)
|
57
|
+
retriable (~> 3.0)
|
58
|
+
guard (2.16.2)
|
59
|
+
formatador (>= 0.2.4)
|
60
|
+
listen (>= 2.7, < 4.0)
|
61
|
+
lumberjack (>= 1.0.12, < 2.0)
|
62
|
+
nenv (~> 0.1)
|
63
|
+
notiffany (~> 0.0)
|
64
|
+
pry (>= 0.9.12)
|
65
|
+
shellany (~> 0.0)
|
66
|
+
thor (>= 0.18.1)
|
67
|
+
guard-compat (1.2.1)
|
68
|
+
guard-rake (1.0.0)
|
69
|
+
guard
|
70
|
+
rake
|
71
|
+
guard-rspec (4.7.3)
|
72
|
+
guard (~> 2.1)
|
73
|
+
guard-compat (~> 1.1)
|
74
|
+
rspec (>= 2.99.0, < 4.0)
|
75
|
+
guard-rubocop (1.3.0)
|
76
|
+
guard (~> 2.0)
|
77
|
+
rubocop (~> 0.20)
|
78
|
+
hirb (0.7.3)
|
79
|
+
i18n (1.8.5)
|
80
|
+
concurrent-ruby (~> 1.0)
|
81
|
+
interception (0.5)
|
82
|
+
jaro_winkler (1.5.4)
|
83
|
+
json (2.3.1)
|
84
|
+
listen (3.2.1)
|
85
|
+
rb-fsevent (~> 0.10, >= 0.10.3)
|
86
|
+
rb-inotify (~> 0.9, >= 0.9.10)
|
87
|
+
lumberjack (1.2.8)
|
88
|
+
memory_profiler (0.9.14)
|
89
|
+
method_source (0.9.2)
|
90
|
+
mini_portile2 (2.4.0)
|
91
|
+
minitest (5.14.2)
|
92
|
+
multi_json (1.15.0)
|
93
|
+
multipart-post (2.1.1)
|
94
|
+
nenv (0.3.0)
|
95
|
+
nokogiri (1.10.10)
|
96
|
+
mini_portile2 (~> 2.4.0)
|
97
|
+
notiffany (0.1.3)
|
98
|
+
nenv (~> 0.1)
|
99
|
+
shellany (~> 0.0)
|
100
|
+
octokit (4.19.0)
|
101
|
+
faraday (>= 0.9)
|
102
|
+
sawyer (~> 0.8.0, >= 0.5.3)
|
103
|
+
parallel (1.19.2)
|
104
|
+
parser (2.7.2.0)
|
105
|
+
ast (~> 2.4.1)
|
106
|
+
pg (1.1.4)
|
107
|
+
pg_query (1.2.0)
|
108
|
+
pry (0.12.2)
|
109
|
+
coderay (~> 1.1.0)
|
110
|
+
method_source (~> 0.9.0)
|
111
|
+
pry-alias (0.0.1)
|
112
|
+
binding_of_caller
|
113
|
+
pry
|
114
|
+
pry-doc (1.1.0)
|
115
|
+
pry (~> 0.11)
|
116
|
+
yard (~> 0.9.11)
|
117
|
+
pry-nav (0.3.0)
|
118
|
+
pry (>= 0.9.10, < 0.13.0)
|
119
|
+
pry-rescue (1.5.2)
|
120
|
+
interception (>= 0.5)
|
121
|
+
pry (>= 0.12.0)
|
122
|
+
pry-stack_explorer (0.4.9.3)
|
123
|
+
binding_of_caller (>= 0.7)
|
124
|
+
pry (>= 0.9.11)
|
125
|
+
public_suffix (4.0.6)
|
126
|
+
rainbow (3.0.0)
|
127
|
+
rake (13.0.1)
|
128
|
+
rake-compiler (1.1.1)
|
129
|
+
rake
|
130
|
+
rb-fsevent (0.10.4)
|
131
|
+
rb-inotify (0.10.1)
|
132
|
+
ffi (~> 1.0)
|
133
|
+
retriable (3.1.2)
|
134
|
+
rspec (3.9.0)
|
135
|
+
rspec-core (~> 3.9.0)
|
136
|
+
rspec-expectations (~> 3.9.0)
|
137
|
+
rspec-mocks (~> 3.9.0)
|
138
|
+
rspec-core (3.9.3)
|
139
|
+
rspec-support (~> 3.9.3)
|
140
|
+
rspec-expectations (3.9.3)
|
141
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
142
|
+
rspec-support (~> 3.9.0)
|
143
|
+
rspec-mocks (3.9.1)
|
144
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
145
|
+
rspec-support (~> 3.9.0)
|
146
|
+
rspec-support (3.9.4)
|
147
|
+
rubocop (0.71.0)
|
148
|
+
jaro_winkler (~> 1.5.1)
|
149
|
+
parallel (~> 1.10)
|
150
|
+
parser (>= 2.6)
|
151
|
+
rainbow (>= 2.2.2, < 4.0)
|
152
|
+
ruby-progressbar (~> 1.7)
|
153
|
+
unicode-display_width (>= 1.4.0, < 1.7)
|
154
|
+
ruby-progressbar (1.10.1)
|
155
|
+
ruby2_keywords (0.0.2)
|
156
|
+
sawyer (0.8.2)
|
157
|
+
addressable (>= 2.3.5)
|
158
|
+
faraday (> 0.8, < 2.0)
|
159
|
+
shellany (0.0.1)
|
160
|
+
simplecov (0.16.1)
|
161
|
+
docile (~> 1.1)
|
162
|
+
json (>= 1.8, < 3)
|
163
|
+
simplecov-html (~> 0.10.0)
|
164
|
+
simplecov-console (0.4.2)
|
165
|
+
ansi
|
166
|
+
hirb
|
167
|
+
simplecov
|
168
|
+
simplecov-html (0.10.2)
|
169
|
+
stackprof (0.2.16)
|
170
|
+
thor (0.20.3)
|
171
|
+
thread_safe (0.3.6)
|
172
|
+
tzinfo (1.2.7)
|
173
|
+
thread_safe (~> 0.1)
|
174
|
+
unicode-display_width (1.6.1)
|
175
|
+
yard (0.9.25)
|
176
|
+
zeitwerk (2.4.0)
|
177
|
+
|
178
|
+
PLATFORMS
|
179
|
+
ruby
|
180
|
+
|
181
|
+
DEPENDENCIES
|
182
|
+
activerecord (~> 6.0.0)
|
183
|
+
appraisal (~> 2.2.0)
|
184
|
+
approvals (~> 0.0.24)
|
185
|
+
arel_toolkit!
|
186
|
+
bundler (~> 2.0)
|
187
|
+
database_cleaner (~> 1.7.0)
|
188
|
+
dpl (~> 1.10.11)
|
189
|
+
github_changelog_generator (~> 1.15)
|
190
|
+
guard (~> 2.15)
|
191
|
+
guard-rake (~> 1.0.0)
|
192
|
+
guard-rspec (~> 4.7)
|
193
|
+
guard-rubocop (~> 1.3.0)
|
194
|
+
memory_profiler (~> 0.9)
|
195
|
+
pry
|
196
|
+
pry-alias
|
197
|
+
pry-doc
|
198
|
+
pry-nav
|
199
|
+
pry-rescue
|
200
|
+
pry-stack_explorer
|
201
|
+
rake (~> 13.0)
|
202
|
+
rake-compiler (~> 1.0)
|
203
|
+
rspec (~> 3.8)
|
204
|
+
rubocop (= 0.71.0)
|
205
|
+
simplecov (~> 0.16.1)
|
206
|
+
simplecov-console (~> 0.4.2)
|
207
|
+
stackprof (~> 0.2)
|
208
|
+
|
209
|
+
BUNDLED WITH
|
210
|
+
2.0.2
|
@@ -32,10 +32,9 @@ PATH
|
|
32
32
|
remote: ..
|
33
33
|
specs:
|
34
34
|
arel_toolkit (0.4.2)
|
35
|
-
activerecord
|
36
|
-
arel (~> 9.0.0)
|
35
|
+
activerecord
|
37
36
|
pg (~> 1.1.4)
|
38
|
-
pg_query (~> 1.
|
37
|
+
pg_query (~> 1.2.0)
|
39
38
|
|
40
39
|
GEM
|
41
40
|
remote: https://rubygems.org/
|
@@ -155,7 +154,7 @@ GEM
|
|
155
154
|
ast (~> 2.4.0)
|
156
155
|
pg (1.1.4)
|
157
156
|
pg_array_parser (0.0.9)
|
158
|
-
pg_query (1.
|
157
|
+
pg_query (1.2.0)
|
159
158
|
pry (0.12.2)
|
160
159
|
coderay (~> 1.1.0)
|
161
160
|
method_source (~> 0.9.0)
|
@@ -189,7 +188,7 @@ GEM
|
|
189
188
|
rake (>= 0.8.7)
|
190
189
|
thor (>= 0.19.0, < 2.0)
|
191
190
|
rainbow (3.0.0)
|
192
|
-
rake (
|
191
|
+
rake (13.0.1)
|
193
192
|
rake-compiler (1.0.7)
|
194
193
|
rake
|
195
194
|
rb-fsevent (0.10.3)
|
@@ -272,7 +271,7 @@ DEPENDENCIES
|
|
272
271
|
pry-nav
|
273
272
|
pry-rescue
|
274
273
|
pry-stack_explorer
|
275
|
-
rake (~>
|
274
|
+
rake (~> 13.0)
|
276
275
|
rake-compiler (~> 1.0)
|
277
276
|
rspec (~> 3.8)
|
278
277
|
rspec-rails (~> 3.8.0)
|
@@ -2,10 +2,9 @@ PATH
|
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
4
|
arel_toolkit (0.4.2)
|
5
|
-
activerecord
|
6
|
-
arel (~> 9.0.0)
|
5
|
+
activerecord
|
7
6
|
pg (~> 1.1.4)
|
8
|
-
pg_query (~> 1.
|
7
|
+
pg_query (~> 1.2.0)
|
9
8
|
|
10
9
|
GEM
|
11
10
|
remote: https://rubygems.org/
|
@@ -105,7 +104,7 @@ GEM
|
|
105
104
|
parser (2.6.3.0)
|
106
105
|
ast (~> 2.4.0)
|
107
106
|
pg (1.1.4)
|
108
|
-
pg_query (1.
|
107
|
+
pg_query (1.2.0)
|
109
108
|
pry (0.12.2)
|
110
109
|
coderay (~> 1.1.0)
|
111
110
|
method_source (~> 0.9.0)
|
@@ -125,7 +124,7 @@ GEM
|
|
125
124
|
pry (>= 0.9.11)
|
126
125
|
public_suffix (4.0.1)
|
127
126
|
rainbow (3.0.0)
|
128
|
-
rake (
|
127
|
+
rake (13.0.1)
|
129
128
|
rake-compiler (1.0.7)
|
130
129
|
rake
|
131
130
|
rb-fsevent (0.10.3)
|
@@ -197,7 +196,7 @@ DEPENDENCIES
|
|
197
196
|
pry-nav
|
198
197
|
pry-rescue
|
199
198
|
pry-stack_explorer
|
200
|
-
rake (~>
|
199
|
+
rake (~> 13.0)
|
201
200
|
rake-compiler (~> 1.0)
|
202
201
|
rspec (~> 3.8)
|
203
202
|
rubocop (= 0.71.0)
|
data/lib/arel/extensions.rb
CHANGED
@@ -27,7 +27,7 @@ module Arel
|
|
27
27
|
def visit_Arel_Nodes_DeleteStatement(o, collector)
|
28
28
|
if o.with
|
29
29
|
collector = visit o.with, collector
|
30
|
-
collector <<
|
30
|
+
collector << ' '
|
31
31
|
end
|
32
32
|
|
33
33
|
collector << 'DELETE FROM '
|
@@ -39,8 +39,8 @@ module Arel
|
|
39
39
|
end
|
40
40
|
|
41
41
|
if o.wheres.any?
|
42
|
-
collector << WHERE
|
43
|
-
collector = inject_join o.wheres, collector, AND
|
42
|
+
collector << ' WHERE '
|
43
|
+
collector = inject_join o.wheres, collector, ' AND '
|
44
44
|
end
|
45
45
|
|
46
46
|
unless o.returning.empty?
|
@@ -6,6 +6,22 @@ module Arel
|
|
6
6
|
module Nodes
|
7
7
|
class SelectCore < Arel::Nodes::Node
|
8
8
|
attr_accessor :into
|
9
|
+
attr_accessor :top
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def hash
|
14
|
+
[
|
15
|
+
@source, @set_quantifier, @projections, @optimizer_hints,
|
16
|
+
@wheres, @groups, @havings, @windows, @comment, @top, @into
|
17
|
+
].hash
|
18
|
+
end
|
19
|
+
|
20
|
+
def eql?(other)
|
21
|
+
super &&
|
22
|
+
top == other.top &&
|
23
|
+
into == other.into
|
24
|
+
end
|
9
25
|
end
|
10
26
|
end
|
11
27
|
|
@@ -14,11 +30,9 @@ module Arel
|
|
14
30
|
def visit_Arel_Nodes_SelectCore(o, collector)
|
15
31
|
collector << 'SELECT'
|
16
32
|
|
17
|
-
collector = maybe_visit o.top, collector
|
18
|
-
|
19
33
|
collector = maybe_visit o.set_quantifier, collector
|
20
34
|
|
21
|
-
collect_nodes_for o.projections, collector,
|
35
|
+
collect_nodes_for o.projections, collector, ' '
|
22
36
|
|
23
37
|
maybe_visit o.into, collector
|
24
38
|
|
@@ -27,13 +41,13 @@ module Arel
|
|
27
41
|
collector = visit o.source, collector
|
28
42
|
end
|
29
43
|
|
30
|
-
collect_nodes_for o.wheres, collector, WHERE, AND
|
31
|
-
collect_nodes_for o.groups, collector,
|
44
|
+
collect_nodes_for o.wheres, collector, ' WHERE ', ' AND '
|
45
|
+
collect_nodes_for o.groups, collector, ' GROUP BY '
|
32
46
|
unless o.havings.empty?
|
33
47
|
collector << ' HAVING '
|
34
|
-
inject_join o.havings, collector, AND
|
48
|
+
inject_join o.havings, collector, ' AND '
|
35
49
|
end
|
36
|
-
collect_nodes_for o.windows, collector, WINDOW
|
50
|
+
collect_nodes_for o.windows, collector, ' WINDOW '
|
37
51
|
|
38
52
|
collector
|
39
53
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Arel
|
2
|
+
module Middleware
|
3
|
+
class CacheAccessor
|
4
|
+
attr_reader :cache
|
5
|
+
|
6
|
+
def initialize(cache)
|
7
|
+
@cache = cache
|
8
|
+
end
|
9
|
+
|
10
|
+
def read(original_sql)
|
11
|
+
cache.read cache_key(original_sql)
|
12
|
+
end
|
13
|
+
|
14
|
+
def write(transformed_sql:, transformed_binds:, original_sql:, original_binds:)
|
15
|
+
# To play it safe, the order of binds was changed and therefore we won't reuse the query
|
16
|
+
return if transformed_binds != original_binds
|
17
|
+
|
18
|
+
cache.write(cache_key(original_sql), transformed_sql)
|
19
|
+
end
|
20
|
+
|
21
|
+
def cache_key_for_sql(sql)
|
22
|
+
Digest::SHA256.hexdigest(sql)
|
23
|
+
end
|
24
|
+
|
25
|
+
def cache_key(sql)
|
26
|
+
# An important aspect of this cache key method is that it includes hashes of all active
|
27
|
+
# middlewares. If multiple Arel middleware chains that are using the same cache backend,
|
28
|
+
# this cache key mechanism will prevent cache entries leak in the wrong chain.
|
29
|
+
|
30
|
+
active_middleware_cache_key = Arel.middleware.current.map(&:hash).join('&') || 0
|
31
|
+
active_middleware_cache_key + '|' + cache_key_for_sql(sql)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -1,81 +1,90 @@
|
|
1
|
+
require_relative './no_op_cache'
|
2
|
+
require_relative './cache_accessor'
|
3
|
+
|
1
4
|
module Arel
|
2
5
|
module Middleware
|
3
6
|
class Chain
|
4
|
-
attr_reader :
|
7
|
+
attr_reader :executing_middleware_depth
|
5
8
|
attr_reader :executor
|
9
|
+
attr_reader :cache
|
10
|
+
|
11
|
+
MAX_RECURSION_DEPTH = 10
|
6
12
|
|
7
13
|
def initialize(
|
8
14
|
internal_middleware = [],
|
9
15
|
internal_context = {},
|
10
|
-
executor_class = Arel::Middleware::DatabaseExecutor
|
16
|
+
executor_class = Arel::Middleware::DatabaseExecutor,
|
17
|
+
cache: nil
|
11
18
|
)
|
12
19
|
@internal_middleware = internal_middleware
|
13
20
|
@internal_context = internal_context
|
14
21
|
@executor = executor_class.new(internal_middleware)
|
15
|
-
@
|
22
|
+
@executing_middleware_depth = 0
|
23
|
+
@cache = cache || NoOpCache
|
24
|
+
end
|
25
|
+
|
26
|
+
def cache_accessor
|
27
|
+
@cache_accessor ||= CacheAccessor.new @cache
|
16
28
|
end
|
17
29
|
|
18
30
|
def execute(sql, binds = [], &execute_sql)
|
19
31
|
return execute_sql.call(sql, binds).to_casted_result if internal_middleware.length.zero?
|
20
32
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
enhanced_arel = Arel.enhance(Arel.sql_to_arel(sql, binds: binds))
|
25
|
-
|
26
|
-
result = executor.run(enhanced_arel, updated_context, execute_sql)
|
33
|
+
if (cached_sql = cache_accessor.read(sql))
|
34
|
+
return execute_sql.call(cached_sql, binds).to_casted_result
|
35
|
+
end
|
27
36
|
|
28
|
-
|
37
|
+
execute_with_middleware(sql, binds, execute_sql).to_casted_result
|
29
38
|
rescue ::PgQuery::ParseError
|
30
39
|
execute_sql.call(sql, binds)
|
31
40
|
ensure
|
32
|
-
@
|
41
|
+
@executing_middleware_depth -= 1
|
33
42
|
end
|
34
43
|
|
35
44
|
def current
|
36
45
|
internal_middleware.dup
|
37
46
|
end
|
38
47
|
|
39
|
-
def apply(middleware, &block)
|
48
|
+
def apply(middleware, cache: @cache, &block)
|
40
49
|
new_middleware = Array.wrap(middleware)
|
41
|
-
continue_chain(new_middleware, internal_context, &block)
|
50
|
+
continue_chain(new_middleware, internal_context, cache: cache, &block)
|
42
51
|
end
|
43
52
|
alias only apply
|
44
53
|
|
45
54
|
def none(&block)
|
46
|
-
continue_chain([], internal_context, &block)
|
55
|
+
continue_chain([], internal_context, cache: cache, &block)
|
47
56
|
end
|
48
57
|
|
49
|
-
def except(without_middleware, &block)
|
58
|
+
def except(without_middleware, cache: @cache, &block)
|
50
59
|
without_middleware = Array.wrap(without_middleware)
|
51
60
|
new_middleware = internal_middleware - without_middleware
|
52
|
-
continue_chain(new_middleware, internal_context, &block)
|
61
|
+
continue_chain(new_middleware, internal_context, cache: cache, &block)
|
53
62
|
end
|
54
63
|
|
55
|
-
def insert_before(new_middleware, existing_middleware, &block)
|
64
|
+
def insert_before(new_middleware, existing_middleware, cache: @cache, &block)
|
56
65
|
new_middleware = Array.wrap(new_middleware)
|
57
66
|
index = internal_middleware.index(existing_middleware)
|
58
67
|
updated_middleware = internal_middleware.insert(index, *new_middleware)
|
59
|
-
continue_chain(updated_middleware, internal_context, &block)
|
68
|
+
continue_chain(updated_middleware, internal_context, cache: cache, &block)
|
60
69
|
end
|
61
70
|
|
62
|
-
def prepend(new_middleware, &block)
|
71
|
+
def prepend(new_middleware, cache: @cache, &block)
|
63
72
|
new_middleware = Array.wrap(new_middleware)
|
64
73
|
updated_middleware = new_middleware + internal_middleware
|
65
|
-
continue_chain(updated_middleware, internal_context, &block)
|
74
|
+
continue_chain(updated_middleware, internal_context, cache: cache, &block)
|
66
75
|
end
|
67
76
|
|
68
|
-
def insert_after(new_middleware, existing_middleware, &block)
|
77
|
+
def insert_after(new_middleware, existing_middleware, cache: @cache, &block)
|
69
78
|
new_middleware = Array.wrap(new_middleware)
|
70
79
|
index = internal_middleware.index(existing_middleware)
|
71
80
|
updated_middleware = internal_middleware.insert(index + 1, *new_middleware)
|
72
|
-
continue_chain(updated_middleware, internal_context, &block)
|
81
|
+
continue_chain(updated_middleware, internal_context, cache: cache, &block)
|
73
82
|
end
|
74
83
|
|
75
|
-
def append(new_middleware, &block)
|
84
|
+
def append(new_middleware, cache: @cache, &block)
|
76
85
|
new_middleware = Array.wrap(new_middleware)
|
77
86
|
updated_middleware = internal_middleware + new_middleware
|
78
|
-
continue_chain(updated_middleware, internal_context, &block)
|
87
|
+
continue_chain(updated_middleware, internal_context, cache: cache, &block)
|
79
88
|
end
|
80
89
|
|
81
90
|
def context(new_context = nil, &block)
|
@@ -85,7 +94,7 @@ module Arel
|
|
85
94
|
|
86
95
|
return internal_context if new_context.nil?
|
87
96
|
|
88
|
-
continue_chain(internal_middleware, new_context, &block)
|
97
|
+
continue_chain(internal_middleware, new_context, cache: @cache, &block)
|
89
98
|
end
|
90
99
|
|
91
100
|
def to_sql(type, &block)
|
@@ -109,8 +118,23 @@ module Arel
|
|
109
118
|
|
110
119
|
private
|
111
120
|
|
112
|
-
def
|
113
|
-
|
121
|
+
def execute_with_middleware(sql, binds, execute_sql)
|
122
|
+
check_middleware_recursion(sql)
|
123
|
+
|
124
|
+
updated_context = context.merge(
|
125
|
+
original_sql: sql,
|
126
|
+
original_binds: binds,
|
127
|
+
cache_accessor: cache_accessor,
|
128
|
+
)
|
129
|
+
|
130
|
+
arel = Arel.sql_to_arel(sql, binds: binds)
|
131
|
+
enhanced_arel = Arel.enhance(arel)
|
132
|
+
|
133
|
+
executor.run(enhanced_arel, updated_context, execute_sql)
|
134
|
+
end
|
135
|
+
|
136
|
+
def continue_chain(middleware, context, cache:, &block)
|
137
|
+
new_chain = Arel::Middleware::Chain.new(middleware, context, cache: cache)
|
114
138
|
maybe_execute_block(new_chain, &block)
|
115
139
|
end
|
116
140
|
|
@@ -125,7 +149,7 @@ module Arel
|
|
125
149
|
end
|
126
150
|
|
127
151
|
def check_middleware_recursion(sql)
|
128
|
-
if
|
152
|
+
if executing_middleware_depth > MAX_RECURSION_DEPTH
|
129
153
|
message = <<~ERROR
|
130
154
|
Middleware is being called from within middleware, aborting execution
|
131
155
|
to prevent endless recursion. You can do the following if you want to execute SQL
|
@@ -140,7 +164,7 @@ module Arel
|
|
140
164
|
|
141
165
|
raise message
|
142
166
|
else
|
143
|
-
@
|
167
|
+
@executing_middleware_depth += 1
|
144
168
|
end
|
145
169
|
end
|
146
170
|
end
|
@@ -11,12 +11,12 @@ module Arel
|
|
11
11
|
@middleware = middleware
|
12
12
|
end
|
13
13
|
|
14
|
-
def run(
|
14
|
+
def run(arel, context, final_block)
|
15
15
|
@index = 0
|
16
16
|
@context = context
|
17
17
|
@final_block = final_block
|
18
18
|
|
19
|
-
result = call(
|
19
|
+
result = call(arel)
|
20
20
|
check_return_type result
|
21
21
|
result
|
22
22
|
ensure
|
@@ -46,7 +46,16 @@ module Arel
|
|
46
46
|
|
47
47
|
def execute_sql(next_arel)
|
48
48
|
sql, binds = next_arel.to_sql_and_binds
|
49
|
+
|
50
|
+
context[:cache_accessor].write(
|
51
|
+
transformed_sql: sql,
|
52
|
+
transformed_binds: binds,
|
53
|
+
original_sql: context[:original_sql],
|
54
|
+
original_binds: context[:original_binds],
|
55
|
+
)
|
56
|
+
|
49
57
|
sql_result = final_block.call(sql, binds)
|
58
|
+
|
50
59
|
check_return_type sql_result
|
51
60
|
sql_result
|
52
61
|
end
|
data/lib/arel_toolkit.rb
CHANGED
data/lib/arel_toolkit/version.rb
CHANGED
metadata
CHANGED
@@ -1,43 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arel_toolkit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- maarten
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-11-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: arel
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 9.0.0
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 9.0.0
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: activerecord
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
30
16
|
requirements:
|
31
|
-
- - "
|
17
|
+
- - ">="
|
32
18
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
19
|
+
version: '0'
|
34
20
|
type: :runtime
|
35
21
|
prerelease: false
|
36
22
|
version_requirements: !ruby/object:Gem::Requirement
|
37
23
|
requirements:
|
38
|
-
- - "
|
24
|
+
- - ">="
|
39
25
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
26
|
+
version: '0'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: pg
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,14 +44,14 @@ dependencies:
|
|
58
44
|
requirements:
|
59
45
|
- - "~>"
|
60
46
|
- !ruby/object:Gem::Version
|
61
|
-
version: 1.
|
47
|
+
version: 1.2.0
|
62
48
|
type: :runtime
|
63
49
|
prerelease: false
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
52
|
- - "~>"
|
67
53
|
- !ruby/object:Gem::Version
|
68
|
-
version: 1.
|
54
|
+
version: 1.2.0
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: bundler
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,14 +100,14 @@ dependencies:
|
|
114
100
|
requirements:
|
115
101
|
- - "~>"
|
116
102
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
103
|
+
version: '13.0'
|
118
104
|
type: :development
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
107
|
requirements:
|
122
108
|
- - "~>"
|
123
109
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
110
|
+
version: '13.0'
|
125
111
|
- !ruby/object:Gem::Dependency
|
126
112
|
name: rake-compiler
|
127
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -437,6 +423,8 @@ files:
|
|
437
423
|
- ext/pg_result_init/pg_result_init.c
|
438
424
|
- ext/pg_result_init/pg_result_init.h
|
439
425
|
- gemfiles/.bundle/config
|
426
|
+
- gemfiles/active_record_6.gemfile
|
427
|
+
- gemfiles/active_record_6.gemfile.lock
|
440
428
|
- gemfiles/arel_gems.gemfile
|
441
429
|
- gemfiles/arel_gems.gemfile.lock
|
442
430
|
- gemfiles/default.gemfile
|
@@ -548,6 +536,7 @@ files:
|
|
548
536
|
- lib/arel/extensions/table.rb
|
549
537
|
- lib/arel/extensions/time_with_precision.rb
|
550
538
|
- lib/arel/extensions/to_sql.rb
|
539
|
+
- lib/arel/extensions/top.rb
|
551
540
|
- lib/arel/extensions/transaction.rb
|
552
541
|
- lib/arel/extensions/tree_manager.rb
|
553
542
|
- lib/arel/extensions/trim.rb
|
@@ -565,8 +554,10 @@ files:
|
|
565
554
|
- lib/arel/extensions/with_ordinality.rb
|
566
555
|
- lib/arel/middleware.rb
|
567
556
|
- lib/arel/middleware/active_record_extension.rb
|
557
|
+
- lib/arel/middleware/cache_accessor.rb
|
568
558
|
- lib/arel/middleware/chain.rb
|
569
559
|
- lib/arel/middleware/database_executor.rb
|
560
|
+
- lib/arel/middleware/no_op_cache.rb
|
570
561
|
- lib/arel/middleware/postgresql_adapter.rb
|
571
562
|
- lib/arel/middleware/railtie.rb
|
572
563
|
- lib/arel/middleware/result.rb
|
@@ -587,7 +578,7 @@ homepage: https://github.com/mvgijssel/arel_toolkit
|
|
587
578
|
licenses:
|
588
579
|
- MIT
|
589
580
|
metadata: {}
|
590
|
-
post_install_message:
|
581
|
+
post_install_message:
|
591
582
|
rdoc_options: []
|
592
583
|
require_paths:
|
593
584
|
- lib
|
@@ -603,7 +594,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
603
594
|
version: '0'
|
604
595
|
requirements: []
|
605
596
|
rubygems_version: 3.0.3
|
606
|
-
signing_key:
|
597
|
+
signing_key:
|
607
598
|
specification_version: 4
|
608
599
|
summary: Collection of tools for Arel
|
609
600
|
test_files: []
|