arel_extensions 1.7.0 → 2.0.0.rc3

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.
Files changed (146) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +2 -1
  3. data/.gitignore +6 -8
  4. data/.rubocop.yml +4 -194
  5. data/.travis/oracle/download.js +152 -0
  6. data/.travis/oracle/download.sh +30 -0
  7. data/.travis/oracle/download_ojdbc.js +116 -0
  8. data/.travis/oracle/install.sh +34 -0
  9. data/.travis/setup_accounts.sh +9 -0
  10. data/.travis/sqlite3/extension-functions.sh +6 -0
  11. data/.travis.yml +223 -0
  12. data/Gemfile +28 -2
  13. data/README.md +89 -265
  14. data/Rakefile +30 -50
  15. data/TODO +1 -0
  16. data/appveyor.yml +22 -60
  17. data/arel_extensions.gemspec +17 -14
  18. data/functions.html +3 -3
  19. data/gemfiles/rails3.gemfile +20 -0
  20. data/gemfiles/rails4.gemfile +29 -0
  21. data/gemfiles/rails5_0.gemfile +29 -0
  22. data/gemfiles/rails5_1_4.gemfile +17 -19
  23. data/gemfiles/rails5_2.gemfile +17 -26
  24. data/init/mssql.sql +4 -4
  25. data/init/mysql.sql +38 -38
  26. data/init/oracle.sql +0 -0
  27. data/init/postgresql.sql +25 -24
  28. data/init/sqlite.sql +0 -0
  29. data/lib/arel_extensions/attributes.rb +3 -9
  30. data/lib/arel_extensions/boolean_functions.rb +16 -57
  31. data/lib/arel_extensions/common_sql_functions.rb +20 -21
  32. data/lib/arel_extensions/comparators.rb +28 -31
  33. data/lib/arel_extensions/date_duration.rb +13 -19
  34. data/lib/arel_extensions/insert_manager.rb +15 -22
  35. data/lib/arel_extensions/math.rb +70 -68
  36. data/lib/arel_extensions/math_functions.rb +52 -57
  37. data/lib/arel_extensions/nodes/abs.rb +1 -0
  38. data/lib/arel_extensions/nodes/blank.rb +5 -6
  39. data/lib/arel_extensions/nodes/case.rb +27 -31
  40. data/lib/arel_extensions/nodes/cast.rb +12 -12
  41. data/lib/arel_extensions/nodes/ceil.rb +1 -1
  42. data/lib/arel_extensions/nodes/coalesce.rb +5 -4
  43. data/lib/arel_extensions/nodes/collate.rb +10 -9
  44. data/lib/arel_extensions/nodes/concat.rb +22 -13
  45. data/lib/arel_extensions/nodes/date_diff.rb +70 -77
  46. data/lib/arel_extensions/nodes/duration.rb +5 -2
  47. data/lib/arel_extensions/nodes/find_in_set.rb +1 -0
  48. data/lib/arel_extensions/nodes/floor.rb +1 -1
  49. data/lib/arel_extensions/nodes/format.rb +8 -35
  50. data/lib/arel_extensions/nodes/formatted_number.rb +23 -22
  51. data/lib/arel_extensions/nodes/function.rb +39 -50
  52. data/lib/arel_extensions/nodes/is_null.rb +0 -2
  53. data/lib/arel_extensions/nodes/json.rb +47 -72
  54. data/lib/arel_extensions/nodes/length.rb +0 -5
  55. data/lib/arel_extensions/nodes/levenshtein_distance.rb +2 -2
  56. data/lib/arel_extensions/nodes/locate.rb +3 -2
  57. data/lib/arel_extensions/nodes/log10.rb +2 -1
  58. data/lib/arel_extensions/nodes/matches.rb +8 -6
  59. data/lib/arel_extensions/nodes/md5.rb +1 -0
  60. data/lib/arel_extensions/nodes/power.rb +5 -5
  61. data/lib/arel_extensions/nodes/rand.rb +3 -2
  62. data/lib/arel_extensions/nodes/repeat.rb +6 -4
  63. data/lib/arel_extensions/nodes/replace.rb +8 -16
  64. data/lib/arel_extensions/nodes/round.rb +7 -6
  65. data/lib/arel_extensions/nodes/soundex.rb +15 -15
  66. data/lib/arel_extensions/nodes/std.rb +21 -18
  67. data/lib/arel_extensions/nodes/substring.rb +16 -58
  68. data/lib/arel_extensions/nodes/then.rb +2 -2
  69. data/lib/arel_extensions/nodes/trim.rb +7 -5
  70. data/lib/arel_extensions/nodes/union.rb +9 -6
  71. data/lib/arel_extensions/nodes/union_all.rb +8 -5
  72. data/lib/arel_extensions/nodes/wday.rb +6 -2
  73. data/lib/arel_extensions/nodes.rb +1 -1
  74. data/lib/arel_extensions/null_functions.rb +6 -18
  75. data/lib/arel_extensions/predications.rb +49 -54
  76. data/lib/arel_extensions/railtie.rb +5 -5
  77. data/lib/arel_extensions/set_functions.rb +7 -5
  78. data/lib/arel_extensions/string_functions.rb +55 -110
  79. data/lib/arel_extensions/tasks.rb +6 -6
  80. data/lib/arel_extensions/version.rb +1 -3
  81. data/lib/arel_extensions/visitors/ibm_db.rb +36 -29
  82. data/lib/arel_extensions/visitors/mssql.rb +248 -493
  83. data/lib/arel_extensions/visitors/mysql.rb +244 -420
  84. data/lib/arel_extensions/visitors/oracle.rb +258 -311
  85. data/lib/arel_extensions/visitors/oracle12.rb +34 -20
  86. data/lib/arel_extensions/visitors/postgresql.rb +239 -350
  87. data/lib/arel_extensions/visitors/sqlite.rb +169 -191
  88. data/lib/arel_extensions/visitors/to_sql.rb +299 -371
  89. data/lib/arel_extensions/visitors.rb +62 -83
  90. data/lib/arel_extensions.rb +32 -243
  91. data/test/database.yml +10 -20
  92. data/test/helper.rb +18 -0
  93. data/test/real_db_test.rb +120 -123
  94. data/test/support/fake_record.rb +3 -11
  95. data/test/test_comparators.rb +17 -14
  96. data/test/visitors/test_bulk_insert_oracle.rb +12 -12
  97. data/test/visitors/test_bulk_insert_sqlite.rb +14 -13
  98. data/test/visitors/test_bulk_insert_to_sql.rb +13 -11
  99. data/test/visitors/test_oracle.rb +55 -55
  100. data/test/visitors/test_to_sql.rb +226 -419
  101. data/test/with_ar/all_agnostic_test.rb +375 -912
  102. data/test/with_ar/insert_agnostic_test.rb +22 -28
  103. data/test/with_ar/test_bulk_sqlite.rb +17 -18
  104. data/test/with_ar/test_math_sqlite.rb +27 -27
  105. data/test/with_ar/test_string_mysql.rb +34 -32
  106. data/test/with_ar/test_string_sqlite.rb +35 -31
  107. metadata +64 -50
  108. data/.github/workflows/publish.yml +0 -30
  109. data/.github/workflows/release.yml +0 -30
  110. data/.github/workflows/ruby.yml +0 -452
  111. data/CONTRIBUTING.md +0 -102
  112. data/Makefile +0 -48
  113. data/NEWS.md +0 -131
  114. data/bin/build +0 -15
  115. data/bin/publish +0 -8
  116. data/dev/arelx.dockerfile +0 -41
  117. data/dev/compose.yaml +0 -69
  118. data/dev/postgres.dockerfile +0 -5
  119. data/dev/rbenv +0 -189
  120. data/gemfiles/rails5.gemfile +0 -36
  121. data/gemfiles/rails6.gemfile +0 -40
  122. data/gemfiles/rails6_1.gemfile +0 -48
  123. data/gemfiles/rails7.gemfile +0 -48
  124. data/gemfiles/rails7_1.gemfile +0 -48
  125. data/gemfiles/rails7_2.gemfile +0 -47
  126. data/gemfiles/rails8.gemfile +0 -40
  127. data/gemfiles/rails8_1.gemfile +0 -41
  128. data/gemspecs/arel_extensions-v1.gemspec +0 -25
  129. data/gemspecs/arel_extensions-v2.gemspec +0 -25
  130. data/generate_gems.sh +0 -15
  131. data/lib/arel_extensions/aliases.rb +0 -14
  132. data/lib/arel_extensions/constants.rb +0 -13
  133. data/lib/arel_extensions/helpers.rb +0 -61
  134. data/lib/arel_extensions/nodes/aggregate_function.rb +0 -13
  135. data/lib/arel_extensions/nodes/byte_size.rb +0 -11
  136. data/lib/arel_extensions/nodes/char_length.rb +0 -11
  137. data/lib/arel_extensions/nodes/formatted_date.rb +0 -42
  138. data/lib/arel_extensions/nodes/rollup.rb +0 -36
  139. data/lib/arel_extensions/nodes/select.rb +0 -10
  140. data/lib/arel_extensions/nodes/sum.rb +0 -7
  141. data/lib/arel_extensions/visitors/convert_format.rb +0 -37
  142. data/lib/arel_extensions/warning.rb +0 -42
  143. data/test/arelx_test_helper.rb +0 -94
  144. data/test/config_loader.rb +0 -9
  145. data/version_v1.rb +0 -5
  146. data/version_v2.rb +0 -5
data/NEWS.md DELETED
@@ -1,131 +0,0 @@
1
- # News
2
-
3
- ## [unreleased]
4
-
5
- ## Release v2.5.0/v1.7.0 (02-09-2026)
6
-
7
- - Fix a typo preventing optimizer hints from being applied on SELECT in MySQL.
8
- - Fix a bug (crash) in Group Concat of MSSQL.
9
- - Fix a crash when building a JSON document from numeric literal values (e.g. `Arel.json(col => 1)`), on sqlite and mssql.
10
- - MS SQL: string casts and MD5 input now use `varchar(MAX)`, so long strings are
11
- no longer truncated at 30 characters (the default when only `varchar` is specified).
12
- - PostgreSQL: JSON creation from non-JSON text now encodes it (`to_jsonb` instead of a
13
- bare `::jsonb` cast), and `json.set(key, nil)` sets the JSON null member instead of the db's NULL.
14
- - PostgreSQL: an empty JSON array (`Arel.json([])`) is now rendered as `'[]'::jsonb`
15
- instead of `to_jsonb(array[])`.
16
- - JSON: Booleans (`true`/`false`) are now supported as JSON values, whether as literals
17
- (`Arel.json({ col => true })`) or boolean columns (`Arel.json({ col => bool_col })`).
18
- - String slicing: the `[range..]` syntax, and calls to `substring` now behave exactly as in Ruby and MySQL, notably handling negative and beginless/endless indices.
19
-
20
- ## Release v2.4.0/v1.6.0 (23-12-2025)
21
-
22
- - Drop supoprt for Ruby < 2.7.
23
- - Drop support for Rails < 5.2.
24
- - Add support for Rails 8 and 8.1.
25
- - Add `byte_size` and `char_length`. They should replace all uses of `length` because it's inconsistent across vendors; it can surprise you and give you byte size when you expect string length.
26
-
27
- ## Release v2.3.3/v1.5.3 (11-02-2025)
28
-
29
- - Fix the `&` operator which does `find_in_set` for mysql and postgres, accepting strings and integers.
30
- - Add `regex_matches`, an alias for `=~`.
31
-
32
- ## Release v2.3.2/v1.5.2 (02-01-2025)
33
-
34
- - Fix a subtle bug on table access as in `table[:col]` in certain situations.
35
- - `==` and `!=` deprecation warnings can stem from `arel` itself, so now we don't emit them because they're plain wrong.
36
-
37
- ## Release v2.3.1/v1.5.1 (20-12-2024)
38
-
39
- - Fallback to Ruby's Warning module if ActiveSupport doesn't exist. Relevant for old Rails versions.
40
- - Added documentation on how to _"properly"_ configure the deprecator in a Rails application.
41
-
42
- ## Release v2.3.0/v1.5.0 (19-12-2024)
43
-
44
- - Use ActiveSupport's deprecation machinery instead of Ruby's Warning module.
45
- - Fix a bug with group concat that didn't correctly check for the separator value.
46
-
47
- ## Release v2.2.2/v1.4.2 (27-11-2024)
48
-
49
- - Fix deprecation warnings for `==` and `!=`, showing the true location.
50
- - Always emit deprecation warnings for `==` and `!=`.
51
-
52
- ## Release v2.2.1/v1.4.1 (08-11-2024)
53
-
54
- - Improved deprecation warnings for `==` and `!=`, showing the location where they're called.
55
-
56
- ## Release v2.2.0/v1.4.0
57
-
58
- - MS SQL: restrict date-quoting to Arel <= 6 (Rails 4.2)
59
- - MS SQL: turn on warnings on requires only when gem is found
60
- - Rails: 7.2 support for mysql, postgres, and sqlite.
61
- - Attributes: deprecate `==` and `!=`. They're causing issues with
62
- `active_record`, and they're not sanitary.
63
-
64
- ## Release v2.1.11/v1.3.11
65
-
66
- - MS SQL: turn on warnings on requires only when necessary.
67
-
68
- ## Release v2.1.10/v1.3.10
69
-
70
- - MS SQL: add support for jruby 9.4 via [activerecord-jdbc-alt-adapter](https://rubygems.org/gems/activerecord-jdbc-alt-adapter/)
71
-
72
- ## Release v2.1.9/v1.3.9
73
-
74
- ### Bug Fixes
75
-
76
- - Postgres:
77
- - Datetime formatting in postgres now behaves like mysql: if the target
78
- timezone is a string, we automatically consider that you're trying to
79
- convert from `UTC`.
80
- - Datetime casting will now automatically ask for a
81
- `timestamp without timezone`, also aligning with the expected befavior
82
- in mysql. This also makes casting work better with timezone conversion,
83
- especially if you don't pass the timezone from which you're converting
84
- to.
85
- ```ruby
86
- scope
87
- .select(Arel.quoted('2022-02-01 10:42:00')
88
- .cast(:datetime)
89
- .format_date('%Y/%m/%d %H:%M:%S', 'Europe/Paris')
90
- .as('res'))
91
- ```
92
- Will produce:
93
- ```sql
94
- SELECT TO_CHAR(
95
- CAST('2022-02-01 10:42:00' AS timestamp without time zone) AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris',
96
- 'YYYY/MM/DD HH24:MI:SS'
97
- )
98
- AS "res"
99
- -- …
100
- ```
101
-
102
- ## Release v2.1.7/v1.3.7
103
-
104
- ### New Features
105
-
106
- - `o.format_date` as an alternative to `o.format`
107
- The actual behavior of `format` is inconsistent across DB vendors: in mysql we
108
- can format dates and numbers with it, and in the other ones we only format
109
- dates.
110
-
111
- We're planning on normalizing this behavior. We want `format` to "cleverly"
112
- format dates or numbers, and `format_date` / `format_number` to strictly
113
- format dates / numbers.
114
-
115
- The introduction of `format_date` is the first step in this direction.
116
-
117
- ## Release v2.1.6/v1.3.6
118
-
119
- ### Bug Fixes
120
-
121
- - This used to fail.
122
- ```
123
- Arel.when(a).then(b).format('%Y-%m-%d')
124
- ```
125
-
126
- ### New Features
127
-
128
- - `o.present`, a synonym for `o.not_blank`
129
- - `o.coalesce_blank(a, b, c)`
130
- - `o.if_present`, if the value is `null` or blank, then it returns `null`,
131
- otherwise, it returns the value. Inspired by rails' `presence`.
data/bin/build DELETED
@@ -1,15 +0,0 @@
1
- #! /usr/bin/env sh
2
- set -e
3
-
4
- # VERSION ~> 1
5
- echo "Packaging v1"
6
- cp ./version_v1.rb lib/arel_extensions/version.rb
7
- cp ./gemspecs/arel_extensions-v1.gemspec ./arel_extensions.gemspec
8
- gem build ./arel_extensions.gemspec
9
-
10
- # VERSION ~> 2
11
- echo "Packaging v2"
12
- cp ./version_v2.rb lib/arel_extensions/version.rb
13
- cp ./gemspecs/arel_extensions-v2.gemspec ./arel_extensions.gemspec
14
- gem build ./arel_extensions.gemspec
15
-
data/bin/publish DELETED
@@ -1,8 +0,0 @@
1
- #! /usr/bin/env sh
2
- set -e
3
-
4
- find . -name "arel_extensions*.gem" | while read packaged_gem ; do
5
- echo "Publishing $packaged_gem"
6
- gem push "$packaged_gem"
7
- done
8
-
data/dev/arelx.dockerfile DELETED
@@ -1,41 +0,0 @@
1
- FROM ubuntu:22.04
2
-
3
- ENV APP_HOME=/app
4
- ENV DEBIAN_FRONTEND=noninteractive
5
-
6
- RUN mkdir -p $APP_HOME
7
-
8
- # Install OS dependencies
9
- RUN apt-get update -q && apt-get install -y \
10
- curl bundler build-essential git gnupg locales \
11
- libbz2-dev libffi-dev liblzma-dev lsb-release libsqlite3-dev libyaml-dev \
12
- make neovim ncurses-term openjdk-17-jdk-headless tzdata zlib1g-dev \
13
- && ln -fs /usr/share/zoneinfo/UTC /etc/localtime \
14
- && dpkg-reconfigure --frontend noninteractive tzdata
15
-
16
- # Add DB Repo Keys
17
- RUN curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg \
18
- && echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" | tee /etc/apt/sources.list.d/pgdg.list \
19
- && curl https://packages.microsoft.com/keys/microsoft.asc | tee /etc/apt/trusted.gpg.d/microsoft.asc \
20
- && curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | tee /etc/apt/sources.list.d/mssql-release.list \
21
- && apt-get update -q
22
-
23
- # Install DB Clients
24
- RUN ACCEPT_EULA=y DEBIAN_FRONTEND=noninteractive apt-get install -y \
25
- freetds-dev libmysqlclient-dev mysql-client msodbcsql18 mssql-tools18 unixodbc-dev libpq-dev \
26
- && echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc \
27
- && apt-get clean \
28
- && rm -rf /var/lib/apt/lists/* \
29
- && locale-gen en_US.UTF-8
30
-
31
- WORKDIR $APP_HOME
32
-
33
- # Install Ruby via Mise
34
- ENV MISE_DATA_DIR="/mise"
35
- ENV MISE_CONFIG_DIR="/mise"
36
- ENV MISE_CACHE_DIR="/mise/cache"
37
- ENV MISE_INSTALL_PATH="/usr/local/bin/mise"
38
- ENV PATH="/mise/shims:$PATH"
39
-
40
- RUN curl https://mise.run | sh
41
- RUN mise install ruby
data/dev/compose.yaml DELETED
@@ -1,69 +0,0 @@
1
- name: arelx
2
- services:
3
- arelx:
4
- container_name: arelx-build
5
- build:
6
- context: ..
7
- dockerfile: dev/arelx.dockerfile
8
- volumes:
9
- - ../:/app
10
- - gem_cache:/mise/installs/ruby
11
- command: tail -f /dev/null
12
- depends_on:
13
- mariadb:
14
- condition: service_healthy
15
- postgres:
16
- condition: service_healthy
17
- # TODO: Fix, it's not healthy apparently
18
- # mssql:
19
- # condition: service_healthy
20
- environment:
21
- # Map ENV vars for database.yml
22
- MYSQL_HOST: mariadb
23
- POSTGRES_HOST: postgres
24
- MSSQL_HOST: mssql
25
-
26
- mariadb:
27
- image: mariadb:11.0
28
- container_name: mariadb
29
- environment:
30
- MARIADB_DATABASE: arelx_test
31
- MARIADB_ALLOW_EMPTY_ROOT_PASSWORD: true
32
- healthcheck:
33
- test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
34
- interval: 5s
35
- timeout: 5s
36
- retries: 5
37
-
38
- postgres:
39
- build:
40
- context: ..
41
- dockerfile: dev/postgres.dockerfile
42
- container_name: postgres
43
- environment:
44
- POSTGRES_USER: postgres
45
- POSTGRES_PASSWORD: secret
46
- POSTGRES_DB: arelx_test
47
- healthcheck:
48
- test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"]
49
- interval: 5s
50
- timeout: 5s
51
- retries: 5
52
-
53
- mssql:
54
- image: mcr.microsoft.com/mssql/server:2019-latest
55
- container_name: mssql
56
- platform: linux/amd64
57
- environment:
58
- ACCEPT_EULA: Y
59
- # MSSQL_COLLATION: Latin1_General_100_CI_AS_SC_UTF8
60
- MSSQL_SA_PASSWORD: Password12!
61
- healthcheck:
62
- test: ["CMD-SHELL", "/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $${MSSQL_SA_PASSWORD} -Q 'SELECT 1'"]
63
- interval: 10s
64
- retries: 20
65
- start_period: 30s
66
- timeout: 10s
67
-
68
- volumes:
69
- gem_cache:
@@ -1,5 +0,0 @@
1
- FROM postgres:16
2
-
3
- RUN locale-gen fr_FR.utf8 && update-locale
4
- RUN localedef -i fr_FR -c -f UTF-8 -A /usr/share/locale/locale.alias fr_FR.UTF-8
5
- # ENV LANG fr_FR.utf8
data/dev/rbenv DELETED
@@ -1,189 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require 'colorize'
5
- require 'etc'
6
- require 'open3'
7
- require 'pathname'
8
- require 'stringio'
9
- require 'toml-rb'
10
- require 'psych'
11
-
12
- workflow = Pathname('.github/workflows/ruby.yml').read.gsub!(/rails: (\d(_\d)?)/, 'rails: "\1"')
13
- jobs = Psych.load(workflow, symbolize_names: true)[:jobs]
14
- data = {}
15
- jobs.each do |name, details|
16
- details[:strategy][:matrix][:versions].each do |entry|
17
- db = name.to_s.gsub(/\Ajob_test_/, '').to_sym
18
- ruby = entry[:ruby]
19
- rails = entry[:rails]
20
- arelx = entry[:arelx]
21
- gemspec = :"arel_extensions-v#{arelx}"
22
- gemfile = :"rails#{rails}"
23
-
24
- data[db] ||= {}
25
- data[db][gemspec] ||= {}
26
- data[db][gemspec][gemfile] ||= []
27
- data[db][gemspec][gemfile] << ruby
28
- data[db][gemspec][gemfile].sort!
29
- end
30
- end
31
-
32
- MATRIX = data.freeze
33
-
34
- def sh(command, exit_on_fail: true, stealth: false)
35
- cmd, args = command.split(' ', 2)
36
- puts "#{'$'.green.bold} #{cmd.blue} #{args&.yellow}"
37
- Open3.popen3(command) do |stdin, stdout, stderr, wait_thr|
38
- stdin.close
39
- out, err =
40
- if stealth
41
- [StringIO.new, StringIO.new]
42
- else
43
- [$stdout, $stderr]
44
- end
45
- th_out = Thread.new do
46
- stdout.each_line { |line| out.puts line }
47
- end
48
- th_err = Thread.new do
49
- stderr.each_line { |line| err.puts line }
50
- end
51
-
52
- th_out.join
53
- th_err.join
54
- wait_thr.join
55
- exit_status = wait_thr.value.exitstatus
56
- if exit_status.nonzero?
57
- warn "'#{command}' failed with exit status #{exit_status}. Aborting …".red
58
- warn stderr if !stealth
59
- exit exit_status if exit_on_fail
60
- end
61
-
62
- if stealth
63
- [out.string, err.string, (exit_status if !exit_on_fail)].compact
64
- end
65
- end
66
- end
67
-
68
- module RBEnv
69
- RBENV_ROOT =
70
- if (root = ENV['RBENV_ROOT']) && root && !root.strip.empty?
71
- Pathname(root)
72
- else
73
- Pathname(Dir.home).join('.rbenv')
74
- end.freeze
75
- RBENV_BUILD = RBENV_ROOT.join('plugins').join('ruby-build').freeze
76
- SHELL = Pathname(Etc.getpwuid.shell).basename.to_s.downcase.to_sym
77
-
78
- def self.available_versions
79
- out, _ = sh "rbenv versions --bare", stealth: true
80
- res = out.lines.map(&:strip)
81
- warn res
82
- res
83
- end
84
-
85
- def self.ensure(ruby_version)
86
- version = RBEnv.resolve_to_latest(ruby_version)
87
- if self.installed?(version)
88
- puts "#{version.yellow} already installed. Skipping …"
89
- else
90
- puts "Installing #{version.yellow}"
91
- sh "rbenv install #{version}"
92
- end
93
- version
94
- end
95
-
96
- def self.install
97
- if RBENV_ROOT.exist?
98
- puts "#{RBENV_ROOT} exists. Skipping …"
99
- else
100
- sh "git clone --depth 1 https://github.com/rbenv/rbenv.git #{RBENV_ROOT}"
101
- puts "Setup your shell to recognize rbenv. Check github.com/rbenv/rbenv."
102
- end
103
-
104
- if RBENV_BUILD.exist?
105
- puts "#{RBENV_BUILD} exists. Skipping …"
106
- else
107
- sh "git clone --depth 1 https://github.com/rbenv/ruby-build.git #{RBENV_BUILD}"
108
- end
109
- end
110
-
111
- def self.installed?(version)
112
- installed = available_versions
113
- puts "installed? = #{installed}"
114
- installed && !installed.empty? && installed.include?(version)
115
- end
116
-
117
- def self.resolve_to_latest(version)
118
- out, _ = sh "rbenv install --list-all", stealth: true
119
- out
120
- .lines
121
- .map(&:strip)
122
- .select { |v| v.match(/^#{Regexp.escape(version)}\.\d+/) }
123
- .max_by { |v| v.split('.').map(&:to_i) }
124
- end
125
-
126
- def self.set(version)
127
- sh "rbenv local #{version}"
128
- end
129
- end
130
-
131
- module CI
132
- def self.help(*_args)
133
- puts "Usage:"
134
- puts " #{$0} [#{CI.singleton_class.instance_methods(false).sort.join(' | ')}]"
135
- puts
136
- puts "You can ask for many commands."
137
- end
138
-
139
- def self.install(*_args)
140
- RBEnv.install
141
- MATRIX
142
- .flat_map { |_, db|
143
- db.flat_map { |_, arelx|
144
- arelx.flat_map { |rails, rubies|
145
- rails.start_with?("rails") ? rubies : []
146
- }
147
- }
148
- }
149
- .uniq
150
- .sort
151
- .each do |version|
152
- RBEnv.ensure(version)
153
- end
154
- end
155
-
156
- # @param args [Array<String>] a list of databases to test
157
- def self.test(*args)
158
- puts "Requested DBs: #{args.inspect}"
159
- MATRIX.each do |db, arelx|
160
- puts "db = #{db}; #{!args.empty? && args.include?(db)}"
161
- if args.empty? || args.include?(db)
162
- puts "Testing #{db}"
163
- else
164
- puts "Skipping #{db}"
165
- next
166
- end
167
- arelx.each do |arelx_version, rails|
168
- sh "cp ./gemspecs/#{arelx_version}.gemspec ./arel_extensions.gemspec"
169
- rails.each do |rails_version, ruby|
170
- sh "cp ./gemfiles/#{rails_version}.gemfile ./Gemfile"
171
- ruby.each do |ruby_version|
172
- full_version = RBEnv.ensure(ruby_version)
173
- RBEnv.set(full_version)
174
- sh "ruby --version"
175
- sh "which ruby"
176
- sh "rm -rf Gemfile.lock vendor"
177
- sh "bundle config set --local path vendor"
178
- sh "bundle install"
179
- sh "bundle exec rake test:#{db}"
180
- end
181
- end
182
- end
183
- end
184
- end
185
- end
186
-
187
- # main
188
- command = ARGV.size.nonzero? ? ARGV : %w[help]
189
- CI.send(command[0], *command[1..])
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- gem 'arel', '~> 7.0'
6
-
7
- group :development, :test do
8
- gem 'minitest', '~> 5.9'
9
- gem 'rake', '~> 12.3.3'
10
- gem 'rubocop'
11
- gem 'rubocop-performance'
12
-
13
- gem 'activemodel', '~> 5.0'
14
- gem 'activerecord', '5.0.6'
15
- gem 'activesupport', '~> 5.0'
16
-
17
- gem 'mysql2', '0.4.10', platforms: %i[mri mswin mingw]
18
- gem 'pg', '< 1.0.0', platforms: %i[mri mingw]
19
- gem 'sqlite3', '<= 1.3.13', platforms: %i[mri mswin mingw]
20
-
21
- gem 'tiny_tds', platforms: %i[mri mingw] if RUBY_PLATFORM.include?('windows')
22
- # gem "activerecord-sqlserver-adapter", platforms: [:mri, :mingw]
23
-
24
- gem 'activerecord-oracle_enhanced-adapter', '~> 1.7' if ENV.key? 'ORACLE_HOME'
25
- gem 'ruby-oci8', platforms: %i[mri mswin mingw] if ENV.key? 'ORACLE_HOME'
26
-
27
- # for JRuby
28
- gem 'activerecord-jdbc-adapter', github: 'jruby/activerecord-jdbc-adapter', tag: 'v50.0', platforms: :jruby
29
- gem 'activerecord-jdbcmssql-adapter', platforms: :jruby
30
- gem 'activerecord-jdbcmysql-adapter', platforms: :jruby
31
- gem 'activerecord-jdbcpostgresql-adapter', platforms: :jruby
32
- gem 'activerecord-jdbcsqlite3-adapter', platforms: :jruby
33
- gem 'jdbc-sqlite3', platforms: :jruby
34
- end
35
-
36
- gemspec path: Dir.pwd
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- gem 'rails', '~> 6.0.0'
6
-
7
- group :development, :test do
8
- gem 'concurrent-ruby', '1.3.4' # Need to pin b/c of a known issue https://github.com/rails/rails/issues/54260
9
- gem 'debug', platforms: %i[mri]
10
- gem 'minitest', '~> 5.9'
11
- gem 'rake', '~> 12.3.3'
12
- gem 'rubocop'
13
- gem 'rubocop-performance'
14
- gem 'ruby-lsp', platforms: %i[mri]
15
-
16
- gem 'activemodel', '~> 6.0.0'
17
- gem 'activerecord', '~> 6.0.0'
18
- gem 'activesupport', '~> 6.0.0'
19
-
20
- gem 'mysql2', '0.5.2', platforms: [:mri]
21
- gem 'pg', '< 1.0.0', platforms: [:mri]
22
- gem 'sqlite3', '~> 1.4', platforms: [:mri]
23
-
24
- gem 'activerecord-sqlserver-adapter', '~> 6.0', platforms: %i[mri mingw x64_mingw mswin]
25
- gem 'tiny_tds', platforms: %i[mri mingw x64_mingw mswin]
26
- gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw]
27
-
28
- gem 'activerecord-oracle_enhanced-adapter', '~> 6.0.0' if ENV.key? 'ORACLE_HOME'
29
- gem 'ruby-oci8', platforms: %i[mri mswin mingw] if ENV.key? 'ORACLE_HOME'
30
-
31
- # for JRuby
32
- gem 'activerecord-jdbc-alt-adapter', '~> 60.0', platform: :jruby, require: true
33
- gem 'activerecord-jdbcmysql-adapter', platforms: :jruby
34
- gem 'activerecord-jdbcpostgresql-adapter', platforms: :jruby
35
- gem 'activerecord-jdbcsqlite3-adapter', platforms: :jruby
36
- gem 'jdbc-mssql', platforms: :jruby, require: true
37
- gem 'jdbc-sqlite3', platforms: :jruby
38
- end
39
-
40
- gemspec path: Dir.pwd
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- gem 'rails', '~> 6.1.0'
6
-
7
- group :development, :test do
8
- gem 'concurrent-ruby', '1.3.4' # Need to pin b/c of a known issue https://github.com/rails/rails/issues/54260
9
- gem 'debug', platforms: %i[mri]
10
- gem 'minitest', '~> 5.9'
11
- gem 'rake', '~> 12.3.3'
12
- gem 'rubocop'
13
- gem 'rubocop-performance'
14
- gem 'ruby-lsp', platforms: %i[mri]
15
-
16
- gem 'activemodel', '~> 6.1.0'
17
- gem 'activerecord', '~> 6.1.0'
18
- gem 'activesupport', '~> 6.1.0'
19
-
20
- gem 'mysql2', '~>0.5', platforms: [:mri]
21
- gem 'pg', '~> 1.1', platforms: [:mri]
22
- gem 'sqlite3', '~> 1.4', platforms: [:mri]
23
-
24
- gem 'activerecord-sqlserver-adapter', '~> 6.1.0', platforms: %i[mri mingw x64_mingw mswin]
25
- gem 'tiny_tds', platforms: %i[mri mingw x64_mingw mswin]
26
- gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw]
27
-
28
- gem 'activerecord-oracle_enhanced-adapter', '~> 6.0.0' if ENV.key? 'ORACLE_HOME'
29
- gem 'ruby-oci8', platforms: %i[mri mswin mingw] if ENV.key? 'ORACLE_HOME'
30
-
31
- # for JRuby
32
- gem 'activerecord-jdbc-alt-adapter', '~> 61.0', platform: :jruby, require: true
33
- gem 'activerecord-jdbcmysql-adapter', platforms: :jruby
34
- gem 'activerecord-jdbcpostgresql-adapter', platforms: :jruby
35
- gem 'activerecord-jdbcsqlite3-adapter', platforms: :jruby
36
- gem 'jdbc-mssql', platforms: :jruby, require: true
37
- gem 'jdbc-sqlite3', platforms: :jruby
38
-
39
- # Ruby 3.4+ removes the following gems from the standard distribution.
40
- # Warnings are emitted from 3.3 .
41
- if Gem::Version.create(RUBY_VERSION) >= Gem::Version.create('3.3.0')
42
- gem 'base64'
43
- gem 'bigdecimal'
44
- gem 'mutex_m'
45
- end
46
- end
47
-
48
- gemspec path: Dir.pwd
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- gem 'rails', '~> 7.0.1'
6
-
7
- group :development, :test do
8
- gem 'concurrent-ruby', '1.3.4' # Need to pin b/c of a known issue https://github.com/rails/rails/issues/54260
9
- gem 'debug', platforms: %i[mri]
10
- gem 'minitest', '~> 5.9'
11
- gem 'rake', '~> 12.3.3'
12
- gem 'rubocop'
13
- gem 'rubocop-performance'
14
- gem 'ruby-lsp', platforms: %i[mri]
15
-
16
- gem 'activemodel', '~> 7.0.1'
17
- gem 'activerecord', '~> 7.0.1'
18
- gem 'activesupport', '~> 7.0.1'
19
-
20
- gem 'mysql2', '~>0.5', platforms: [:mri]
21
- gem 'pg', '~> 1.1', platforms: [:mri]
22
- gem 'sqlite3', '~> 1.4', platforms: [:mri]
23
-
24
- gem 'activerecord-sqlserver-adapter', '~> 7.0.7', platforms: %i[mri mingw x64_mingw mswin]
25
- gem 'tiny_tds', platforms: %i[mri mingw x64_mingw mswin]
26
- gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw]
27
-
28
- gem 'activerecord-oracle_enhanced-adapter', '~> 6.0.0' if ENV.key? 'ORACLE_HOME'
29
- gem 'ruby-oci8', platforms: %i[mri mswin mingw] if ENV.key? 'ORACLE_HOME'
30
-
31
- # for JRuby
32
- gem 'activerecord-jdbc-alt-adapter', '~> 70.0', platform: :jruby, require: true
33
- gem 'activerecord-jdbcmysql-adapter', platforms: :jruby
34
- gem 'activerecord-jdbcpostgresql-adapter', platforms: :jruby
35
- gem 'activerecord-jdbcsqlite3-adapter', platforms: :jruby
36
- gem 'jdbc-mssql', platforms: :jruby, require: true
37
- gem 'jdbc-sqlite3', platform: :jruby
38
-
39
- # Ruby 3.4+ removes the following gems from the standard distribution.
40
- # Warnings are emitted from 3.3 .
41
- if Gem::Version.create(RUBY_VERSION) >= Gem::Version.create('3.3.0')
42
- gem 'base64'
43
- gem 'bigdecimal'
44
- gem 'mutex_m'
45
- end
46
- end
47
-
48
- gemspec path: Dir.pwd
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- gem 'rails', '~> 7.1'
6
-
7
- group :development, :test do
8
- gem 'debug', platforms: %i[mri]
9
- gem 'minitest', '~> 5.9'
10
- gem 'rake', '~> 12.3.3'
11
- gem 'rubocop'
12
- gem 'rubocop-performance'
13
- gem 'ruby-lsp', platforms: %i[mri]
14
-
15
- gem 'activemodel', '~> 7.1'
16
- gem 'activerecord', '~> 7.1'
17
- gem 'activesupport', '~> 7.1'
18
-
19
- gem 'mysql2', '~>0.5', platforms: [:mri]
20
- gem 'pg', '~> 1.5', platforms: [:mri]
21
- gem 'sqlite3', '~> 1.6', platforms: [:mri]
22
-
23
- gem 'activerecord-sqlserver-adapter', '~> 7.1.0', platforms: %i[mri mingw x64_mingw mswin]
24
- gem 'tiny_tds', platforms: %i[mri mingw x64_mingw mswin]
25
- gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw]
26
-
27
- gem 'activerecord-oracle_enhanced-adapter', '~> 7.0.0' if ENV.key? 'ORACLE_HOME'
28
- gem 'ruby-oci8', platforms: %i[mri mswin mingw] if ENV.key? 'ORACLE_HOME'
29
-
30
- # for JRuby
31
- gem 'activerecord-jdbc-alt-adapter', '~> 71.0.0.alpha1', platform: :jruby, require: true
32
- gem 'activerecord-jdbcmysql-adapter', platforms: :jruby
33
- gem 'activerecord-jdbcpostgresql-adapter', platforms: :jruby
34
- gem 'activerecord-jdbcsqlite3-adapter', platforms: :jruby
35
- gem 'jar-dependencies', '0.4.1', platforms: :jruby
36
- gem 'jdbc-mssql', platforms: :jruby, require: true
37
- gem 'jdbc-sqlite3', platform: :jruby
38
-
39
- # Ruby 3.4+ removes the following gems from the standard distribution.
40
- # Warnings are emitted from 3.3 .
41
- if Gem::Version.create(RUBY_VERSION) >= Gem::Version.create('3.3.0')
42
- gem 'base64'
43
- gem 'bigdecimal'
44
- gem 'mutex_m'
45
- end
46
- end
47
-
48
- gemspec path: Dir.pwd