arel_extensions 2.0.1 → 2.0.4

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 (76) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +7 -4
  3. data/.travis.yml +10 -10
  4. data/Gemfile +14 -19
  5. data/README.md +17 -12
  6. data/Rakefile +23 -23
  7. data/appveyor.yml +1 -1
  8. data/arel_extensions.gemspec +2 -2
  9. data/functions.html +3 -3
  10. data/gemfiles/rails6.gemfile +30 -0
  11. data/gemspec_v2/arel_extensions-v2.gemspec +28 -0
  12. data/generate_gems.sh +13 -0
  13. data/init/mssql.sql +4 -4
  14. data/init/mysql.sql +38 -38
  15. data/init/postgresql.sql +21 -21
  16. data/lib/arel_extensions/boolean_functions.rb +0 -2
  17. data/lib/arel_extensions/common_sql_functions.rb +5 -4
  18. data/lib/arel_extensions/comparators.rb +4 -2
  19. data/lib/arel_extensions/insert_manager.rb +12 -12
  20. data/lib/arel_extensions/math.rb +3 -3
  21. data/lib/arel_extensions/math_functions.rb +10 -5
  22. data/lib/arel_extensions/nodes/aggregate_function.rb +14 -0
  23. data/lib/arel_extensions/nodes/case.rb +0 -2
  24. data/lib/arel_extensions/nodes/coalesce.rb +2 -2
  25. data/lib/arel_extensions/nodes/collate.rb +1 -1
  26. data/lib/arel_extensions/nodes/concat.rb +6 -13
  27. data/lib/arel_extensions/nodes/date_diff.rb +3 -5
  28. data/lib/arel_extensions/nodes/duration.rb +0 -2
  29. data/lib/arel_extensions/nodes/format.rb +8 -8
  30. data/lib/arel_extensions/nodes/formatted_number.rb +23 -23
  31. data/lib/arel_extensions/nodes/function.rb +2 -0
  32. data/lib/arel_extensions/nodes/json.rb +28 -30
  33. data/lib/arel_extensions/nodes/matches.rb +4 -4
  34. data/lib/arel_extensions/nodes/power.rb +6 -5
  35. data/lib/arel_extensions/nodes/repeat.rb +2 -2
  36. data/lib/arel_extensions/nodes/replace.rb +24 -6
  37. data/lib/arel_extensions/nodes/round.rb +5 -5
  38. data/lib/arel_extensions/nodes/soundex.rb +16 -15
  39. data/lib/arel_extensions/nodes/std.rb +19 -21
  40. data/lib/arel_extensions/nodes/substring.rb +8 -15
  41. data/lib/arel_extensions/nodes/sum.rb +7 -0
  42. data/lib/arel_extensions/nodes/trim.rb +3 -3
  43. data/lib/arel_extensions/nodes/union.rb +2 -3
  44. data/lib/arel_extensions/nodes/union_all.rb +0 -1
  45. data/lib/arel_extensions/nodes.rb +1 -1
  46. data/lib/arel_extensions/null_functions.rb +2 -2
  47. data/lib/arel_extensions/predications.rb +16 -17
  48. data/lib/arel_extensions/string_functions.rb +21 -12
  49. data/lib/arel_extensions/tasks.rb +5 -5
  50. data/lib/arel_extensions/version.rb +1 -1
  51. data/lib/arel_extensions/visitors/mssql.rb +14 -13
  52. data/lib/arel_extensions/visitors/mysql.rb +72 -37
  53. data/lib/arel_extensions/visitors/oracle.rb +12 -11
  54. data/lib/arel_extensions/visitors/oracle12.rb +1 -1
  55. data/lib/arel_extensions/visitors/postgresql.rb +77 -31
  56. data/lib/arel_extensions/visitors/sqlite.rb +54 -40
  57. data/lib/arel_extensions/visitors/to_sql.rb +50 -31
  58. data/lib/arel_extensions.rb +20 -1
  59. data/test/helper.rb +1 -1
  60. data/test/real_db_test.rb +1 -1
  61. data/test/support/fake_record.rb +0 -4
  62. data/test/test_comparators.rb +1 -1
  63. data/test/visitors/test_bulk_insert_oracle.rb +6 -6
  64. data/test/visitors/test_bulk_insert_sqlite.rb +6 -6
  65. data/test/visitors/test_bulk_insert_to_sql.rb +7 -9
  66. data/test/visitors/test_oracle.rb +1 -0
  67. data/test/visitors/test_to_sql.rb +15 -1
  68. data/test/with_ar/all_agnostic_test.rb +54 -32
  69. data/test/with_ar/insert_agnostic_test.rb +2 -1
  70. data/test/with_ar/test_bulk_sqlite.rb +2 -2
  71. data/test/with_ar/test_math_sqlite.rb +3 -3
  72. data/test/with_ar/test_string_mysql.rb +3 -5
  73. data/test/with_ar/test_string_sqlite.rb +2 -6
  74. data/version_v1.rb +3 -0
  75. data/version_v2.rb +3 -0
  76. metadata +13 -6
@@ -50,6 +50,7 @@ module ArelExtensions
50
50
  compile((c >= 'test').as('new_name')).must_be_like %{("users"."name" >= 'test') AS new_name}
51
51
  compile(c <= @table[:comments]).must_be_like %{"users"."name" <= "users"."comments"}
52
52
  compile(c =~ /\Atest\Z/).must_be_like %{REGEXP_LIKE("users"."name", '^test$')}
53
+ compile(c =~ /\Atest\z/).must_be_like %{REGEXP_LIKE("users"."name", '^test$')}
53
54
  compile(c =~ '^test$').must_be_like %{REGEXP_LIKE("users"."name", '^test$')}
54
55
  compile(c !~ /\Ate\Dst\Z/).must_be_like %{NOT REGEXP_LIKE("users"."name", '^te[^0-9]st$')}
55
56
  compile(c.imatches('%test%')).must_be_like %{LOWER("users"."name") LIKE LOWER('%test%')}
@@ -88,6 +88,7 @@ module ArelExtensions
88
88
  compile((c >= 'test').as('new_name')).must_be_like %{("users"."name" >= 'test') AS new_name}
89
89
  compile(c <= @table[:comments]).must_be_like %{"users"."name" <= "users"."comments"}
90
90
  compile(c =~ /\Atest\Z/).must_be_like %{"users"."name" REGEXP '^test$'}
91
+ compile(c =~ /\Atest\z/).must_be_like %{"users"."name" REGEXP '^test$'}
91
92
  compile(c !~ /\Ate\Dst\Z/).must_be_like %{"users"."name" NOT REGEXP '^te[^0-9]st$'}
92
93
  compile(c.imatches('%test%')).must_be_like %{"users"."name" ILIKE '%test%'}
93
94
  compile(c.imatches_any(['%test%', 't2'])).must_be_like %{(("users"."name" ILIKE '%test%') OR ("users"."name" ILIKE 't2'))}
@@ -120,6 +121,10 @@ module ArelExtensions
120
121
  compile(@table[:id] < 42).must_match %{"users"."id" < 42}
121
122
  compile(@table[:id] <= 42).must_match %{"users"."id" <= 42}
122
123
  compile((@table[:id] <= 42).as('new_name')).must_match %{("users"."id" <= 42) AS new_name}
124
+ compile(@table[:id].count.eq 42).must_match %{COUNT("users"."id") = 42}
125
+ #compile(@table[:id].count == 42).must_match %{COUNT("users"."id") = 42} # TODO
126
+ #compile(@table[:id].count != 42).must_match %{COUNT("users"."id") != 42}
127
+ #compile(@table[:id].count >= 42).must_match %{COUNT("users"."id") >= 42}
123
128
  end
124
129
 
125
130
  it "should accept comparators on dates" do
@@ -328,9 +333,11 @@ module ArelExtensions
328
333
  compile(@table[:id].in(1))
329
334
  .must_be_like %{"users"."id" IN (1)}
330
335
  compile(@table[:id].in([1]))
331
- .must_be_like %{"users"."id" IN (1)}
336
+ .must_be_like %{"users"."id" = 1}
332
337
  compile(@table[:id].in([1,2]))
333
338
  .must_be_like %{"users"."id" IN (1, 2)}
339
+ compile(@table[:id].in([]))
340
+ .must_be_like %{ISNULL("users"."id")}
334
341
  end
335
342
 
336
343
  it "should be possible to correctly use a Range on an IN" do
@@ -340,6 +347,13 @@ module ArelExtensions
340
347
  .must_be_like %{"users"."created_at" BETWEEN ('2016-03-31') AND ('2017-03-31')}
341
348
  end
342
349
 
350
+ it "should be possible to use a list of values and ranges on an IN" do
351
+ compile(@table[:id].in [1..10, 20, 30, 40..50])
352
+ .must_be_like %{(("users"."id" IN (20, 30)) OR ("users"."id" BETWEEN (1) AND (10))) OR ("users"."id" BETWEEN (40) AND (50))}
353
+ # compile(@table[:created_at].in(@date .. Date.new(2017, 3, 31))) # @date = Date.new(2016, 3, 31)
354
+ # .must_be_like %{"users"."created_at" BETWEEN ('2016-03-31') AND ('2017-03-31')}
355
+ end
356
+
343
357
  it "should be possible to add and substract as much as we want" do
344
358
  c = @table[:name]
345
359
  compile(c.locate('test')+1)
@@ -68,7 +68,8 @@ module ArelExtensions
68
68
  @test = User.where(:id => u.id)
69
69
  u = User.create :age => -42, :name => "Negatif", :comments => '1,22,3,42,2', :created_at => d, :updated_at => d.to_time, :score => 0.17
70
70
  @neg = User.where(:id => u.id)
71
-
71
+ u = User.create :age => 15, :name => "Justin", :created_at => d, :score => 11.0
72
+ @justin = User.where(:id => u.id)
72
73
 
73
74
  @age = User.arel_table[:age]
74
75
  @name = User.arel_table[:name]
@@ -121,6 +122,7 @@ module ArelExtensions
121
122
  assert_equal(-20, t(@camille, @score.ceil)) # -20.16
122
123
  assert_equal(-20, t(@camille, (@score - 0.5).ceil)) # -20.16
123
124
  assert_equal 63, t(@arthur, @age.ceil + 42)
125
+ assert_equal 11, t(@justin, @score.ceil) # 11.0
124
126
  end
125
127
 
126
128
  def test_floor
@@ -129,12 +131,14 @@ module ArelExtensions
129
131
  assert_equal 1, t(@test, @score.floor) # 1.62
130
132
  assert_equal(-9, t(@test, (@score - 10).floor)) # 1.62
131
133
  assert_equal 42, t(@arthur, @score.floor - 23)
134
+ assert_equal 11, t(@justin, @score.floor) # 11.0
135
+ assert_equal(-21, t(@camille, @score.floor)) # # -20.16
132
136
  end
133
137
 
134
138
  def test_rand
135
139
  assert 42 != User.select(Arel.rand.as('res')).first.res
136
140
  assert 0 <= User.select(Arel.rand.abs.as('res')).first.res
137
- assert_equal 8, User.order(Arel.rand).limit(50).count
141
+ assert_equal 9, User.order(Arel.rand).limit(50).count
138
142
  end
139
143
 
140
144
  def test_round
@@ -147,15 +151,15 @@ module ArelExtensions
147
151
  def test_sum
148
152
  if @env_db == 'mssql'
149
153
  skip "SQL Server forces order?" # TODO
150
- assert_equal 68, User.select((@age.sum + 1).as("res"), User.arel_table[:id].sum).take(50).reorder(@age).first.res
151
- assert_equal 134, User.reorder(nil).select((@age.sum + @age.sum).as("res"), User.arel_table[:id].sum).take(50).first.res
152
- assert_equal 201, User.reorder(nil).select(((@age * 3).sum).as("res"), User.arel_table[:id].sum).take(50).first.res
153
- assert_equal 4009, User.reorder(nil).select(((@age * @age).sum).as("res"), User.arel_table[:id].sum).take(50).first.res
154
+ assert_equal 83, User.select((@age.sum + 1).as("res"), User.arel_table[:id].sum).take(50).reorder(@age).first.res
155
+ assert_equal 164, User.reorder(nil).select((@age.sum + @age.sum).as("res"), User.arel_table[:id].sum).take(50).first.res
156
+ assert_equal 246, User.reorder(nil).select(((@age * 3).sum).as("res"), User.arel_table[:id].sum).take(50).first.res
157
+ assert_equal 4234, User.reorder(nil).select(((@age * @age).sum).as("res"), User.arel_table[:id].sum).take(50).first.res
154
158
  else
155
- assert_equal 68, User.select((@age.sum + 1).as("res")).take(50).first.res
156
- assert_equal 134, User.select((@age.sum + @age.sum).as("res")).take(50).first.res
157
- assert_equal 201, User.select(((@age * 3).sum).as("res")).take(50).first.res
158
- assert_equal 4009, User.select(((@age * @age).sum).as("res")).take(50).first.res
159
+ assert_equal 83, User.select((@age.sum + 1).as("res")).take(50).first.res
160
+ assert_equal 164, User.select((@age.sum + @age.sum).as("res")).take(50).first.res
161
+ assert_equal 246, User.select((@age * 3).sum.as("res")).take(50).first.res
162
+ assert_equal 4234, User.select(((@age * @age).sum).as("res")).take(50).first.res
159
163
  end
160
164
  end
161
165
 
@@ -175,6 +179,7 @@ module ArelExtensions
175
179
  assert_equal "Sophie,Lucas,Arthur", t(User.where(:name => ['Lucas', 'Sophie','Arthur']), @name.group_concat(',',@name.desc))
176
180
  assert_equal "Lucas,Sophie,Arthur", t(User.where(:name => ['Lucas', 'Sophie','Arthur']), @name.group_concat(',',[@score.asc,@name.asc]))
177
181
  assert_equal "Lucas,Sophie,Arthur", t(User.where(:name => ['Lucas', 'Sophie','Arthur']), @name.group_concat(',',@score.asc,@name.asc))
182
+ assert_equal "Lucas,Sophie,Arthur", t(User.where(:name => ['Lucas', 'Sophie','Arthur']), @name.group_concat(',',order: [@score.asc,@name.asc]))
178
183
  end
179
184
 
180
185
  def test_length
@@ -267,21 +272,27 @@ module ArelExtensions
267
272
  skip "Sqlite version can't load extension for regexp" if $sqlite && $load_extension_disabled
268
273
  skip "SQL Server does not know about REGEXP without extensions" if @env_db == 'mssql'
269
274
  assert_equal 1, User.where(@name =~ '^M').count
270
- assert_equal 6, User.where(@name !~ '^L').count
275
+ assert_equal 7, User.where(@name !~ '^L').count
271
276
  assert_equal 1, User.where(@name =~ /^M/).count
272
- assert_equal 6, User.where(@name !~ /^L/).count
277
+ assert_equal 7, User.where(@name !~ /^L/).count
273
278
  end
274
279
 
275
280
  def test_imatches
276
281
  #puts User.where(@name.imatches('m%')).to_sql
277
282
  assert_equal 1, User.where(@name.imatches('m%')).count
278
283
  assert_equal 4, User.where(@name.imatches_any(['L%', '%e'])).count
279
- assert_equal 6, User.where(@name.idoes_not_match('L%')).count
284
+ assert_equal 7, User.where(@name.idoes_not_match('L%')).count
280
285
  end
281
286
 
282
287
  def test_replace
283
288
  assert_equal "LucaX", t(@lucas, @name.replace("s", "X"))
284
289
  assert_equal "replace", t(@lucas, @name.replace(@name, "replace"))
290
+
291
+ skip "Sqlite does not seem to support regexp_replace" if $sqlite
292
+ skip "SQL Server does not know about REGEXP without extensions" if @env_db == 'mssql'
293
+ assert_equal "LXcXs", t(@lucas, @name.replace(/[ua]/, "X"))
294
+ assert_equal "LXcXs", t(@lucas, @name.regexp_replace(/[ua]/, "X"))
295
+ assert_equal "LXcXs", t(@lucas, @name.regexp_replace('[ua]', "X"))
285
296
  end
286
297
 
287
298
  def test_replace_once
@@ -294,8 +305,8 @@ module ArelExtensions
294
305
  skip "Sqlite version can't load extension for soundex" if $sqlite && $load_extension_disabled
295
306
  skip "PostgreSql version can't load extension for soundex" if @env_db == 'postgresql'
296
307
  assert_equal "C540", t(@camille, @name.soundex)
297
- assert_equal 8, User.where(@name.soundex.eq(@name.soundex)).count
298
- assert_equal 8, User.where(@name.soundex == @name.soundex).count
308
+ assert_equal 9, User.where(@name.soundex.eq(@name.soundex)).count
309
+ assert_equal 9 , User.where(@name.soundex == @name.soundex).count
299
310
  end
300
311
 
301
312
  def test_change_case
@@ -374,13 +385,13 @@ module ArelExtensions
374
385
  assert_equal 2, User.where(@age <= 10).count
375
386
  assert_equal 3, User.where(@age > 20).count
376
387
  assert_equal 4, User.where(@age >= 20).count
377
- assert_equal 1, User.where(@age > 5).where(@age < 20).count
388
+ assert_equal 2, User.where(@age > 5).where(@age < 20).count
378
389
  end
379
390
 
380
391
  def test_date_comparator
381
392
  d = Date.new(2016, 5, 23)
382
393
  assert_equal 0, User.where(@created_at < d).count
383
- assert_equal 8, User.where(@created_at >= d).count
394
+ assert_equal 9, User.where(@created_at >= d).count
384
395
  end
385
396
 
386
397
  def test_date_duration
@@ -389,10 +400,10 @@ module ArelExtensions
389
400
  assert_equal 0, User.where(@created_at.year.eq("2012")).count
390
401
  #Month
391
402
  assert_equal 5, t(@camille, @created_at.month).to_i
392
- assert_equal 8, User.where(@created_at.month.eq("05")).count
403
+ assert_equal 9, User.where(@created_at.month.eq("05")).count
393
404
  #Week
394
405
  assert_equal(@env_db == 'mssql' ? 22 : 21, t(@arthur, @created_at.week).to_i)
395
- assert_equal 8, User.where(@created_at.month.eq("05")).count
406
+ assert_equal 9, User.where(@created_at.month.eq("05")).count
396
407
  #Day
397
408
  assert_equal 23, t(@laure, @created_at.day).to_i
398
409
  assert_equal 0, User.where(@created_at.day.eq("05")).count
@@ -424,6 +435,7 @@ module ArelExtensions
424
435
  end
425
436
  end
426
437
 
438
+
427
439
  skip "not yet implemented" if $sqlite
428
440
 
429
441
  date1 = Date.new(2016, 5, 23)
@@ -525,7 +537,7 @@ module ArelExtensions
525
537
  def test_math_minus
526
538
  d = Date.new(2016, 5, 20)
527
539
  #Datediff
528
- assert_equal 8, User.where((@created_at - @created_at).eq(0)).count
540
+ assert_equal 9, User.where((@created_at - @created_at).eq(0)).count
529
541
  assert_equal 3, @laure.select((@created_at - d).as("res")).first.res.abs.to_i
530
542
  #Substraction
531
543
  assert_equal 0, User.where((@age - 10).eq(50)).count
@@ -643,8 +655,8 @@ module ArelExtensions
643
655
  end
644
656
 
645
657
  def test_subquery_with_order
646
- assert_equal 8, User.where(:name => User.select(:name).order(:name)).count
647
- assert_equal 8, User.where(@ut[:name].in(@ut.project(@ut[:name]).order(@ut[:name]))).count
658
+ assert_equal 9, User.where(:name => User.select(:name).order(:name)).count
659
+ assert_equal 9, User.where(@ut[:name].in(@ut.project(@ut[:name]).order(@ut[:name]))).count
648
660
  if !['mysql'].include?(@env_db) # MySql can't have limit in IN subquery
649
661
  assert_equal 2, User.where(:name => User.select(:name).order(:name).limit(2)).count
650
662
  #assert_equal 6, User.where(:name => User.select(:name).order(:name).offset(2)).count
@@ -726,16 +738,21 @@ module ArelExtensions
726
738
  def test_stat_functions
727
739
  skip "SQLite doesn't work for most on this functions" if $sqlite
728
740
  #puts t(User.where(nil), @score.average)
729
- #puts t(User.where(nil), @score.variance(true))
730
- #puts t(User.where(nil), @score.variance(false))
731
- #puts t(User.where(nil), @score.std(true))
732
- #puts t(User.where(nil), @score.std(false))
733
-
734
- assert ( 15.98625 - t(User.where(nil), @score.average)).abs < 0.01
735
- assert (613.75488 - t(User.where(nil), @score.variance)).abs < 0.01
736
- assert ( 537.0355 - t(User.where(nil), @score.variance(false))).abs < 0.01
737
- assert ( 24.77408 - t(User.where(nil), @score.std)).abs < 0.01
738
- assert ( 23.17403 - t(User.where(nil), @score.std(false))).abs < 0.01
741
+ #puts t(User.where(nil), @score.variance(unbiased: true))
742
+ #puts t(User.where(nil), @score.variance(unbiased: false))
743
+ #puts t(User.where(nil), @score.std(unbiased: true))
744
+ #puts t(User.where(nil), @score.std(unbiased: false))
745
+
746
+ assert ( 15.43222 - t(User.where(nil), @score.average)).abs < 0.01
747
+ assert (539.79804 - t(User.where(nil), @score.variance)).abs < 0.01
748
+ assert (479.82048 - t(User.where(nil), @score.variance(unbiased: false))).abs < 0.01
749
+ assert ( 23.23355 - t(User.where(nil), @score.std)).abs < 0.01
750
+ assert ( 21.90480 - t(User.where(nil), @score.std(unbiased: false))).abs < 0.01
751
+ skip "Not Yet Implemented" if !['postgresql'].include?(@env_db)
752
+ assert_equal 2, User.select(@score.std(group: Arel.when(@name > "M").then(0).else(1)).as('res')).map(&:res).uniq.length
753
+ assert_equal 2, User.select(@score.variance(group: Arel.when(@name > "M").then(0).else(1)).as('res')).map(&:res).uniq.length
754
+ assert_equal 2, User.select(@score.sum(group: Arel.when(@name > "M").then(0).else(1)).as('res')).map(&:res).uniq.length
755
+ assert_equal 2, User.select(@comments.group_concat(group: Arel.when(@name > "M").then(0).else(1)).as('res')).map(&:res).uniq.length
739
756
  end
740
757
 
741
758
  def test_levenshtein_distance
@@ -791,6 +808,11 @@ module ArelExtensions
791
808
  assert_equal 'ArthurArthur', @arthur.select((@name+@name).as('Na-Me')).first.attributes["Na-Me"]
792
809
  end
793
810
 
811
+ def test_exists_in_subquery
812
+ assert User.where(User.where(nil).arel.exists).first
813
+ end
814
+
815
+
794
816
  end
795
817
  end
796
818
  end
@@ -23,7 +23,7 @@ module ArelExtensions
23
23
  @cnx.execute(sql) rescue $stderr << "can't create functions\n"
24
24
  end
25
25
  end
26
- @cnx.drop_table(:user_tests) rescue nil
26
+ @cnx.drop_table(:user_tests) rescue nil
27
27
  @cnx.create_table :user_tests do |t|
28
28
  t.column :age, :integer
29
29
  t.column :name, :string
@@ -77,6 +77,7 @@ END;])
77
77
  insert_manager.bulk_insert(@cols2, @data2)
78
78
  @cnx.execute(insert_manager.to_sql)
79
79
  assert_equal 4, User.count, "insertions failed"
80
+
80
81
  end
81
82
 
82
83
  end
@@ -12,7 +12,7 @@ module ArelExtensions
12
12
  @cnx = ActiveRecord::Base.connection
13
13
  Arel::Table.engine = ActiveRecord::Base
14
14
  @cnx.drop_table(:users) rescue nil
15
- @cnx.drop_table(:products) rescue nil
15
+ @cnx.drop_table(:products) rescue nil
16
16
  @cnx.create_table :users do |t|
17
17
  t.column :age, :integer
18
18
  t.column :name, :string
@@ -45,4 +45,4 @@ module ArelExtensions
45
45
  end
46
46
 
47
47
  end
48
- end
48
+ end
@@ -11,8 +11,8 @@ module ArelExtensions
11
11
  ActiveRecord::Base.default_timezone = :utc
12
12
  Arel::Table.engine = ActiveRecord::Base
13
13
  @cnx = ActiveRecord::Base.connection
14
- @cnx.drop_table(:users) rescue nil
15
- @cnx.drop_table(:products) rescue nil
14
+ @cnx.drop_table(:users) rescue nil
15
+ @cnx.drop_table(:products) rescue nil
16
16
  @cnx.create_table :users do |t|
17
17
  t.column :age, :integer
18
18
  t.column :name, :string
@@ -61,4 +61,4 @@ module ArelExtensions
61
61
  end
62
62
 
63
63
  end
64
- end
64
+ end
@@ -10,7 +10,7 @@ module ArelExtensions
10
10
  ActiveRecord::Base.configurations = YAML.load_file('test/database.yml')
11
11
  ActiveRecord::Base.establish_connection(ENV['DB'] || (RUBY_PLATFORM == 'java' ? :"jdbc-mysql" : :mysql))
12
12
  ActiveRecord::Base.default_timezone = :utc
13
- begin
13
+ begin
14
14
  @cnx = ActiveRecord::Base.connection
15
15
  rescue => e
16
16
  puts "\n#{e.inspect}"
@@ -19,7 +19,7 @@ module ArelExtensions
19
19
  end
20
20
  Arel::Table.engine = ActiveRecord::Base
21
21
  @cnx.drop_table(:users) rescue nil
22
- @cnx.drop_table(:products) rescue nil
22
+ @cnx.drop_table(:products) rescue nil
23
23
  @cnx.create_table :users do |t|
24
24
  t.column :age, :integer
25
25
  t.column :name, :string
@@ -67,11 +67,9 @@ module ArelExtensions
67
67
  # Replace
68
68
  assert_equal "LucaX", User.where(:id => @lucas).select(@name.replace("s","X").as("res")).first.res
69
69
  assert_equal "replace", User.where(:id => @lucas).select(@name.replace(@name,"replace").as("res")).first.res
70
-
71
- #
72
70
  end
73
71
 
74
72
  end
75
73
 
76
74
  end
77
- end
75
+ end
@@ -12,7 +12,7 @@ module ArelExtensions
12
12
  ActiveRecord::Base.default_timezone = :utc
13
13
  @cnx = ActiveRecord::Base.connection
14
14
  Arel::Table.engine = ActiveRecord::Base
15
- @cnx.drop_table(:users) rescue nil
15
+ @cnx.drop_table(:users) rescue nil
16
16
  @cnx.create_table :users do |t|
17
17
  t.column :age, :integer
18
18
  t.column :name, :string
@@ -57,16 +57,12 @@ module ArelExtensions
57
57
  assert_equal 1, User.where((User.arel_table[:age] + "1").eq(6)).count
58
58
  assert_equal 1, User.where((User.arel_table[:age] + User.arel_table[:age]).eq(10)).count
59
59
 
60
-
61
-
62
60
  # Replace
63
61
  assert_equal "LucaX", User.where(:id => @lucas).select(@name.replace("s","X").as("res")).first.res
64
62
  assert_equal "replace", User.where(:id => @lucas).select(@name.replace(@name,"replace").as("res")).first.res
65
-
66
- #
67
63
  end
68
64
 
69
65
  end
70
66
 
71
67
  end
72
- end
68
+ end
data/version_v1.rb ADDED
@@ -0,0 +1,3 @@
1
+ module ArelExtensions
2
+ VERSION = "1.2.8".freeze
3
+ end
data/version_v2.rb ADDED
@@ -0,0 +1,3 @@
1
+ module ArelExtensions
2
+ VERSION = "2.0.4".freeze
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: 2.0.1
4
+ version: 2.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yann Azoury
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-01-16 00:00:00.000000000 Z
13
+ date: 2020-04-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord
@@ -18,14 +18,14 @@ dependencies:
18
18
  requirements:
19
19
  - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: 6.0.0
21
+ version: '6.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - ">="
27
27
  - !ruby/object:Gem::Version
28
- version: 6.0.0
28
+ version: '6.0'
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: minitest
31
31
  requirement: !ruby/object:Gem::Requirement
@@ -60,14 +60,14 @@ dependencies:
60
60
  requirements:
61
61
  - - "~>"
62
62
  - !ruby/object:Gem::Version
63
- version: '11'
63
+ version: 12.3.3
64
64
  type: :development
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
68
  - - "~>"
69
69
  - !ruby/object:Gem::Version
70
- version: '11'
70
+ version: 12.3.3
71
71
  description: Adds new features to Arel
72
72
  email:
73
73
  - yann.azoury@faveod.com
@@ -104,6 +104,9 @@ files:
104
104
  - gemfiles/rails5_0.gemfile
105
105
  - gemfiles/rails5_1_4.gemfile
106
106
  - gemfiles/rails5_2.gemfile
107
+ - gemfiles/rails6.gemfile
108
+ - gemspec_v2/arel_extensions-v2.gemspec
109
+ - generate_gems.sh
107
110
  - init/mssql.sql
108
111
  - init/mysql.sql
109
112
  - init/oracle.sql
@@ -120,6 +123,7 @@ files:
120
123
  - lib/arel_extensions/math_functions.rb
121
124
  - lib/arel_extensions/nodes.rb
122
125
  - lib/arel_extensions/nodes/abs.rb
126
+ - lib/arel_extensions/nodes/aggregate_function.rb
123
127
  - lib/arel_extensions/nodes/blank.rb
124
128
  - lib/arel_extensions/nodes/case.rb
125
129
  - lib/arel_extensions/nodes/cast.rb
@@ -151,6 +155,7 @@ files:
151
155
  - lib/arel_extensions/nodes/soundex.rb
152
156
  - lib/arel_extensions/nodes/std.rb
153
157
  - lib/arel_extensions/nodes/substring.rb
158
+ - lib/arel_extensions/nodes/sum.rb
154
159
  - lib/arel_extensions/nodes/then.rb
155
160
  - lib/arel_extensions/nodes/trim.rb
156
161
  - lib/arel_extensions/nodes/union.rb
@@ -190,6 +195,8 @@ files:
190
195
  - test/with_ar/test_math_sqlite.rb
191
196
  - test/with_ar/test_string_mysql.rb
192
197
  - test/with_ar/test_string_sqlite.rb
198
+ - version_v1.rb
199
+ - version_v2.rb
193
200
  homepage: https://github.com/Faveod/arel-extensions
194
201
  licenses:
195
202
  - MIT