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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 26af903829c4fe9d8b881fcd316d09a03f9253af796ab813523d6c074e7fc3fe
4
- data.tar.gz: 4c8ff81dc39a82b8dabd1fe792b18c43e9d683bc5f8ede192932fda4d0864667
3
+ metadata.gz: 2cac2b9e201296fa2c9e058f38cd0acf4835b134f2f98bb74f245af78b58f02c
4
+ data.tar.gz: 8b4be319b4037c1dfb2c54d6d9314a6add237ac60ec1fe2e6e1f0d396d67d1bb
5
5
  SHA512:
6
- metadata.gz: 9a596cde6baa6b9b54fe900786dd63980da37bbe10408ca09ed9bf7a1df3ddb23de11d79e64f75634120e93e134dd739f36872131e13cba2fc1bb90eaa064deb
7
- data.tar.gz: 53b6e4cd418d977fb825e1f9753b117bf5b64644dc29be64c530f9f15f44f158aa16f4dc0acd0a39a78eea7856ebf0ec27aa3b65cb7f5b83e09c9e93398e899d
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 would!
22
- arel-extensions extends ActiveRecord's query methods in both Arel and ActiveRecord.
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::QueryMethods
9
- def distinct_on_values
10
- @values["distinct_on_values"] || []
11
- end
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
- def distinct_on_values=(value)
14
- @values["distinct_on_values"] = value
15
- end
18
+ def distinct_on_values=(value)
19
+ @values["distinct_on_values"] = value
20
+ end
16
21
 
17
- def distinct_on(*fields)
18
- spawn.distinct_on!(*fields)
19
- end
20
- alias uniq_on distinct_on
22
+ def distinct_on(*fields)
23
+ spawn.distinct_on!(*fields)
24
+ end
25
+ alias uniq_on distinct_on
21
26
 
22
- def distinct_on!(*fields)
23
- fields.flatten!
24
- self.distinct_on_values = fields.map { |x| x.is_a?(Arel::Attributes::Attribute) ? x : klass.arel_table[x] }
25
- self
26
- end
27
- alias uniq_on! distinct_on!
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
- private
34
+ private
30
35
 
31
- if ActiveRecord.version >= "8.1"
32
- def build_arel_with_distinct_on(aliases = nil)
33
- arel = build_arel_without_distinct_on(aliases)
34
- arel.distinct_on(self.distinct_on_values) if !self.distinct_on_values.empty?
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 :distinct_on!, to: :all
49
+ ActiveRecord::Querying.delegate :uniq_on, to: :all
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Arel
4
4
  module Extensions
5
- VERSION = '8.1.0'
5
+ VERSION = '9.0.0'
6
6
  end
7
7
  end
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: 8.1.0
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: 7.0.0
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: 7.0.0
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
- - ".github/workflows/ci.yml"
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: '0'
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.2
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: []
@@ -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
@@ -1,3 +0,0 @@
1
- .DS_Store
2
- *.gem
3
- Gemfile.lock
data/Gemfile DELETED
@@ -1,5 +0,0 @@
1
- source "https://rubygems.org"
2
- git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
-
4
- # Specify your gem's dependencies in sunstone.gemspec
5
- gemspec
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
@@ -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