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
data/test/real_db_test.rb CHANGED
@@ -8,16 +8,20 @@ require 'arel_extensions'
8
8
  def setup_db
9
9
  ActiveRecord::Base.configurations = YAML.load_file('test/database.yml')
10
10
  ActiveRecord::Base.establish_connection(ENV['DB'].try(:to_sym) || (RUBY_PLATFORM == 'java' ? :"jdbc-sqlite" : :sqlite))
11
- ActiveRecord::Base.default_timezone = :utc
11
+ if ActiveRecord::VERSION::MAJOR >= 7
12
+ ActiveRecord.default_timezone = :utc
13
+ else
14
+ ActiveRecord::Base.default_timezone = :utc
15
+ end
12
16
  @cnx = ActiveRecord::Base.connection
13
- if ActiveRecord::Base.connection.adapter_name =~ /sqlite/i
17
+ if /sqlite/i.match?(ActiveRecord::Base.connection.adapter_name)
14
18
  $sqlite = true
15
19
  db = @cnx.raw_connection
16
20
  if !$load_extension_disabled
17
21
  begin
18
22
  db.enable_load_extension(1)
19
- db.load_extension("/usr/lib/sqlite3/pcre.so")
20
- db.load_extension("/usr/lib/sqlite3/extension-functions.so")
23
+ db.load_extension('/usr/lib/sqlite3/pcre.so')
24
+ db.load_extension('/usr/lib/sqlite3/extension-functions.so')
21
25
  db.enable_load_extension(0)
22
26
  rescue => e
23
27
  $load_extension_disabled = true
@@ -25,17 +29,18 @@ def setup_db
25
29
  end
26
30
  end
27
31
  # function find_in_set
28
- db.create_function("find_in_set", 1) do |func, value1, value2|
32
+ db.create_function('find_in_set', 1) do |func, value1, value2|
29
33
  func.result = value1.index(value2)
30
34
  end
31
35
  end
32
36
  @cnx.drop_table(:users) rescue nil
33
37
  @cnx.create_table :users do |t|
34
- t.column :age, :integer
38
+ t.column :age, :integer
35
39
  t.column :name, :string
36
40
  t.column :created_at, :date
37
41
  t.column :updated_at, :date
38
42
  t.column :score, :decimal
43
+ t.column :updated_at, :datetime
39
44
  end
40
45
  end
41
46
 
@@ -48,17 +53,18 @@ end
48
53
 
49
54
  class ListTest < Minitest::Test
50
55
  def setup
51
- d = Date.new(2016,05,23)
56
+ d = Date.new(2016, 05, 23)
57
+ dt = Time.new(2016, 05, 23, 12, 34, 56)
52
58
  setup_db
53
- User.create :age => 5, :name => "Lucas", :created_at => d, :score => 20.16
54
- User.create :age => 15, :name => "Sophie", :created_at => d, :score => 20.16
55
- User.create :age => 20, :name => "Camille", :created_at => d, :score => 20.16
56
- User.create :age => 21, :name => "Arthur", :created_at => d, :score => 65.62
57
- u = User.create :age => 23, :name => "Myung", :created_at => d, :score => 20.16
58
- @myung = User.where(:id => u.id)
59
- User.create :age => 25, :name => "Laure", :created_at => d, :score =>20.16
60
- User.create :age =>nil, :name => "Test", :created_at => d, :score => 1.62
61
- User.create :age =>-0, :name => "Negatif", :created_at => d, :score => 0.17
59
+ User.create age: 5, name: 'Lucas', created_at: d, score: 20.16
60
+ User.create age: 15, name: 'Sophie', created_at: d, score: 20.16
61
+ User.create age: 20, name: 'Camille', created_at: d, score: 20.16
62
+ User.create age: 21, name: 'Arthur', created_at: d, score: 65.62, updated_at: dt
63
+ u = User.create age: 23, name: 'Myung', created_at: d, score: 20.16
64
+ @myung = User.where(id: u.id)
65
+ User.create age: 25, name: 'Laure', created_at: d, score: 20.16
66
+ User.create age: nil, name: 'Test', created_at: d, score: 1.62
67
+ User.create age: -0, name: 'Negatif', created_at: d, score: 0.17
62
68
  end
63
69
 
64
70
  def teardown
@@ -66,83 +72,95 @@ class ListTest < Minitest::Test
66
72
  end
67
73
 
68
74
  def test_abs
69
- assert_equal 0,User.where(User.arel_table[:name].eq("Negatif")).select((User.arel_table[:age].abs).as("res")).first.res
70
- assert_equal 14,User.where(User.arel_table[:name].eq("Laure")).select(((User.arel_table[:age] - 39).abs).as("res")).first.res
75
+ assert_equal 0, User.where(User.arel_table[:name].eq('Negatif')).select((User.arel_table[:age].abs).as('res')).first.res
76
+ assert_equal 14, User.where(User.arel_table[:name].eq('Laure')).select(((User.arel_table[:age] - 39).abs).as('res')).first.res
71
77
  end
72
78
 
73
79
  def test_ceil
74
80
  if !$sqlite || !$load_extension_disabled
75
- assert_equal 1,User.where(User.arel_table[:name].eq("Negatif")).select((User.arel_table[:score].ceil).as("res")).first.res
76
- assert_equal 66,User.where(User.arel_table[:name].eq("Arthur")).select((User.arel_table[:score].ceil).as("res")).first.res
81
+ assert_equal 1, User.where(User.arel_table[:name].eq('Negatif')).select((User.arel_table[:score].ceil).as('res')).first.res
82
+ assert_equal 66, User.where(User.arel_table[:name].eq('Arthur')).select((User.arel_table[:score].ceil).as('res')).first.res
77
83
  end
78
84
  end
79
85
 
80
86
  def test_coalesce
81
- if @cnx.adapter_name =~ /pgsql/i
82
- assert_equal 100,User.where(User.arel_table[:name].eq("Test")).select((User.arel_table[:age].coalesce(100)).as("res")).first.res
83
- assert_equal "Camille",User.where(User.arel_table[:name].eq("Camille")).select((User.arel_table[:name].coalesce("Null","default")).as("res")).first.res
87
+ if /pgsql/i.match?(@cnx.adapter_name)
88
+ assert_equal 100, User.where(User.arel_table[:name].eq('Test')).select((User.arel_table[:age].coalesce(100)).as('res')).first.res
89
+ assert_equal 'Camille', User.where(User.arel_table[:name].eq('Camille')).select((User.arel_table[:name].coalesce('Null', 'default')).as('res')).first.res
84
90
  else
85
- assert_equal "Camille",User.where(User.arel_table[:name].eq("Camille")).select((User.arel_table[:name].coalesce("Null",20)).as("res")).first.res
86
- assert_equal 20,User.where(User.arel_table[:name].eq("Test")).select((User.arel_table[:age].coalesce(nil,20)).as("res")).first.res
91
+ assert_equal 'Camille', User.where(User.arel_table[:name].eq('Camille')).select((User.arel_table[:name].coalesce('Null', 20)).as('res')).first.res
92
+ assert_equal 20, User.where(User.arel_table[:name].eq('Test')).select((User.arel_table[:age].coalesce(nil, 20)).as('res')).first.res
87
93
  end
88
94
  end
89
95
 
90
- def test_Comparator
91
- assert_equal 2,User.where(User.arel_table[:age] < 6).count
92
- assert_equal 2,User.where(User.arel_table[:age] <=10).count
93
- assert_equal 3,User.where(User.arel_table[:age] > 20).count
94
- assert_equal 4,User.where(User.arel_table[:age] >=20).count
95
- assert_equal 1,User.where(User.arel_table[:age] > 5).where(User.arel_table[:age] < 20).count
96
+ def test_comparator
97
+ assert_equal 2, User.where(User.arel_table[:age] < 6).count
98
+ assert_equal 2, User.where(User.arel_table[:age] <= 10).count
99
+ assert_equal 3, User.where(User.arel_table[:age] > 20).count
100
+ assert_equal 4, User.where(User.arel_table[:age] >= 20).count
101
+ assert_equal 1, User.where(User.arel_table[:age] > 5).where(User.arel_table[:age] < 20).count
102
+ end
103
+
104
+ def test_date_date_comparator
105
+ d = Date.new(2016, 05, 24) #after created_at in db
106
+ assert_equal 8, User.where(User.arel_table[:age] < d).count
107
+ assert_equal 0, User.where(User.arel_table[:age] > d).count
108
+ assert_equal 0, User.where(User.arel_table[:age] == d).count
109
+ d = Date.new(2016, 05, 23)
110
+ assert_equal 8, User.where(User.arel_table[:age] == d).count
111
+ dt = Time.new(2016, 05, 23, 12, 35, 00) #after updated_at in db
112
+ assert_equal 1, User.where(User.arel_table[:update_at] < dt).count
113
+ assert_equal 0, User.where(User.arel_table[:update_at] > dt).count
96
114
  end
97
115
 
98
116
  def test_date_duration
99
117
  # Year
100
- assert_equal 2016,User.where(User.arel_table[:name].eq("Lucas")).select((User.arel_table[:created_at].year).as("res")).first.res.to_i
101
- assert_equal 0,User.where(User.arel_table[:created_at].year.eq("2012")).count
118
+ assert_equal 2016, User.where(User.arel_table[:name].eq('Lucas')).select((User.arel_table[:created_at].year).as('res')).first.res.to_i
119
+ assert_equal 0, User.where(User.arel_table[:created_at].year.eq('2012')).count
102
120
  # Month
103
- assert_equal 5,User.where(User.arel_table[:name].eq("Camille")).select((User.arel_table[:created_at].month).as("res")).first.res.to_i
104
- assert_equal 8,User.where(User.arel_table[:created_at].month.eq("05")).count
121
+ assert_equal 5, User.where(User.arel_table[:name].eq('Camille')).select((User.arel_table[:created_at].month).as('res')).first.res.to_i
122
+ assert_equal 8, User.where(User.arel_table[:created_at].month.eq('05')).count
105
123
  # Week
106
- assert_equal 21,User.where(User.arel_table[:name].eq("Arthur")).select((User.arel_table[:created_at].week).as("res")).first.res.to_i
107
- assert_equal 8,User.where(User.arel_table[:created_at].month.eq("05")).count
124
+ assert_equal 21, User.where(User.arel_table[:name].eq('Arthur')).select((User.arel_table[:created_at].week).as('res')).first.res.to_i
125
+ assert_equal 8, User.where(User.arel_table[:created_at].month.eq('05')).count
108
126
  # Day
109
- assert_equal 23,User.where(User.arel_table[:name].eq("Laure")).select((User.arel_table[:created_at].day).as("res")).first.res.to_i
110
- assert_equal 0,User.where(User.arel_table[:created_at].day.eq("05")).count
127
+ assert_equal 23, User.where(User.arel_table[:name].eq('Laure')).select((User.arel_table[:created_at].day).as('res')).first.res.to_i
128
+ assert_equal 0, User.where(User.arel_table[:created_at].day.eq('05')).count
111
129
  end
112
130
 
113
131
  def test_length
114
- assert_equal 7,User.where(User.arel_table[:name].eq("Camille")).select((User.arel_table[:name].length).as("res")).first.res
115
- assert_equal 5,User.where(User.arel_table[:name].eq("Laure")).select((User.arel_table[:name].length).as("res")).first.res
132
+ assert_equal 7, User.where(User.arel_table[:name].eq('Camille')).select((User.arel_table[:name].length).as('res')).first.res
133
+ assert_equal 5, User.where(User.arel_table[:name].eq('Laure')).select((User.arel_table[:name].length).as('res')).first.res
116
134
  end
117
135
 
118
136
  def test_locate
119
137
  if !$sqlite || !$load_extension_disabled
120
- assert_equal 1, User.where(User.arel_table[:name].eq("Camille")).select((User.arel_table[:name].locate("C")).as("res")).first.res
121
- assert_equal 0, User.where(User.arel_table[:name].eq("Lucas")).select((User.arel_table[:name].locate("z")).as("res")).first.res
122
- assert_equal 5, User.where(User.arel_table[:name].eq("Lucas")).select((User.arel_table[:name].locate("s")).as("res")).first.res
138
+ assert_equal 1, User.where(User.arel_table[:name].eq('Camille')).select((User.arel_table[:name].locate('C')).as('res')).first.res
139
+ assert_equal 0, User.where(User.arel_table[:name].eq('Lucas')).select((User.arel_table[:name].locate('z')).as('res')).first.res
140
+ assert_equal 5, User.where(User.arel_table[:name].eq('Lucas')).select((User.arel_table[:name].locate('s')).as('res')).first.res
123
141
  end
124
142
  end
125
143
 
126
144
  def test_isnull
127
- if ActiveRecord::Base.connection.adapter_name =~ /pgsql/i
128
- assert_equal 100,User.where(User.arel_table[:name].eq("Test")).select((User.arel_table[:age].isnull(100)).as("res")).first.res
145
+ if /pgsql/i.match?(ActiveRecord::Base.connection.adapter_name)
146
+ assert_equal 100, User.where(User.arel_table[:name].eq('Test')).select((User.arel_table[:age].isnull(100)).as('res')).first.res
129
147
  else
130
- assert_equal "default",User.where(User.arel_table[:name].eq("Test")).select((User.arel_table[:age].isnull('default')).as("res")).first.res
131
- assert_equal "Test",User.where((User.arel_table[:age].isnull('default')).eq('default')).select(User.arel_table[:name]).first.name.to_s
148
+ assert_equal 'default', User.where(User.arel_table[:name].eq('Test')).select((User.arel_table[:age].isnull('default')).as('res')).first.res
149
+ assert_equal 'Test', User.where((User.arel_table[:age].isnull('default')).eq('default')).select(User.arel_table[:name]).first.name.to_s
132
150
  end
133
151
  end
134
152
 
135
153
  def test_floor
136
154
  if !$sqlite || !$load_extension_disabled
137
- assert_equal 0,User.where(User.arel_table[:name].eq("Negatif")).select((User.arel_table[:score].floor).as("res")).first.res
138
- assert_equal 65,User.where(User.arel_table[:name].eq("Arthur")).select((User.arel_table[:score].floor).as("res")).first.res
155
+ assert_equal 0, User.where(User.arel_table[:name].eq('Negatif')).select((User.arel_table[:score].floor).as('res')).first.res
156
+ assert_equal 65, User.where(User.arel_table[:name].eq('Arthur')).select((User.arel_table[:score].floor).as('res')).first.res
139
157
  end
140
158
  end
141
159
 
142
160
  def test_findinset
143
161
  db = ActiveRecord::Base.connection.raw_connection
144
- assert_equal 3,db.get_first_value("select find_in_set(name,'i') from users where name = 'Camille'")
145
- assert_equal "",db.get_first_value("select find_in_set(name,'p') from users where name = 'Camille'").to_s
162
+ assert_equal 3, db.get_first_value("select find_in_set(name,'i') from users where name = 'Camille'")
163
+ assert_equal '', db.get_first_value("select find_in_set(name,'p') from users where name = 'Camille'").to_s
146
164
  # number
147
165
  # assert_equal 1,User.select(User.arel_table[:name] & ("l")).count
148
166
  # assert_equal 3,(User.select(User.arel_table[:age] & [5,15,20]))
@@ -150,38 +168,38 @@ class ListTest < Minitest::Test
150
168
  end
151
169
 
152
170
  def test_math_plus
153
- d = Date.new(1997,06,15)
171
+ d = Date.new(1997, 06, 15)
154
172
  # Concat String
155
- assert_equal "SophiePhan",User.where(User.arel_table[:name].eq("Sophie")).select((User.arel_table[:name] + "Phan").as("res")).first.res
156
- assert_equal "Sophie2",User.where(User.arel_table[:name].eq("Sophie")).select((User.arel_table[:name] + 2).as("res")).first.res
157
- assert_equal "Sophie1997-06-15",User.where(User.arel_table[:name].eq("Sophie")).select((User.arel_table[:name] + d).as("res")).first.res
158
- assert_equal "Sophie15",User.where(User.arel_table[:name].eq("Sophie")).select((User.arel_table[:name] + User.arel_table[:age]).as("res")).first.res
159
- assert_equal "SophieSophie",User.where(User.arel_table[:name].eq("Sophie")).select((User.arel_table[:name] + User.arel_table[:name]).as("res")).first.res
160
- assert_equal "Sophie2016-05-23",User.where(User.arel_table[:name].eq("Sophie")).select((User.arel_table[:name] + User.arel_table[:created_at]).as("res")).first.res
173
+ assert_equal 'SophiePhan', User.where(User.arel_table[:name].eq('Sophie')).select((User.arel_table[:name] + 'Phan').as('res')).first.res
174
+ assert_equal 'Sophie2', User.where(User.arel_table[:name].eq('Sophie')).select((User.arel_table[:name] + 2).as('res')).first.res
175
+ assert_equal 'Sophie1997-06-15', User.where(User.arel_table[:name].eq('Sophie')).select((User.arel_table[:name] + d).as('res')).first.res
176
+ assert_equal 'Sophie15', User.where(User.arel_table[:name].eq('Sophie')).select((User.arel_table[:name] + User.arel_table[:age]).as('res')).first.res
177
+ assert_equal 'SophieSophie', User.where(User.arel_table[:name].eq('Sophie')).select((User.arel_table[:name] + User.arel_table[:name]).as('res')).first.res
178
+ assert_equal 'Sophie2016-05-23', User.where(User.arel_table[:name].eq('Sophie')).select((User.arel_table[:name] + User.arel_table[:created_at]).as('res')).first.res
161
179
  # concat Integer
162
180
  assert_equal 1, User.where((User.arel_table[:age] + 10).eq(33)).count
163
- assert_equal 1, User.where((User.arel_table[:age] + "1").eq(6)).count
181
+ assert_equal 1, User.where((User.arel_table[:age] + '1').eq(6)).count
164
182
  assert_equal 1, User.where((User.arel_table[:age] + User.arel_table[:age]).eq(10)).count
165
183
  # concat Date
166
184
  # puts((User.arel_table[:created_at] + 1).as("res").to_sql.inspect)
167
- assert_equal "2016-05-24", @myung.select((User.arel_table[:created_at] + 1).as("res")).first.res.to_date.to_s
168
- assert_equal "2016-05-25", @myung.select((User.arel_table[:created_at] + 2.day).as("res")).first.res.to_date.to_s
185
+ assert_equal '2016-05-24', @myung.select((User.arel_table[:created_at] + 1).as('res')).first.res.to_date.to_s
186
+ assert_equal '2016-05-25', @myung.select((User.arel_table[:created_at] + 2.day).as('res')).first.res.to_date.to_s
169
187
  end
170
188
 
171
189
  def test_math_moins
172
- d = Date.new(2016,05,20)
190
+ d = Date.new(2016, 05, 20)
173
191
  # Datediff
174
- assert_equal 8,User.where((User.arel_table[:created_at] - User.arel_table[:created_at]).eq(0)).count
175
- assert_equal 3,User.where(User.arel_table[:name].eq("Laure")).select((User.arel_table[:created_at] - d).as("res")).first.res.abs.to_i
192
+ assert_equal 8, User.where((User.arel_table[:created_at] - User.arel_table[:created_at]).eq(0)).count
193
+ assert_equal 3, User.where(User.arel_table[:name].eq('Laure')).select((User.arel_table[:created_at] - d).as('res')).first.res.abs.to_i
176
194
  # Substraction
177
195
  assert_equal 0, User.where((User.arel_table[:age] - 10).eq(50)).count
178
- assert_equal 0, User.where((User.arel_table[:age] - "10").eq(50)).count
196
+ assert_equal 0, User.where((User.arel_table[:age] - '10').eq(50)).count
179
197
  end
180
198
 
181
199
  def test_rand
182
- assert_equal 5,User.where(User.arel_table[:score].eq(20.16)).select(User.arel_table[:id]).order(Arel.rand).take(50).count
200
+ assert_equal 5, User.where(User.arel_table[:score].eq(20.16)).select(User.arel_table[:id]).order(Arel.rand).take(50).count
183
201
  # test_alias :random :rand
184
- assert_equal 8,User.select(User.arel_table[:name]).order(Arel.rand).take(50).count
202
+ assert_equal 8, User.select(User.arel_table[:name]).order(Arel.rand).take(50).count
185
203
  end
186
204
 
187
205
  def test_regexp_not_regex
@@ -192,8 +210,8 @@ class ListTest < Minitest::Test
192
210
  end
193
211
 
194
212
  def test_replace
195
- assert_equal "LucaX",User.where(User.arel_table[:name].eq("Lucas")).select(((User.arel_table[:name]).replace("s","X")).as("res")).first.res
196
- assert_equal "replace",User.where(User.arel_table[:name].eq("Lucas")).select(((User.arel_table[:name]).replace(User.arel_table[:name],"replace")).as("res")).first.res
213
+ assert_equal 'LucaX', User.where(User.arel_table[:name].eq('Lucas')).select((User.arel_table[:name].replace('s', 'X')).as('res')).first.res
214
+ assert_equal 'replace', User.where(User.arel_table[:name].eq('Lucas')).select((User.arel_table[:name].replace(User.arel_table[:name], 'replace')).as('res')).first.res
197
215
  end
198
216
 
199
217
  def test_round
@@ -203,30 +221,30 @@ class ListTest < Minitest::Test
203
221
 
204
222
  def test_Soundex
205
223
  if !$sqlite || !$load_extension_disabled
206
- assert_equal "C540",User.where(User.arel_table[:name].eq("Camille")).select((User.arel_table[:name].soundex).as("res")).first.res.to_s
207
- assert_equal 8,User.where((User.arel_table[:name].soundex).eq(User.arel_table[:name].soundex)).count
224
+ assert_equal 'C540', User.where(User.arel_table[:name].eq('Camille')).select((User.arel_table[:name].soundex).as('res')).first.res.to_s
225
+ assert_equal 8, User.where((User.arel_table[:name].soundex).eq(User.arel_table[:name].soundex)).count
208
226
  end
209
227
  end
210
228
 
211
229
  def test_Sum
212
230
  # .take(50) because of limit by ORDER BY
213
- assert_equal 110,User.select((User.arel_table[:age].sum + 1).as("res")).take(50).first.res
214
- assert_equal 218,User.select((User.arel_table[:age].sum + User.arel_table[:age].sum).as("res")).take(50).first.res
215
- assert_equal 327,User.select(((User.arel_table[:age] * 3).sum).as("res")).take(50).first.res
216
- assert_equal 2245,User.select(((User.arel_table[:age] * User.arel_table[:age]).sum).as("res")).take(50).first.res
231
+ assert_equal 110, User.select((User.arel_table[:age].sum + 1).as('res')).take(50).first.res
232
+ assert_equal 218, User.select((User.arel_table[:age].sum + User.arel_table[:age].sum).as('res')).take(50).first.res
233
+ assert_equal 327, User.select(((User.arel_table[:age] * 3).sum).as('res')).take(50).first.res
234
+ assert_equal 2245, User.select(((User.arel_table[:age] * User.arel_table[:age]).sum).as('res')).take(50).first.res
217
235
  end
218
236
 
219
237
  def test_trim
220
- assert_equal "Myun",User.where(User.arel_table[:name].eq("Myung")).select(User.arel_table[:name].rtrim("g").as("res")).first.res
221
- assert_equal "yung",User.where(User.arel_table[:name].eq("Myung")).select(User.arel_table[:name].ltrim("M").as("res")).first.res
222
- assert_equal "yung",User.where(User.arel_table[:name].eq("Myung")).select((User.arel_table[:name] + "M").trim("M").as("res")).first.res
223
- assert_equal "",User.where(User.arel_table[:name].eq("Myung")).select(User.arel_table[:name].rtrim(User.arel_table[:name]).as("res")).first.res
238
+ assert_equal 'Myun', User.where(User.arel_table[:name].eq('Myung')).select(User.arel_table[:name].rtrim('g').as('res')).first.res
239
+ assert_equal 'yung', User.where(User.arel_table[:name].eq('Myung')).select(User.arel_table[:name].ltrim('M').as('res')).first.res
240
+ assert_equal 'yung', User.where(User.arel_table[:name].eq('Myung')).select((User.arel_table[:name] + 'M').trim('M').as('res')).first.res
241
+ assert_equal '', User.where(User.arel_table[:name].eq('Myung')).select(User.arel_table[:name].rtrim(User.arel_table[:name]).as('res')).first.res
224
242
 
225
243
  end
226
244
 
227
245
  def test_wday
228
- d = Date.new(2016,06,26)
229
- assert_equal 1,User.where(User.arel_table[:name].eq("Myung")).select((User.arel_table[:created_at].wday).as("res")).first.res.to_i
230
- assert_equal 0,User.select(d.wday).as("res").first.to_i
246
+ d = Date.new(2016, 06, 26)
247
+ assert_equal 1, User.where(User.arel_table[:name].eq('Myung')).select((User.arel_table[:created_at].wday).as('res')).first.res.to_i
248
+ assert_equal 0, User.select(d.wday).as('res').first.to_i
231
249
  end
232
250
  end
@@ -66,7 +66,7 @@ module FakeRecord
66
66
  end
67
67
 
68
68
  def in_clause_length
69
- 10000
69
+ 10_000
70
70
  end
71
71
 
72
72
  def quote thing, column = nil
@@ -105,7 +105,7 @@ module FakeRecord
105
105
  attr_reader :spec, :connection
106
106
 
107
107
  def initialize
108
- @spec = Spec.new(:adapter => 'america')
108
+ @spec = Spec.new({adapter: 'america'})
109
109
  @connection = Connection.new
110
110
  @connection.visitor = Arel::Visitors::ToSql.new(connection)
111
111
  end
@@ -145,5 +145,11 @@ module FakeRecord
145
145
  def connection
146
146
  connection_pool.connection
147
147
  end
148
+
149
+ if ActiveRecord.version >= Gem::Version.create('7.2')
150
+ def with_connection(*args, **kwargs, &block)
151
+ connection_pool.with_connection(*args, **kwargs, &block)
152
+ end
153
+ end
148
154
  end
149
155
  end
@@ -17,23 +17,23 @@ module ArelExtensions
17
17
  @visitor.accept(node, Arel::Collectors::SQLString.new).value
18
18
  end
19
19
 
20
- it "< is equal lt" do
20
+ it '< is equal lt' do
21
21
  _(compile(@table[:id] < 10)).must_be_like('"users"."id" < 10')
22
22
  end
23
23
 
24
- it "<= is equal lteq" do
24
+ it '<= is equal lteq' do
25
25
  _(compile(@table[:id] <= 10)).must_be_like('"users"."id" <= 10')
26
26
  end
27
27
 
28
- it "> is equal gt" do
28
+ it '> is equal gt' do
29
29
  _(compile(@table[:id] > 10)).must_be_like('"users"."id" > 10')
30
30
  end
31
31
 
32
- it "< is equal gteq" do
32
+ it '< is equal gteq' do
33
33
  _(compile(@table[:id] >= 10)).must_be_like('"users"."id" >= 10')
34
34
  end
35
35
 
36
- it "should compare with dates" do
36
+ it 'should compare with dates' do
37
37
  _(compile(@table[:created_at] >= Date.new(2016, 3, 31)))
38
38
  .must_be_like %{"users"."created_at" >= '2016-03-31'}
39
39
  end
@@ -7,10 +7,10 @@ module ArelExtensions
7
7
  @conn = FakeRecord::Base.new
8
8
  @visitor = Arel::Visitors::Oracle.new @conn.connection
9
9
  @table = Arel::Table.new(:users)
10
- @cols = ['name', 'comments', 'created_at']
10
+ @cols = %w[name comments created_at]
11
11
  @data = [
12
- ['nom1', "sdfdsfdsfsdf", '2016-01-01'],
13
- ['nom2', "sdfdsfdsfsdf", '2016-01-01']
12
+ %w[nom1 sdfdsfdsfsdf 2016-01-01],
13
+ %w[nom2 sdfdsfdsfsdf 2016-01-01]
14
14
  ]
15
15
  end
16
16
 
@@ -22,8 +22,8 @@ module ArelExtensions
22
22
  end
23
23
  end
24
24
 
25
- it "should import large set of data in Oracle" do
26
- insert_manager = Arel::VERSION.to_i > 6 ? Arel::InsertManager.new().into(@table) : Arel::InsertManager.new(@conn).into(@table)
25
+ it 'should import large set of data in Oracle' do
26
+ insert_manager = Arel::VERSION.to_i > 6 ? Arel::InsertManager.new.into(@table) : Arel::InsertManager.new(@conn).into(@table)
27
27
  insert_manager.bulk_insert(@cols, @data)
28
28
  _(compile(insert_manager.ast))
29
29
  .must_be_like %Q[INSERT INTO "users" ("name", "comments", "created_at")
@@ -8,10 +8,10 @@ module ArelExtensions
8
8
  @visitor = Arel::Visitors::SQLite.new @conn.connection
9
9
  @table = Arel::Table.new(:users)
10
10
  Arel::Table.engine = @conn
11
- @cols = ['id', 'name', 'comments', 'created_at']
11
+ @cols = %w[id name comments created_at]
12
12
  @data = [
13
- [23, 'nom1', "sdfdsfdsfsdf", '2016-01-01'],
14
- [25, 'nom2', "sdfdsfdsfsdf", '2016-01-01']
13
+ [23, 'nom1', 'sdfdsfdsfsdf', '2016-01-01'],
14
+ [25, 'nom2', 'sdfdsfdsfsdf', '2016-01-01']
15
15
  ]
16
16
  end
17
17
 
@@ -23,8 +23,8 @@ module ArelExtensions
23
23
  end
24
24
  end
25
25
 
26
- it "should import large set of data" do
27
- insert_manager = Arel::VERSION.to_i > 6 ? Arel::InsertManager.new().into(@table) : Arel::InsertManager.new(@conn).into(@table)
26
+ it 'should import large set of data' do
27
+ insert_manager = Arel::VERSION.to_i > 6 ? Arel::InsertManager.new.into(@table) : Arel::InsertManager.new(@conn).into(@table)
28
28
  insert_manager.bulk_insert(@cols, @data)
29
29
  _(compile(insert_manager.ast))
30
30
  .must_be_like %Q[INSERT INTO "users" ("id", "name", "comments", "created_at")
@@ -8,10 +8,10 @@ module ArelExtensions
8
8
  Arel::Table.engine = @conn
9
9
  @visitor = Arel::Visitors::ToSql.new @conn.connection
10
10
  @table = Arel::Table.new(:users)
11
- @cols = ['id', 'name', 'comments', 'created_at']
11
+ @cols = %w[id name comments created_at]
12
12
  @data = [
13
- [23, 'nom1', "sdfdsfdsfsdf", '2016-01-01'],
14
- [25, 'nom2', "sdfdsfdsfsdf", '2016-01-01']
13
+ [23, 'nom1', 'sdfdsfdsfsdf', '2016-01-01'],
14
+ [25, 'nom2', 'sdfdsfdsfsdf', '2016-01-01']
15
15
  ]
16
16
  end
17
17
 
@@ -24,8 +24,8 @@ module ArelExtensions
24
24
  end
25
25
 
26
26
 
27
- it "should import large set of data using ToSql" do
28
- insert_manager = Arel::VERSION.to_i > 6 ? Arel::InsertManager.new().into(@table) : Arel::InsertManager.new(@conn).into(@table)
27
+ it 'should import large set of data using ToSql' do
28
+ insert_manager = Arel::VERSION.to_i > 6 ? Arel::InsertManager.new.into(@table) : Arel::InsertManager.new(@conn).into(@table)
29
29
  insert_manager.bulk_insert(@cols, @data)
30
30
  _(compile(insert_manager.ast))
31
31
  .must_be_like %Q[INSERT INTO "users" ("id", "name", "comments", "created_at") VALUES (23, 'nom1', 'sdfdsfdsfsdf', '2016-01-01'), (25, 'nom2', 'sdfdsfdsfsdf', '2016-01-01')]
@@ -22,7 +22,7 @@ module ArelExtensions
22
22
 
23
23
  # Comparators
24
24
 
25
- it "should accept comparators on integers" do
25
+ it 'should accept comparators on integers' do
26
26
  _(compile(@table[:id] == 42)).must_match %{"users"."id" = 42}
27
27
  _(compile(@table[:id] == @table[:id])).must_be_like %{"users"."id" = "users"."id"}
28
28
  _(compile(@table[:id] != 42)).must_match %{"users"."id" != 42}
@@ -34,7 +34,7 @@ module ArelExtensions
34
34
  _(compile((@table[:id] <= 42).as('new_name'))).must_match %{("users"."id" <= 42) AS new_name}
35
35
  end
36
36
 
37
- it "should accept comparators on dates" do
37
+ it 'should accept comparators on dates' do
38
38
  c = @table[:created_at]
39
39
  u = @table[:updated_at]
40
40
  _(compile(c > @date)).must_be_like %{"users"."created_at" > '2016-03-31'}
@@ -42,7 +42,7 @@ module ArelExtensions
42
42
  _(compile(c < u)).must_be_like %{"users"."created_at" < "users"."updated_at"}
43
43
  end
44
44
 
45
- it "should accept comparators on strings" do
45
+ it 'should accept comparators on strings' do
46
46
  c = @table[:name]
47
47
  _(compile(c == 'test')).must_be_like %{"users"."name" = 'test'}
48
48
  _(compile(c != 'test')).must_be_like %{"users"."name" != 'test'}
@@ -60,41 +60,41 @@ module ArelExtensions
60
60
 
61
61
  # Maths
62
62
  # DateDiff
63
- it "should diff date col and date" do
63
+ it 'should diff date col and date' do
64
64
  _(compile(@table[:created_at] - Date.new(2016, 3, 31))).must_match %{"users"."created_at" - TO_DATE('2016-03-31')}
65
65
  end
66
66
 
67
- it "should diff date col and datetime col" do
67
+ it 'should diff date col and datetime col' do
68
68
  _(compile(@table[:created_at] - @table[:updated_at])).must_match %{"users"."created_at" - "users"."updated_at"}
69
69
  end
70
70
 
71
- it "should diff date col and datetime col with AS" do
71
+ it 'should diff date col and datetime col with AS' do
72
72
  sql = compile((@table[:updated_at] - @table[:created_at]).as('new_name'))
73
73
  # sql.must_be_like %{(TO_DATE("users"."updated_at") - "users"."created_at") * 86400 AS new_name}
74
74
  _(sql).must_be_like %{("users"."updated_at" - "users"."created_at") * (CASE WHEN (TRUNC("users"."updated_at", 'DDD') = "users"."updated_at") THEN 1 ELSE 86400 END) AS new_name}
75
75
  end
76
76
 
77
- it "should diff between time values" do
78
- d2 = Time.new(2015,6,1)
79
- d1 = DateTime.new(2015,6,2)
80
- _(compile(ArelExtensions::Nodes::DateDiff.new([d1,d2])))
77
+ it 'should diff between time values' do
78
+ d2 = Time.new(2015, 6, 1)
79
+ d1 = DateTime.new(2015, 6, 2)
80
+ _(compile(ArelExtensions::Nodes::DateDiff.new([d1, d2])))
81
81
  .must_match("TO_DATE('2015-06-02') - TO_DATE('2015-06-01')")
82
82
  end
83
83
 
84
- it "should diff between time values and time col" do
85
- d1 = DateTime.new(2015,6,2)
84
+ it 'should diff between time values and time col' do
85
+ d1 = DateTime.new(2015, 6, 2)
86
86
  _(compile(ArelExtensions::Nodes::DateDiff.new([d1, @table[:updated_at]])))
87
87
  .must_match %{TO_DATE('2015-06-02') - "users"."updated_at"}
88
88
  end
89
89
 
90
- it "should accept operators on dates with numbers" do
90
+ it 'should accept operators on dates with numbers' do
91
91
  c = @table[:created_at]
92
92
  _(compile(c - 42)).must_be_like %{DATE_SUB("users"."created_at", 42)}
93
93
  _(compile(c - @table[:id])).must_be_like %{DATE_SUB("users"."created_at", "users"."id")}
94
94
  end
95
95
 
96
96
  # Maths on sums
97
- it "should accept math operators on anything" do
97
+ it 'should accept math operators on anything' do
98
98
  c = @table[:name]
99
99
  _((c == 'test').to_sql).must_be_like %{"users"."name" = 'test'}
100
100
  _((c != 'test').to_sql).must_be_like %{"users"."name" != 'test'}