arel_extensions 1.6.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 -7
  4. data/.rubocop.yml +3 -67
  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 +91 -258
  14. data/Rakefile +30 -48
  15. data/TODO +1 -0
  16. data/appveyor.yml +22 -60
  17. data/arel_extensions.gemspec +14 -13
  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 +14 -14
  23. data/gemfiles/rails5_2.gemfile +14 -16
  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 -7
  30. data/lib/arel_extensions/boolean_functions.rb +14 -53
  31. data/lib/arel_extensions/common_sql_functions.rb +17 -16
  32. data/lib/arel_extensions/comparators.rb +28 -29
  33. data/lib/arel_extensions/date_duration.rb +13 -17
  34. data/lib/arel_extensions/insert_manager.rb +15 -18
  35. data/lib/arel_extensions/math.rb +53 -55
  36. data/lib/arel_extensions/math_functions.rb +39 -46
  37. data/lib/arel_extensions/nodes/abs.rb +1 -0
  38. data/lib/arel_extensions/nodes/blank.rb +2 -1
  39. data/lib/arel_extensions/nodes/case.rb +19 -20
  40. data/lib/arel_extensions/nodes/cast.rb +8 -10
  41. data/lib/arel_extensions/nodes/ceil.rb +1 -1
  42. data/lib/arel_extensions/nodes/coalesce.rb +4 -3
  43. data/lib/arel_extensions/nodes/collate.rb +10 -9
  44. data/lib/arel_extensions/nodes/concat.rb +18 -9
  45. data/lib/arel_extensions/nodes/date_diff.rb +26 -42
  46. data/lib/arel_extensions/nodes/duration.rb +3 -0
  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 +37 -46
  52. data/lib/arel_extensions/nodes/is_null.rb +0 -0
  53. data/lib/arel_extensions/nodes/json.rb +39 -52
  54. data/lib/arel_extensions/nodes/length.rb +0 -5
  55. data/lib/arel_extensions/nodes/levenshtein_distance.rb +1 -1
  56. data/lib/arel_extensions/nodes/locate.rb +2 -1
  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 +1 -0
  62. data/lib/arel_extensions/nodes/repeat.rb +5 -3
  63. data/lib/arel_extensions/nodes/replace.rb +8 -16
  64. data/lib/arel_extensions/nodes/round.rb +6 -5
  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 -8
  68. data/lib/arel_extensions/nodes/then.rb +1 -1
  69. data/lib/arel_extensions/nodes/trim.rb +6 -4
  70. data/lib/arel_extensions/nodes/union.rb +8 -5
  71. data/lib/arel_extensions/nodes/union_all.rb +7 -4
  72. data/lib/arel_extensions/nodes/wday.rb +4 -0
  73. data/lib/arel_extensions/nodes.rb +1 -1
  74. data/lib/arel_extensions/null_functions.rb +5 -19
  75. data/lib/arel_extensions/predications.rb +44 -45
  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 +35 -91
  79. data/lib/arel_extensions/tasks.rb +6 -6
  80. data/lib/arel_extensions/version.rb +1 -1
  81. data/lib/arel_extensions/visitors/ibm_db.rb +31 -24
  82. data/lib/arel_extensions/visitors/mssql.rb +194 -440
  83. data/lib/arel_extensions/visitors/mysql.rb +212 -368
  84. data/lib/arel_extensions/visitors/oracle.rb +179 -236
  85. data/lib/arel_extensions/visitors/oracle12.rb +31 -18
  86. data/lib/arel_extensions/visitors/postgresql.rb +173 -271
  87. data/lib/arel_extensions/visitors/sqlite.rb +127 -157
  88. data/lib/arel_extensions/visitors/to_sql.rb +238 -300
  89. data/lib/arel_extensions/visitors.rb +62 -83
  90. data/lib/arel_extensions.rb +31 -235
  91. data/test/database.yml +10 -20
  92. data/test/helper.rb +18 -0
  93. data/test/real_db_test.rb +118 -121
  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 +370 -773
  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 +38 -52
  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 -18
  113. data/NEWS.md +0 -116
  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 -29
  121. data/gemfiles/rails6.gemfile +0 -34
  122. data/gemfiles/rails6_1.gemfile +0 -42
  123. data/gemfiles/rails7.gemfile +0 -42
  124. data/gemfiles/rails7_1.gemfile +0 -41
  125. data/gemfiles/rails7_2.gemfile +0 -41
  126. data/gemfiles/rails8.gemfile +0 -40
  127. data/gemfiles/rails8_1.gemfile +0 -41
  128. data/gemspecs/arel_extensions-v1.gemspec +0 -27
  129. data/gemspecs/arel_extensions-v2.gemspec +0 -27
  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 -3
  146. data/version_v2.rb +0 -3
@@ -1,23 +1,20 @@
1
- require 'arelx_test_helper'
1
+ require 'helper'
2
2
  require 'date'
3
3
 
4
4
  module ArelExtensions
5
- module WithAr
5
+ module WthAr
6
+
6
7
  class InsertManagerTest < Minitest::Test
7
- def connect_db
8
- ActiveRecord::Base.configurations = ConfigLoader.load('test/database.yml')
9
- if ENV['DB'] == 'oracle' && ((defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx') || (RUBY_PLATFORM == 'java')) # not supported
10
- @env_db = (RUBY_PLATFORM == 'java' ? 'jdbc-sqlite' : 'sqlite')
11
- skip "Platform not supported (DB: #{ENV['DB']}, RUBY_ENGINE: #{RUBY_ENGINE}, RUBY_PLATFORM: #{RUBY_PLATFORM})"
8
+ def setup_db
9
+ ActiveRecord::Base.configurations = YAML.load_file('test/database.yml')
10
+ if ENV['DB'] == 'oracle' && ((defined?(RUBY_ENGINE) && RUBY_ENGINE == "rbx") || (RUBY_PLATFORM == 'java')) # not supported
11
+ @env_db = (RUBY_PLATFORM == 'java' ? "jdbc-sqlite" : 'sqlite')
12
+ skip "Platform not supported"
12
13
  else
13
14
  @env_db = ENV['DB']
14
15
  end
15
16
  ActiveRecord::Base.establish_connection(@env_db.try(:to_sym) || (RUBY_PLATFORM == 'java' ? :"jdbc-sqlite" : :sqlite))
16
- if ACTIVE_RECORD_VERSION >= V7_0
17
- ActiveRecord.default_timezone = :utc
18
- else
19
- ActiveRecord::Base.default_timezone = :utc
20
- end
17
+ ActiveRecord::Base.default_timezone = :utc
21
18
  @cnx = ActiveRecord::Base.connection
22
19
  Arel::Table.engine = ActiveRecord::Base
23
20
  if File.exist?("init/#{@env_db}.sql")
@@ -26,17 +23,14 @@ module ArelExtensions
26
23
  @cnx.execute(sql) rescue $stderr << "can't create functions\n"
27
24
  end
28
25
  end
29
- end
30
-
31
- def setup_db
32
- @cnx.drop_table(:user_tests) rescue nil
26
+ @cnx.drop_table(:user_tests) rescue nil
33
27
  @cnx.create_table :user_tests do |t|
34
28
  t.column :age, :integer
35
29
  t.column :name, :string
36
30
  t.column :comments, :text
37
31
  t.column :created_at, :date
38
32
  t.column :updated_at, :datetime
39
- t.column :score, :decimal, precision: 20, scale: 10
33
+ t.column :score, :decimal, :precision => 20, :scale => 10
40
34
  end
41
35
  if @env_db == 'oracle'
42
36
  @cnx.execute(%q[CREATE OR REPLACE trigger user_tests_trg
@@ -55,18 +49,17 @@ END;])
55
49
  end
56
50
 
57
51
  def setup
58
- connect_db
59
52
  setup_db
60
53
  @table = Arel::Table.new(:user_tests)
61
- @cols = %w[id name comments created_at]
54
+ @cols = ['id', 'name', 'comments', 'created_at']
62
55
  @data = [
63
- [23, 'nom1', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor.', '2016-01-01'],
64
- [25, 'nom2', 'sdfdsfdsfsdf', '2016-01-02']
56
+ [23, 'nom1', "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor.", '2016-01-01'],
57
+ [25, 'nom2', "sdfdsfdsfsdf", '2016-01-02']
65
58
  ]
66
- @cols2 = %w[name comments created_at]
59
+ @cols2 = ['name', 'comments', 'created_at']
67
60
  @data2 = [
68
- ['nom3', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor.', '2016-01-01'],
69
- %w[nom4 sdfdsfdsfsdf 2016-01-04]
61
+ ['nom3', "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor.", '2016-01-01'],
62
+ ['nom4', "sdfdsfdsfsdf", '2016-01-04']
70
63
  ]
71
64
  end
72
65
 
@@ -76,15 +69,16 @@ END;])
76
69
 
77
70
  # Math Functions
78
71
  def test_bulk_insert
79
- insert_manager = Arel::VERSION.to_i > 6 ? Arel::InsertManager.new.into(@table) : Arel::InsertManager.new(Arel::Table.engine).into(@table)
72
+ insert_manager = Arel::VERSION.to_i > 6 ? Arel::InsertManager.new().into(@table) : Arel::InsertManager.new(Arel::Table.engine).into(@table)
80
73
  insert_manager.bulk_insert(@cols, @data)
81
74
  @cnx.execute(insert_manager.to_sql)
82
- assert_equal 2, User.count, 'insertions failed'
83
- insert_manager = Arel::VERSION.to_i > 6 ? Arel::InsertManager.new.into(@table) : Arel::InsertManager.new(Arel::Table.engine).into(@table)
75
+ assert_equal 2, User.count, "insertions failed"
76
+ insert_manager = Arel::VERSION.to_i > 6 ? Arel::InsertManager.new().into(@table) : Arel::InsertManager.new(Arel::Table.engine).into(@table)
84
77
  insert_manager.bulk_insert(@cols2, @data2)
85
78
  @cnx.execute(insert_manager.to_sql)
86
- assert_equal 4, User.count, 'insertions failed'
79
+ assert_equal 4, User.count, "insertions failed"
87
80
  end
81
+
88
82
  end
89
83
  end
90
84
  end
@@ -1,20 +1,18 @@
1
- require 'arelx_test_helper'
1
+ require 'helper'
2
2
 
3
3
  module ArelExtensions
4
- module WithAr
4
+ module WthAr
5
+
5
6
  describe 'the sqlite visitor' do
7
+
6
8
  before do
7
- ActiveRecord::Base.configurations = ConfigLoader.load('test/database.yml')
9
+ ActiveRecord::Base.configurations = YAML.load_file('test/database.yml')
8
10
  ActiveRecord::Base.establish_connection(ENV['DB'] || (RUBY_PLATFORM == 'java' ? :"jdbc-sqlite" : :sqlite))
9
- if ACTIVE_RECORD_VERSION >= V7_0
10
- ActiveRecord.default_timezone = :utc
11
- else
12
- ActiveRecord::Base.default_timezone = :utc
13
- end
11
+ ActiveRecord::Base.default_timezone = :utc
14
12
  @cnx = ActiveRecord::Base.connection
15
13
  Arel::Table.engine = ActiveRecord::Base
16
14
  @cnx.drop_table(:users) rescue nil
17
- @cnx.drop_table(:products) rescue nil
15
+ @cnx.drop_table(:products) rescue nil
18
16
  @cnx.create_table :users do |t|
19
17
  t.column :age, :integer
20
18
  t.column :name, :string
@@ -27,23 +25,24 @@ module ArelExtensions
27
25
  t.column :price, :decimal
28
26
  end
29
27
  @table = Arel::Table.new(:users)
30
- @cols = %w[id name comments created_at]
28
+ @cols = ['id', 'name', 'comments', 'created_at']
31
29
  @data = [
32
- [23, 'nom1', 'sdfdsfdsfsdf', '2016-01-01'],
33
- [25, 'nom2', 'sdfdsfdsfsdf', '2016-01-01']
30
+ [23, 'nom1', "sdfdsfdsfsdf", '2016-01-01'],
31
+ [25, 'nom2', "sdfdsfdsfsdf", '2016-01-01']
34
32
  ]
35
33
  end
36
34
  after do
37
35
  @cnx.drop_table(:users)
38
36
  end
39
37
 
40
- it 'should import large set of data' do
41
- insert_manager = Arel::VERSION.to_i > 6 ? Arel::InsertManager.new.into(@table) : Arel::InsertManager.new(ActiveRecord::Base).into(@table)
38
+ it "should import large set of data" do
39
+ insert_manager = Arel::VERSION.to_i > 6 ? Arel::InsertManager.new().into(@table) : Arel::InsertManager.new(ActiveRecord::Base).into(@table)
42
40
  insert_manager.bulk_insert(@cols, @data)
43
- _(insert_manager.to_sql)
44
- .must_be_like %Q[INSERT INTO "users" ("id", "name", "comments", "created_at")
45
- SELECT 23 AS 'id', 'nom1' AS 'name', 'sdfdsfdsfsdf' AS 'comments', '2016-01-01' AS 'created_at' UNION ALL SELECT 25, 'nom2', 'sdfdsfdsfsdf', '2016-01-01']
41
+ sql = insert_manager.to_sql
42
+ sql.must_be_like %Q[INSERT INTO "users" ("id", "name", "comments", "created_at") SELECT 23 AS 'id', 'nom1' AS 'name', 'sdfdsfdsfsdf' AS 'comments', '2016-01-01' AS 'created_at' UNION ALL SELECT 25, 'nom2', 'sdfdsfdsfsdf', '2016-01-01']
46
43
  end
44
+
47
45
  end
46
+
48
47
  end
49
- end
48
+ end
@@ -1,20 +1,18 @@
1
- require 'arelx_test_helper'
1
+ require 'helper'
2
2
 
3
3
  module ArelExtensions
4
- module WithAr
4
+ module WthAr
5
+
5
6
  describe 'the sqlite visitor can do maths' do
7
+
6
8
  before do
7
- ActiveRecord::Base.configurations = ConfigLoader.load('test/database.yml')
9
+ ActiveRecord::Base.configurations = YAML.load_file('test/database.yml')
8
10
  ActiveRecord::Base.establish_connection(ENV['DB'] || (RUBY_PLATFORM == 'java' ? :"jdbc-sqlite" : :sqlite))
9
- if ACTIVE_RECORD_VERSION >= V7_0
10
- ActiveRecord.default_timezone = :utc
11
- else
12
- ActiveRecord::Base.default_timezone = :utc
13
- end
11
+ ActiveRecord::Base.default_timezone = :utc
14
12
  Arel::Table.engine = ActiveRecord::Base
15
13
  @cnx = ActiveRecord::Base.connection
16
- @cnx.drop_table(:users) rescue nil
17
- @cnx.drop_table(:products) rescue nil
14
+ @cnx.drop_table(:users) rescue nil
15
+ @cnx.drop_table(:products) rescue nil
18
16
  @cnx.create_table :users do |t|
19
17
  t.column :age, :integer
20
18
  t.column :name, :string
@@ -28,15 +26,15 @@ module ArelExtensions
28
26
  end
29
27
  class User < ActiveRecord::Base
30
28
  end
31
- d = Date.new(2016, 5, 23)
32
- User.create age: 5, name: 'Lucas', created_at: d, score: 20.16
33
- User.create age: 15, name: 'Sophie', created_at: d, score: 20.16
34
- User.create age: 20, name: 'Camille', created_at: d, score: 20.16
35
- User.create age: 21, name: 'Arthur', created_at: d, score: 65.62
36
- User.create age: 23, name: 'Myung', created_at: d, score: 20.16
37
- @laure = User.create age: 25, name: 'Laure', created_at: d, score: 20.16
38
- User.create age: nil, name: 'Test', created_at: d, score: 1.62
39
- @neg = User.create age: -20, name: 'Negatif', created_at: d, score: 0.17
29
+ d = Date.new(2016, 5,23)
30
+ User.create :age => 5, :name => "Lucas", :created_at => d, :score => 20.16
31
+ User.create :age => 15, :name => "Sophie", :created_at => d, :score => 20.16
32
+ User.create :age => 20, :name => "Camille", :created_at => d, :score => 20.16
33
+ User.create :age => 21, :name => "Arthur", :created_at => d, :score => 65.62
34
+ User.create :age => 23, :name => "Myung", :created_at => d, :score => 20.16
35
+ @laure = User.create :age => 25, :name => "Laure", :created_at => d, :score =>20.16
36
+ User.create :age => nil, :name => "Test", :created_at => d, :score => 1.62
37
+ @neg = User.create :age => -20, :name => "Negatif", :created_at => d, :score => 0.17
40
38
  @table = Arel::Table.new(:users)
41
39
  @age = @table[:age]
42
40
  end
@@ -45,20 +43,22 @@ module ArelExtensions
45
43
  @cnx.drop_table(:products)
46
44
  end
47
45
 
48
- it 'should do maths' do
49
- # ABS
50
- assert_equal 20, User.where(id: @neg.id).select(@age.abs.as('res')).first.res
51
- assert_equal 14, User.where(id: @laure.id).select((@age - 39).abs.as('res')).first.res
46
+ it "should do maths" do
47
+ #ABS
48
+ assert_equal 20, User.where(:id => @neg.id).select(@age.abs.as("res")).first.res
49
+ assert_equal 14, User.where(:id => @laure.id).select((@age - 39).abs.as("res")).first.res
52
50
 
53
- # CEIL # require extensions
51
+ #CEIL # require extensions
54
52
 
55
53
  # RAND
56
- # puts User.where(@table[:score].eq(20.16)).order(Arel.rand).limit(50).to_sql if User.where(@table[:score].eq(20.16)).order(Arel.rand).limit(50).count == 0
57
- # assert_equal 5, User.where(@table[:score].eq(20.16)).order(Arel.rand).limit(50).count
54
+ # puts User.where(@table[:score].eq(20.16)).order(Arel.rand).limit(50).to_sql if User.where(@table[:score].eq(20.16)).order(Arel.rand).limit(50).count == 0
55
+ # assert_equal 5, User.where(@table[:score].eq(20.16)).order(Arel.rand).limit(50).count
58
56
  assert 42 != User.select(Arel.rand.as('res')).first.res
59
57
  assert 0 <= User.select(Arel.rand.abs.as('res')).first.res
60
58
  assert_equal 8, User.order(Arel.rand).limit(50).count
61
59
  end
60
+
62
61
  end
62
+
63
63
  end
64
- end
64
+ end
@@ -1,18 +1,16 @@
1
- require 'arelx_test_helper'
1
+ require 'helper'
2
2
  require 'date'
3
3
 
4
4
  module ArelExtensions
5
- module WithAr
5
+ module WthAr
6
+
6
7
  describe 'the mysql visitor can do string operations' do
8
+
7
9
  before do
8
- ActiveRecord::Base.configurations = ConfigLoader.load('test/database.yml')
10
+ ActiveRecord::Base.configurations = YAML.load_file('test/database.yml')
9
11
  ActiveRecord::Base.establish_connection(ENV['DB'] || (RUBY_PLATFORM == 'java' ? :"jdbc-mysql" : :mysql))
10
- if ACTIVE_RECORD_VERSION >= V7_0
11
- ActiveRecord.default_timezone = :utc
12
- else
13
- ActiveRecord::Base.default_timezone = :utc
14
- end
15
- begin
12
+ ActiveRecord::Base.default_timezone = :utc
13
+ begin
16
14
  @cnx = ActiveRecord::Base.connection
17
15
  rescue => e
18
16
  puts "\n#{e.inspect}"
@@ -21,7 +19,7 @@ module ArelExtensions
21
19
  end
22
20
  Arel::Table.engine = ActiveRecord::Base
23
21
  @cnx.drop_table(:users) rescue nil
24
- @cnx.drop_table(:products) rescue nil
22
+ @cnx.drop_table(:products) rescue nil
25
23
  @cnx.create_table :users do |t|
26
24
  t.column :age, :integer
27
25
  t.column :name, :string
@@ -35,16 +33,16 @@ module ArelExtensions
35
33
  end
36
34
  class User < ActiveRecord::Base
37
35
  end
38
- d = Date.new(2016, 5, 23)
39
- @lucas = User.create age: 5, name: 'Lucas', created_at: d, score: 20.16
40
- sophie = User.create age: 15, name: 'Sophie', created_at: d, score: 20.16
41
- @sophie = User.where(id: sophie.id)
42
- User.create age: 20, name: 'Camille', created_at: d, score: 20.16
43
- User.create age: 21, name: 'Arthur', created_at: d, score: 65.62
44
- User.create age: 23, name: 'Myung', created_at: d, score: 20.16
45
- @laure = User.create age: 25, name: 'Laure', created_at: d, score: 20.16
46
- User.create age: nil, name: 'Test', created_at: d, score: 1.62
47
- @neg = User.create age: -20, name: 'Negatif', created_at: d, score: 0.17
36
+ d = Date.new(2016, 5,23)
37
+ @lucas = User.create :age => 5, :name => "Lucas", :created_at => d, :score => 20.16
38
+ sophie = User.create :age => 15, :name => "Sophie", :created_at => d, :score => 20.16
39
+ @sophie = User.where(:id => sophie.id)
40
+ User.create :age => 20, :name => "Camille", :created_at => d, :score => 20.16
41
+ User.create :age => 21, :name => "Arthur", :created_at => d, :score => 65.62
42
+ User.create :age => 23, :name => "Myung", :created_at => d, :score => 20.16
43
+ @laure = User.create :age => 25, :name => "Laure", :created_at => d, :score =>20.16
44
+ User.create :age => nil, :name => "Test", :created_at => d, :score => 1.62
45
+ @neg = User.create :age => -20, :name => "Negatif", :created_at => d, :score => 0.17
48
46
  @table = Arel::Table.new(:users)
49
47
  @name = @table[:name]
50
48
  end
@@ -52,24 +50,28 @@ module ArelExtensions
52
50
  @cnx.drop_table(:users)
53
51
  end
54
52
 
55
- it 'should do string operations' do
53
+ it "should do string operations" do
56
54
  # concat
57
55
  d = Date.new(1997, 6, 15)
58
- assert_equal 'SophiePhan', @sophie.select((@name + 'Phan').as('res')).first.res
59
- assert_equal 'Sophie2', @sophie.select((@name + 2).as('res')).first.res
60
- assert_equal 'Sophie1997-06-15', @sophie.select((@name + d).as('res')).first.res
61
- assert_equal 'Sophie15', @sophie.select((User.arel_table[:name] + User.arel_table[:age]).as('res')).first.res
62
- assert_equal 'SophieSophie', @sophie.select((User.arel_table[:name] + User.arel_table[:name]).as('res')).first.res
63
- assert_equal 'Sophie2016-05-23', @sophie.select((User.arel_table[:name] + User.arel_table[:created_at]).as('res')).first.res
64
- # concat Integer
56
+ assert_equal "SophiePhan", @sophie.select((@name + "Phan").as("res")).first.res
57
+ assert_equal "Sophie2", @sophie.select((@name + 2).as("res")).first.res
58
+ assert_equal "Sophie1997-06-15", @sophie.select((@name + d).as("res")).first.res
59
+ assert_equal "Sophie15", @sophie.select((User.arel_table[:name] + User.arel_table[:age]).as("res")).first.res
60
+ assert_equal "SophieSophie", @sophie.select((User.arel_table[:name] + User.arel_table[:name]).as("res")).first.res
61
+ assert_equal "Sophie2016-05-23", @sophie.select((User.arel_table[:name] + User.arel_table[:created_at]).as("res")).first.res
62
+ #concat Integer
65
63
  assert_equal 1, User.where((User.arel_table[:age] + 10).eq(33)).count
66
- assert_equal 1, User.where((User.arel_table[:age] + '1').eq(6)).count
64
+ assert_equal 1, User.where((User.arel_table[:age] + "1").eq(6)).count
67
65
  assert_equal 1, User.where((User.arel_table[:age] + User.arel_table[:age]).eq(10)).count
68
66
 
69
67
  # Replace
70
- assert_equal 'LucaX', User.where(id: @lucas).select(@name.replace('s', 'X').as('res')).first.res
71
- assert_equal 'replace', User.where(id: @lucas).select(@name.replace(@name, 'replace').as('res')).first.res
68
+ assert_equal "LucaX", User.where(:id => @lucas).select(@name.replace("s","X").as("res")).first.res
69
+ assert_equal "replace", User.where(:id => @lucas).select(@name.replace(@name,"replace").as("res")).first.res
70
+
71
+ #
72
72
  end
73
+
73
74
  end
75
+
74
76
  end
75
- end
77
+ end
@@ -1,20 +1,18 @@
1
- require 'arelx_test_helper'
1
+ require 'helper'
2
2
  require 'date'
3
3
 
4
4
  module ArelExtensions
5
- module WithAr
5
+ module WthAr
6
+
6
7
  describe 'the sqlite visitor can do string operations' do
8
+
7
9
  before do
8
- ActiveRecord::Base.configurations = ConfigLoader.load('test/database.yml')
10
+ ActiveRecord::Base.configurations = YAML.load_file('test/database.yml')
9
11
  ActiveRecord::Base.establish_connection(ENV['DB'] || (RUBY_PLATFORM == 'java' ? :"jdbc-sqlite" : :sqlite))
10
- if ACTIVE_RECORD_VERSION >= V7_0
11
- ActiveRecord.default_timezone = :utc
12
- else
13
- ActiveRecord::Base.default_timezone = :utc
14
- end
12
+ ActiveRecord::Base.default_timezone = :utc
15
13
  @cnx = ActiveRecord::Base.connection
16
14
  Arel::Table.engine = ActiveRecord::Base
17
- @cnx.drop_table(:users) rescue nil
15
+ @cnx.drop_table(:users) rescue nil
18
16
  @cnx.create_table :users do |t|
19
17
  t.column :age, :integer
20
18
  t.column :name, :string
@@ -28,16 +26,16 @@ module ArelExtensions
28
26
  end
29
27
  class User < ActiveRecord::Base
30
28
  end
31
- d = Date.new(2016, 5, 23)
32
- @lucas = User.create! age: 5, name: 'Lucas', created_at: d, score: 20.16
33
- sophie = User.create age: 15, name: 'Sophie', created_at: d, score: 20.16
34
- @sophie = User.where(id: sophie.id)
35
- User.create! age: 20, name: 'Camille', created_at: d, score: 20.16
36
- User.create! age: 21, name: 'Arthur', created_at: d, score: 65.62
37
- User.create! age: 23, name: 'Myung', created_at: d, score: 20.16
38
- @laure = User.create age: 25, name: 'Laure', created_at: d, score: 20.16
39
- User.create! age: nil, name: 'Test', created_at: d, score: 1.62
40
- @neg = User.create age: -20, name: 'Negatif', created_at: d, score: 0.17
29
+ d = Date.new(2016, 5,23)
30
+ @lucas = User.create! :age => 5, :name => "Lucas", :created_at => d, :score => 20.16
31
+ sophie = User.create :age => 15, :name => "Sophie", :created_at => d, :score => 20.16
32
+ @sophie = User.where(:id => sophie.id)
33
+ User.create! :age => 20, :name => "Camille", :created_at => d, :score => 20.16
34
+ User.create! :age => 21, :name => "Arthur", :created_at => d, :score => 65.62
35
+ User.create! :age => 23, :name => "Myung", :created_at => d, :score => 20.16
36
+ @laure = User.create :age => 25, :name => "Laure", :created_at => d, :score =>20.16
37
+ User.create! :age => nil, :name => "Test", :created_at => d, :score => 1.62
38
+ @neg = User.create :age => -20, :name => "Negatif", :created_at => d, :score => 0.17
41
39
  @table = Arel::Table.new(:users)
42
40
  @name = @table[:name]
43
41
  end
@@ -45,24 +43,30 @@ module ArelExtensions
45
43
  @cnx.drop_table(:users)
46
44
  end
47
45
 
48
- it 'should do string operations' do
46
+ it "should do string operations" do
49
47
  # concat
50
48
  d = Date.new(1997, 6, 15)
51
- assert_equal 'SophiePhan', @sophie.select((@name + 'Phan').as('res')).first.res
52
- assert_equal 'Sophie2', @sophie.select((@name + 2).as('res')).first.res
53
- assert_equal 'Sophie1997-06-15', @sophie.select((@name + d).as('res')).first.res
54
- assert_equal 'Sophie15', @sophie.select((User.arel_table[:name] + User.arel_table[:age]).as('res')).first.res
55
- assert_equal 'SophieSophie', @sophie.select((User.arel_table[:name] + User.arel_table[:name]).as('res')).first.res
56
- assert_equal 'Sophie2016-05-23', @sophie.select((User.arel_table[:name] + User.arel_table[:created_at]).as('res')).first.res
57
- # concat Integer
49
+ assert_equal "SophiePhan", @sophie.select((@name + "Phan").as("res")).first.res
50
+ assert_equal "Sophie2", @sophie.select((@name + 2).as("res")).first.res
51
+ assert_equal "Sophie1997-06-15", @sophie.select((@name + d).as("res")).first.res
52
+ assert_equal "Sophie15", @sophie.select((User.arel_table[:name] + User.arel_table[:age]).as("res")).first.res
53
+ assert_equal "SophieSophie", @sophie.select((User.arel_table[:name] + User.arel_table[:name]).as("res")).first.res
54
+ assert_equal "Sophie2016-05-23", @sophie.select((User.arel_table[:name] + User.arel_table[:created_at]).as("res")).first.res
55
+ #concat Integer
58
56
  assert_equal 1, User.where((User.arel_table[:age] + 10).eq(33)).count
59
- assert_equal 1, User.where((User.arel_table[:age] + '1').eq(6)).count
57
+ assert_equal 1, User.where((User.arel_table[:age] + "1").eq(6)).count
60
58
  assert_equal 1, User.where((User.arel_table[:age] + User.arel_table[:age]).eq(10)).count
61
59
 
60
+
61
+
62
62
  # Replace
63
- assert_equal 'LucaX', User.where(id: @lucas).select(@name.replace('s', 'X').as('res')).first.res
64
- assert_equal 'replace', User.where(id: @lucas).select(@name.replace(@name, 'replace').as('res')).first.res
63
+ assert_equal "LucaX", User.where(:id => @lucas).select(@name.replace("s","X").as("res")).first.res
64
+ assert_equal "replace", User.where(:id => @lucas).select(@name.replace(@name,"replace").as("res")).first.res
65
+
66
+ #
65
67
  end
68
+
66
69
  end
70
+
67
71
  end
68
- end
72
+ end