arel-extensions 8.1.0 → 9.0.0
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/CHANGELOG.md +41 -0
- data/README.md +83 -2
- data/lib/active_record/query_methods.rb +30 -36
- data/lib/arel/extensions/version.rb +1 -1
- metadata +14 -40
- data/.github/workflows/ci.yml +0 -267
- data/.gitignore +0 -3
- data/Gemfile +0 -5
- data/Rakefile +0 -14
- data/arel-extensions.gemspec +0 -29
- data/test/binary_value_test.rb +0 -23
- data/test/database.rb +0 -51
- data/test/gis_test.rb +0 -23
- data/test/order_test.rb +0 -83
- data/test/sunstone_test.rb +0 -149
- data/test/test_helper.rb +0 -209
- data/test/ts_test.rb +0 -151
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2cac2b9e201296fa2c9e058f38cd0acf4835b134f2f98bb74f245af78b58f02c
|
|
4
|
+
data.tar.gz: 8b4be319b4037c1dfb2c54d6d9314a6add237ac60ec1fe2e6e1f0d396d67d1bb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 36818826669a7004657c3362908fc8c11bb683fabbf93183dde33cb4a933ce3e5bd41da637cfd2c48906fab72d8ed22992802aa44daa69d7919cc3ccc62faffe
|
|
7
|
+
data.tar.gz: 17ae44d0099f00b6193f3e94aaa50830556e191d728bc3580b4164fae8f4b6b9f808cea2d3925ffe73cd5a30ea5501be6d393b428e23b01d6b4ee63dfd9d5d32
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
## [9.0.0] - Unreleased
|
|
2
|
+
|
|
3
|
+
### Changed
|
|
4
|
+
- Switched to independent Semantic Versioning. Prior releases tracked the Rails
|
|
5
|
+
major/minor line; the version number no longer maps to a Rails version.
|
|
6
|
+
- Require Ruby >= 3.3.
|
|
7
|
+
- Require ActiveRecord >= 8.0, < 9.0 (dropped support for Rails older than 8.0).
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- `gem.description` and gemspec `metadata` (source, changelog, MFA-required).
|
|
11
|
+
|
|
12
|
+
### Packaging
|
|
13
|
+
- Slimmed the published gem to `lib`, `ext`, `LICENSE`, and `README.md`; removed
|
|
14
|
+
the deprecated `test_files` declaration.
|
|
15
|
+
|
|
16
|
+
### Documentation
|
|
17
|
+
- Documented the features arel-extensions adds (DISTINCT ON, NULLS ordering,
|
|
18
|
+
array/JSON predicates, full-text search, GIS, binary values) in the README.
|
|
19
|
+
- Documented that the GIS predicates (`#intersects`, `#within`) require the
|
|
20
|
+
optional `rgeo` gem unless passed an Arel node.
|
|
21
|
+
|
|
22
|
+
## Earlier releases
|
|
23
|
+
|
|
24
|
+
Prior versions tracked the matching Rails release. See the Git tags for details:
|
|
25
|
+
|
|
26
|
+
- [8.1.0] - 2025-12-22
|
|
27
|
+
- [8.0.0] - 2025-01-27
|
|
28
|
+
- [7.0.1] - 2023-05-31
|
|
29
|
+
- [7.0.0] - 2022-12-07
|
|
30
|
+
- [6.1.0] - 2021-01-14
|
|
31
|
+
- [6.0.0.7] - 2019-11-04
|
|
32
|
+
- [6.0.0.2] - 2019-08-12
|
|
33
|
+
|
|
34
|
+
[9.0.0]: https://github.com/malomalo/arel-extensions/compare/v8.1.0...master
|
|
35
|
+
[8.1.0]: https://github.com/malomalo/arel-extensions/releases/tag/v8.1.0
|
|
36
|
+
[8.0.0]: https://github.com/malomalo/arel-extensions/releases/tag/v8.0.0
|
|
37
|
+
[7.0.1]: https://github.com/malomalo/arel-extensions/releases/tag/v7.0.1
|
|
38
|
+
[7.0.0]: https://github.com/malomalo/arel-extensions/releases/tag/v7.0.0
|
|
39
|
+
[6.1.0]: https://github.com/malomalo/arel-extensions/releases/tag/v6.1.0
|
|
40
|
+
[6.0.0.7]: https://github.com/malomalo/arel-extensions/releases/tag/v6.0.0.7
|
|
41
|
+
[6.0.0.2]: https://github.com/malomalo/arel-extensions/releases/tag/v6.0.0.2
|
data/README.md
CHANGED
|
@@ -18,5 +18,86 @@ Or install it yourself as:
|
|
|
18
18
|
|
|
19
19
|
## Usage
|
|
20
20
|
|
|
21
|
-
Just `require 'arel-extensions'` and use Arel/ActiveRecord as you normally
|
|
22
|
-
|
|
21
|
+
Just `require 'arel-extensions'` and use `Arel` / `ActiveRecord` as you normally
|
|
22
|
+
would.
|
|
23
|
+
|
|
24
|
+
It adds the methods and nodes below to `Arel::Attributes::Attribute` and to
|
|
25
|
+
`ActiveRecord` relations. Most operators generate PostgreSQL-specific SQL.
|
|
26
|
+
|
|
27
|
+
Attribute-level helpers are used through an Arel attribute, e.g.
|
|
28
|
+
`Model.arel_table[:column]`, typically inside `where` or `order`.
|
|
29
|
+
|
|
30
|
+
## What it adds
|
|
31
|
+
|
|
32
|
+
### `DISTINCT ON` (ActiveRecord)
|
|
33
|
+
|
|
34
|
+
Added to relations (and as a class method via `Model.distinct_on`):
|
|
35
|
+
|
|
36
|
+
```ruby
|
|
37
|
+
User.distinct_on(:email) # SELECT DISTINCT ON (users.email) ...
|
|
38
|
+
User.distinct_on(:a, :b) # DISTINCT ON (users.a, users.b)
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
`uniq_on` is an alias of `distinct_on`.
|
|
42
|
+
|
|
43
|
+
### Ordering with NULLS FIRST / LAST
|
|
44
|
+
|
|
45
|
+
```ruby
|
|
46
|
+
col = User.arel_table[:name]
|
|
47
|
+
User.order(col.asc(:nulls_last)) # ... ORDER BY users.name ASC NULLS LAST
|
|
48
|
+
User.order(col.desc(:nulls_first)) # ... ORDER BY users.name DESC NULLS FIRST
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
A `RANDOM()` ordering node is also provided.
|
|
52
|
+
|
|
53
|
+
### Array predicates
|
|
54
|
+
|
|
55
|
+
```ruby
|
|
56
|
+
tags = Post.arel_table[:tags]
|
|
57
|
+
tags.contained_by(other) # tags <@ other
|
|
58
|
+
tags.excludes(other) # NOT (tags @> other)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### JSON / JSONB predicates
|
|
62
|
+
|
|
63
|
+
```ruby
|
|
64
|
+
data = User.arel_table[:data]
|
|
65
|
+
|
|
66
|
+
data.key('name') # data #>'{name}' (aliases: data['name'], data.index('name'))
|
|
67
|
+
data.dig('address', 'zip') # data #>'{address,zip}'
|
|
68
|
+
data.has_key('name') # data ? 'name'
|
|
69
|
+
data.has_keys('a', 'b') # data ?& array['a','b']
|
|
70
|
+
data.has_any_key('a', 'b') # data ?| array['a','b']
|
|
71
|
+
data.cast_as('int') # (data)::int
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Full-text search
|
|
75
|
+
|
|
76
|
+
```ruby
|
|
77
|
+
body = Article.arel_table[:body]
|
|
78
|
+
body.ts_query('quick & fox') # to_tsvector(body) @@ to_tsquery('quick & fox')
|
|
79
|
+
body.ts_query('quick & fox', 'english')
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Nodes for `to_tsvector`, `to_tsquery`, `@@` (`TSMatch`), `ts_rank`, and
|
|
83
|
+
`ts_rank_cd` are available for building ranking expressions.
|
|
84
|
+
|
|
85
|
+
### GIS predicates (optional)
|
|
86
|
+
|
|
87
|
+
```ruby
|
|
88
|
+
area = Place.arel_table[:area]
|
|
89
|
+
area.intersects(value) # ST_Intersects(area, value)
|
|
90
|
+
area.within(value) # ST_Within(area, value)
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
`value` may be an Arel node, an RGeo geometry, a WKT/WKB string, or a GeoJSON
|
|
94
|
+
hash. Anything other than an Arel node requires the
|
|
95
|
+
[`rgeo`](https://github.com/rgeo/rgeo) gem, so add it to your Gemfile if you use
|
|
96
|
+
these:
|
|
97
|
+
|
|
98
|
+
gem 'rgeo'
|
|
99
|
+
|
|
100
|
+
### Binary values
|
|
101
|
+
|
|
102
|
+
`BinaryValue` and `HexEncodedBinaryValue` nodes for embedding binary data
|
|
103
|
+
(escaped `bytea` and `\x`-encoded hex, respectively).
|
|
@@ -5,51 +5,45 @@ require 'active_record/relation'
|
|
|
5
5
|
require 'active_record/querying'
|
|
6
6
|
require 'active_record/relation/query_methods'
|
|
7
7
|
|
|
8
|
-
module ActiveRecord
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
module ActiveRecord
|
|
9
|
+
# Prepended onto ActiveRecord::QueryMethods rather than reopening it, so
|
|
10
|
+
# these methods don't appear in QueryMethods.public_instance_methods(false)
|
|
11
|
+
# -- which Rails' QueryingMethodsDelegationTest asserts against -- while
|
|
12
|
+
# relations still respond to them.
|
|
13
|
+
module DistinctOn
|
|
14
|
+
def distinct_on_values
|
|
15
|
+
@values["distinct_on_values"] || []
|
|
16
|
+
end
|
|
12
17
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
18
|
+
def distinct_on_values=(value)
|
|
19
|
+
@values["distinct_on_values"] = value
|
|
20
|
+
end
|
|
16
21
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
22
|
+
def distinct_on(*fields)
|
|
23
|
+
spawn.distinct_on!(*fields)
|
|
24
|
+
end
|
|
25
|
+
alias uniq_on distinct_on
|
|
21
26
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
def distinct_on!(*fields)
|
|
28
|
+
fields.flatten!
|
|
29
|
+
self.distinct_on_values = fields.map { |x| x.is_a?(Arel::Attributes::Attribute) ? x : klass.arel_table[x] }
|
|
30
|
+
self
|
|
31
|
+
end
|
|
32
|
+
alias uniq_on! distinct_on!
|
|
28
33
|
|
|
29
|
-
|
|
34
|
+
private
|
|
30
35
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
arel
|
|
36
|
-
end
|
|
37
|
-
elsif ActiveRecord.version >= "7.2"
|
|
38
|
-
def build_arel_with_distinct_on(connection, aliases = nil)
|
|
39
|
-
arel = build_arel_without_distinct_on(connection, aliases)
|
|
40
|
-
arel.distinct_on(self.distinct_on_values) if !self.distinct_on_values.empty?
|
|
41
|
-
arel
|
|
42
|
-
end
|
|
43
|
-
else
|
|
44
|
-
def build_arel_with_distinct_on(aliases = nil)
|
|
45
|
-
arel = build_arel_without_distinct_on(aliases)
|
|
36
|
+
# Version-agnostic: forward whatever build_arel receives (its signature
|
|
37
|
+
# varies across Rails versions) to the original via super, then apply
|
|
38
|
+
# the accumulated distinct_on values.
|
|
39
|
+
def build_arel(*args)
|
|
40
|
+
arel = super
|
|
46
41
|
arel.distinct_on(self.distinct_on_values) if !self.distinct_on_values.empty?
|
|
47
42
|
arel
|
|
48
43
|
end
|
|
49
44
|
end
|
|
50
|
-
alias_method :build_arel_without_distinct_on, :build_arel
|
|
51
|
-
alias_method :build_arel, :build_arel_with_distinct_on
|
|
52
45
|
end
|
|
53
46
|
|
|
47
|
+
ActiveRecord::QueryMethods.prepend(ActiveRecord::DistinctOn)
|
|
54
48
|
ActiveRecord::Querying.delegate :distinct_on, to: :all
|
|
55
|
-
ActiveRecord::Querying.delegate :
|
|
49
|
+
ActiveRecord::Querying.delegate :uniq_on, to: :all
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: arel-extensions
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 9.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jon Bracy
|
|
@@ -15,7 +15,7 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - ">="
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version:
|
|
18
|
+
version: 8.0.0
|
|
19
19
|
- - "<"
|
|
20
20
|
- !ruby/object:Gem::Version
|
|
21
21
|
version: '9.0'
|
|
@@ -25,24 +25,10 @@ dependencies:
|
|
|
25
25
|
requirements:
|
|
26
26
|
- - ">="
|
|
27
27
|
- !ruby/object:Gem::Version
|
|
28
|
-
version:
|
|
28
|
+
version: 8.0.0
|
|
29
29
|
- - "<"
|
|
30
30
|
- !ruby/object:Gem::Version
|
|
31
31
|
version: '9.0'
|
|
32
|
-
- !ruby/object:Gem::Dependency
|
|
33
|
-
name: bundler
|
|
34
|
-
requirement: !ruby/object:Gem::Requirement
|
|
35
|
-
requirements:
|
|
36
|
-
- - ">="
|
|
37
|
-
- !ruby/object:Gem::Version
|
|
38
|
-
version: '0'
|
|
39
|
-
type: :development
|
|
40
|
-
prerelease: false
|
|
41
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
42
|
-
requirements:
|
|
43
|
-
- - ">="
|
|
44
|
-
- !ruby/object:Gem::Version
|
|
45
|
-
version: '0'
|
|
46
32
|
- !ruby/object:Gem::Dependency
|
|
47
33
|
name: debug
|
|
48
34
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -169,19 +155,18 @@ dependencies:
|
|
|
169
155
|
- - ">="
|
|
170
156
|
- !ruby/object:Gem::Version
|
|
171
157
|
version: '8.0'
|
|
158
|
+
description: Extends Arel and ActiveRecord with SQL operators and functions that aren't
|
|
159
|
+
available out of the box, including array and JSON predicates, PostgreSQL full-text
|
|
160
|
+
search (tsvector/tsquery), GIS/geometry predicates, and additional ordering helpers.
|
|
172
161
|
email:
|
|
173
162
|
- jonbracy@gmail.com
|
|
174
163
|
executables: []
|
|
175
164
|
extensions: []
|
|
176
165
|
extra_rdoc_files: []
|
|
177
166
|
files:
|
|
178
|
-
-
|
|
179
|
-
- ".gitignore"
|
|
180
|
-
- Gemfile
|
|
167
|
+
- CHANGELOG.md
|
|
181
168
|
- LICENSE
|
|
182
169
|
- README.md
|
|
183
|
-
- Rakefile
|
|
184
|
-
- arel-extensions.gemspec
|
|
185
170
|
- ext/arel/nodes/ascending.rb
|
|
186
171
|
- ext/arel/nodes/descending.rb
|
|
187
172
|
- ext/arel/order_predications.rb
|
|
@@ -214,17 +199,13 @@ files:
|
|
|
214
199
|
- lib/arel/visitors/postgresql_extensions.rb
|
|
215
200
|
- lib/arel/visitors/sunstone_extensions.rb
|
|
216
201
|
- lib/arel/visitors/to_sql_extensions.rb
|
|
217
|
-
- test/binary_value_test.rb
|
|
218
|
-
- test/database.rb
|
|
219
|
-
- test/gis_test.rb
|
|
220
|
-
- test/order_test.rb
|
|
221
|
-
- test/sunstone_test.rb
|
|
222
|
-
- test/test_helper.rb
|
|
223
|
-
- test/ts_test.rb
|
|
224
202
|
homepage: https://github.com/malomalo/arel-extensions
|
|
225
203
|
licenses:
|
|
226
204
|
- MIT
|
|
227
|
-
metadata:
|
|
205
|
+
metadata:
|
|
206
|
+
source_code_uri: https://github.com/malomalo/arel-extensions
|
|
207
|
+
changelog_uri: https://github.com/malomalo/arel-extensions/blob/master/CHANGELOG.md
|
|
208
|
+
rubygems_mfa_required: 'true'
|
|
228
209
|
rdoc_options: []
|
|
229
210
|
require_paths:
|
|
230
211
|
- lib
|
|
@@ -232,21 +213,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
232
213
|
requirements:
|
|
233
214
|
- - ">="
|
|
234
215
|
- !ruby/object:Gem::Version
|
|
235
|
-
version: '
|
|
216
|
+
version: '3.3'
|
|
236
217
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
237
218
|
requirements:
|
|
238
219
|
- - ">="
|
|
239
220
|
- !ruby/object:Gem::Version
|
|
240
221
|
version: '0'
|
|
241
222
|
requirements: []
|
|
242
|
-
rubygems_version: 4.0.
|
|
223
|
+
rubygems_version: 4.0.11
|
|
243
224
|
specification_version: 4
|
|
244
225
|
summary: Adds support for missing SQL operators and functions to Arel
|
|
245
|
-
test_files:
|
|
246
|
-
- test/binary_value_test.rb
|
|
247
|
-
- test/database.rb
|
|
248
|
-
- test/gis_test.rb
|
|
249
|
-
- test/order_test.rb
|
|
250
|
-
- test/sunstone_test.rb
|
|
251
|
-
- test/test_helper.rb
|
|
252
|
-
- test/ts_test.rb
|
|
226
|
+
test_files: []
|
data/.github/workflows/ci.yml
DELETED
|
@@ -1,267 +0,0 @@
|
|
|
1
|
-
name: CI
|
|
2
|
-
|
|
3
|
-
on: [push, pull_request]
|
|
4
|
-
|
|
5
|
-
jobs:
|
|
6
|
-
sunstone:
|
|
7
|
-
name: Arel::Extensions Test
|
|
8
|
-
runs-on: ubuntu-24.04
|
|
9
|
-
strategy:
|
|
10
|
-
fail-fast: false
|
|
11
|
-
matrix:
|
|
12
|
-
rails-version:
|
|
13
|
-
- 7.1.6
|
|
14
|
-
- 7.2.3
|
|
15
|
-
- 8.0.4
|
|
16
|
-
- 8.1.1
|
|
17
|
-
ruby-version:
|
|
18
|
-
- 3.3
|
|
19
|
-
- 3.4
|
|
20
|
-
- 4.0.0-preview2
|
|
21
|
-
postgres-version:
|
|
22
|
-
- 17
|
|
23
|
-
|
|
24
|
-
steps:
|
|
25
|
-
- name: Install Postgresql
|
|
26
|
-
run: |
|
|
27
|
-
sudo apt-get -y --purge remove $(sudo apt list --installed | grep postgresql | awk '{print $1}')
|
|
28
|
-
sudo apt-get install curl ca-certificates gnupg
|
|
29
|
-
curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
|
|
30
|
-
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
|
|
31
|
-
sudo apt-get update
|
|
32
|
-
sudo apt-get -y install libgeos-dev
|
|
33
|
-
sudo apt-get -y install postgresql-${{ matrix.postgres-version }}-postgis-3
|
|
34
|
-
sudo systemctl start postgresql@${{ matrix.postgres-version }}-main.service
|
|
35
|
-
sudo systemctl status postgresql@${{ matrix.postgres-version }}-main.service
|
|
36
|
-
sudo pg_lsclusters
|
|
37
|
-
sudo -u postgres createuser runner --superuser
|
|
38
|
-
sudo -u postgres psql -c "ALTER USER runner WITH PASSWORD 'runner';"
|
|
39
|
-
|
|
40
|
-
- uses: actions/checkout@v4
|
|
41
|
-
|
|
42
|
-
- uses: ruby/setup-ruby@v1
|
|
43
|
-
with:
|
|
44
|
-
ruby-version: ${{ matrix.ruby-version }}
|
|
45
|
-
bundler-cache: false # runs 'bundle install' and caches installed gems automatically
|
|
46
|
-
|
|
47
|
-
- run: |
|
|
48
|
-
sed -i -e "s/gem.add_dependency 'activerecord', '>= [[:digit:]]\+.[[:digit:]]\+.[[:digit:]]\+'/gem.add_dependency 'activerecord', '${{ matrix.rails-version }}'/" arel-extensions.gemspec
|
|
49
|
-
rm -f Gemfile.lock
|
|
50
|
-
bundle install --jobs=3 --retry=3
|
|
51
|
-
|
|
52
|
-
- name: Test Geos
|
|
53
|
-
run: |
|
|
54
|
-
bundle exec ruby -e "require 'rgeo'; puts RGeo::Geos.capi_supported?; puts RGeo::Geos::CAPIGeometryMethods"
|
|
55
|
-
|
|
56
|
-
- run: bundle exec rake test --trace
|
|
57
|
-
|
|
58
|
-
ar-postgresql:
|
|
59
|
-
name: ActiveRecord PostgresQL Test
|
|
60
|
-
runs-on: ubuntu-24.04
|
|
61
|
-
|
|
62
|
-
strategy:
|
|
63
|
-
fail-fast: false
|
|
64
|
-
matrix:
|
|
65
|
-
rails-version:
|
|
66
|
-
- 7.2.3
|
|
67
|
-
- 8.0.4
|
|
68
|
-
- 8.1.1
|
|
69
|
-
ruby-version:
|
|
70
|
-
- 3.4
|
|
71
|
-
postgres-version:
|
|
72
|
-
- 17
|
|
73
|
-
include:
|
|
74
|
-
- rails-version: '7.1.6'
|
|
75
|
-
ruby-version: '3.3'
|
|
76
|
-
postgres-version: '17'
|
|
77
|
-
|
|
78
|
-
steps:
|
|
79
|
-
- name: Install Postgresql
|
|
80
|
-
run: |
|
|
81
|
-
sudo apt-get -y --purge remove $(sudo apt list --installed | grep postgresql | awk '{print $1}')
|
|
82
|
-
sudo apt-get install curl ca-certificates gnupg
|
|
83
|
-
curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
|
|
84
|
-
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
|
|
85
|
-
sudo apt-get update
|
|
86
|
-
sudo apt-get -y install postgresql-${{ matrix.postgres-version }}-postgis-3
|
|
87
|
-
sudo systemctl start postgresql@${{ matrix.postgres-version }}-main.service
|
|
88
|
-
sudo systemctl status postgresql@${{ matrix.postgres-version }}-main.service
|
|
89
|
-
sudo pg_lsclusters
|
|
90
|
-
sudo -u postgres createuser runner --superuser
|
|
91
|
-
sudo -u postgres psql -c "ALTER USER runner WITH PASSWORD 'runner';"
|
|
92
|
-
|
|
93
|
-
- uses: actions/checkout@v4
|
|
94
|
-
|
|
95
|
-
- uses: ruby/setup-ruby@v1
|
|
96
|
-
with:
|
|
97
|
-
ruby-version: ${{ matrix.ruby-version }}
|
|
98
|
-
bundler-cache: false # runs 'bundle install' and caches installed gems automatically
|
|
99
|
-
|
|
100
|
-
- name: Download Rails
|
|
101
|
-
run: |
|
|
102
|
-
git clone --branch v${{ matrix.rails-version }} https://github.com/rails/rails.git ~/rails
|
|
103
|
-
pushd ~/rails
|
|
104
|
-
cat /home/runner/work/_temp/*.sh
|
|
105
|
-
sed -i "s/Gem.ruby, '-w'/Gem.ruby, '-w0'/" ~/rails/activerecord/Rakefile
|
|
106
|
-
sed -i "s/t.warning = true/t.warning = false/g" ~/rails/activerecord/Rakefile
|
|
107
|
-
sed -i "/require \"active_record\"/a \$LOAD_PATH.unshift\(File.expand_path\(ENV['GITHUB_WORKSPACE']\)\)\nrequire 'arel/extensions'" ~/rails/activerecord/test/cases/helper.rb
|
|
108
|
-
rm ~/rails/Gemfile.lock
|
|
109
|
-
sed -i "/# Active Record./a gem 'arel-extensions', require: 'arel/extensions', path: File.expand_path\(ENV['GITHUB_WORKSPACE']\)" ~/rails/Gemfile
|
|
110
|
-
echo "gem 'ostruct'" >> ~/rails/Gemfile
|
|
111
|
-
sed -i "s/# frozen_string_literal: true/# frozen_string_literal: true\nrequire 'ostruct'/" ~/rails/activerecord/test/cases/encryption/configurable_test.rb
|
|
112
|
-
cat ~/rails/Gemfile
|
|
113
|
-
|
|
114
|
-
- name: This can eventually be removed
|
|
115
|
-
run: |
|
|
116
|
-
sed -i 's/gem "minitest"$/gem "minitest"\ngem "minitest-mock", require: "minitest\/mock"/' ~/rails/Gemfile
|
|
117
|
-
sed -i 's/module ActiveRecord$/module Rails\nend\nmodule ActiveRecord/' ~/rails/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb || true
|
|
118
|
-
sed -i 's/t.options = "--profile" if ENV\["CI"\]//g' ~/rails/activerecord/Rakefile
|
|
119
|
-
|
|
120
|
-
- name: Fix Weird Test Cases
|
|
121
|
-
run: |
|
|
122
|
-
sed -i 's|} - \[:|} - \[:distinct_on, :uniq_on, :|' ~/rails/activerecord/test/cases/relation/delegation_test.rb
|
|
123
|
-
|
|
124
|
-
- name: Bundle
|
|
125
|
-
run: |
|
|
126
|
-
pushd ~/rails
|
|
127
|
-
bundle update --jobs=3 --retry=3
|
|
128
|
-
popd
|
|
129
|
-
|
|
130
|
-
- run: |
|
|
131
|
-
pushd ~/rails/activerecord
|
|
132
|
-
bundle exec rake db:postgresql:rebuild postgresql:test --trace
|
|
133
|
-
bundle exec rake db:postgresql:rebuild postgresql:isolated_test --trace
|
|
134
|
-
|
|
135
|
-
ar-sqlite:
|
|
136
|
-
name: ActiveRecord SQLite Test
|
|
137
|
-
runs-on: ubuntu-24.04
|
|
138
|
-
|
|
139
|
-
strategy:
|
|
140
|
-
fail-fast: false
|
|
141
|
-
matrix:
|
|
142
|
-
rails-version:
|
|
143
|
-
- 7.2.3
|
|
144
|
-
- 8.0.4
|
|
145
|
-
- 8.1.1
|
|
146
|
-
ruby-version:
|
|
147
|
-
- 3.4
|
|
148
|
-
include:
|
|
149
|
-
- rails-version: '7.1.6'
|
|
150
|
-
ruby-version: '3.3'
|
|
151
|
-
|
|
152
|
-
steps:
|
|
153
|
-
- uses: actions/checkout@v4
|
|
154
|
-
|
|
155
|
-
- uses: ruby/setup-ruby@v1
|
|
156
|
-
with:
|
|
157
|
-
ruby-version: ${{ matrix.ruby-version }}
|
|
158
|
-
bundler-cache: false # runs 'bundle install' and caches installed gems automatically
|
|
159
|
-
|
|
160
|
-
- name: Download Rails
|
|
161
|
-
run: |
|
|
162
|
-
git clone --branch v${{ matrix.rails-version }} https://github.com/rails/rails.git ~/rails
|
|
163
|
-
pushd ~/rails
|
|
164
|
-
cat /home/runner/work/_temp/*.sh
|
|
165
|
-
sed -i "s/Gem.ruby, '-w'/Gem.ruby, '-w0'/" ~/rails/activerecord/Rakefile
|
|
166
|
-
sed -i "s/t.warning = true/t.warning = false/g" ~/rails/activerecord/Rakefile
|
|
167
|
-
sed -i "/require \"active_record\"/a \$LOAD_PATH.unshift\(File.expand_path\(ENV['GITHUB_WORKSPACE']\)\)\nrequire 'arel/extensions'" ~/rails/activerecord/test/cases/helper.rb
|
|
168
|
-
rm ~/rails/Gemfile.lock
|
|
169
|
-
sed -i "/# Active Record./a gem 'arel-extensions', require: 'arel/extensions', path: File.expand_path\(ENV['GITHUB_WORKSPACE']\)" ~/rails/Gemfile
|
|
170
|
-
echo "gem 'ostruct'" >> ~/rails/Gemfile
|
|
171
|
-
sed -i "s/# frozen_string_literal: true/# frozen_string_literal: true\nrequire 'ostruct'/" ~/rails/activerecord/test/cases/encryption/configurable_test.rb
|
|
172
|
-
cat ~/rails/Gemfile
|
|
173
|
-
|
|
174
|
-
- name: This can eventually be removed
|
|
175
|
-
run: |
|
|
176
|
-
sed -i 's/gem "minitest"$/gem "minitest"\ngem "minitest-mock", require: "minitest\/mock"/' ~/rails/Gemfile
|
|
177
|
-
cat ~/rails/Gemfile
|
|
178
|
-
sed -i 's/module ActiveRecord$/module Rails\nend\nmodule ActiveRecord/' ~/rails/activerecord/test/cases/adapters/sqlite3/dbconsole_test.rb
|
|
179
|
-
cat ~/rails/activerecord/test/cases/adapters/sqlite3/dbconsole_test.rb
|
|
180
|
-
sed -i 's/t.options = "--profile" if ENV\["CI"\]//g' ~/rails/activerecord/Rakefile
|
|
181
|
-
cat ~/rails/activerecord/Rakefile
|
|
182
|
-
|
|
183
|
-
- name: Fix Weird Test Cases
|
|
184
|
-
run: |
|
|
185
|
-
sed -i 's|} - \[:|} - \[:distinct_on, :uniq_on, :|' ~/rails/activerecord/test/cases/relation/delegation_test.rb
|
|
186
|
-
|
|
187
|
-
- name: Bundle
|
|
188
|
-
run: |
|
|
189
|
-
pushd ~/rails
|
|
190
|
-
bundle update --jobs=3 --retry=3
|
|
191
|
-
popd
|
|
192
|
-
|
|
193
|
-
- run: |
|
|
194
|
-
pushd ~/rails/activerecord
|
|
195
|
-
bundle exec rake sqlite3:test --trace
|
|
196
|
-
rm test/db/*.sqlite3 test/fixtures/*.sqlite3
|
|
197
|
-
bundle exec rake sqlite3:isolated_test --trace
|
|
198
|
-
rm test/db/*.sqlite3 test/fixtures/*.sqlite3
|
|
199
|
-
bundle exec rake sqlite3_mem:test --trace
|
|
200
|
-
|
|
201
|
-
ar-mysql:
|
|
202
|
-
name: ActiveRecord MySQL Test
|
|
203
|
-
runs-on: ubuntu-24.04
|
|
204
|
-
|
|
205
|
-
strategy:
|
|
206
|
-
fail-fast: false
|
|
207
|
-
matrix:
|
|
208
|
-
rails-version:
|
|
209
|
-
- 7.2.3
|
|
210
|
-
- 8.0.4
|
|
211
|
-
- 8.1.1
|
|
212
|
-
ruby-version:
|
|
213
|
-
- 3.4
|
|
214
|
-
include:
|
|
215
|
-
- rails-version: '7.1.6'
|
|
216
|
-
ruby-version: '3.3'
|
|
217
|
-
|
|
218
|
-
steps:
|
|
219
|
-
- name: Install MySQL
|
|
220
|
-
run: |
|
|
221
|
-
sudo /etc/init.d/mysql start
|
|
222
|
-
mysql -uroot -proot -e "CREATE USER 'rails'@'%';"
|
|
223
|
-
mysql -uroot -proot -e "GRANT ALL PRIVILEGES ON *.* TO 'rails'@'%' WITH GRANT OPTION;"
|
|
224
|
-
|
|
225
|
-
- uses: actions/checkout@v4
|
|
226
|
-
|
|
227
|
-
- uses: ruby/setup-ruby@v1
|
|
228
|
-
with:
|
|
229
|
-
ruby-version: ${{ matrix.ruby-version }}
|
|
230
|
-
bundler-cache: false # runs 'bundle install' and caches installed gems automatically
|
|
231
|
-
|
|
232
|
-
- name: Download Rails
|
|
233
|
-
run: |
|
|
234
|
-
git clone --branch v${{ matrix.rails-version }} https://github.com/rails/rails.git ~/rails
|
|
235
|
-
pushd ~/rails
|
|
236
|
-
cat /home/runner/work/_temp/*.sh
|
|
237
|
-
sed -i "s/Gem.ruby, '-w'/Gem.ruby, '-w0'/" ~/rails/activerecord/Rakefile
|
|
238
|
-
sed -i "s/t.warning = true/t.warning = false/g" ~/rails/activerecord/Rakefile
|
|
239
|
-
sed -i "/require \"active_record\"/a \$LOAD_PATH.unshift\(File.expand_path\(ENV['GITHUB_WORKSPACE']\)\)\nrequire 'arel/extensions'" ~/rails/activerecord/test/cases/helper.rb
|
|
240
|
-
rm ~/rails/Gemfile.lock
|
|
241
|
-
sed -i "/# Active Record./a gem 'arel-extensions', require: 'arel/extensions', path: File.expand_path\(ENV['GITHUB_WORKSPACE']\)" ~/rails/Gemfile
|
|
242
|
-
echo "gem 'ostruct'" >> ~/rails/Gemfile
|
|
243
|
-
sed -i "s/# frozen_string_literal: true/# frozen_string_literal: true\nrequire 'ostruct'/" ~/rails/activerecord/test/cases/encryption/configurable_test.rb
|
|
244
|
-
cat ~/rails/Gemfile
|
|
245
|
-
|
|
246
|
-
- name: This can eventually be removed
|
|
247
|
-
run: |
|
|
248
|
-
sed -i 's/gem "minitest"$/gem "minitest"\ngem "minitest-mock", require: "minitest\/mock"/' ~/rails/Gemfile
|
|
249
|
-
sed -i 's/class WarningsTest < ActiveRecord::AbstractMysqlTestCase$/module Rails\nend\nclass WarningsTest < ActiveRecord::AbstractMysqlTestCase/' ~/rails/activerecord/test/cases/adapters/abstract_mysql_adapter/warnings_test.rb || true
|
|
250
|
-
sed -i 's/class Mysql2AdapterTest < ActiveRecord::Mysql2TestCase$/module Rails\nend\nclass Mysql2AdapterTest < ActiveRecord::Mysql2TestCase/' ~/rails/activerecord/test/cases/adapters/mysql2/mysql2_adapter_test.rb || true
|
|
251
|
-
sed -i 's/t.options = "--profile" if ENV\["CI"\]//g' ~/rails/activerecord/Rakefile
|
|
252
|
-
cat ~/rails/activerecord/Rakefile
|
|
253
|
-
|
|
254
|
-
- name: Fix Weird Test Cases
|
|
255
|
-
run: |
|
|
256
|
-
sed -i 's|} - \[:|} - \[:distinct_on, :uniq_on, :|' ~/rails/activerecord/test/cases/relation/delegation_test.rb
|
|
257
|
-
|
|
258
|
-
- name: Bundle
|
|
259
|
-
run: |
|
|
260
|
-
pushd ~/rails
|
|
261
|
-
bundle update --jobs=3 --retry=3
|
|
262
|
-
popd
|
|
263
|
-
|
|
264
|
-
- run: |
|
|
265
|
-
pushd ~/rails/activerecord
|
|
266
|
-
bundle exec rake db:mysql:rebuild mysql2:test --trace
|
|
267
|
-
bundle exec rake db:mysql:rebuild mysql2:isolated_test --trace
|
data/.gitignore
DELETED
data/Gemfile
DELETED
data/Rakefile
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
require 'bundler/setup'
|
|
2
|
-
require "bundler/gem_tasks"
|
|
3
|
-
Bundler.require(:development)
|
|
4
|
-
|
|
5
|
-
require 'fileutils'
|
|
6
|
-
require "rake/testtask"
|
|
7
|
-
|
|
8
|
-
# Test Task
|
|
9
|
-
Rake::TestTask.new do |t|
|
|
10
|
-
t.libs << 'lib' << 'test'
|
|
11
|
-
t.test_files = FileList[ARGV[1] ? ARGV[1] : 'test/**/*_test.rb']
|
|
12
|
-
# t.warning = true
|
|
13
|
-
# t.verbose = true
|
|
14
|
-
end
|
data/arel-extensions.gemspec
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
require File.expand_path("../lib/arel/extensions/version", __FILE__)
|
|
2
|
-
|
|
3
|
-
Gem::Specification.new do |gem|
|
|
4
|
-
gem.name = 'arel-extensions'
|
|
5
|
-
gem.version = Arel::Extensions::VERSION
|
|
6
|
-
gem.authors = ["Jon Bracy"]
|
|
7
|
-
gem.email = ["jonbracy@gmail.com"]
|
|
8
|
-
gem.summary = %q{Adds support for missing SQL operators and functions to Arel}
|
|
9
|
-
gem.homepage = 'https://github.com/malomalo/arel-extensions'
|
|
10
|
-
gem.licenses = ['MIT']
|
|
11
|
-
|
|
12
|
-
gem.files = `git ls-files`.split("\n")
|
|
13
|
-
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
14
|
-
gem.require_paths = ["lib"]
|
|
15
|
-
|
|
16
|
-
gem.add_dependency 'activerecord', '>= 7.0.0', '< 9.0'
|
|
17
|
-
|
|
18
|
-
gem.add_development_dependency "bundler"
|
|
19
|
-
gem.add_development_dependency "debug"
|
|
20
|
-
gem.add_development_dependency "rake"
|
|
21
|
-
gem.add_development_dependency 'minitest'
|
|
22
|
-
gem.add_development_dependency 'minitest-reporters'
|
|
23
|
-
gem.add_development_dependency "sunstone", '>= 7.0.0'
|
|
24
|
-
gem.add_development_dependency "webmock"
|
|
25
|
-
gem.add_development_dependency 'pg'
|
|
26
|
-
gem.add_development_dependency 'rgeo'
|
|
27
|
-
gem.add_development_dependency "activerecord-postgis-adapter", '>= 8.0'
|
|
28
|
-
|
|
29
|
-
end
|