arel_extensions 2.0.21 → 2.2.2

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 (138) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +1 -2
  3. data/.github/workflows/publish.yml +29 -0
  4. data/.github/workflows/release.yml +30 -0
  5. data/.github/workflows/ruby.yml +377 -80
  6. data/.gitignore +7 -6
  7. data/.rubocop.yml +62 -1
  8. data/CONTRIBUTING.md +102 -0
  9. data/Gemfile +2 -23
  10. data/NEWS.md +89 -0
  11. data/README.md +228 -84
  12. data/Rakefile +11 -4
  13. data/TODO +0 -1
  14. data/appveyor.yml +60 -22
  15. data/arel_extensions.gemspec +11 -12
  16. data/bin/build +15 -0
  17. data/bin/compose +6 -0
  18. data/bin/publish +8 -0
  19. data/dev/arelx.dockerfile +44 -0
  20. data/dev/compose.yaml +71 -0
  21. data/dev/postgres.dockerfile +5 -0
  22. data/dev/rbenv +189 -0
  23. data/gemfiles/rails3.gemfile +10 -10
  24. data/gemfiles/rails4_2.gemfile +38 -0
  25. data/gemfiles/rails5.gemfile +29 -0
  26. data/gemfiles/rails5_1_4.gemfile +13 -13
  27. data/gemfiles/rails5_2.gemfile +16 -14
  28. data/gemfiles/rails6.gemfile +18 -15
  29. data/gemfiles/rails6_1.gemfile +18 -15
  30. data/gemfiles/rails7.gemfile +33 -0
  31. data/gemfiles/rails7_1.gemfile +33 -0
  32. data/gemfiles/rails7_2.gemfile +33 -0
  33. data/gemspecs/arel_extensions-v1.gemspec +12 -13
  34. data/gemspecs/arel_extensions-v2.gemspec +11 -12
  35. data/init/mssql.sql +0 -0
  36. data/init/mysql.sql +0 -0
  37. data/init/oracle.sql +0 -0
  38. data/init/postgresql.sql +0 -0
  39. data/init/sqlite.sql +0 -0
  40. data/lib/arel_extensions/aliases.rb +14 -0
  41. data/lib/arel_extensions/attributes.rb +10 -2
  42. data/lib/arel_extensions/boolean_functions.rb +2 -4
  43. data/lib/arel_extensions/common_sql_functions.rb +12 -12
  44. data/lib/arel_extensions/comparators.rb +14 -14
  45. data/lib/arel_extensions/date_duration.rb +14 -9
  46. data/lib/arel_extensions/helpers.rb +62 -0
  47. data/lib/arel_extensions/insert_manager.rb +19 -17
  48. data/lib/arel_extensions/math.rb +48 -45
  49. data/lib/arel_extensions/math_functions.rb +18 -18
  50. data/lib/arel_extensions/nodes/abs.rb +0 -0
  51. data/lib/arel_extensions/nodes/aggregate_function.rb +0 -0
  52. data/lib/arel_extensions/nodes/blank.rb +1 -1
  53. data/lib/arel_extensions/nodes/case.rb +10 -12
  54. data/lib/arel_extensions/nodes/cast.rb +6 -6
  55. data/lib/arel_extensions/nodes/ceil.rb +0 -0
  56. data/lib/arel_extensions/nodes/change_case.rb +0 -0
  57. data/lib/arel_extensions/nodes/coalesce.rb +1 -1
  58. data/lib/arel_extensions/nodes/collate.rb +9 -9
  59. data/lib/arel_extensions/nodes/concat.rb +2 -2
  60. data/lib/arel_extensions/nodes/date_diff.rb +33 -14
  61. data/lib/arel_extensions/nodes/duration.rb +0 -0
  62. data/lib/arel_extensions/nodes/find_in_set.rb +0 -0
  63. data/lib/arel_extensions/nodes/floor.rb +0 -0
  64. data/lib/arel_extensions/nodes/format.rb +3 -2
  65. data/lib/arel_extensions/nodes/formatted_date.rb +42 -0
  66. data/lib/arel_extensions/nodes/formatted_number.rb +2 -2
  67. data/lib/arel_extensions/nodes/function.rb +22 -26
  68. data/lib/arel_extensions/nodes/is_null.rb +0 -0
  69. data/lib/arel_extensions/nodes/json.rb +15 -9
  70. data/lib/arel_extensions/nodes/length.rb +6 -0
  71. data/lib/arel_extensions/nodes/levenshtein_distance.rb +1 -1
  72. data/lib/arel_extensions/nodes/locate.rb +1 -1
  73. data/lib/arel_extensions/nodes/log10.rb +0 -0
  74. data/lib/arel_extensions/nodes/matches.rb +1 -1
  75. data/lib/arel_extensions/nodes/md5.rb +0 -0
  76. data/lib/arel_extensions/nodes/power.rb +0 -0
  77. data/lib/arel_extensions/nodes/rand.rb +0 -0
  78. data/lib/arel_extensions/nodes/repeat.rb +2 -2
  79. data/lib/arel_extensions/nodes/replace.rb +2 -10
  80. data/lib/arel_extensions/nodes/rollup.rb +36 -0
  81. data/lib/arel_extensions/nodes/round.rb +0 -0
  82. data/lib/arel_extensions/nodes/select.rb +10 -0
  83. data/lib/arel_extensions/nodes/soundex.rb +2 -2
  84. data/lib/arel_extensions/nodes/std.rb +0 -0
  85. data/lib/arel_extensions/nodes/substring.rb +1 -1
  86. data/lib/arel_extensions/nodes/sum.rb +0 -0
  87. data/lib/arel_extensions/nodes/then.rb +1 -1
  88. data/lib/arel_extensions/nodes/trim.rb +2 -2
  89. data/lib/arel_extensions/nodes/union.rb +5 -5
  90. data/lib/arel_extensions/nodes/union_all.rb +4 -4
  91. data/lib/arel_extensions/nodes/wday.rb +0 -0
  92. data/lib/arel_extensions/nodes.rb +0 -0
  93. data/lib/arel_extensions/null_functions.rb +16 -0
  94. data/lib/arel_extensions/predications.rb +10 -10
  95. data/lib/arel_extensions/railtie.rb +1 -1
  96. data/lib/arel_extensions/set_functions.rb +3 -3
  97. data/lib/arel_extensions/string_functions.rb +19 -10
  98. data/lib/arel_extensions/tasks.rb +2 -2
  99. data/lib/arel_extensions/version.rb +1 -1
  100. data/lib/arel_extensions/visitors/convert_format.rb +0 -0
  101. data/lib/arel_extensions/visitors/ibm_db.rb +20 -20
  102. data/lib/arel_extensions/visitors/mssql.rb +394 -169
  103. data/lib/arel_extensions/visitors/mysql.rb +238 -151
  104. data/lib/arel_extensions/visitors/oracle.rb +170 -131
  105. data/lib/arel_extensions/visitors/oracle12.rb +16 -16
  106. data/lib/arel_extensions/visitors/postgresql.rb +170 -140
  107. data/lib/arel_extensions/visitors/sqlite.rb +88 -87
  108. data/lib/arel_extensions/visitors/to_sql.rb +185 -156
  109. data/lib/arel_extensions/visitors.rb +73 -60
  110. data/lib/arel_extensions.rb +173 -36
  111. data/test/arelx_test_helper.rb +49 -1
  112. data/test/database.yml +13 -7
  113. data/test/real_db_test.rb +101 -83
  114. data/test/support/fake_record.rb +8 -2
  115. data/test/test_comparators.rb +5 -5
  116. data/test/visitors/test_bulk_insert_oracle.rb +5 -5
  117. data/test/visitors/test_bulk_insert_sqlite.rb +5 -5
  118. data/test/visitors/test_bulk_insert_to_sql.rb +5 -5
  119. data/test/visitors/test_oracle.rb +14 -14
  120. data/test/visitors/test_to_sql.rb +121 -93
  121. data/test/with_ar/all_agnostic_test.rb +630 -320
  122. data/test/with_ar/insert_agnostic_test.rb +25 -18
  123. data/test/with_ar/test_bulk_sqlite.rb +11 -7
  124. data/test/with_ar/test_math_sqlite.rb +18 -14
  125. data/test/with_ar/test_string_mysql.rb +26 -22
  126. data/test/with_ar/test_string_sqlite.rb +26 -22
  127. data/version_v1.rb +1 -1
  128. data/version_v2.rb +1 -1
  129. metadata +24 -26
  130. data/.travis/oracle/download.js +0 -152
  131. data/.travis/oracle/download.sh +0 -30
  132. data/.travis/oracle/download_ojdbc.js +0 -116
  133. data/.travis/oracle/install.sh +0 -34
  134. data/.travis/setup_accounts.sh +0 -9
  135. data/.travis/sqlite3/extension-functions.sh +0 -6
  136. data/.travis.yml +0 -193
  137. data/gemfiles/rails4.gemfile +0 -29
  138. data/gemfiles/rails5_0.gemfile +0 -29
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 54f73270d3e91a6ae05a01bc021bbc567fed8d79dce914248699c1cd75d6947a
4
- data.tar.gz: 12eb538dc3fe8e2d830809877ddead22def4ac70b1cec16e7ffd20a439cd5ebe
3
+ metadata.gz: ec5e40945328be87eb2078d58b5bbe144f9927f76f44d636b207e9c79ed8d083
4
+ data.tar.gz: a829d89fbafe6717a773b3cd1deb4a86c4a230d30b712f8dc9c2d87967fb325d
5
5
  SHA512:
6
- metadata.gz: 5ba5704db9140c93c980b7e0e1afe54525d414a81408f509851710999f3b29738f638f3f311f5a346ddae37180eb83b34fbe9162c55ac9c3b6feae6baef32d64
7
- data.tar.gz: f94154812f7e4c84248dce19a875be29a4ff3d692cc4a73e83583ee906bb39388ec63791ecc66896e66bc8781b2c5e8d2221b299044970e1599230b53e2a01fb
6
+ metadata.gz: 868227bed38916facdf1f48b0961b48a41bcfb65a5741c17947e73fa3e28d7c9b01ccef238396f1b23288d3ca12dd5c4dfdbedcf9a900dd17efe08dc1e3ef139
7
+ data.tar.gz: a8843d2c5a52ea04a9b0b46bf6b4563697829cd2ea63b39c23fdf2d4790c8e25902d302165392997c617ab13c06b5465f560b4de185a4152804ed493df8c8246
data/.codeclimate.yml CHANGED
@@ -21,5 +21,4 @@ ratings:
21
21
  - "**.rb"
22
22
  - "**.md"
23
23
  exclude_paths:
24
- - .travis/**/*
25
- - test/**/*
24
+ - test/**/*
@@ -0,0 +1,29 @@
1
+ name: "Publish Gems"
2
+ on:
3
+ release:
4
+ types: [published]
5
+
6
+ jobs:
7
+ publish_gems:
8
+ name: Publish to Rubygems
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v3
12
+ - name: setup ruby 3.2
13
+ uses: ruby/setup-ruby@v1
14
+ with:
15
+ ruby-version: 3.2
16
+ - name: Fetch Github Release Asset
17
+ uses: dsaltares/fetch-gh-release-asset@master
18
+ with:
19
+ file: "arel_extensions.*.gem"
20
+ regex: true
21
+ token: ${{ secrets.GITHUB_TOKEN }}
22
+ - name: List gems
23
+ run: ls -l *.gem
24
+ - name: Release Gems
25
+ uses: cadwallion/publish-rubygems-action@master
26
+ env:
27
+ GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
28
+ RUBYGEMS_API_KEY: ${{secrets.RUBYGEMS_API_KEY}}
29
+ RELEASE_COMMAND: bin/publish
@@ -0,0 +1,30 @@
1
+ name: Release
2
+ on:
3
+ workflow_run:
4
+ workflows: ["Build and Test"]
5
+ branches: [master]
6
+ types:
7
+ - completed
8
+
9
+ jobs:
10
+ build_gems:
11
+ name: Build Gemfiles
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@v3
15
+ - name: setup ruby 3.2
16
+ uses: ruby/setup-ruby@v1
17
+ with:
18
+ ruby-version: 3.2
19
+ - name: build gems
20
+ run: |
21
+ bin/build
22
+ - name: release
23
+ uses: softprops/action-gh-release@v1
24
+ with:
25
+ tag_name: ${{ github.ref }}-${{ steps.vars.outputs.sha_short }}
26
+ draft: true
27
+ files: |
28
+ ./arel_extensions-*.gem
29
+ env:
30
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -1,102 +1,399 @@
1
- # This workflow uses actions that are not certified by GitHub.
2
- # They are provided by a third-party and are governed by
3
- # separate terms of service, privacy policy, and support
4
- # documentation.
5
- # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
- # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
1
+ name: Build and Test
7
2
 
8
- name: Ruby
3
+ # Ruby + Rails Compatibility Matrix from here:
4
+ # https://www.fastruby.io/blog/ruby/rails/versions/compatibility-table.html
9
5
 
10
6
  on:
11
7
  push:
12
- branches: [ master ]
8
+ branches:
9
+ - master
13
10
  pull_request:
14
- branches: [ master ]
11
+ branches:
12
+ - master
15
13
 
16
14
  jobs:
17
- test:
15
+ job_test_to_sql:
16
+ name: test to_sql
17
+ runs-on: ubuntu-latest
18
+ strategy:
19
+ fail-fast: false
20
+ matrix:
21
+ versions:
22
+ [
23
+ { ruby: "3.3", rails: 7_2, arelx: 2 },
24
+ { ruby: "3.3", rails: 7_1, arelx: 2 },
25
+ { ruby: "3.3", rails: 7, arelx: 2 },
26
+ { ruby: "3.3", rails: 6_1, arelx: 2 },
27
+ { ruby: "3.2", rails: 7_2, arelx: 2 },
28
+ { ruby: "3.2", rails: 7_1, arelx: 2 },
29
+ { ruby: "3.2", rails: 7, arelx: 2 },
30
+ { ruby: "3.2", rails: 6, arelx: 2 },
31
+ { ruby: "3.2", rails: 6_1, arelx: 2 },
32
+ { ruby: "3.1", rails: 7_2, arelx: 2 },
33
+ { ruby: "3.1", rails: 7_1, arelx: 2 },
34
+ { ruby: "3.1", rails: 7, arelx: 2 },
35
+ { ruby: "3.1", rails: 6_1, arelx: 2 },
36
+ { ruby: "3.1", rails: 6, arelx: 2 },
37
+ { ruby: "3.0", rails: 7_1, arelx: 2 },
38
+ { ruby: "3.0", rails: 7, arelx: 2 },
39
+ { ruby: "3.0", rails: 6_1, arelx: 2 },
40
+ { ruby: "2.7", rails: 7_1, arelx: 2 },
41
+ { ruby: "2.7", rails: 7, arelx: 2 },
42
+ { ruby: "2.7", rails: 6_1, arelx: 2 },
43
+ { ruby: "2.7", rails: 6, arelx: 2 },
44
+ { ruby: "2.7", rails: 5_2, arelx: 1 },
45
+ { ruby: "2.7", rails: 4_2, arelx: 1 },
46
+ { ruby: "2.5", rails: 6_1, arelx: 2 },
47
+ { ruby: "2.5", rails: 6, arelx: 2 },
48
+ { ruby: "2.5", rails: 5_2, arelx: 1 },
49
+ { ruby: "2.5", rails: 4_2, arelx: 1 },
50
+ { ruby: jruby-9.2, rails: 6_1, arelx: 2 },
51
+ { ruby: jruby-9.2, rails: 6, arelx: 2 },
52
+ { ruby: jruby-9.2, rails: 5_2, arelx: 1 },
53
+ { ruby: jruby-9.3, rails: 6_1, arelx: 2 },
54
+ { ruby: jruby-9.3, rails: 6, arelx: 2 },
55
+ { ruby: jruby-9.3, rails: 5_2, arelx: 1 },
56
+ ]
57
+ steps:
58
+ - uses: actions/checkout@v2
59
+ - name: Set up Ruby
60
+ uses: ruby/setup-ruby@v1
61
+ with:
62
+ ruby-version: ${{ matrix.versions.ruby }}
63
+ - name: Install FreeTDS
64
+ run: |
65
+ sudo apt-get update -q
66
+ sudo apt-get install -y freetds-dev
67
+ - name: Setup Gemfile
68
+ run: |
69
+ cp ./gemspecs/arel_extensions-v${{ matrix.versions.arelx }}.gemspec ./arel_extensions.gemspec
70
+ cp ./version_v${{ matrix.versions.arelx }}.rb lib/arel_extensions/version.rb
71
+ cp ./gemfiles/rails${{ matrix.versions.rails }}.gemfile ./Gemfile
72
+ - name: bundle install
73
+ run: |
74
+ bundle config set gemfile ./gemfiles/rails${{ matrix.versions.rails }}.gemfile
75
+ bundle install
76
+ - name: Run test to_sql
77
+ run: bundle exec rake test:to_sql
18
78
 
79
+ job_test_sqlite:
80
+ name: test sqlite
19
81
  runs-on: ubuntu-latest
82
+ strategy:
83
+ fail-fast: false
84
+ matrix:
85
+ versions:
86
+ [
87
+ { ruby: "3.3", rails: 7_2, arelx: 2 },
88
+ { ruby: "3.3", rails: 7_1, arelx: 2 },
89
+ { ruby: "3.3", rails: 7, arelx: 2 },
90
+ { ruby: "3.3", rails: 6_1, arelx: 2 },
91
+ { ruby: "3.2", rails: 7_2, arelx: 2 },
92
+ { ruby: "3.2", rails: 7_1, arelx: 2 },
93
+ { ruby: "3.2", rails: 7, arelx: 2 },
94
+ { ruby: "3.2", rails: 6_1, arelx: 2 },
95
+ { ruby: "3.2", rails: 6, arelx: 2 },
96
+ { ruby: "3.1", rails: 7_2, arelx: 2 },
97
+ { ruby: "3.1", rails: 7_1, arelx: 2 },
98
+ { ruby: "3.1", rails: 7, arelx: 2 },
99
+ { ruby: "3.1", rails: 6, arelx: 2 },
100
+ { ruby: "3.1", rails: 6_1, arelx: 2 },
101
+ { ruby: "3.0", rails: 7_1, arelx: 2 },
102
+ { ruby: "3.0", rails: 7, arelx: 2 },
103
+ { ruby: "3.0", rails: 6_1, arelx: 2 },
104
+ { ruby: "2.7", rails: 7_1, arelx: 2 },
105
+ { ruby: "2.7", rails: 7, arelx: 2 },
106
+ { ruby: "2.7", rails: 6_1, arelx: 2 },
107
+ { ruby: "2.7", rails: 6, arelx: 2 },
108
+ { ruby: "2.7", rails: 5_2, arelx: 1 },
109
+ { ruby: "2.7", rails: 4_2, arelx: 1 },
110
+ { ruby: "2.5", rails: 6_1, arelx: 2 },
111
+ { ruby: "2.5", rails: 6, arelx: 2 },
112
+ { ruby: "2.5", rails: 5_2, arelx: 1 },
113
+ { ruby: "2.5", rails: 4_2, arelx: 1 },
114
+ { ruby: jruby-9.2, rails: 6_1, arelx: 2 },
115
+ { ruby: jruby-9.2, rails: 6, arelx: 2 },
116
+ { ruby: jruby-9.2, rails: 5_2, arelx: 1 },
117
+ { ruby: jruby-9.2, rails: 4_2, arelx: 1 },
118
+ { ruby: jruby-9.3, rails: 6_1, arelx: 2 },
119
+ { ruby: jruby-9.3, rails: 6, arelx: 2 },
120
+ { ruby: jruby-9.3, rails: 5_2, arelx: 1 },
121
+ ]
122
+ steps:
123
+ - uses: actions/checkout@v2
124
+ - name: Set up Ruby
125
+ uses: ruby/setup-ruby@v1
126
+ with:
127
+ ruby-version: ${{ matrix.versions.ruby }}
128
+ - name: Install FreeTDS
129
+ run: |
130
+ sudo apt-get update -q
131
+ sudo apt-get install -y freetds-dev
132
+ - name: Setup Gemfile
133
+ run: |
134
+ cp ./gemspecs/arel_extensions-v${{ matrix.versions.arelx }}.gemspec ./arel_extensions.gemspec
135
+ cp ./version_v${{ matrix.versions.arelx }}.rb lib/arel_extensions/version.rb
136
+ cp ./gemfiles/rails${{ matrix.versions.rails }}.gemfile ./Gemfile
137
+ - name: bundle install
138
+ run: |
139
+ bundle config set gemfile ./gemfiles/rails${{ matrix.versions.rails }}.gemfile
140
+ bundle install
141
+ - name: Run test sqlite
142
+ run: bundle exec rake test:sqlite
20
143
 
21
- services:
22
- postgres:
23
- image: postgres:11.6-alpine
144
+ job_test_postgres:
145
+ name: test postgres
146
+ runs-on: ubuntu-latest
147
+ strategy:
148
+ fail-fast: false
149
+ matrix:
150
+ versions: [
151
+ { ruby: "3.3", rails: 7_2, arelx: 2 },
152
+ { ruby: "3.3", rails: 7_1, arelx: 2 },
153
+ { ruby: "3.3", rails: 7, arelx: 2 },
154
+ { ruby: "3.3", rails: 6_1, arelx: 2 },
155
+ { ruby: "3.2", rails: 7_2, arelx: 2 },
156
+ { ruby: "3.2", rails: 7_1, arelx: 2 },
157
+ { ruby: "3.2", rails: 7, arelx: 2 },
158
+ { ruby: "3.2", rails: 6_1, arelx: 2 },
159
+ # { ruby: "3.2", rails: 6, arelx: 2 }, # cannot test > undefined symbol: rb_tainted_str_new2
160
+ { ruby: "3.1", rails: 7_2, arelx: 2 },
161
+ { ruby: "3.1", rails: 7_1, arelx: 2 },
162
+ { ruby: "3.1", rails: 7, arelx: 2 },
163
+ { ruby: "3.1", rails: 6_1, arelx: 2 },
164
+ { ruby: "3.1", rails: 6, arelx: 2 },
165
+ { ruby: "3.0", rails: 7_1, arelx: 2 },
166
+ { ruby: "3.0", rails: 7, arelx: 2 },
167
+ { ruby: "3.0", rails: 6_1, arelx: 2 },
168
+ { ruby: "2.7", rails: 7_1, arelx: 2 },
169
+ { ruby: "2.7", rails: 7, arelx: 2 },
170
+ { ruby: "2.7", rails: 6_1, arelx: 2 },
171
+ { ruby: "2.7", rails: 6, arelx: 2 },
172
+ { ruby: "2.7", rails: 5_2, arelx: 1 },
173
+ { ruby: "2.7", rails: 4_2, arelx: 1 },
174
+ { ruby: "2.5", rails: 6_1, arelx: 2 },
175
+ { ruby: "2.5", rails: 6, arelx: 2 },
176
+ { ruby: "2.5", rails: 5_2, arelx: 1 },
177
+ { ruby: "2.5", rails: 4_2, arelx: 1 },
178
+ { ruby: jruby-9.2, rails: 6_1, arelx: 2 },
179
+ { ruby: jruby-9.2, rails: 6, arelx: 2 },
180
+ { ruby: jruby-9.2, rails: 5_2, arelx: 1 },
181
+ { ruby: jruby-9.2, rails: 4_2, arelx: 1 },
182
+ { ruby: jruby-9.3, rails: 6_1, arelx: 2 },
183
+ { ruby: jruby-9.3, rails: 6, arelx: 2 },
184
+ { ruby: jruby-9.3, rails: 5_2, arelx: 1 },
185
+ ]
186
+ steps:
187
+ - uses: actions/checkout@v2
188
+ # PostgreSQL requires locales to be installed on the system to be able
189
+ # to do time and currency conversions at runtime.
190
+ #
191
+ # That's why we're not launching it as a service; pre-built images
192
+ # lack loaclization.
193
+ #
194
+ # After we install locales, we'll install PostgreSQL binaries and start
195
+ # the service.
196
+ - name: setup locale
197
+ run: |
198
+ sudo locale-gen fr_FR.utf8
199
+ sudo update-locale
200
+ - name: setup postgres 11
201
+ run: |
202
+ curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc|sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg
203
+ echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
204
+ sudo apt update
205
+ sudo apt -y install postgresql-11
206
+ sudo systemctl enable postgresql
207
+ sudo systemctl start postgresql
208
+ sudo su -c "psql -c \"alter user postgres with password 'secret'\"" postgres
209
+ sudo su -c "createdb arelx_test" postgres
210
+ - name: Set up Ruby
211
+ uses: ruby/setup-ruby@v1
212
+ with:
213
+ ruby-version: ${{ matrix.versions.ruby }}
214
+ - name: Install FreeTDS
215
+ run: |
216
+ sudo apt-get update -q
217
+ sudo apt-get install -y freetds-dev
218
+ - name: Setup Gemfile
219
+ run: |
220
+ cp ./gemspecs/arel_extensions-v${{ matrix.versions.arelx }}.gemspec ./arel_extensions.gemspec
221
+ cp ./version_v${{ matrix.versions.arelx }}.rb lib/arel_extensions/version.rb
222
+ cp ./gemfiles/rails${{ matrix.versions.rails }}.gemfile ./Gemfile
223
+ - name: bundle install
224
+ run: |
225
+ bundle config set gemfile ./gemfiles/rails${{ matrix.versions.rails }}.gemfile
226
+ bundle install
227
+ - name: Run test Postgres
24
228
  env:
25
- POSTGRES_DB: arext_test
26
- ports:
27
- - 5432:5432
28
- # needed because the postgres container does not provide a healthcheck
29
- options: >-
30
- --health-cmd "pg_isready -d arext_test -U postgres -p 5432"
31
- --health-interval 10s
32
- --health-timeout 5s
33
- --health-retries 5
229
+ PGHOST: localhost
230
+ PGUSER: postgres
231
+ run: bundle exec rake test:postgresql
232
+
233
+ job_test_mysql:
234
+ name: test mysql
235
+ runs-on: ubuntu-latest
236
+ strategy:
237
+ fail-fast: false
238
+ matrix:
239
+ versions: [
240
+ { ruby: "3.3", rails: 7_2, arelx: 2 },
241
+ { ruby: "3.3", rails: 7_1, arelx: 2 },
242
+ { ruby: "3.3", rails: 7, arelx: 2 },
243
+ { ruby: "3.3", rails: 6_1, arelx: 2 },
244
+ { ruby: "3.2", rails: 7_2, arelx: 2 },
245
+ { ruby: "3.2", rails: 7_1, arelx: 2 },
246
+ { ruby: "3.2", rails: 7, arelx: 2 },
247
+ { ruby: "3.2", rails: 6_1, arelx: 2 },
248
+ # { ruby: "3.2", rails: 6, arelx: 2 }, # cannot test > undefined symbol: rb_tainted_str_new2
249
+ { ruby: "3.1", rails: 7_2, arelx: 2 },
250
+ { ruby: "3.1", rails: 7_1, arelx: 2 },
251
+ { ruby: "3.1", rails: 7, arelx: 2 },
252
+ { ruby: "3.1", rails: 6_1, arelx: 2 },
253
+ { ruby: "3.1", rails: 6, arelx: 2 },
254
+ { ruby: "3.0", rails: 7_1, arelx: 2 },
255
+ { ruby: "3.0", rails: 7, arelx: 2 },
256
+ { ruby: "3.0", rails: 6_1, arelx: 2 },
257
+ { ruby: "2.7", rails: 7_1, arelx: 2 },
258
+ { ruby: "2.7", rails: 7, arelx: 2 },
259
+ { ruby: "2.7", rails: 6_1, arelx: 2 },
260
+ { ruby: "2.7", rails: 6, arelx: 2 },
261
+ { ruby: "2.7", rails: 5_2, arelx: 1 },
262
+ { ruby: "2.7", rails: 4_2, arelx: 1 },
263
+ { ruby: "2.5", rails: 6_1, arelx: 2 },
264
+ { ruby: "2.5", rails: 6, arelx: 2 },
265
+ { ruby: "2.5", rails: 5_2, arelx: 1 },
266
+ { ruby: "2.5", rails: 4_2, arelx: 1 },
267
+ { ruby: jruby-9.2, rails: 6_1, arelx: 2 },
268
+ { ruby: jruby-9.2, rails: 6, arelx: 2 },
269
+ { ruby: jruby-9.2, rails: 5_2, arelx: 1 },
270
+ { ruby: jruby-9.2, rails: 4_2, arelx: 1 },
271
+ { ruby: jruby-9.3, rails: 6_1, arelx: 2 },
272
+ { ruby: jruby-9.3, rails: 6, arelx: 2 },
273
+ { ruby: jruby-9.3, rails: 5_2, arelx: 1 },
274
+ ]
275
+ services:
34
276
  mysql:
35
277
  image: mysql:5.7
36
278
  env:
37
279
  MYSQL_ALLOW_EMPTY_PASSWORD: true
38
- MYSQL_USERNAME: travis
39
- MYSQL_DATABASE: arext_test
280
+ MYSQL_USERNAME: root
281
+ MYSQL_DATABASE: arelx_test
40
282
  ports:
41
283
  - 3306:3306
42
284
  options: >-
43
- --health-cmd="mysqladmin ping"
44
- --health-interval=10s
45
- --health-timeout=5s
285
+ --health-cmd="mysqladmin ping"
286
+ --health-interval=10s
287
+ --health-timeout=5s
46
288
  --health-retries=3
47
-
289
+ steps:
290
+ - uses: actions/checkout@v2
291
+ - name: Set up Ruby
292
+ uses: ruby/setup-ruby@v1
293
+ with:
294
+ ruby-version: ${{ matrix.versions.ruby }}
295
+ - name: Install FreeTDS
296
+ run: |
297
+ sudo apt-get update -q
298
+ sudo apt-get install -y freetds-dev
299
+ - name: Setup Gemfile
300
+ run: |
301
+ cp ./gemspecs/arel_extensions-v${{ matrix.versions.arelx }}.gemspec ./arel_extensions.gemspec
302
+ cp ./version_v${{ matrix.versions.arelx }}.rb lib/arel_extensions/version.rb
303
+ cp ./gemfiles/rails${{ matrix.versions.rails }}.gemfile ./Gemfile
304
+ - name: bundle install
305
+ run: |
306
+ bundle config set gemfile ./gemfiles/rails${{ matrix.versions.rails }}.gemfile
307
+ bundle install
308
+ - name: Run test MySql
309
+ env:
310
+ DB_CONNECTION: mysql
311
+ DB_HOST: 127.0.0.1
312
+ DB_PORT: 3306
313
+ DB_DATABASE: arelx_test
314
+ DB_USERNAME: root
315
+ run: bundle exec rake test:mysql
316
+
317
+ job_test_mssql:
318
+ name: test mssql on linux
319
+ runs-on: ubuntu-latest
48
320
  strategy:
321
+ fail-fast: false
49
322
  matrix:
50
- ruby-version:
51
- - 3.0.0-preview1
52
- - 2.7
53
- - 2.5
54
- - 2.3
55
- rails-version:
56
- - 6_1
57
- - 6
58
- - 5_2
59
- exclude:
60
- - ruby-version: 2.3
61
- rails-version: 6_1
62
- - ruby-version: 2.3
63
- rails-version: 6
64
- - ruby-version: 3.0.0-preview1
65
- rails-version: 5.2
66
- continue-on-error: ${{ true }}
67
-
323
+ versions: [
324
+ { ruby: "3.3", rails: 7_1, arelx: 2 },
325
+ { ruby: "3.3", rails: 7, arelx: 2 },
326
+ { ruby: "3.3", rails: 6_1, arelx: 2 },
327
+ { ruby: "3.3", rails: 6, arelx: 2 },
328
+ { ruby: "3.2", rails: 7_1, arelx: 2 },
329
+ { ruby: "3.2", rails: 7, arelx: 2 },
330
+ { ruby: "3.2", rails: 6_1, arelx: 2 },
331
+ { ruby: "3.2", rails: 6, arelx: 2 },
332
+ { ruby: "3.1", rails: 7_1, arelx: 2 },
333
+ { ruby: "3.1", rails: 7, arelx: 2 },
334
+ { ruby: "3.1", rails: 6_1, arelx: 2 },
335
+ { ruby: "3.1", rails: 6, arelx: 2 },
336
+ { ruby: "3.0", rails: 7, arelx: 2 },
337
+ { ruby: "3.0", rails: 6_1, arelx: 2 },
338
+ { ruby: "3.0", rails: 6, arelx: 2 },
339
+ { ruby: "2.7", rails: 6_1, arelx: 2 },
340
+ { ruby: "2.7", rails: 6, arelx: 2 },
341
+ { ruby: "2.7", rails: 5_2, arelx: 1 },
342
+ { ruby: "2.7", rails: 4_2, arelx: 1 },
343
+ { ruby: "2.5", rails: 6_1, arelx: 2 },
344
+ { ruby: "2.5", rails: 6, arelx: 2 },
345
+ { ruby: "2.5", rails: 5_2, arelx: 1 },
346
+ { ruby: "2.5", rails: 4_2, arelx: 1 },
347
+ # {ruby: jruby-9.2, rails: 6_1, arelx: 2},
348
+ # {ruby: jruby-9.2, rails: 6, arelx: 2},
349
+ { ruby: jruby-9.2, rails: 5_2, arelx: 1 },
350
+ { ruby: jruby-9.2, rails: 4_2, arelx: 1 },
351
+ # See comments on 9.4 to understand why these are disabled for now.
352
+ # {ruby: jruby-9.3, rails: 6_1, arelx: 2},
353
+ # {ruby: jruby-9.3, rails: 6, arelx: 2},
354
+ # {ruby: jruby-9.3, rails: 5_2, arelx: 1},
355
+ { ruby: jruby-9.4, rails: 7_1, arelx: 2 },
356
+ { ruby: jruby-9.4, rails: 7, arelx: 2 },
357
+ #
358
+ # 6 and 6.1 don't work because of a bug in the alt adapter
359
+ # https://github.com/JesseChavez/activerecord-jdbc-adapter/issues/16
360
+ # {ruby: jruby-9.4, rails: 6_1, arelx: 2},
361
+ # {ruby: jruby-9.4, rails: 6, arelx: 2},
362
+ #
363
+ # < 5.2 don't work because of a deeper issue.
364
+ # {ruby: jruby-9.4, rails: 5_2, arelx: 1},
365
+ ]
366
+ mssql: [2017, 2019]
68
367
  steps:
69
- - uses: actions/checkout@v2
70
- - name: Set up Ruby
71
- # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
72
- # change this to (see https://github.com/ruby/setup-ruby#versioning):
73
- # uses: ruby/setup-ruby@v1
74
- uses: ruby/setup-ruby@21351ecc0a7c196081abca5dc55b08f085efe09a
75
- with:
76
- ruby-version: ${{ matrix.ruby-version }}
77
- - name: Setup gemspec
78
- if: ${{ matrix.rails-version == '6_1' || matrix.rails-version == '6' }}
79
- run: cp ./gemspecs/arel_extensions-v2.gemspec ./arel_extensions.gemspec
80
- - name: Install dependencies
81
- run: |
82
- export BUNDLE_GEMFILE=gemfiles/rails${{ matrix.rails-version }}.gemfile
83
- bundle install
84
- - name: Run test to_sql
85
- run: rake test:to_sql
86
- - name: Run test Postgres
87
- env:
88
- PGHOST: localhost
89
- PGUSER: postgres
90
- run: rake test:postgresql
91
- - name: Run test MySql
92
- env:
93
- DB_CONNECTION: mysql
94
- DB_HOST: 127.0.0.1
95
- DB_PORT: 3306
96
- DB_DATABASE: arext_test
97
- DB_USERNAME: travis
98
- run: |
99
- sudo apt-get install -y mysql-client
100
- mysql --host 127.0.0.1 --port 3306 -uroot -e 'create user travis;'
101
- mysql --host 127.0.0.1 --port 3306 -uroot -e 'GRANT ALL PRIVILEGES ON arext_test.* TO travis;'
102
- rake test:mysql
368
+ - uses: actions/checkout@v2
369
+ - name: Set up Ruby
370
+ uses: ruby/setup-ruby@v1
371
+ with:
372
+ ruby-version: ${{ matrix.versions.ruby }}
373
+ - name: Install FreeTDS
374
+ run: |
375
+ sudo apt-get update -q
376
+ sudo apt-get install -y freetds-dev
377
+ - name: Install MSSQL ${{ matrix.mssql }}
378
+ uses: potatoqualitee/mssqlsuite@v1.5.1
379
+ with:
380
+ version: ${{ matrix.mssql }}
381
+ install: sqlengine, sqlclient, sqlpackage, localdb
382
+ sa-password: Password12!
383
+ - name: Setup Gemfile
384
+ run: |
385
+ cp ./gemspecs/arel_extensions-v${{ matrix.versions.arelx }}.gemspec ./arel_extensions.gemspec
386
+ cp ./version_v${{ matrix.versions.arelx }}.rb lib/arel_extensions/version.rb
387
+ cp ./gemfiles/rails${{ matrix.versions.rails }}.gemfile ./Gemfile
388
+ - name: bundle install
389
+ run: |
390
+ bundle config set gemfile ./gemfiles/rails${{ matrix.versions.rails }}.gemfile
391
+ bundle install
392
+ - name: Run test mssql [mri]
393
+ if: ${{ !contains(matrix.versions.ruby, 'jruby') }}
394
+ run: bundle exec rake test:mssql
395
+ - name: Run test mssql [jruby]
396
+ if: ${{ contains(matrix.versions.ruby, 'jruby') }}
397
+ run: |
398
+ curl -LO https://github.com/microsoft/mssql-jdbc/releases/download/v8.4.1/mssql-jdbc-8.4.1.jre11.jar
399
+ CLASSPATH=".:mssql-jdbc-8.4.1.jre11.jar" bundle exec rake test:mssql
data/.gitignore CHANGED
@@ -1,9 +1,10 @@
1
- coverage/*
2
- config/database.yml
3
- spec/support/fixtures/*database*
4
1
  *.DS_Store
2
+ *.swp
3
+ .bundle
4
+ Gemfile.lock
5
+ config/database.yml
6
+ coverage/*
5
7
  debug.log
6
8
  pkg
7
- .bundle
8
- *.swp
9
- Gemfile.lock
9
+ spec/support/fixtures/*database*
10
+ vendor/
data/.rubocop.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  AllCops:
2
2
  DisabledByDefault: true
3
3
  Exclude:
4
- - "test/**/*"
4
+ - "vendor/**/*"
5
5
 
6
6
  Layout/EndOfLine:
7
7
  Enabled: true
@@ -9,12 +9,31 @@ Layout/EndOfLine:
9
9
  Layout/ExtraSpacing:
10
10
  Enabled: true
11
11
 
12
+ Layout/IndentationWidth:
13
+ Enabled: true
14
+
15
+ Layout/LineLength:
16
+ Enabled: false
17
+
18
+ Layout/SpaceAfterComma:
19
+ Enabled: true
20
+
12
21
  Layout/SpaceAroundEqualsInParameterDefault:
13
22
  Enabled: true
14
23
 
24
+ Layout/SpaceAroundOperators:
25
+ Enabled: true
26
+
27
+ Layout/SpaceInsideHashLiteralBraces:
28
+ Enabled: true
29
+ EnforcedStyle: no_space
30
+
15
31
  Layout/TrailingEmptyLines:
16
32
  Enabled: true
17
33
 
34
+ Metrics/BlockLength:
35
+ Enabled: false
36
+
18
37
  Naming/FileName:
19
38
  Enabled: true
20
39
 
@@ -36,9 +55,45 @@ Style/EmptyElse:
36
55
  Style/Encoding:
37
56
  Enabled: true
38
57
 
58
+ Style/HashSyntax:
59
+ Enabled: true
60
+ EnforcedStyle: ruby19
61
+
39
62
  Style/MethodCallWithArgsParentheses:
40
63
  Enabled: false
41
64
 
65
+ Style/MethodCallWithoutArgsParentheses:
66
+ Enabled: true
67
+
68
+ Style/NegatedIf:
69
+ Enabled: false
70
+
71
+ Style/NumericLiterals:
72
+ Enabled: true
73
+
74
+ Style/RedundantParentheses:
75
+ Enabled: true
76
+
77
+ Style/RedundantRegexpCharacterClass:
78
+ Enabled: true
79
+
80
+ Style/RedundantReturn:
81
+ Enabled: true
82
+
83
+ # Even when conservative, this is unsafe.
84
+ #Style/StringConcatenation:
85
+ # Enabled: true
86
+ # Mode: 'conservative'
87
+
88
+ Style/StringLiterals:
89
+ Enabled: true
90
+
91
+ Style/SymbolArray:
92
+ Enabled: true
93
+
94
+ Style/WordArray:
95
+ Enabled: true
96
+
42
97
  # Performance cops have been transferred to rubocop-performance gem.
43
98
  require: rubocop-performance
44
99
 
@@ -47,3 +102,9 @@ Performance/DoubleStartEndWith:
47
102
 
48
103
  Performance/RedundantMerge:
49
104
  Enabled: true
105
+
106
+ Performance/RegexpMatch:
107
+ Enabled: true
108
+
109
+ Performance/StringReplacement:
110
+ Enabled: true