arel_extensions 1.2.18 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
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