arel_extensions 1.2.18 → 1.3.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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +183 -0
  3. data/README.md +42 -0
  4. data/arel_extensions.gemspec +3 -3
  5. data/gemfiles/rails5_2.gemfile +6 -5
  6. data/gemfiles/rails6.gemfile +6 -6
  7. data/gemfiles/rails6_1.gemfile +30 -0
  8. data/gemfiles/rails7.gemfile +30 -0
  9. data/gemspecs/arel_extensions-v1.gemspec +28 -0
  10. data/{gemspec_v2 → gemspecs}/arel_extensions-v2.gemspec +1 -1
  11. data/generate_gems.sh +4 -3
  12. data/lib/arel_extensions/aliases.rb +14 -0
  13. data/lib/arel_extensions/attributes.rb +2 -0
  14. data/lib/arel_extensions/insert_manager.rb +19 -17
  15. data/lib/arel_extensions/math.rb +16 -16
  16. data/lib/arel_extensions/math_functions.rb +7 -3
  17. data/lib/arel_extensions/nodes/case.rb +2 -1
  18. data/lib/arel_extensions/nodes/cast.rb +1 -1
  19. data/lib/arel_extensions/nodes/concat.rb +1 -1
  20. data/lib/arel_extensions/nodes/function.rb +9 -3
  21. data/lib/arel_extensions/nodes/json.rb +3 -1
  22. data/lib/arel_extensions/nodes/length.rb +6 -0
  23. data/lib/arel_extensions/nodes/replace.rb +0 -8
  24. data/lib/arel_extensions/nodes/std.rb +4 -4
  25. data/lib/arel_extensions/nodes/union.rb +1 -1
  26. data/lib/arel_extensions/nodes/union_all.rb +1 -1
  27. data/lib/arel_extensions/string_functions.rb +10 -2
  28. data/lib/arel_extensions/version.rb +1 -1
  29. data/lib/arel_extensions/visitors/mssql.rb +1 -1
  30. data/lib/arel_extensions/visitors/mysql.rb +9 -2
  31. data/lib/arel_extensions/visitors/oracle.rb +2 -2
  32. data/lib/arel_extensions/visitors/oracle12.rb +0 -12
  33. data/lib/arel_extensions/visitors/postgresql.rb +14 -8
  34. data/lib/arel_extensions/visitors/to_sql.rb +26 -9
  35. data/lib/arel_extensions/visitors.rb +9 -1
  36. data/lib/arel_extensions.rb +64 -14
  37. data/test/database.yml +2 -0
  38. data/test/real_db_test.rb +5 -1
  39. data/test/visitors/test_to_sql.rb +18 -11
  40. data/test/with_ar/all_agnostic_test.rb +20 -4
  41. data/test/with_ar/insert_agnostic_test.rb +6 -2
  42. data/test/with_ar/test_bulk_sqlite.rb +6 -2
  43. data/test/with_ar/test_math_sqlite.rb +6 -2
  44. data/test/with_ar/test_string_mysql.rb +6 -2
  45. data/test/with_ar/test_string_sqlite.rb +6 -2
  46. data/version_v1.rb +1 -1
  47. data/version_v2.rb +1 -1
  48. metadata +14 -9
@@ -2,7 +2,7 @@ require 'arelx_test_helper'
2
2
  require 'date'
3
3
 
4
4
  module ArelExtensions
5
- module WthAr
5
+ module WithAr
6
6
  class ListTest < Minitest::Test
7
7
  require 'minitest/pride'
8
8
  def connect_db
@@ -14,7 +14,11 @@ module ArelExtensions
14
14
  @env_db = ENV['DB']
15
15
  end
16
16
  ActiveRecord::Base.establish_connection(@env_db.try(:to_sym) || (RUBY_PLATFORM == 'java' ? :"jdbc-sqlite" : :sqlite))
17
- ActiveRecord::Base.default_timezone = :utc
17
+ if ActiveRecord::VERSION::MAJOR >= 7
18
+ ActiveRecord.default_timezone = :utc
19
+ else
20
+ ActiveRecord::Base.default_timezone = :utc
21
+ end
18
22
  @cnx = ActiveRecord::Base.connection
19
23
  $sqlite = @cnx.adapter_name =~ /sqlite/i
20
24
  $load_extension_disabled ||= false
@@ -162,6 +166,18 @@ module ArelExtensions
162
166
  end
163
167
  end
164
168
 
169
+ def test_aggregation_with_ar_calculation
170
+ # Since Arel10 (Rails6.1), some unwanted behaviors on aggregated calculation were present.
171
+ # This should works no matter which version of rails is used
172
+ assert User.group(:score).average(:id).values.all?{|e| !e.nil?}
173
+
174
+ # Since Rails 7, a patch to calculations.rb has tirggered a double
175
+ # quoting of the alias name. See https://github.com/rails/rails/commit/7e6e9091e55c3357b0162d44b6ab955ed0c718d5
176
+ # Before the patch that fixed this the following error would occur:
177
+ # ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR: zero-length delimited identifier at or near """"
178
+ assert User.group(:score).count(:id).values.all?{|e| !e.nil?}
179
+ end
180
+
165
181
  # String Functions
166
182
  def test_concat
167
183
  assert_equal 'Camille Camille', t(@camille, @name + ' ' + @name)
@@ -352,7 +368,6 @@ module ArelExtensions
352
368
 
353
369
  def test_format
354
370
  assert_equal '2016-05-23', t(@lucas, @created_at.format('%Y-%m-%d'))
355
- skip "SQL Server does not accept any format" if @env_db == 'mssql'
356
371
  assert_equal '2014/03/03 12:42:00', t(@lucas, @updated_at.format('%Y/%m/%d %H:%M:%S'))
357
372
  assert_equal '12:42%', t(@lucas, @updated_at.format('%R%%'))
358
373
  end
@@ -494,7 +509,8 @@ module ArelExtensions
494
509
  assert_equal Time, t(@lucas,@updated_at.cast(:string).cast(:datetime)).class
495
510
  assert_equal Time, t(@lucas,@updated_at.cast(:time)).class
496
511
 
497
- assert_equal "2014-03-03 12:42:00", t(@lucas,@updated_at.cast(:string)) unless @env_db == 'mssql' # locale dependent
512
+ # mysql adapter in rails7 adds some infos we just squeeze here
513
+ assert_equal "2014-03-03 12:42:00", t(@lucas,@updated_at.cast(:string)).split('.').first unless @env_db == 'mssql' # locale dependent
498
514
  assert_equal Date.parse("2014-03-03"), t(@lucas,Arel::Nodes.build_quoted('2014-03-03').cast(:date))
499
515
  assert_equal Date.parse("5014-03-03"), t(@lucas,(@age.cast(:string) + '014-03-03').cast(:date))
500
516
  assert_equal Time.parse("2014-03-03 12:42:00 UTC"), t(@lucas,@updated_at.cast(:string).cast(:datetime))
@@ -2,7 +2,7 @@ require 'arelx_test_helper'
2
2
  require 'date'
3
3
 
4
4
  module ArelExtensions
5
- module WthAr
5
+ module WithAr
6
6
  class InsertManagerTest < Minitest::Test
7
7
  def setup_db
8
8
  ActiveRecord::Base.configurations = YAML.load_file('test/database.yml')
@@ -13,7 +13,11 @@ module ArelExtensions
13
13
  @env_db = ENV['DB']
14
14
  end
15
15
  ActiveRecord::Base.establish_connection(@env_db.try(:to_sym) || (RUBY_PLATFORM == 'java' ? :"jdbc-sqlite" : :sqlite))
16
- ActiveRecord::Base.default_timezone = :utc
16
+ if ActiveRecord::VERSION::MAJOR >= 7
17
+ ActiveRecord.default_timezone = :utc
18
+ else
19
+ ActiveRecord::Base.default_timezone = :utc
20
+ end
17
21
  @cnx = ActiveRecord::Base.connection
18
22
  Arel::Table.engine = ActiveRecord::Base
19
23
  if File.exist?("init/#{@env_db}.sql")
@@ -1,12 +1,16 @@
1
1
  require 'arelx_test_helper'
2
2
 
3
3
  module ArelExtensions
4
- module WthAr
4
+ module WithAr
5
5
  describe 'the sqlite visitor' do
6
6
  before do
7
7
  ActiveRecord::Base.configurations = YAML.load_file('test/database.yml')
8
8
  ActiveRecord::Base.establish_connection(ENV['DB'] || (RUBY_PLATFORM == 'java' ? :"jdbc-sqlite" : :sqlite))
9
- ActiveRecord::Base.default_timezone = :utc
9
+ if ActiveRecord::VERSION::MAJOR >= 7
10
+ ActiveRecord.default_timezone = :utc
11
+ else
12
+ ActiveRecord::Base.default_timezone = :utc
13
+ end
10
14
  @cnx = ActiveRecord::Base.connection
11
15
  Arel::Table.engine = ActiveRecord::Base
12
16
  @cnx.drop_table(:users) rescue nil
@@ -1,12 +1,16 @@
1
1
  require 'arelx_test_helper'
2
2
 
3
3
  module ArelExtensions
4
- module WthAr
4
+ module WithAr
5
5
  describe 'the sqlite visitor can do maths' do
6
6
  before do
7
7
  ActiveRecord::Base.configurations = YAML.load_file('test/database.yml')
8
8
  ActiveRecord::Base.establish_connection(ENV['DB'] || (RUBY_PLATFORM == 'java' ? :"jdbc-sqlite" : :sqlite))
9
- ActiveRecord::Base.default_timezone = :utc
9
+ if ActiveRecord::VERSION::MAJOR >= 7
10
+ ActiveRecord.default_timezone = :utc
11
+ else
12
+ ActiveRecord::Base.default_timezone = :utc
13
+ end
10
14
  Arel::Table.engine = ActiveRecord::Base
11
15
  @cnx = ActiveRecord::Base.connection
12
16
  @cnx.drop_table(:users) rescue nil
@@ -2,12 +2,16 @@ require 'arelx_test_helper'
2
2
  require 'date'
3
3
 
4
4
  module ArelExtensions
5
- module WthAr
5
+ module WithAr
6
6
  describe 'the mysql visitor can do string operations' do
7
7
  before do
8
8
  ActiveRecord::Base.configurations = YAML.load_file('test/database.yml')
9
9
  ActiveRecord::Base.establish_connection(ENV['DB'] || (RUBY_PLATFORM == 'java' ? :"jdbc-mysql" : :mysql))
10
- ActiveRecord::Base.default_timezone = :utc
10
+ if ActiveRecord::VERSION::MAJOR >= 7
11
+ ActiveRecord.default_timezone = :utc
12
+ else
13
+ ActiveRecord::Base.default_timezone = :utc
14
+ end
11
15
  begin
12
16
  @cnx = ActiveRecord::Base.connection
13
17
  rescue => e
@@ -2,12 +2,16 @@ require 'arelx_test_helper'
2
2
  require 'date'
3
3
 
4
4
  module ArelExtensions
5
- module WthAr
5
+ module WithAr
6
6
  describe 'the sqlite visitor can do string operations' do
7
7
  before do
8
8
  ActiveRecord::Base.configurations = YAML.load_file('test/database.yml')
9
9
  ActiveRecord::Base.establish_connection(ENV['DB'] || (RUBY_PLATFORM == 'java' ? :"jdbc-sqlite" : :sqlite))
10
- ActiveRecord::Base.default_timezone = :utc
10
+ if ActiveRecord::VERSION::MAJOR >= 7
11
+ ActiveRecord.default_timezone = :utc
12
+ else
13
+ ActiveRecord::Base.default_timezone = :utc
14
+ end
11
15
  @cnx = ActiveRecord::Base.connection
12
16
  Arel::Table.engine = ActiveRecord::Base
13
17
  @cnx.drop_table(:users) rescue nil
data/version_v1.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module ArelExtensions
2
- VERSION = "1.2.18".freeze
2
+ VERSION = "1.3.0".freeze
3
3
  end
data/version_v2.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module ArelExtensions
2
- VERSION = "2.0.15".freeze
2
+ VERSION = "2.1.0".freeze
3
3
  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: 1.2.18
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yann Azoury
@@ -10,10 +10,10 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-12-14 00:00:00.000000000 Z
13
+ date: 2022-02-04 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: activerecord
16
+ name: arel
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
19
  - - ">="
@@ -44,16 +44,16 @@ dependencies:
44
44
  name: rdoc
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - "~>"
47
+ - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: '4.0'
49
+ version: 6.3.1
50
50
  type: :development
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - "~>"
54
+ - - ">="
55
55
  - !ruby/object:Gem::Version
56
- version: '4.0'
56
+ version: 6.3.1
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: rake
59
59
  requirement: !ruby/object:Gem::Requirement
@@ -81,6 +81,7 @@ extra_rdoc_files:
81
81
  - functions.html
82
82
  files:
83
83
  - ".codeclimate.yml"
84
+ - ".github/workflows/ruby.yml"
84
85
  - ".gitignore"
85
86
  - ".rubocop.yml"
86
87
  - ".travis.yml"
@@ -105,7 +106,10 @@ files:
105
106
  - gemfiles/rails5_1_4.gemfile
106
107
  - gemfiles/rails5_2.gemfile
107
108
  - gemfiles/rails6.gemfile
108
- - gemspec_v2/arel_extensions-v2.gemspec
109
+ - gemfiles/rails6_1.gemfile
110
+ - gemfiles/rails7.gemfile
111
+ - gemspecs/arel_extensions-v1.gemspec
112
+ - gemspecs/arel_extensions-v2.gemspec
109
113
  - generate_gems.sh
110
114
  - init/mssql.sql
111
115
  - init/mysql.sql
@@ -113,6 +117,7 @@ files:
113
117
  - init/postgresql.sql
114
118
  - init/sqlite.sql
115
119
  - lib/arel_extensions.rb
120
+ - lib/arel_extensions/aliases.rb
116
121
  - lib/arel_extensions/attributes.rb
117
122
  - lib/arel_extensions/boolean_functions.rb
118
123
  - lib/arel_extensions/common_sql_functions.rb
@@ -219,7 +224,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
219
224
  - !ruby/object:Gem::Version
220
225
  version: '0'
221
226
  requirements: []
222
- rubygems_version: 3.0.2
227
+ rubygems_version: 3.2.3
223
228
  signing_key:
224
229
  specification_version: 4
225
230
  summary: Extending Arel