arel_toolkit 0.4.0 → 0.4.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/.github/workflows/develop.yml +86 -0
- data/.github/workflows/master.yml +67 -0
- data/.gitignore +4 -0
- data/CHANGELOG.md +35 -3
- data/Gemfile.lock +22 -15
- data/Guardfile +4 -0
- data/README.md +11 -8
- data/Rakefile +11 -1
- data/arel_toolkit.gemspec +4 -1
- data/ext/pg_result_init/extconf.rb +52 -0
- data/ext/pg_result_init/pg_result_init.c +138 -0
- data/ext/pg_result_init/pg_result_init.h +6 -0
- data/gemfiles/arel_gems.gemfile.lock +7 -0
- data/gemfiles/default.gemfile.lock +7 -0
- data/lib/arel/enhance.rb +1 -0
- data/lib/arel/enhance/context_enhancer/arel_table.rb +18 -1
- data/lib/arel/enhance/node.rb +25 -6
- data/lib/arel/enhance/query.rb +2 -0
- data/lib/arel/enhance/query_methods.rb +23 -0
- data/lib/arel/enhance/visitor.rb +4 -2
- data/lib/arel/extensions.rb +7 -2
- data/lib/arel/extensions/active_model_attribute_with_cast_value.rb +22 -0
- data/lib/arel/extensions/active_record_relation_query_attribute.rb +22 -0
- data/lib/arel/extensions/active_record_type_caster_connection.rb +7 -0
- data/lib/arel/extensions/attributes_attribute.rb +47 -0
- data/lib/arel/extensions/bind_param.rb +15 -0
- data/lib/arel/extensions/coalesce.rb +17 -3
- data/lib/arel/extensions/exists.rb +59 -0
- data/lib/arel/extensions/function.rb +2 -1
- data/lib/arel/extensions/greatest.rb +17 -3
- data/lib/arel/extensions/insert_statement.rb +2 -2
- data/lib/arel/extensions/least.rb +17 -3
- data/lib/arel/extensions/node.rb +10 -0
- data/lib/arel/extensions/range_function.rb +10 -2
- data/lib/arel/extensions/select_core.rb +1 -0
- data/lib/arel/extensions/tree_manager.rb +5 -0
- data/lib/arel/middleware.rb +5 -1
- data/lib/arel/middleware/active_record_extension.rb +13 -0
- data/lib/arel/middleware/chain.rb +76 -21
- data/lib/arel/middleware/database_executor.rb +68 -0
- data/lib/arel/middleware/postgresql_adapter.rb +41 -5
- data/lib/arel/middleware/railtie.rb +6 -2
- data/lib/arel/middleware/result.rb +170 -0
- data/lib/arel/middleware/to_sql_executor.rb +15 -0
- data/lib/arel/middleware/to_sql_middleware.rb +33 -0
- data/lib/arel/sql_to_arel/pg_query_visitor.rb +34 -33
- data/lib/arel/sql_to_arel/result.rb +19 -2
- data/lib/arel/transformer.rb +2 -1
- data/lib/arel/transformer/prefix_schema_name.rb +183 -0
- data/lib/arel/transformer/remove_active_record_info.rb +2 -4
- data/lib/arel/transformer/replace_table_with_subquery.rb +31 -0
- data/lib/arel_toolkit.rb +6 -1
- data/lib/arel_toolkit/version.rb +1 -1
- metadata +55 -10
- data/.travis.yml +0 -34
- data/lib/arel/extensions/generate_series.rb +0 -9
- data/lib/arel/extensions/rank.rb +0 -9
- data/lib/arel/transformer/add_schema_to_table.rb +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e58b08598fbaed4b77466a70f23818f8f41c6a82657c3a7bed28541b06f3c01
|
4
|
+
data.tar.gz: a16bfdb439a31fece794eaa6d54092ad0edb52e3e463957abf96db8259e6e0c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ee280959b83a74d0f633442d488218aa36ea88bba7f1d2783ae9848bcb1904055e28db1d71a66bd187360e0bf4cebce1da0c248284a6bf28c3476c6a206d4d98
|
7
|
+
data.tar.gz: 7b571f3ed5301b57053039fd1088a698d4e3f7bb355bda276477254a33a5b49dcee64abf0381268df1408ebf7d35a593ec14757b5ea4998c898c71e978f41b5b
|
@@ -0,0 +1,86 @@
|
|
1
|
+
name: CI - develop
|
2
|
+
on:
|
3
|
+
push:
|
4
|
+
branches-ignore:
|
5
|
+
- master
|
6
|
+
|
7
|
+
jobs:
|
8
|
+
rspec:
|
9
|
+
name: RSpec - ${{ matrix.title }}
|
10
|
+
runs-on: ubuntu-latest
|
11
|
+
strategy:
|
12
|
+
fail-fast: false
|
13
|
+
matrix:
|
14
|
+
checkout: [branch, master]
|
15
|
+
include:
|
16
|
+
- checkout: branch
|
17
|
+
ref: null
|
18
|
+
title: current branch
|
19
|
+
rebase: false
|
20
|
+
codeclimate: true
|
21
|
+
- checkout: master
|
22
|
+
ref: master
|
23
|
+
title: merge with master
|
24
|
+
rebase: true
|
25
|
+
codeclimate: false
|
26
|
+
|
27
|
+
services:
|
28
|
+
postgres:
|
29
|
+
options: >-
|
30
|
+
--health-cmd pg_isready
|
31
|
+
--health-interval 10s
|
32
|
+
--health-timeout 5s
|
33
|
+
--health-retries 5
|
34
|
+
image: postgres:10.10
|
35
|
+
ports:
|
36
|
+
- 5432:5432
|
37
|
+
env:
|
38
|
+
POSTGRES_DB: arel_toolkit_test
|
39
|
+
POSTGRES_USER: postgres
|
40
|
+
steps:
|
41
|
+
- uses: actions/checkout@v1
|
42
|
+
with:
|
43
|
+
ref: ${{ matrix.ref }}
|
44
|
+
|
45
|
+
# Based on
|
46
|
+
# https://discourse.drone.io/t/planned-change-to-git-clone-logic/1165
|
47
|
+
- name: Rebase
|
48
|
+
if: matrix.rebase
|
49
|
+
run: |
|
50
|
+
git fetch origin $GITHUB_REF
|
51
|
+
git rebase $GITHUB_SHA
|
52
|
+
|
53
|
+
- name: Set up Ruby 2.5.x
|
54
|
+
uses: actions/setup-ruby@v1
|
55
|
+
with:
|
56
|
+
ruby-version: 2.5.x
|
57
|
+
|
58
|
+
- name: Setup
|
59
|
+
run: |
|
60
|
+
curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
61
|
+
chmod +x ./cc-test-reporter
|
62
|
+
./cc-test-reporter before-build
|
63
|
+
|
64
|
+
sudo apt-get install -y libpq-dev
|
65
|
+
|
66
|
+
gem install bundler
|
67
|
+
|
68
|
+
bundle install --jobs 4 --retry 3
|
69
|
+
bundle exec appraisal install
|
70
|
+
|
71
|
+
bundle exec rake clean
|
72
|
+
bundle exec rake compile
|
73
|
+
|
74
|
+
- name: RSpec
|
75
|
+
run: |
|
76
|
+
bundle exec appraisal rspec --force-color
|
77
|
+
|
78
|
+
- name: Report to codeclimate
|
79
|
+
if: always() && matrix.codeclimate
|
80
|
+
shell: bash
|
81
|
+
env:
|
82
|
+
JOB_STATUS: ${{ job.status == 'Success' }}
|
83
|
+
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
84
|
+
run: |
|
85
|
+
EXIT_CODE=$([[ "$JOB_STATUS" == true ]] && echo 0 || echo 1)
|
86
|
+
./cc-test-reporter after-build --exit-code $EXIT_CODE
|
@@ -0,0 +1,67 @@
|
|
1
|
+
name: CI - master
|
2
|
+
on:
|
3
|
+
push:
|
4
|
+
branches:
|
5
|
+
- master
|
6
|
+
|
7
|
+
jobs:
|
8
|
+
rspec:
|
9
|
+
name: RSpec - master
|
10
|
+
runs-on: ubuntu-latest
|
11
|
+
|
12
|
+
services:
|
13
|
+
postgres:
|
14
|
+
options: >-
|
15
|
+
--health-cmd pg_isready
|
16
|
+
--health-interval 10s
|
17
|
+
--health-timeout 5s
|
18
|
+
--health-retries 5
|
19
|
+
image: postgres:10.10
|
20
|
+
ports:
|
21
|
+
- 5432:5432
|
22
|
+
env:
|
23
|
+
POSTGRES_DB: arel_toolkit_test
|
24
|
+
POSTGRES_USER: postgres
|
25
|
+
steps:
|
26
|
+
- uses: actions/checkout@v1
|
27
|
+
|
28
|
+
- name: Set up Ruby 2.5.x
|
29
|
+
uses: actions/setup-ruby@v1
|
30
|
+
with:
|
31
|
+
ruby-version: 2.5.x
|
32
|
+
|
33
|
+
- name: Setup
|
34
|
+
run: |
|
35
|
+
curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
36
|
+
chmod +x ./cc-test-reporter
|
37
|
+
./cc-test-reporter before-build
|
38
|
+
|
39
|
+
sudo apt-get install -y libpq-dev
|
40
|
+
|
41
|
+
gem install bundler
|
42
|
+
|
43
|
+
bundle install --jobs 4 --retry 3
|
44
|
+
bundle exec appraisal install
|
45
|
+
|
46
|
+
bundle exec rake clean
|
47
|
+
bundle exec rake compile
|
48
|
+
|
49
|
+
- name: RSpec
|
50
|
+
run: |
|
51
|
+
bundle exec appraisal rspec --force-color
|
52
|
+
|
53
|
+
- name: Report to codeclimate
|
54
|
+
if: always()
|
55
|
+
shell: bash
|
56
|
+
env:
|
57
|
+
JOB_STATUS: ${{ job.status == 'Success' }}
|
58
|
+
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
59
|
+
run: |
|
60
|
+
EXIT_CODE=$([[ "$JOB_STATUS" == true ]] && echo 0 || echo 1)
|
61
|
+
./cc-test-reporter after-build --exit-code $EXIT_CODE
|
62
|
+
|
63
|
+
- name: Upload coverage to GitHub pages
|
64
|
+
uses: maxheld83/ghpages@v0.2.1
|
65
|
+
env:
|
66
|
+
BUILD_DIR: ./coverage
|
67
|
+
GH_PAT: ${{ secrets.GH_PAT }}
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,31 @@
|
|
1
|
-
#
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
## [v0.4.1](https://github.com/mvgijssel/arel_toolkit/tree/v0.4.1) (2019-11-13)
|
4
|
+
|
5
|
+
[Full Changelog](https://github.com/mvgijssel/arel_toolkit/compare/v0.4.0...v0.4.1)
|
6
|
+
|
7
|
+
**Implemented enhancements:**
|
8
|
+
|
9
|
+
- Create a transformer that replaces a table reference with a subquery [\#141](https://github.com/mvgijssel/arel_toolkit/issues/141)
|
10
|
+
- Same signature for all middleware helpers [\#135](https://github.com/mvgijssel/arel_toolkit/issues/135)
|
11
|
+
- Instantiate PG::Result object instead of duck typed object [\#130](https://github.com/mvgijssel/arel_toolkit/issues/130)
|
12
|
+
- Add `to\_sql` to Arel.middleware which prints the sql after middleware processing [\#127](https://github.com/mvgijssel/arel_toolkit/issues/127)
|
13
|
+
- Extend Middleware to include the response from the database [\#126](https://github.com/mvgijssel/arel_toolkit/issues/126)
|
14
|
+
- Extend AddSchemaToTable to support multiple schemas and regclass typecasts [\#124](https://github.com/mvgijssel/arel_toolkit/issues/124)
|
15
|
+
- Optional context argument for Arel middleware [\#110](https://github.com/mvgijssel/arel_toolkit/issues/110)
|
16
|
+
- Handle is\_rowsfrom in pg\_query\_visitor\#visit\_RangeFunction [\#36](https://github.com/mvgijssel/arel_toolkit/issues/36)
|
17
|
+
- Bump nokogiri from 1.10.3 to 1.10.4 [\#132](https://github.com/mvgijssel/arel_toolkit/pull/132) ([dependabot[bot]](https://github.com/apps/dependabot))
|
18
|
+
|
19
|
+
**Fixed bugs:**
|
20
|
+
|
21
|
+
- Handle column reference with 3 \(or more\) fields [\#145](https://github.com/mvgijssel/arel_toolkit/issues/145)
|
22
|
+
- Error when aliasing a range select [\#144](https://github.com/mvgijssel/arel_toolkit/issues/144)
|
23
|
+
- Make sure the method signatures of PostgreSQLAdapter match [\#122](https://github.com/mvgijssel/arel_toolkit/issues/122)
|
24
|
+
- Fix missing middleware method and fix \(again\) infinite middleware recursion [\#120](https://github.com/mvgijssel/arel_toolkit/issues/120)
|
25
|
+
- Use named window with OVER. [\#149](https://github.com/mvgijssel/arel_toolkit/pull/149) ([khaleksa](https://github.com/khaleksa))
|
2
26
|
|
3
27
|
## [v0.4.0](https://github.com/mvgijssel/arel_toolkit/tree/v0.4.0) (2019-07-31)
|
28
|
+
|
4
29
|
[Full Changelog](https://github.com/mvgijssel/arel_toolkit/compare/v0.3.0...v0.4.0)
|
5
30
|
|
6
31
|
**Implemented enhancements:**
|
@@ -20,6 +45,7 @@
|
|
20
45
|
- TypeError: superclass mismatch for class Overlap [\#93](https://github.com/mvgijssel/arel_toolkit/issues/93)
|
21
46
|
|
22
47
|
## [v0.3.0](https://github.com/mvgijssel/arel_toolkit/tree/v0.3.0) (2019-07-01)
|
48
|
+
|
23
49
|
[Full Changelog](https://github.com/mvgijssel/arel_toolkit/compare/v0.2.0...v0.3.0)
|
24
50
|
|
25
51
|
**Implemented enhancements:**
|
@@ -47,6 +73,7 @@
|
|
47
73
|
- File issues for commented out rspec test [\#51](https://github.com/mvgijssel/arel_toolkit/issues/51)
|
48
74
|
|
49
75
|
## [v0.2.0](https://github.com/mvgijssel/arel_toolkit/tree/v0.2.0) (2019-05-30)
|
76
|
+
|
50
77
|
[Full Changelog](https://github.com/mvgijssel/arel_toolkit/compare/v0.1.0...v0.2.0)
|
51
78
|
|
52
79
|
**Implemented enhancements:**
|
@@ -61,6 +88,12 @@
|
|
61
88
|
- Implement pg\_query\_visitor method for UPDATE [\#20](https://github.com/mvgijssel/arel_toolkit/issues/20)
|
62
89
|
- Implement all the visitor methods in PgQueryVisitor for SELECT statements [\#11](https://github.com/mvgijssel/arel_toolkit/issues/11)
|
63
90
|
- Introduce Guard [\#5](https://github.com/mvgijssel/arel_toolkit/issues/5)
|
91
|
+
- 22/implement delete [\#30](https://github.com/mvgijssel/arel_toolkit/pull/30) ([mvgijssel](https://github.com/mvgijssel))
|
92
|
+
- Added WITH, OVERRIDING and RETURINING to INSERT [\#29](https://github.com/mvgijssel/arel_toolkit/pull/29) ([mvgijssel](https://github.com/mvgijssel))
|
93
|
+
- Initial UPDATE\_STMT [\#27](https://github.com/mvgijssel/arel_toolkit/pull/27) ([mvgijssel](https://github.com/mvgijssel))
|
94
|
+
- Added badges to README \(and fix setup\) [\#3](https://github.com/mvgijssel/arel_toolkit/pull/3) ([mvgijssel](https://github.com/mvgijssel))
|
95
|
+
- Configure codeclimate [\#2](https://github.com/mvgijssel/arel_toolkit/pull/2) ([mvgijssel](https://github.com/mvgijssel))
|
96
|
+
- Updated travis file [\#1](https://github.com/mvgijssel/arel_toolkit/pull/1) ([mvgijssel](https://github.com/mvgijssel))
|
64
97
|
|
65
98
|
**Fixed bugs:**
|
66
99
|
|
@@ -72,7 +105,6 @@
|
|
72
105
|
- Remove unnecessary to\_arel remains [\#15](https://github.com/mvgijssel/arel_toolkit/issues/15)
|
73
106
|
- Merge to\_arel gem [\#4](https://github.com/mvgijssel/arel_toolkit/issues/4)
|
74
107
|
|
75
|
-
## [v0.1.0](https://github.com/mvgijssel/arel_toolkit/tree/v0.1.0) (2019-05-16)
|
76
108
|
|
77
109
|
|
78
|
-
\* *This
|
110
|
+
\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
arel_toolkit (0.4.
|
4
|
+
arel_toolkit (0.4.1)
|
5
5
|
activerecord (~> 5.2.0)
|
6
6
|
arel (~> 9.0.0)
|
7
7
|
pg (~> 1.1.4)
|
@@ -21,8 +21,8 @@ GEM
|
|
21
21
|
i18n (>= 0.7, < 2)
|
22
22
|
minitest (~> 5.1)
|
23
23
|
tzinfo (~> 1.1)
|
24
|
-
addressable (2.
|
25
|
-
public_suffix (>= 2.0.2, <
|
24
|
+
addressable (2.7.0)
|
25
|
+
public_suffix (>= 2.0.2, < 5.0)
|
26
26
|
ansi (1.5.0)
|
27
27
|
appraisal (2.2.0)
|
28
28
|
bundler
|
@@ -42,20 +42,20 @@ GEM
|
|
42
42
|
diff-lcs (1.3)
|
43
43
|
docile (1.3.1)
|
44
44
|
dpl (1.10.11)
|
45
|
-
faraday (0.
|
45
|
+
faraday (0.17.0)
|
46
46
|
multipart-post (>= 1.2, < 3)
|
47
47
|
faraday-http-cache (2.0.0)
|
48
48
|
faraday (~> 0.8)
|
49
49
|
ffi (1.11.1)
|
50
50
|
formatador (0.2.5)
|
51
|
-
github_changelog_generator (1.
|
51
|
+
github_changelog_generator (1.15.0)
|
52
52
|
activesupport
|
53
53
|
faraday-http-cache
|
54
54
|
multi_json
|
55
55
|
octokit (~> 4.6)
|
56
|
-
rainbow (>= 2.1)
|
56
|
+
rainbow (>= 2.2.1)
|
57
57
|
rake (>= 10.0)
|
58
|
-
retriable (~>
|
58
|
+
retriable (~> 3.0)
|
59
59
|
guard (2.15.0)
|
60
60
|
formatador (>= 0.2.4)
|
61
61
|
listen (>= 2.7, < 4.0)
|
@@ -66,6 +66,9 @@ GEM
|
|
66
66
|
shellany (~> 0.0)
|
67
67
|
thor (>= 0.18.1)
|
68
68
|
guard-compat (1.2.1)
|
69
|
+
guard-rake (1.0.0)
|
70
|
+
guard
|
71
|
+
rake
|
69
72
|
guard-rspec (4.7.3)
|
70
73
|
guard (~> 2.1)
|
71
74
|
guard-compat (~> 1.1)
|
@@ -74,7 +77,7 @@ GEM
|
|
74
77
|
guard (~> 2.0)
|
75
78
|
rubocop (~> 0.20)
|
76
79
|
hirb (0.7.3)
|
77
|
-
i18n (1.
|
80
|
+
i18n (1.7.0)
|
78
81
|
concurrent-ruby (~> 1.0)
|
79
82
|
interception (0.5)
|
80
83
|
jaro_winkler (1.5.3)
|
@@ -86,11 +89,11 @@ GEM
|
|
86
89
|
lumberjack (1.0.13)
|
87
90
|
method_source (0.9.2)
|
88
91
|
mini_portile2 (2.4.0)
|
89
|
-
minitest (5.
|
90
|
-
multi_json (1.
|
92
|
+
minitest (5.13.0)
|
93
|
+
multi_json (1.14.1)
|
91
94
|
multipart-post (2.1.1)
|
92
95
|
nenv (0.3.0)
|
93
|
-
nokogiri (1.10.
|
96
|
+
nokogiri (1.10.4)
|
94
97
|
mini_portile2 (~> 2.4.0)
|
95
98
|
notiffany (0.1.1)
|
96
99
|
nenv (~> 0.1)
|
@@ -101,7 +104,7 @@ GEM
|
|
101
104
|
parser (2.6.3.0)
|
102
105
|
ast (~> 2.4.0)
|
103
106
|
pg (1.1.4)
|
104
|
-
pg_query (1.1.
|
107
|
+
pg_query (1.1.1)
|
105
108
|
pry (0.12.2)
|
106
109
|
coderay (~> 1.1.0)
|
107
110
|
method_source (~> 0.9.0)
|
@@ -119,13 +122,15 @@ GEM
|
|
119
122
|
pry-stack_explorer (0.4.9.3)
|
120
123
|
binding_of_caller (>= 0.7)
|
121
124
|
pry (>= 0.9.11)
|
122
|
-
public_suffix (
|
125
|
+
public_suffix (4.0.1)
|
123
126
|
rainbow (3.0.0)
|
124
127
|
rake (10.5.0)
|
128
|
+
rake-compiler (1.0.7)
|
129
|
+
rake
|
125
130
|
rb-fsevent (0.10.3)
|
126
131
|
rb-inotify (0.10.0)
|
127
132
|
ffi (~> 1.0)
|
128
|
-
retriable (
|
133
|
+
retriable (3.1.2)
|
129
134
|
rspec (3.8.0)
|
130
135
|
rspec-core (~> 3.8.0)
|
131
136
|
rspec-expectations (~> 3.8.0)
|
@@ -178,8 +183,9 @@ DEPENDENCIES
|
|
178
183
|
bundler (~> 2.0)
|
179
184
|
database_cleaner (~> 1.7.0)
|
180
185
|
dpl (~> 1.10.11)
|
181
|
-
github_changelog_generator (~> 1.
|
186
|
+
github_changelog_generator (~> 1.15)
|
182
187
|
guard (~> 2.15)
|
188
|
+
guard-rake (~> 1.0.0)
|
183
189
|
guard-rspec (~> 4.7)
|
184
190
|
guard-rubocop (~> 1.3.0)
|
185
191
|
pry
|
@@ -189,6 +195,7 @@ DEPENDENCIES
|
|
189
195
|
pry-rescue
|
190
196
|
pry-stack_explorer
|
191
197
|
rake (~> 10.0)
|
198
|
+
rake-compiler (~> 1.0)
|
192
199
|
rspec (~> 3.8)
|
193
200
|
rubocop (= 0.71.0)
|
194
201
|
simplecov (~> 0.16.1)
|
data/Guardfile
CHANGED
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
## Overview
|
4
4
|
|
5
|
-
- [](https://github.com/mvgijssel/arel_toolkit/actions)
|
6
6
|
- [](https://codeclimate.com/github/mvgijssel/arel_toolkit/maintainability)
|
7
7
|
- [](https://codeclimate.com/github/mvgijssel/arel_toolkit/test_coverage)
|
8
8
|
- [](https://badge.fury.io/rb/arel_toolkit)
|
@@ -84,33 +84,36 @@ Middleware sits between ActiveRecord and the database, it allows you to alter th
|
|
84
84
|
The middleware works out of the box in combination with Rails. If using ActiveRecord standalone you need to run the following **after** setting up the database connection:
|
85
85
|
|
86
86
|
```ruby
|
87
|
-
Arel::Middleware::Railtie.
|
87
|
+
Arel::Middleware::Railtie.insert
|
88
88
|
```
|
89
89
|
|
90
90
|
### Example
|
91
91
|
|
92
|
-
Create
|
92
|
+
Create middleware which can be any Ruby object as long as it responds to `call`. Middleware accepts 2 or 3 arguments, context is optional. Calling `.call` on `next_middleware` invokes the next middleware in the chain, returning the response from the database.
|
93
|
+
|
94
|
+
In this example, we're creating a middleware that will reorder any query. Next to reordering, we're adding an additional middleware that prints out the result of the reorder middleware.
|
93
95
|
|
94
96
|
```ruby
|
95
97
|
class ReorderMiddleware
|
96
|
-
def self.call(arel,
|
98
|
+
def self.call(arel, next_middleware)
|
97
99
|
enhanced_arel = Arel.enhance(arel)
|
98
100
|
enhanced_arel.query(class: Arel::Nodes::SelectStatement).each do |node|
|
99
101
|
arel_table = node.child_at_path(['cores', 0, 'source', 'left']).object
|
100
102
|
node['orders'].replace([arel_table[:id].asc])
|
101
103
|
end
|
102
104
|
|
103
|
-
arel.order(Post.arel_table[:id].asc)
|
105
|
+
new_arel = arel.order(Post.arel_table[:id].asc)
|
106
|
+
next_middleware.call(new_arel)
|
104
107
|
end
|
105
108
|
end
|
106
109
|
|
107
110
|
class LoggingMiddleware
|
108
|
-
def self.call(arel, context)
|
111
|
+
def self.call(arel, next_middleware, context)
|
109
112
|
puts "User executing query: `#{context[:current_user_id]}`"
|
110
113
|
puts "Original SQL: `#{context[:original_sql]}`"
|
111
114
|
puts "Modified SQL: `#{arel.to_sql}`"
|
112
|
-
|
113
|
-
arel
|
115
|
+
|
116
|
+
next_middleware.call(arel)
|
114
117
|
end
|
115
118
|
end
|
116
119
|
```
|
data/Rakefile
CHANGED
@@ -10,5 +10,15 @@ GitHubChangelogGenerator::RakeTask.new :changelog do |config|
|
|
10
10
|
config.user = 'mvgijssel'
|
11
11
|
config.project = 'arel_toolkit'
|
12
12
|
config.future_release = "v#{ArelToolkit::VERSION}"
|
13
|
-
config.
|
13
|
+
config.add_pr_wo_labels = false
|
14
|
+
config.enhancement_labels = %w[enhancement dependencies]
|
15
|
+
config.exclude_tags = ['v0.1.0']
|
16
|
+
end
|
17
|
+
|
18
|
+
require 'rake/extensiontask'
|
19
|
+
|
20
|
+
task build: :compile
|
21
|
+
|
22
|
+
Rake::ExtensionTask.new('pg_result_init') do |ext|
|
23
|
+
ext.lib_dir = 'lib/arel_toolkit'
|
14
24
|
end
|