arel_extensions 1.5.2 → 2.0.0.rc3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) 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 +90 -239
  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 +10 -10
  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 +21 -21
  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 -27
  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 -48
  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 +7 -5
  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 +43 -44
  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 -78
  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 +192 -423
  83. data/lib/arel_extensions/visitors/mysql.rb +212 -354
  84. data/lib/arel_extensions/visitors/oracle.rb +178 -221
  85. data/lib/arel_extensions/visitors/oracle12.rb +31 -18
  86. data/lib/arel_extensions/visitors/postgresql.rb +173 -257
  87. data/lib/arel_extensions/visitors/sqlite.rb +126 -140
  88. data/lib/arel_extensions/visitors/to_sql.rb +237 -299
  89. data/lib/arel_extensions/visitors.rb +62 -83
  90. data/lib/arel_extensions.rb +31 -226
  91. data/test/database.yml +7 -15
  92. data/test/helper.rb +18 -0
  93. data/test/real_db_test.rb +117 -120
  94. data/test/support/fake_record.rb +3 -9
  95. data/test/test_comparators.rb +17 -14
  96. data/test/visitors/test_bulk_insert_oracle.rb +11 -11
  97. data/test/visitors/test_bulk_insert_sqlite.rb +13 -12
  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 +366 -711
  102. data/test/with_ar/insert_agnostic_test.rb +21 -27
  103. data/test/with_ar/test_bulk_sqlite.rb +16 -17
  104. data/test/with_ar/test_math_sqlite.rb +26 -26
  105. data/test/with_ar/test_string_mysql.rb +33 -31
  106. data/test/with_ar/test_string_sqlite.rb +34 -30
  107. metadata +37 -47
  108. data/.github/workflows/publish.yml +0 -29
  109. data/.github/workflows/release.yml +0 -30
  110. data/.github/workflows/ruby.yml +0 -403
  111. data/CONTRIBUTING.md +0 -102
  112. data/NEWS.md +0 -104
  113. data/bin/build +0 -15
  114. data/bin/compose +0 -6
  115. data/bin/publish +0 -8
  116. data/dev/arelx.dockerfile +0 -44
  117. data/dev/compose.yaml +0 -71
  118. data/dev/postgres.dockerfile +0 -5
  119. data/dev/rbenv +0 -189
  120. data/gemfiles/rails4_2.gemfile +0 -38
  121. data/gemfiles/rails5.gemfile +0 -29
  122. data/gemfiles/rails6.gemfile +0 -33
  123. data/gemfiles/rails6_1.gemfile +0 -41
  124. data/gemfiles/rails7.gemfile +0 -41
  125. data/gemfiles/rails7_1.gemfile +0 -42
  126. data/gemfiles/rails7_2.gemfile +0 -41
  127. data/gemspecs/arel_extensions-v1.gemspec +0 -27
  128. data/gemspecs/arel_extensions-v2.gemspec +0 -27
  129. data/generate_gems.sh +0 -15
  130. data/lib/arel_extensions/aliases.rb +0 -14
  131. data/lib/arel_extensions/helpers.rb +0 -62
  132. data/lib/arel_extensions/nodes/aggregate_function.rb +0 -13
  133. data/lib/arel_extensions/nodes/formatted_date.rb +0 -42
  134. data/lib/arel_extensions/nodes/rollup.rb +0 -36
  135. data/lib/arel_extensions/nodes/select.rb +0 -10
  136. data/lib/arel_extensions/nodes/sum.rb +0 -7
  137. data/lib/arel_extensions/visitors/convert_format.rb +0 -37
  138. data/lib/arel_extensions/warning.rb +0 -42
  139. data/test/arelx_test_helper.rb +0 -92
  140. data/version_v1.rb +0 -3
  141. data/version_v2.rb +0 -3
@@ -5,7 +5,7 @@ module ArelExtensions
5
5
  tab = expr.map { |arg|
6
6
  convert_to_node(arg)
7
7
  }
8
- super(tab)
8
+ return super(tab)
9
9
  end
10
10
  end
11
11
  end
@@ -2,25 +2,27 @@ module ArelExtensions
2
2
  module Nodes
3
3
  class Trim < Function
4
4
  RETURN_TYPE = :string
5
-
5
+
6
6
  def initialize expr
7
7
  tab = expr.map { |arg|
8
8
  convert_to_node(arg)
9
9
  }
10
- super(tab)
10
+ return super(tab)
11
11
  end
12
12
 
13
13
  def +(other)
14
- ArelExtensions::Nodes::Concat.new(self.expressions + [other])
14
+ return ArelExtensions::Nodes::Concat.new(self.expressions + [other])
15
15
  end
16
+
16
17
  end
17
18
 
18
19
  class Ltrim < Trim
19
- RETURN_TYPE = :string
20
+ RETURN_TYPE = :string
20
21
  end
21
22
 
22
23
  class Rtrim < Trim
23
24
  RETURN_TYPE = :string
24
25
  end
26
+
25
27
  end
26
28
  end
@@ -1,21 +1,24 @@
1
1
  module ArelExtensions
2
2
  module Nodes
3
3
  class Union < Arel::Nodes::Union
4
- def initialize left, right
5
- super(left, right)
4
+
5
+ def initialize left,right
6
+ return super(left,right)
6
7
  end
7
8
 
8
9
  def +(other)
9
- ArelExtensions::Nodes::Union.new(self, other)
10
+ return ArelExtensions::Nodes::Union.new(self,other)
10
11
  end
11
12
 
12
13
  def union(other)
13
- ArelExtensions::Nodes::UnionAll.new(self, other)
14
+ return ArelExtensions::Nodes::UnionAll.new(self,other)
14
15
  end
15
16
 
16
17
  def as other
17
- Arel::Nodes::TableAlias.new Arel.grouping(self), Arel::Nodes::SqlLiteral.new(other.to_s)
18
+ Arel::Nodes::TableAlias.new Arel::Nodes::Grouping.new(self), Arel::Nodes::SqlLiteral.new(other.to_s)
18
19
  end
19
20
  end
21
+
20
22
  end
21
23
  end
24
+
@@ -1,17 +1,20 @@
1
1
  module ArelExtensions
2
2
  module Nodes
3
3
  class UnionAll < Arel::Nodes::UnionAll
4
- def initialize left, right
5
- super(left, right)
4
+
5
+ def initialize left,right
6
+ return super(left,right)
6
7
  end
7
8
 
8
9
  def union_all(other)
9
- ArelExtensions::Nodes::UnionAll.new(self, other)
10
+ return ArelExtensions::Nodes::UnionAll.new(self,other)
10
11
  end
11
12
 
12
13
  def as other
13
- Arel::Nodes::TableAlias.new Arel.grouping(self), Arel::Nodes::SqlLiteral.new(other.to_s)
14
+ Arel::Nodes::TableAlias.new Arel::Nodes::Grouping.new(self), Arel::Nodes::SqlLiteral.new(other.to_s)
14
15
  end
15
16
  end
17
+
16
18
  end
17
19
  end
20
+
@@ -1,15 +1,19 @@
1
1
  module ArelExtensions
2
2
  module Nodes
3
3
  class Wday < Function
4
+
5
+
4
6
  def initialize other, aliaz = nil
5
7
  tab = Array.new
6
8
  tab << other
7
9
  super(tab, aliaz)
8
10
  end
9
11
 
12
+
10
13
  def date
11
14
  @expressions.first
12
15
  end
16
+
13
17
  end
14
18
  end
15
19
  end
@@ -1,2 +1,2 @@
1
1
  require 'arel_extensions/nodes/function'
2
- require 'arel_extensions/nodes/aggregate_function'
2
+
@@ -4,36 +4,22 @@ require 'arel_extensions/nodes/is_null'
4
4
  module ArelExtensions
5
5
  module NullFunctions
6
6
 
7
- # if_present returns nil if the the value is nil or blank
8
- def if_present
9
- Arel.when(self.cast(:string).present).then(self)
10
- end
11
-
12
- # ISNULL function lets you return an alternative value when an expression is NULL.
7
+ #ISNULL function lets you return an alternative value when an expression is NULL.
13
8
  def is_null
14
9
  ArelExtensions::Nodes::IsNull.new [self]
15
10
  end
16
-
17
- # ISNOTNULL function lets you return an alternative value when an expression is NOT NULL.
11
+
12
+ #ISNOTNULL function lets you return an alternative value when an expression is NOT NULL.
18
13
  def is_not_null
19
14
  ArelExtensions::Nodes::IsNotNull.new [self]
20
15
  end
21
-
16
+
22
17
  # returns the first non-null expr in the expression list. You must specify at least two expressions.
23
- # If all occurrences of expr evaluate to null, then the function returns null.
18
+ #If all occurrences of expr evaluate to null, then the function returns null.
24
19
  def coalesce *args
25
20
  args.unshift(self)
26
21
  ArelExtensions::Nodes::Coalesce.new args
27
22
  end
28
23
 
29
- def coalesce_blank *args
30
- res = Arel.when(self.cast(:string).present).then(self)
31
- args[0...-1].each do |a|
32
- val = a.is_a?(Arel::Nodes::Node) ? a : Arel.quoted(a)
33
- res = res.when(val.present).then(a)
34
- end
35
- res = res.else(args[-1])
36
- res
37
- end
38
24
  end
39
25
  end
@@ -1,78 +1,76 @@
1
1
  module ArelExtensions
2
2
  module Predications
3
- def when right, expression = nil
4
- ArelExtensions::Nodes::Case.new(self).when(right, expression)
3
+ def when right, expression=nil
4
+ ArelExtensions::Nodes::Case.new(self).when(right,expression)
5
5
  end
6
6
 
7
- def matches(other, escape = nil, case_sensitive = nil)
7
+ def matches(other, escape=nil,case_sensitive= nil)
8
8
  if Arel::VERSION.to_i < 7
9
- Arel::Nodes::Matches.new(self, Arel.quoted(other), escape)
9
+ Arel::Nodes::Matches.new(self, Arel::Nodes.build_quoted(other), escape)
10
10
  else
11
- Arel::Nodes::Matches.new(self, Arel.quoted(other), escape, case_sensitive)
11
+ Arel::Nodes::Matches.new(self, Arel::Nodes.build_quoted(other), escape, case_sensitive)
12
12
  end
13
13
  end
14
14
 
15
- def imatches(other, escape = nil)
15
+ def imatches(other, escape=nil)
16
16
  ArelExtensions::Nodes::IMatches.new(self, other, escape)
17
17
  end
18
18
 
19
19
  def cast right
20
- ArelExtensions::Nodes::Cast.new([self, right])
20
+ ArelExtensions::Nodes::Cast.new([self,right])
21
21
  end
22
22
 
23
- def in(*other) # In should handle nil element in the Array
24
- other = other.first if other.length <= 1
23
+ def in(other) #In should handle nil element in the Array
25
24
  case other
26
25
  when Range
27
26
  self.between(other)
28
- when Arel::Nodes::Grouping, ArelExtensions::Nodes::Union, ArelExtensions::Nodes::UnionAll
29
- Arel::Nodes::In.new(self, quoted_node(other))
30
27
  when Enumerable
31
- nils, values = other.partition{ |v| v.nil? }
32
- ranges, values = values.partition{ |v| v.is_a?(Range) || v.is_a?(Arel::SelectManager)}
33
- # In order of (imagined) decreasing efficiency: nil, values, and then more complex.
34
- clauses =
35
- nils.uniq.map { |r| self.in(r) } \
36
- + (case values.uniq.size
37
- when 0 then []
38
- when 1 then [values[0].is_a?(Arel::Nodes::Grouping) ? self.in(values[0]) : self.eq(values[0])]
39
- else [Arel::Nodes::In.new(self, quoted_array(values))] end) \
40
- + ranges.uniq.map { |r| self.in(r) }
41
- clauses.empty? ? Arel.false : clauses.reduce(&:or)
28
+ if other.include?(nil)
29
+ other.delete(nil)
30
+ case other.length
31
+ when 0
32
+ self.is_null
33
+ when 1
34
+ self.is_null.or(self==other[0])
35
+ else
36
+ self.is_null.or(Arel::Nodes::In.new(self,quoted_array(other)))
37
+ end
38
+ else
39
+ Arel::Nodes::In.new(self,quoted_array(other))
40
+ end
42
41
  when nil
43
42
  self.is_null
44
43
  when Arel::SelectManager
45
44
  Arel::Nodes::In.new(self, other.ast)
46
45
  else
47
- Arel::Nodes::In.new(self, quoted_node(other))
46
+ Arel::Nodes::In.new(self,quoted_node(other))
48
47
  end
49
48
  end
50
49
 
51
- def not_in(*other) # In should handle nil element in the Array
52
- other = other.first if other.length <= 1
50
+ def not_in(other) #In should handle nil element in the Array
53
51
  case other
54
52
  when Range
55
53
  Arel::Nodes::Not.new(self.between(other))
56
- when Arel::Nodes::Grouping, ArelExtensions::Nodes::Union, ArelExtensions::Nodes::UnionAll
57
- Arel::Nodes::NotIn.new(self, quoted_node(other))
58
54
  when Enumerable
59
- nils, values = other.partition{ |v| v.nil? }
60
- ranges, values = values.partition{ |v| v.is_a?(Range) || v.is_a?(Arel::SelectManager)}
61
- # In order of (imagined) decreasing efficiency: nil, values, and then more complex.
62
- clauses =
63
- nils.uniq.map { |r| self.not_in(r) } \
64
- + (case values.uniq.size
65
- when 0 then []
66
- when 1 then [values[0].is_a?(Arel::Nodes::Grouping) ? self.not_in(values[0]) : self.not_eq(values[0])]
67
- else [Arel::Nodes::NotIn.new(self, quoted_array(values))] end) \
68
- + ranges.uniq.map { |r| self.not_in(r) }
69
- Arel::Nodes::And.new clauses
55
+ if other.include?(nil)
56
+ other.delete(nil)
57
+ case other.length
58
+ when 0
59
+ self.is_not_null
60
+ when 1
61
+ self.is_not_null.and(self!=other[0])
62
+ else
63
+ self.is_not_null.and(Arel::Nodes::NotIn.new(self,quoted_array(other)))
64
+ end
65
+ else
66
+ Arel::Nodes::NotIn.new(self,quoted_array(other))
67
+ end
70
68
  when nil
71
69
  self.is_not_null
72
70
  when Arel::SelectManager
73
71
  Arel::Nodes::NotIn.new(self, other.ast)
74
72
  else
75
- Arel::Nodes::NotIn.new(self, quoted_node(other))
73
+ Arel::Nodes::NotIn.new(self,quoted_node(other))
76
74
  end
77
75
  end
78
76
 
@@ -81,20 +79,21 @@ module ArelExtensions
81
79
  when Arel::Attributes::Attribute, Arel::Nodes::Node, Integer
82
80
  object
83
81
  when DateTime
84
- Arel.quoted(object, self)
82
+ Arel::Nodes.build_quoted(object, self)
85
83
  when Time
86
- Arel.quoted(object.strftime('%H:%M:%S'), self)
84
+ Arel::Nodes.build_quoted(object.strftime('%H:%M:%S'), self)
87
85
  when String
88
- Arel.quoted(object)
86
+ Arel::Nodes.build_quoted(object)
89
87
  when Date
90
- Arel.quoted(object.to_s, self)
88
+ Arel::Nodes.build_quoted(object.to_s, self)
91
89
  when NilClass
92
90
  Arel.sql('NULL')
93
91
  when ActiveSupport::Duration
94
92
  object.to_i
95
93
  else
96
- raise(ArgumentError, "#{object.class} cannot be converted to CONCAT arg")
94
+ raise(ArgumentError, "#{object.class} can not be converted to CONCAT arg")
97
95
  end
98
96
  end
97
+
99
98
  end
100
99
  end
@@ -1,9 +1,9 @@
1
1
  require 'rails'
2
2
 
3
3
  module ArelExtensions
4
- class Railtie < Rails::Railtie
5
- rake_tasks do
6
- load 'arel_extensions/tasks.rb'
7
- end
8
- end
4
+ class Railtie < Rails::Railtie
5
+ rake_tasks do
6
+ load 'arel_extensions/tasks.rb'
7
+ end
8
+ end
9
9
  end
@@ -3,28 +3,30 @@ require 'arel_extensions/nodes/union_all'
3
3
 
4
4
  module ArelExtensions
5
5
  module SetFunctions
6
+
6
7
  def +(other)
7
- ArelExtensions::Nodes::Union.new(self, other)
8
+ ArelExtensions::Nodes::Union.new(self,other)
8
9
  end
9
10
 
10
11
  def union(other)
11
- ArelExtensions::Nodes::Union.new(self, other)
12
+ ArelExtensions::Nodes::Union.new(self,other)
12
13
  end
13
14
 
14
15
  def union_all(other)
15
- ArelExtensions::Nodes::UnionAll.new(self, other)
16
+ ArelExtensions::Nodes::UnionAll.new(self,other)
16
17
  end
17
18
 
18
19
  def uniq
19
20
  self
20
21
  end
22
+
21
23
  end
22
24
  end
23
25
 
24
- class Arel::Nodes::Union
26
+ Arel::Nodes::Union.class_eval do
25
27
  include ArelExtensions::SetFunctions
26
28
  end
27
29
 
28
- class Arel::Nodes::UnionAll
30
+ Arel::Nodes::UnionAll.class_eval do
29
31
  include ArelExtensions::SetFunctions
30
32
  end
@@ -1,4 +1,4 @@
1
- require 'arel_extensions/nodes/concat' # if Arel::VERSION.to_i < 7
1
+ require 'arel_extensions/nodes/concat' #if Arel::VERSION.to_i < 7
2
2
  require 'arel_extensions/nodes/length'
3
3
  require 'arel_extensions/nodes/locate'
4
4
  require 'arel_extensions/nodes/substring'
@@ -19,26 +19,19 @@ require 'arel_extensions/nodes/md5'
19
19
 
20
20
  module ArelExtensions
21
21
  module StringFunctions
22
- # *FindInSet function .......
22
+
23
+ #*FindInSet function .......
23
24
  def &(other)
24
25
  ArelExtensions::Nodes::FindInSet.new [other, self]
25
26
  end
26
27
 
27
- # LENGTH function returns the length (bytewise) of the value in a text field.
28
+ #LENGTH function returns the length of the value in a text field.
28
29
  def length
29
- ArelExtensions::Nodes::Length.new self, true
30
- end
31
-
32
- def byte_length
33
- ArelExtensions::Nodes::Length.new self, true
30
+ ArelExtensions::Nodes::Length.new [self]
34
31
  end
35
32
 
36
- def char_length
37
- ArelExtensions::Nodes::Length.new self, false
38
- end
39
-
40
- # LOCATE function returns the first starting position of a string in another string.
41
- # If string1 or string2 is NULL then it returns NULL. If string1 not found in string2 then it returns 0.
33
+ #LOCATE function returns the first starting position of a string in another string.
34
+ #If string1 or string2 is NULL then it returns NULL. If string1 not found in string2 then it returns 0.
42
35
  def locate val
43
36
  ArelExtensions::Nodes::Locate.new [self, val]
44
37
  end
@@ -47,31 +40,18 @@ module ArelExtensions
47
40
  ArelExtensions::Nodes::Substring.new [self, start, len]
48
41
  end
49
42
 
50
- # Return a [ArelExtensions::Nodes::Substring] if `start` is a [Range] or an
51
- # [Integer].
52
- #
53
- # Return the result to `self.send(start)` if it's a [String|Symbol]. The
54
- # assumption is that you're trying to reach an [Arel::Table]'s
55
- # [Arel::Attribute].
56
- #
57
- # @note `ind` should be an [Integer|NilClass] if `start` is an [Integer].
58
- # It's ignored in all other cases.
59
- def [](start, end_ = nil)
60
- if start.is_a?(String) || start.is_a?(Symbol)
61
- self.send(start)
62
- elsif start.is_a?(Range)
43
+ def [](start, ind = nil)
44
+ start += 1 if start.is_a?(Integer)
45
+ if start.is_a?(Range)
63
46
  ArelExtensions::Nodes::Substring.new [self, start.begin + 1, start.end - start.begin + 1]
64
- elsif start.is_a?(Integer) && !end_
65
- ArelExtensions::Nodes::Substring.new [self, start + 1, 1]
66
- elsif start.is_a?(Integer)
67
- start += 1
68
- ArelExtensions::Nodes::Substring.new [self, start, end_ - start + 1]
47
+ elsif start.is_a?(Integer) && !ind
48
+ ArelExtensions::Nodes::Substring.new [self, start, 1]
69
49
  else
70
- raise ArgumentError, 'unrecognized argument types; can accept integers, ranges, or strings.'
50
+ ArelExtensions::Nodes::Substring.new [self, start, ind - start + 1]
71
51
  end
72
52
  end
73
53
 
74
- # SOUNDEX function returns a character string containing the phonetic representation of char.
54
+ #SOUNDEX function returns a character string containing the phonetic representation of char.
75
55
  def soundex
76
56
  ArelExtensions::Nodes::Soundex.new [self]
77
57
  end
@@ -84,19 +64,6 @@ module ArelExtensions
84
64
  grouping_any :imatches, others, escape
85
65
  end
86
66
 
87
- # def grouping_any method, others, *extra
88
- # puts "*******************"
89
- # puts method
90
- # puts others.inspect
91
- # puts extra.inspect
92
- # puts "-------------------"
93
- # res = super(method,others,*extra)
94
- # puts res.to_sql
95
- # puts res.inspect
96
- # puts "*******************"
97
- # res
98
- # end
99
-
100
67
  def imatches_all others, escape = nil
101
68
  grouping_all :imatches, others, escape, escape
102
69
  end
@@ -114,62 +81,53 @@ module ArelExtensions
114
81
  end
115
82
 
116
83
  def ai_matches other # accent insensitive & case sensitive
117
- ArelExtensions::Nodes::AiMatches.new(self, other)
84
+ ArelExtensions::Nodes::AiMatches.new(self,other)
118
85
  end
119
86
 
120
87
  def ai_imatches other # accent insensitive & case insensitive
121
- ArelExtensions::Nodes::AiIMatches.new(self, other)
88
+ ArelExtensions::Nodes::AiIMatches.new(self,other)
122
89
  end
123
90
 
124
91
  def smatches other # accent sensitive & case sensitive
125
- ArelExtensions::Nodes::SMatches.new(self, other)
92
+ ArelExtensions::Nodes::SMatches.new(self,other)
126
93
  end
127
94
 
128
- def ai_collate
129
- ArelExtensions::Nodes::Collate.new(self, nil, true, false)
95
+ def ai_collate
96
+ ArelExtensions::Nodes::Collate.new(self,nil,true,false)
130
97
  end
131
98
 
132
99
  def ci_collate
133
- ArelExtensions::Nodes::Collate.new(self, nil, false, true)
134
- end
135
-
136
- def collate ai = false, ci = false, option = nil
137
- ArelExtensions::Nodes::Collate.new(self, option, ai, ci)
100
+ ArelExtensions::Nodes::Collate.new(self,nil,false,true)
138
101
  end
139
102
 
140
- # REPLACE function replaces a sequence of characters in a string with another set of characters, not case-sensitive.
141
- def replace pattern, substitute
142
- if pattern.is_a? Regexp
143
- ArelExtensions::Nodes::RegexpReplace.new self, pattern, substitute
144
- else
145
- ArelExtensions::Nodes::Replace.new self, pattern, substitute
146
- end
103
+ def collate ai=false,ci=false, option=nil
104
+ ArelExtensions::Nodes::Collate.new(self,option,ai,ci)
147
105
  end
148
106
 
149
- def regexp_replace pattern, substitute
150
- ArelExtensions::Nodes::RegexpReplace.new self, pattern, substitute
107
+ #REPLACE function replaces a sequence of characters in a string with another set of characters, not case-sensitive.
108
+ def replace left, right
109
+ ArelExtensions::Nodes::Replace.new [self, left, right]
151
110
  end
152
-
111
+
153
112
  def concat other
154
113
  ArelExtensions::Nodes::Concat.new [self, other]
155
114
  end
156
115
 
157
- # concat elements of a group, separated by sep and ordered by a list of Ascending or Descending
158
- def group_concat(sep = nil, *orders, group: nil, order: nil)
159
- if orders.present?
160
- deprecated 'Use the kwarg `order` instead.', what: 'orders'
161
- end
116
+ #concat elements of a group, separated by sep and ordered by a list of Ascending or Descending
117
+ def group_concat sep = nil, *orders
162
118
  order_tabs = [orders].flatten.map{ |o|
163
119
  if o.is_a?(Arel::Nodes::Ascending) || o.is_a?(Arel::Nodes::Descending)
164
120
  o
165
121
  elsif o.respond_to?(:asc)
166
122
  o.asc
123
+ else
124
+ nil
167
125
  end
168
126
  }.compact
169
- ArelExtensions::Nodes::GroupConcat.new(self, sep, group: group, order: (order || order_tabs))
127
+ ArelExtensions::Nodes::GroupConcat.new [self, sep, order_tabs]
170
128
  end
171
129
 
172
- # Function returns a string after removing left, right or the both prefixes or suffixes int argument
130
+ #Function returns a string after removing left, right or the both prefixes or suffixes int argument
173
131
  def trim other = ' '
174
132
  ArelExtensions::Nodes::Trim.new [self, other]
175
133
  end
@@ -197,12 +155,11 @@ module ArelExtensions
197
155
  def not_blank
198
156
  ArelExtensions::Nodes::NotBlank.new [self]
199
157
  end
200
- alias present not_blank
201
-
202
- def repeat other = 1
158
+
159
+ def repeat other = 1
203
160
  ArelExtensions::Nodes::Repeat.new [self, other]
204
161
  end
205
-
162
+
206
163
  def levenshtein_distance other
207
164
  ArelExtensions::Nodes::LevenshteinDistance.new [self, other]
208
165
  end
@@ -1,12 +1,12 @@
1
1
  namespace :arel_extensions do
2
- desc 'Install DB functions into current DB'
3
- task install_functions: :environment do
4
- @env_db = if ENV['DB'] == 'oracle' && ((defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx') || (RUBY_PLATFORM == 'java')) # not supported
5
- (RUBY_PLATFORM == 'java' ? 'jdbc-sqlite' : 'sqlite')
2
+ desc 'Install DB functions into current DB'
3
+ task :install_functions => :environment do
4
+ @env_db = if ENV['DB'] == 'oracle' && ((defined?(RUBY_ENGINE) && RUBY_ENGINE == "rbx") || (RUBY_PLATFORM == 'java')) # not supported
5
+ (RUBY_PLATFORM == 'java' ? "jdbc-sqlite" : 'sqlite')
6
6
  else
7
7
  ENV['DB'] || ActiveRecord::Base.connection.adapter_name
8
8
  end
9
- ActiveRecord::Base.establish_connection(Rails.env.to_sym)
9
+ ActiveRecord::Base.establish_connection(Rails.env)
10
10
  CommonSqlFunctions.new(ActiveRecord::Base.connection).add_sql_functions(@env_db)
11
- end
11
+ end
12
12
  end
@@ -1,3 +1,3 @@
1
1
  module ArelExtensions
2
- VERSION = '1.5.2'.freeze
2
+ VERSION = "2.0.0.rc3".freeze
3
3
  end