arel_toolkit 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +3 -0
- data/.gitignore +4 -1
- data/.rubocop.yml +13 -5
- data/.travis.yml +7 -2
- data/Appraisals +9 -0
- data/CHANGELOG.md +19 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +22 -5
- data/README.md +59 -18
- data/arel_toolkit.gemspec +5 -1
- data/gemfiles/.bundle/config +2 -0
- data/gemfiles/arel_gems.gemfile +10 -0
- data/gemfiles/arel_gems.gemfile.lock +274 -0
- data/gemfiles/default.gemfile +5 -0
- data/gemfiles/default.gemfile.lock +198 -0
- data/lib/arel/enhance.rb +16 -0
- data/lib/arel/enhance/context_enhancer/arel_table.rb +75 -0
- data/lib/arel/enhance/node.rb +189 -0
- data/lib/arel/enhance/path.rb +38 -0
- data/lib/arel/enhance/path_node.rb +26 -0
- data/lib/arel/enhance/query.rb +36 -0
- data/lib/arel/enhance/visitor.rb +81 -0
- data/lib/arel/extensions.rb +24 -4
- data/lib/arel/extensions/active_record_type_caster_map.rb +7 -0
- data/lib/arel/extensions/array.rb +2 -9
- data/lib/arel/extensions/at_time_zone.rb +10 -3
- data/lib/arel/extensions/binary.rb +7 -0
- data/lib/arel/extensions/bit_string.rb +2 -9
- data/lib/arel/extensions/case.rb +17 -0
- data/lib/arel/extensions/conflict.rb +9 -0
- data/lib/arel/extensions/contains.rb +27 -5
- data/lib/arel/extensions/current_catalog.rb +4 -0
- data/lib/arel/extensions/current_date.rb +4 -0
- data/lib/arel/extensions/current_of_expression.rb +2 -9
- data/lib/arel/extensions/current_role.rb +4 -0
- data/lib/arel/extensions/current_row.rb +7 -0
- data/lib/arel/extensions/current_schema.rb +4 -0
- data/lib/arel/extensions/current_user.rb +4 -0
- data/lib/arel/extensions/dealocate.rb +31 -0
- data/lib/arel/extensions/default_values.rb +4 -0
- data/lib/arel/extensions/delete_manager.rb +22 -6
- data/lib/arel/extensions/delete_statement.rb +26 -9
- data/lib/arel/extensions/dot.rb +11 -0
- data/lib/arel/extensions/extract_from.rb +3 -10
- data/lib/arel/extensions/factorial.rb +10 -2
- data/lib/arel/extensions/false.rb +7 -0
- data/lib/arel/extensions/function.rb +42 -13
- data/lib/arel/extensions/indirection.rb +3 -12
- data/lib/arel/extensions/infer.rb +6 -6
- data/lib/arel/extensions/infix_operation.rb +17 -0
- data/lib/arel/extensions/insert_manager.rb +19 -3
- data/lib/arel/extensions/insert_statement.rb +30 -11
- data/lib/arel/extensions/into.rb +21 -0
- data/lib/arel/extensions/named_argument.rb +3 -8
- data/lib/arel/extensions/named_function.rb +7 -0
- data/lib/arel/extensions/ordering.rb +21 -6
- data/lib/arel/extensions/overlaps.rb +9 -0
- data/lib/arel/extensions/overlay.rb +9 -0
- data/lib/arel/extensions/position.rb +3 -8
- data/lib/arel/extensions/prepare.rb +39 -0
- data/lib/arel/extensions/row.rb +3 -8
- data/lib/arel/extensions/select_core.rb +58 -0
- data/lib/arel/extensions/select_manager.rb +22 -6
- data/lib/arel/extensions/select_statement.rb +31 -9
- data/lib/arel/extensions/session_user.rb +4 -0
- data/lib/arel/extensions/set_to_default.rb +4 -0
- data/lib/arel/extensions/substring.rb +8 -0
- data/lib/arel/extensions/table.rb +43 -10
- data/lib/arel/extensions/time_with_precision.rb +6 -0
- data/lib/arel/extensions/to_sql.rb +27 -0
- data/lib/arel/extensions/transaction.rb +3 -8
- data/lib/arel/extensions/tree_manager.rb +10 -0
- data/lib/arel/extensions/trim.rb +8 -0
- data/lib/arel/extensions/true.rb +7 -0
- data/lib/arel/extensions/type_cast.rb +7 -0
- data/lib/arel/extensions/unary.rb +7 -0
- data/lib/arel/extensions/unary_operation.rb +16 -0
- data/lib/arel/extensions/unknown.rb +4 -0
- data/lib/arel/extensions/update_manager.rb +22 -6
- data/lib/arel/extensions/update_statement.rb +27 -10
- data/lib/arel/extensions/user.rb +4 -0
- data/lib/arel/extensions/values_list.rb +15 -0
- data/lib/arel/extensions/variable_set.rb +9 -0
- data/lib/arel/extensions/variable_show.rb +3 -8
- data/lib/arel/middleware/chain.rb +1 -5
- data/lib/arel/middleware/railtie.rb +10 -0
- data/lib/arel/sql_to_arel.rb +6 -3
- data/lib/arel/sql_to_arel/pg_query_visitor.rb +43 -15
- data/lib/arel/sql_to_arel/pg_query_visitor/frame_options.rb +1 -1
- data/lib/arel/sql_to_arel/result.rb +0 -4
- data/lib/arel/transformer.rb +7 -0
- data/lib/arel/transformer/add_schema_to_table.rb +26 -0
- data/lib/arel/transformer/remove_active_record_info.rb +42 -0
- data/lib/arel_toolkit.rb +8 -1
- data/lib/arel_toolkit/version.rb +1 -1
- metadata +81 -8
- data/lib/arel/extensions/unbound_column_reference.rb +0 -5
- data/lib/arel/sql_formatter.rb +0 -59
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e147a210e33300231d9f47c66eb56d961ffa83c9b3e22744427270e2188c6c2
|
4
|
+
data.tar.gz: 5fdba0c675a031f44eed13f217520da94f8f3f347198c3bdfdf92786622f01f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: db6d5427ffd51079b8652ad706d5e265889d996dda889b22e28ca84296310ab4a2517a63b3cfa7105bfbba745eaf9bc12947261f91acfe250005b94edf0f1912
|
7
|
+
data.tar.gz: 785dbd44ba4008a3cae7ef3d51d53afe7b048c9877a574853a9e2dbf63992474dfd4f3be40c0b3d50573ec290072414addcfee59d942449a622b98a7ceb3de43
|
data/.codeclimate.yml
CHANGED
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
AllCops:
|
2
|
+
Exclude:
|
3
|
+
- 'gemfiles/arel_gems.gemfile'
|
4
|
+
- 'gemfiles/default.gemfile'
|
3
5
|
|
4
6
|
Bundler/OrderedGems:
|
5
7
|
Enabled: false
|
@@ -7,9 +9,6 @@ Bundler/OrderedGems:
|
|
7
9
|
Gemspec/OrderedDependencies:
|
8
10
|
Enabled: false
|
9
11
|
|
10
|
-
Style/MultilineBlockChain:
|
11
|
-
Enabled: false
|
12
|
-
|
13
12
|
Metrics/LineLength:
|
14
13
|
Enabled: true
|
15
14
|
Max: 100
|
@@ -26,12 +25,21 @@ Metrics/BlockLength:
|
|
26
25
|
Style/Documentation:
|
27
26
|
Enabled: false
|
28
27
|
|
28
|
+
Style/MultilineBlockChain:
|
29
|
+
Enabled: false
|
30
|
+
|
31
|
+
Style/TrailingCommaInHashLiteral:
|
32
|
+
EnforcedStyleForMultiline: comma
|
33
|
+
|
29
34
|
Style/TrailingCommaInArrayLiteral:
|
30
35
|
EnforcedStyleForMultiline: comma
|
31
36
|
|
32
37
|
Style/TrailingCommaInArguments:
|
33
38
|
EnforcedStyleForMultiline: comma
|
34
39
|
|
40
|
+
Style/FrozenStringLiteralComment:
|
41
|
+
Enabled: false
|
42
|
+
|
35
43
|
Layout/MultilineMethodCallIndentation:
|
36
44
|
Enabled: true
|
37
45
|
EnforcedStyle: indented
|
data/.travis.yml
CHANGED
@@ -9,14 +9,19 @@ notifications:
|
|
9
9
|
email: false
|
10
10
|
rvm:
|
11
11
|
- 2.5.3
|
12
|
+
addons:
|
13
|
+
postgresql: "9.5"
|
12
14
|
before_script:
|
13
15
|
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
14
16
|
- chmod +x ./cc-test-reporter
|
15
17
|
- ./cc-test-reporter before-build
|
16
18
|
before_install:
|
17
|
-
- gem install bundler -v 2.0.1
|
19
|
+
- GEM_HOME=vendor/bundle/ruby/2.5.0 gem install bundler -v 2.0.1
|
20
|
+
install:
|
21
|
+
- GEM_HOME=vendor/bundle/ruby/2.5.0 bundle install --jobs=3 --retry=3 --deployment --path=${BUNDLE_PATH:-vendor/bundle}
|
22
|
+
- GEM_HOME=vendor/bundle/ruby/2.5.0 bundle exec appraisal install
|
18
23
|
script:
|
19
|
-
- bundle exec rspec
|
24
|
+
- GEM_HOME=vendor/bundle/ruby/2.5.0 bundle exec appraisal rspec
|
20
25
|
after_script:
|
21
26
|
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
22
27
|
deploy:
|
data/Appraisals
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
appraise 'arel_gems' do
|
2
|
+
gem 'postgres_ext', github: 'Hacker0x01/postgres_ext', branch: 'rails-5.2'
|
3
|
+
gem 'active_record_upsert', github: 'Hacker0x01/active_record_upsert', branch: 'master'
|
4
|
+
gem 'pg_search', github: 'Hacker0x01/pg_search', branch: 'update-ranking'
|
5
|
+
gem 'rspec-rails', '~> 3.8.0'
|
6
|
+
end
|
7
|
+
|
8
|
+
appraise 'default' do
|
9
|
+
end
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,24 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## [v0.4.0](https://github.com/mvgijssel/arel_toolkit/tree/v0.4.0) (2019-07-31)
|
4
|
+
[Full Changelog](https://github.com/mvgijssel/arel_toolkit/compare/v0.3.0...v0.4.0)
|
5
|
+
|
6
|
+
**Implemented enhancements:**
|
7
|
+
|
8
|
+
- Rename Arel.transformer to Arel.enhance [\#111](https://github.com/mvgijssel/arel_toolkit/issues/111)
|
9
|
+
- Ability to query an Arel transformer tree [\#103](https://github.com/mvgijssel/arel_toolkit/issues/103)
|
10
|
+
- Implement PREPARE and DEALLOCATE statement [\#101](https://github.com/mvgijssel/arel_toolkit/issues/101)
|
11
|
+
- Replace Arel::Nodes::UnboundColumnReference with Arel::Nodes::UnqualifiedColumn [\#91](https://github.com/mvgijssel/arel_toolkit/issues/91)
|
12
|
+
- Create Arel transformer class to safely and easily mutate an Arel AST [\#89](https://github.com/mvgijssel/arel_toolkit/issues/89)
|
13
|
+
- Test and verify compatibility with Arel extension gems [\#81](https://github.com/mvgijssel/arel_toolkit/issues/81)
|
14
|
+
- Automatically load Railtie when gem is included in Rails [\#66](https://github.com/mvgijssel/arel_toolkit/issues/66)
|
15
|
+
- Create remove ActiveRecord specifics transformer [\#63](https://github.com/mvgijssel/arel_toolkit/issues/63)
|
16
|
+
- Add brakeman to check for security vulnerabilities [\#10](https://github.com/mvgijssel/arel_toolkit/issues/10)
|
17
|
+
|
18
|
+
**Fixed bugs:**
|
19
|
+
|
20
|
+
- TypeError: superclass mismatch for class Overlap [\#93](https://github.com/mvgijssel/arel_toolkit/issues/93)
|
21
|
+
|
3
22
|
## [v0.3.0](https://github.com/mvgijssel/arel_toolkit/tree/v0.3.0) (2019-07-01)
|
4
23
|
[Full Changelog](https://github.com/mvgijssel/arel_toolkit/compare/v0.2.0...v0.3.0)
|
5
24
|
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
arel_toolkit (0.
|
4
|
+
arel_toolkit (0.4.0)
|
5
5
|
activerecord (~> 5.2.0)
|
6
6
|
arel (~> 9.0.0)
|
7
7
|
pg (~> 1.1.4)
|
@@ -24,6 +24,13 @@ GEM
|
|
24
24
|
addressable (2.6.0)
|
25
25
|
public_suffix (>= 2.0.2, < 4.0)
|
26
26
|
ansi (1.5.0)
|
27
|
+
appraisal (2.2.0)
|
28
|
+
bundler
|
29
|
+
rake
|
30
|
+
thor (>= 0.14.0)
|
31
|
+
approvals (0.0.24)
|
32
|
+
nokogiri (~> 1.6)
|
33
|
+
thor (~> 0.18)
|
27
34
|
arel (9.0.0)
|
28
35
|
ast (2.4.0)
|
29
36
|
binding_of_caller (0.8.0)
|
@@ -70,7 +77,7 @@ GEM
|
|
70
77
|
i18n (1.6.0)
|
71
78
|
concurrent-ruby (~> 1.0)
|
72
79
|
interception (0.5)
|
73
|
-
jaro_winkler (1.5.
|
80
|
+
jaro_winkler (1.5.3)
|
74
81
|
json (2.2.0)
|
75
82
|
listen (3.1.5)
|
76
83
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
@@ -78,10 +85,13 @@ GEM
|
|
78
85
|
ruby_dep (~> 1.2)
|
79
86
|
lumberjack (1.0.13)
|
80
87
|
method_source (0.9.2)
|
88
|
+
mini_portile2 (2.4.0)
|
81
89
|
minitest (5.11.3)
|
82
90
|
multi_json (1.13.1)
|
83
91
|
multipart-post (2.1.1)
|
84
92
|
nenv (0.3.0)
|
93
|
+
nokogiri (1.10.3)
|
94
|
+
mini_portile2 (~> 2.4.0)
|
85
95
|
notiffany (0.1.1)
|
86
96
|
nenv (~> 0.1)
|
87
97
|
shellany (~> 0.0)
|
@@ -98,6 +108,9 @@ GEM
|
|
98
108
|
pry-alias (0.0.1)
|
99
109
|
binding_of_caller
|
100
110
|
pry
|
111
|
+
pry-doc (1.0.0)
|
112
|
+
pry (~> 0.11)
|
113
|
+
yard (~> 0.9.11)
|
101
114
|
pry-nav (0.3.0)
|
102
115
|
pry (>= 0.9.10, < 0.13.0)
|
103
116
|
pry-rescue (1.5.0)
|
@@ -126,14 +139,14 @@ GEM
|
|
126
139
|
diff-lcs (>= 1.2.0, < 2.0)
|
127
140
|
rspec-support (~> 3.8.0)
|
128
141
|
rspec-support (3.8.0)
|
129
|
-
rubocop (0.
|
142
|
+
rubocop (0.71.0)
|
130
143
|
jaro_winkler (~> 1.5.1)
|
131
144
|
parallel (~> 1.10)
|
132
145
|
parser (>= 2.6)
|
133
146
|
rainbow (>= 2.2.2, < 4.0)
|
134
147
|
ruby-progressbar (~> 1.7)
|
135
148
|
unicode-display_width (>= 1.4.0, < 1.7)
|
136
|
-
ruby-progressbar (1.10.
|
149
|
+
ruby-progressbar (1.10.1)
|
137
150
|
ruby_dep (1.5.0)
|
138
151
|
sawyer (0.8.2)
|
139
152
|
addressable (>= 2.3.5)
|
@@ -153,11 +166,14 @@ GEM
|
|
153
166
|
tzinfo (1.2.5)
|
154
167
|
thread_safe (~> 0.1)
|
155
168
|
unicode-display_width (1.6.0)
|
169
|
+
yard (0.9.20)
|
156
170
|
|
157
171
|
PLATFORMS
|
158
172
|
ruby
|
159
173
|
|
160
174
|
DEPENDENCIES
|
175
|
+
appraisal (~> 2.2.0)
|
176
|
+
approvals (~> 0.0.24)
|
161
177
|
arel_toolkit!
|
162
178
|
bundler (~> 2.0)
|
163
179
|
database_cleaner (~> 1.7.0)
|
@@ -168,12 +184,13 @@ DEPENDENCIES
|
|
168
184
|
guard-rubocop (~> 1.3.0)
|
169
185
|
pry
|
170
186
|
pry-alias
|
187
|
+
pry-doc
|
171
188
|
pry-nav
|
172
189
|
pry-rescue
|
173
190
|
pry-stack_explorer
|
174
191
|
rake (~> 10.0)
|
175
192
|
rspec (~> 3.8)
|
176
|
-
rubocop (
|
193
|
+
rubocop (= 0.71.0)
|
177
194
|
simplecov (~> 0.16.1)
|
178
195
|
simplecov-console (~> 0.4.2)
|
179
196
|
|
data/README.md
CHANGED
@@ -27,7 +27,7 @@ Or install it yourself as:
|
|
27
27
|
|
28
28
|
$ gem install arel_toolkit
|
29
29
|
|
30
|
-
##
|
30
|
+
## Sql to Arel
|
31
31
|
|
32
32
|
Convert your (PostgreSQL) SQL into an Arel AST.
|
33
33
|
|
@@ -40,29 +40,66 @@ Convert your (PostgreSQL) SQL into an Arel AST.
|
|
40
40
|
=> "SELECT \"id\" FROM \"users\""
|
41
41
|
```
|
42
42
|
|
43
|
-
##
|
43
|
+
## Enhanced Arel AST
|
44
|
+
|
45
|
+
`Arel.enhance(arel)` adds additional information and helper methods to the existing Arel AST. This allows for mutating the AST, adding contextual information to the AST and querying for nodes. Some examples:
|
46
|
+
|
47
|
+
##### Query for Arel nodes with certain properties
|
48
|
+
```ruby
|
49
|
+
arel = Post.select(:id, :public).where(id: 1).arel
|
50
|
+
enhanced_arel = Arel.enhance(arel)
|
51
|
+
enhanced_arel.query(class: Arel::Table).each { ... }
|
52
|
+
```
|
53
|
+
|
54
|
+
##### Query for Arel nodes with an enhanced context
|
55
|
+
An `Arel::Table` is used in multiple different places inside the AST, and those locations will give the `Arel::Table` a different meaning. Used within a projection (_column_reference_) like `SELECT posts.id` has a different meaning than within a from `SELECT * FROM posts` (_range_variable_). The following example results in `Arel::Table` nodes where the object is used in the context of referencing a column:
|
56
|
+
|
57
|
+
```ruby
|
58
|
+
enhanced_arel.query(class: Arel::Table, context: { column_reference: true }).each { ... }
|
59
|
+
```
|
60
|
+
|
61
|
+
##### Get an Arel node at a certain path
|
62
|
+
```ruby
|
63
|
+
enhanced_arel.child_at_path(['ast', 'cores', 0, 'projections', 1]).object
|
64
|
+
=> #<struct Arel::Attributes::Attribute>
|
65
|
+
```
|
66
|
+
|
67
|
+
##### Replace or remove nodes without modifying the original arel
|
68
|
+
`remove` and `replace` allow for modifications to the Arel AST. The changes are aplied to a new copy of the AST, making sure the original AST is not touched.
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
enhanced_arel.child_at_path(['ast', 'cores', 0, 'projections', 1]).replace(Post.arel_table[:content])
|
72
|
+
enhanced_arel.child_at_path(['ast', 'cores', 0, 'projections', 0]).remove
|
73
|
+
enhanced_arel.to_sql
|
74
|
+
=> SELECT "posts"."content" FROM "posts" WHERE "posts"."id" = $1
|
75
|
+
```
|
44
76
|
|
45
|
-
Adds missing Arel nodes and extends the existing visitors, [lib/arel/extensions](https://github.com/mvgijssel/arel_toolkit/tree/master/lib/arel/extensions) for a full list.
|
46
77
|
|
47
78
|
## Middleware
|
48
79
|
|
49
|
-
|
80
|
+
Creating Arel from SQL and enhancing Arel is just the beginning, where this gem really shines is the ability to modify Arel ASTs using middleware.
|
50
81
|
|
51
|
-
|
82
|
+
Middleware sits between ActiveRecord and the database, it allows you to alter the Arel (the SQL query) before it's send to the database. Multiple middlewares are supported by passing the results from a finished middleware to the next. Next to the arel object, a context object is used that acts as a intermediate storage between middlewares.
|
52
83
|
|
53
|
-
|
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:
|
54
85
|
|
55
86
|
```ruby
|
56
|
-
|
57
|
-
Arel::Middleware::Railtie.insert_postgresql
|
58
|
-
end
|
87
|
+
Arel::Middleware::Railtie.insert_postgresql
|
59
88
|
```
|
60
89
|
|
61
|
-
|
90
|
+
### Example
|
91
|
+
|
92
|
+
Create some middleware (this can be any Ruby object as long as it responds to `call`). 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.
|
62
93
|
|
63
94
|
```ruby
|
64
95
|
class ReorderMiddleware
|
65
96
|
def self.call(arel, _context)
|
97
|
+
enhanced_arel = Arel.enhance(arel)
|
98
|
+
enhanced_arel.query(class: Arel::Nodes::SelectStatement).each do |node|
|
99
|
+
arel_table = node.child_at_path(['cores', 0, 'source', 'left']).object
|
100
|
+
node['orders'].replace([arel_table[:id].asc])
|
101
|
+
end
|
102
|
+
|
66
103
|
arel.order(Post.arel_table[:id].asc)
|
67
104
|
end
|
68
105
|
end
|
@@ -72,24 +109,24 @@ class LoggingMiddleware
|
|
72
109
|
puts "User executing query: `#{context[:current_user_id]}`"
|
73
110
|
puts "Original SQL: `#{context[:original_sql]}`"
|
74
111
|
puts "Modified SQL: `#{arel.to_sql}`"
|
112
|
+
|
75
113
|
arel
|
76
114
|
end
|
77
115
|
end
|
78
116
|
```
|
79
117
|
|
80
|
-
|
118
|
+
Now that we've defined our middelwares, it's time to see them in action:
|
81
119
|
|
82
120
|
```ruby
|
83
121
|
[1] > Arel.middleware.apply([ReorderMiddleware, LoggingMiddleware]).context(current_user_id: 1) { Post.all.load }
|
84
122
|
User executing query: `1`
|
85
|
-
Original SQL: `SELECT "posts".* FROM "posts"
|
86
|
-
Modified SQL: `SELECT "posts".* FROM "posts" ORDER BY "posts"."id"
|
87
|
-
Post Load (4.1ms) SELECT "posts".* FROM "posts" ORDER BY "posts"."id"
|
123
|
+
Original SQL: `SELECT "posts".* FROM "posts"`
|
124
|
+
Modified SQL: `SELECT "posts".* FROM "posts" ORDER BY "posts"."id" ASC`
|
125
|
+
Post Load (4.1ms) SELECT "posts".* FROM "posts" ORDER BY "posts"."id" ASC
|
88
126
|
=> []
|
89
127
|
```
|
90
128
|
|
91
|
-
|
92
|
-
|
129
|
+
This gem ships with a couple of middelware methods that allow you to fine-tune what and when to apply middelware.
|
93
130
|
- `Arel.middleware.apply([SomeMiddleware]) { ... }`
|
94
131
|
- `Arel.middleware.only([OnlyMe]) { ... }`
|
95
132
|
- `Arel.middleware.none { ... }`
|
@@ -97,6 +134,10 @@ There are more methods available to help with ordering and modifying of the curr
|
|
97
134
|
- `Arel.middleware.insert_before(RunBefore, ThisMiddleware) { ... }`
|
98
135
|
- `Arel.middleware.insert_after(RunAfter, ThisMiddleware) { ... }`
|
99
136
|
|
137
|
+
## Extensions
|
138
|
+
|
139
|
+
This gem aims to have full support for PostgreSQL's SQL. In order to do so, it needs to add missing Arel nodes and extends the existing visitors. A full list of extensions on Arel can be found here: [lib/arel/extensions](https://github.com/mvgijssel/arel_toolkit/tree/master/lib/arel/extensions).
|
140
|
+
|
100
141
|
## Development
|
101
142
|
|
102
143
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -105,7 +146,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
105
146
|
|
106
147
|
## Contributing
|
107
148
|
|
108
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
149
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/mvgijssel/arel_toolkit. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
109
150
|
|
110
151
|
## License
|
111
152
|
|
@@ -113,4 +154,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
113
154
|
|
114
155
|
## Code of Conduct
|
115
156
|
|
116
|
-
Everyone interacting in the ArelToolkit project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/
|
157
|
+
Everyone interacting in the ArelToolkit project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/mvgijssel/arel_toolkit/blob/master/CODE_OF_CONDUCT.md).
|
data/arel_toolkit.gemspec
CHANGED
@@ -34,17 +34,21 @@ Gem::Specification.new do |spec|
|
|
34
34
|
spec.add_development_dependency 'github_changelog_generator', '~> 1.14.3'
|
35
35
|
spec.add_development_dependency 'rake', '~> 10.0'
|
36
36
|
spec.add_development_dependency 'rspec', '~> 3.8'
|
37
|
+
spec.add_development_dependency 'approvals', '~> 0.0.24'
|
38
|
+
spec.add_development_dependency 'appraisal', '~> 2.2.0'
|
37
39
|
spec.add_development_dependency 'database_cleaner', '~> 1.7.0'
|
38
40
|
spec.add_development_dependency 'simplecov', '~> 0.16.1'
|
39
41
|
spec.add_development_dependency 'simplecov-console', '~> 0.4.2'
|
40
42
|
|
41
|
-
|
43
|
+
# When updating also update .codeclimate.yml:5
|
44
|
+
spec.add_development_dependency 'rubocop', '= 0.71.0'
|
42
45
|
spec.add_development_dependency 'guard', '~> 2.15'
|
43
46
|
spec.add_development_dependency 'guard-rspec', '~> 4.7'
|
44
47
|
spec.add_development_dependency 'guard-rubocop', '~> 1.3.0'
|
45
48
|
|
46
49
|
spec.add_development_dependency 'pry'
|
47
50
|
spec.add_development_dependency 'pry-nav'
|
51
|
+
spec.add_development_dependency 'pry-doc'
|
48
52
|
spec.add_development_dependency 'pry-rescue'
|
49
53
|
spec.add_development_dependency 'pry-stack_explorer'
|
50
54
|
spec.add_development_dependency 'pry-alias'
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "postgres_ext", branch: "rails-5.2", git: "https://github.com/Hacker0x01/postgres_ext.git"
|
6
|
+
gem "active_record_upsert", branch: "master", git: "https://github.com/Hacker0x01/active_record_upsert.git"
|
7
|
+
gem "pg_search", branch: "update-ranking", git: "https://github.com/Hacker0x01/pg_search.git"
|
8
|
+
gem "rspec-rails", "~> 3.8.0"
|
9
|
+
|
10
|
+
gemspec path: "../"
|
@@ -0,0 +1,274 @@
|
|
1
|
+
GIT
|
2
|
+
remote: https://github.com/Hacker0x01/active_record_upsert.git
|
3
|
+
revision: 7aa8a57431e817e53e68097c4a83b53dfe6d7c8e
|
4
|
+
branch: master
|
5
|
+
specs:
|
6
|
+
active_record_upsert (0.9.1)
|
7
|
+
activerecord (>= 5.0, < 6.0)
|
8
|
+
arel (> 7.0, < 10.0)
|
9
|
+
pg (>= 0.18, < 2.0)
|
10
|
+
|
11
|
+
GIT
|
12
|
+
remote: https://github.com/Hacker0x01/pg_search.git
|
13
|
+
revision: 2185dc3cb1b1cf251153b0d4e9ab468a0b64a212
|
14
|
+
branch: update-ranking
|
15
|
+
specs:
|
16
|
+
pg_search (2.1.2)
|
17
|
+
activerecord (>= 4.2)
|
18
|
+
activesupport (>= 4.2)
|
19
|
+
arel (>= 6)
|
20
|
+
|
21
|
+
GIT
|
22
|
+
remote: https://github.com/Hacker0x01/postgres_ext.git
|
23
|
+
revision: 0df6a2891a3bad7da1e7d06e5b6d4e10a3219eb4
|
24
|
+
branch: rails-5.2
|
25
|
+
specs:
|
26
|
+
postgres_ext (3.0.0)
|
27
|
+
activerecord (>= 4.0.0)
|
28
|
+
arel (>= 4.0.1)
|
29
|
+
pg_array_parser (~> 0.0.9)
|
30
|
+
|
31
|
+
PATH
|
32
|
+
remote: ..
|
33
|
+
specs:
|
34
|
+
arel_toolkit (0.4.0)
|
35
|
+
activerecord (~> 5.2.0)
|
36
|
+
arel (~> 9.0.0)
|
37
|
+
pg (~> 1.1.4)
|
38
|
+
pg_query (~> 1.1.0)
|
39
|
+
|
40
|
+
GEM
|
41
|
+
remote: https://rubygems.org/
|
42
|
+
specs:
|
43
|
+
actionpack (5.2.3)
|
44
|
+
actionview (= 5.2.3)
|
45
|
+
activesupport (= 5.2.3)
|
46
|
+
rack (~> 2.0)
|
47
|
+
rack-test (>= 0.6.3)
|
48
|
+
rails-dom-testing (~> 2.0)
|
49
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
50
|
+
actionview (5.2.3)
|
51
|
+
activesupport (= 5.2.3)
|
52
|
+
builder (~> 3.1)
|
53
|
+
erubi (~> 1.4)
|
54
|
+
rails-dom-testing (~> 2.0)
|
55
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
56
|
+
activemodel (5.2.3)
|
57
|
+
activesupport (= 5.2.3)
|
58
|
+
activerecord (5.2.3)
|
59
|
+
activemodel (= 5.2.3)
|
60
|
+
activesupport (= 5.2.3)
|
61
|
+
arel (>= 9.0)
|
62
|
+
activesupport (5.2.3)
|
63
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
64
|
+
i18n (>= 0.7, < 2)
|
65
|
+
minitest (~> 5.1)
|
66
|
+
tzinfo (~> 1.1)
|
67
|
+
addressable (2.6.0)
|
68
|
+
public_suffix (>= 2.0.2, < 4.0)
|
69
|
+
ansi (1.5.0)
|
70
|
+
appraisal (2.2.0)
|
71
|
+
bundler
|
72
|
+
rake
|
73
|
+
thor (>= 0.14.0)
|
74
|
+
approvals (0.0.24)
|
75
|
+
nokogiri (~> 1.6)
|
76
|
+
thor (~> 0.18)
|
77
|
+
arel (9.0.0)
|
78
|
+
ast (2.4.0)
|
79
|
+
binding_of_caller (0.8.0)
|
80
|
+
debug_inspector (>= 0.0.1)
|
81
|
+
builder (3.2.3)
|
82
|
+
coderay (1.1.2)
|
83
|
+
concurrent-ruby (1.1.5)
|
84
|
+
crass (1.0.4)
|
85
|
+
database_cleaner (1.7.0)
|
86
|
+
debug_inspector (0.0.3)
|
87
|
+
diff-lcs (1.3)
|
88
|
+
docile (1.3.2)
|
89
|
+
dpl (1.10.12)
|
90
|
+
erubi (1.8.0)
|
91
|
+
faraday (0.15.4)
|
92
|
+
multipart-post (>= 1.2, < 3)
|
93
|
+
faraday-http-cache (2.0.0)
|
94
|
+
faraday (~> 0.8)
|
95
|
+
ffi (1.11.1)
|
96
|
+
formatador (0.2.5)
|
97
|
+
github_changelog_generator (1.14.3)
|
98
|
+
activesupport
|
99
|
+
faraday-http-cache
|
100
|
+
multi_json
|
101
|
+
octokit (~> 4.6)
|
102
|
+
rainbow (>= 2.1)
|
103
|
+
rake (>= 10.0)
|
104
|
+
retriable (~> 2.1)
|
105
|
+
guard (2.15.0)
|
106
|
+
formatador (>= 0.2.4)
|
107
|
+
listen (>= 2.7, < 4.0)
|
108
|
+
lumberjack (>= 1.0.12, < 2.0)
|
109
|
+
nenv (~> 0.1)
|
110
|
+
notiffany (~> 0.0)
|
111
|
+
pry (>= 0.9.12)
|
112
|
+
shellany (~> 0.0)
|
113
|
+
thor (>= 0.18.1)
|
114
|
+
guard-compat (1.2.1)
|
115
|
+
guard-rspec (4.7.3)
|
116
|
+
guard (~> 2.1)
|
117
|
+
guard-compat (~> 1.1)
|
118
|
+
rspec (>= 2.99.0, < 4.0)
|
119
|
+
guard-rubocop (1.3.0)
|
120
|
+
guard (~> 2.0)
|
121
|
+
rubocop (~> 0.20)
|
122
|
+
hirb (0.7.3)
|
123
|
+
i18n (1.6.0)
|
124
|
+
concurrent-ruby (~> 1.0)
|
125
|
+
interception (0.5)
|
126
|
+
jaro_winkler (1.5.3)
|
127
|
+
json (2.2.0)
|
128
|
+
listen (3.1.5)
|
129
|
+
rb-fsevent (~> 0.9, >= 0.9.4)
|
130
|
+
rb-inotify (~> 0.9, >= 0.9.7)
|
131
|
+
ruby_dep (~> 1.2)
|
132
|
+
loofah (2.2.3)
|
133
|
+
crass (~> 1.0.2)
|
134
|
+
nokogiri (>= 1.5.9)
|
135
|
+
lumberjack (1.0.13)
|
136
|
+
method_source (0.9.2)
|
137
|
+
mini_portile2 (2.4.0)
|
138
|
+
minitest (5.11.3)
|
139
|
+
multi_json (1.13.1)
|
140
|
+
multipart-post (2.1.1)
|
141
|
+
nenv (0.3.0)
|
142
|
+
nokogiri (1.10.3)
|
143
|
+
mini_portile2 (~> 2.4.0)
|
144
|
+
notiffany (0.1.1)
|
145
|
+
nenv (~> 0.1)
|
146
|
+
shellany (~> 0.0)
|
147
|
+
octokit (4.14.0)
|
148
|
+
sawyer (~> 0.8.0, >= 0.5.3)
|
149
|
+
parallel (1.17.0)
|
150
|
+
parser (2.6.3.0)
|
151
|
+
ast (~> 2.4.0)
|
152
|
+
pg (1.1.4)
|
153
|
+
pg_array_parser (0.0.9)
|
154
|
+
pg_query (1.1.0)
|
155
|
+
pry (0.12.2)
|
156
|
+
coderay (~> 1.1.0)
|
157
|
+
method_source (~> 0.9.0)
|
158
|
+
pry-alias (0.0.1)
|
159
|
+
binding_of_caller
|
160
|
+
pry
|
161
|
+
pry-doc (1.0.0)
|
162
|
+
pry (~> 0.11)
|
163
|
+
yard (~> 0.9.11)
|
164
|
+
pry-nav (0.3.0)
|
165
|
+
pry (>= 0.9.10, < 0.13.0)
|
166
|
+
pry-rescue (1.5.0)
|
167
|
+
interception (>= 0.5)
|
168
|
+
pry (>= 0.12.0)
|
169
|
+
pry-stack_explorer (0.4.9.3)
|
170
|
+
binding_of_caller (>= 0.7)
|
171
|
+
pry (>= 0.9.11)
|
172
|
+
public_suffix (3.1.1)
|
173
|
+
rack (2.0.7)
|
174
|
+
rack-test (1.1.0)
|
175
|
+
rack (>= 1.0, < 3)
|
176
|
+
rails-dom-testing (2.0.3)
|
177
|
+
activesupport (>= 4.2.0)
|
178
|
+
nokogiri (>= 1.6)
|
179
|
+
rails-html-sanitizer (1.0.4)
|
180
|
+
loofah (~> 2.2, >= 2.2.2)
|
181
|
+
railties (5.2.3)
|
182
|
+
actionpack (= 5.2.3)
|
183
|
+
activesupport (= 5.2.3)
|
184
|
+
method_source
|
185
|
+
rake (>= 0.8.7)
|
186
|
+
thor (>= 0.19.0, < 2.0)
|
187
|
+
rainbow (3.0.0)
|
188
|
+
rake (10.5.0)
|
189
|
+
rb-fsevent (0.10.3)
|
190
|
+
rb-inotify (0.10.0)
|
191
|
+
ffi (~> 1.0)
|
192
|
+
retriable (2.1.0)
|
193
|
+
rspec (3.8.0)
|
194
|
+
rspec-core (~> 3.8.0)
|
195
|
+
rspec-expectations (~> 3.8.0)
|
196
|
+
rspec-mocks (~> 3.8.0)
|
197
|
+
rspec-core (3.8.2)
|
198
|
+
rspec-support (~> 3.8.0)
|
199
|
+
rspec-expectations (3.8.4)
|
200
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
201
|
+
rspec-support (~> 3.8.0)
|
202
|
+
rspec-mocks (3.8.1)
|
203
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
204
|
+
rspec-support (~> 3.8.0)
|
205
|
+
rspec-rails (3.8.2)
|
206
|
+
actionpack (>= 3.0)
|
207
|
+
activesupport (>= 3.0)
|
208
|
+
railties (>= 3.0)
|
209
|
+
rspec-core (~> 3.8.0)
|
210
|
+
rspec-expectations (~> 3.8.0)
|
211
|
+
rspec-mocks (~> 3.8.0)
|
212
|
+
rspec-support (~> 3.8.0)
|
213
|
+
rspec-support (3.8.2)
|
214
|
+
rubocop (0.71.0)
|
215
|
+
jaro_winkler (~> 1.5.1)
|
216
|
+
parallel (~> 1.10)
|
217
|
+
parser (>= 2.6)
|
218
|
+
rainbow (>= 2.2.2, < 4.0)
|
219
|
+
ruby-progressbar (~> 1.7)
|
220
|
+
unicode-display_width (>= 1.4.0, < 1.7)
|
221
|
+
ruby-progressbar (1.10.1)
|
222
|
+
ruby_dep (1.5.0)
|
223
|
+
sawyer (0.8.2)
|
224
|
+
addressable (>= 2.3.5)
|
225
|
+
faraday (> 0.8, < 2.0)
|
226
|
+
shellany (0.0.1)
|
227
|
+
simplecov (0.16.1)
|
228
|
+
docile (~> 1.1)
|
229
|
+
json (>= 1.8, < 3)
|
230
|
+
simplecov-html (~> 0.10.0)
|
231
|
+
simplecov-console (0.4.2)
|
232
|
+
ansi
|
233
|
+
hirb
|
234
|
+
simplecov
|
235
|
+
simplecov-html (0.10.2)
|
236
|
+
thor (0.20.3)
|
237
|
+
thread_safe (0.3.6)
|
238
|
+
tzinfo (1.2.5)
|
239
|
+
thread_safe (~> 0.1)
|
240
|
+
unicode-display_width (1.6.0)
|
241
|
+
yard (0.9.20)
|
242
|
+
|
243
|
+
PLATFORMS
|
244
|
+
ruby
|
245
|
+
|
246
|
+
DEPENDENCIES
|
247
|
+
active_record_upsert!
|
248
|
+
appraisal (~> 2.2.0)
|
249
|
+
approvals (~> 0.0.24)
|
250
|
+
arel_toolkit!
|
251
|
+
bundler (~> 2.0)
|
252
|
+
database_cleaner (~> 1.7.0)
|
253
|
+
dpl (~> 1.10.11)
|
254
|
+
github_changelog_generator (~> 1.14.3)
|
255
|
+
guard (~> 2.15)
|
256
|
+
guard-rspec (~> 4.7)
|
257
|
+
guard-rubocop (~> 1.3.0)
|
258
|
+
pg_search!
|
259
|
+
postgres_ext!
|
260
|
+
pry
|
261
|
+
pry-alias
|
262
|
+
pry-doc
|
263
|
+
pry-nav
|
264
|
+
pry-rescue
|
265
|
+
pry-stack_explorer
|
266
|
+
rake (~> 10.0)
|
267
|
+
rspec (~> 3.8)
|
268
|
+
rspec-rails (~> 3.8.0)
|
269
|
+
rubocop (= 0.71.0)
|
270
|
+
simplecov (~> 0.16.1)
|
271
|
+
simplecov-console (~> 0.4.2)
|
272
|
+
|
273
|
+
BUNDLED WITH
|
274
|
+
2.0.1
|