arel_extensions 2.4.0 → 2.5.0

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 (83) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.rubocop.yml +131 -5
  4. data/Makefile +31 -1
  5. data/NEWS.md +15 -0
  6. data/README.md +11 -2
  7. data/Rakefile +5 -3
  8. data/arel_extensions.gemspec +3 -5
  9. data/gemfiles/rails5.gemfile +15 -8
  10. data/gemfiles/rails5_1_4.gemfile +11 -9
  11. data/gemfiles/rails5_2.gemfile +16 -9
  12. data/gemfiles/rails6.gemfile +13 -7
  13. data/gemfiles/rails6_1.gemfile +13 -7
  14. data/gemfiles/rails7.gemfile +15 -9
  15. data/gemfiles/rails7_1.gemfile +15 -8
  16. data/gemfiles/rails7_2.gemfile +12 -6
  17. data/gemfiles/rails8.gemfile +7 -7
  18. data/gemfiles/rails8_1.gemfile +4 -4
  19. data/gemspecs/arel_extensions-v1.gemspec +3 -5
  20. data/gemspecs/arel_extensions-v2.gemspec +3 -5
  21. data/lib/arel_extensions/aliases.rb +3 -3
  22. data/lib/arel_extensions/attributes.rb +2 -0
  23. data/lib/arel_extensions/boolean_functions.rb +9 -7
  24. data/lib/arel_extensions/common_sql_functions.rb +5 -3
  25. data/lib/arel_extensions/comparators.rb +6 -4
  26. data/lib/arel_extensions/date_duration.rb +2 -0
  27. data/lib/arel_extensions/helpers.rb +17 -17
  28. data/lib/arel_extensions/insert_manager.rb +5 -1
  29. data/lib/arel_extensions/math.rb +40 -44
  30. data/lib/arel_extensions/math_functions.rb +28 -30
  31. data/lib/arel_extensions/nodes/aggregate_function.rb +4 -4
  32. data/lib/arel_extensions/nodes/blank.rb +6 -4
  33. data/lib/arel_extensions/nodes/case.rb +15 -12
  34. data/lib/arel_extensions/nodes/cast.rb +3 -5
  35. data/lib/arel_extensions/nodes/coalesce.rb +1 -1
  36. data/lib/arel_extensions/nodes/collate.rb +1 -1
  37. data/lib/arel_extensions/nodes/concat.rb +6 -6
  38. data/lib/arel_extensions/nodes/date_diff.rb +40 -49
  39. data/lib/arel_extensions/nodes/duration.rb +2 -2
  40. data/lib/arel_extensions/nodes/format.rb +2 -2
  41. data/lib/arel_extensions/nodes/formatted_date.rb +2 -2
  42. data/lib/arel_extensions/nodes/formatted_number.rb +2 -2
  43. data/lib/arel_extensions/nodes/function.rb +6 -4
  44. data/lib/arel_extensions/nodes/is_null.rb +2 -0
  45. data/lib/arel_extensions/nodes/json.rb +27 -15
  46. data/lib/arel_extensions/nodes/levenshtein_distance.rb +2 -2
  47. data/lib/arel_extensions/nodes/locate.rb +1 -1
  48. data/lib/arel_extensions/nodes/power.rb +2 -2
  49. data/lib/arel_extensions/nodes/rand.rb +2 -2
  50. data/lib/arel_extensions/nodes/repeat.rb +2 -2
  51. data/lib/arel_extensions/nodes/replace.rb +3 -3
  52. data/lib/arel_extensions/nodes/rollup.rb +4 -4
  53. data/lib/arel_extensions/nodes/round.rb +3 -3
  54. data/lib/arel_extensions/nodes/select.rb +1 -1
  55. data/lib/arel_extensions/nodes/std.rb +4 -4
  56. data/lib/arel_extensions/nodes/substring.rb +52 -2
  57. data/lib/arel_extensions/nodes/then.rb +1 -1
  58. data/lib/arel_extensions/nodes/trim.rb +2 -2
  59. data/lib/arel_extensions/nodes/union.rb +3 -3
  60. data/lib/arel_extensions/nodes/union_all.rb +3 -3
  61. data/lib/arel_extensions/nodes/wday.rb +2 -2
  62. data/lib/arel_extensions/null_functions.rb +5 -7
  63. data/lib/arel_extensions/predications.rb +22 -18
  64. data/lib/arel_extensions/string_functions.rb +26 -27
  65. data/lib/arel_extensions/version.rb +3 -1
  66. data/lib/arel_extensions/visitors/convert_format.rb +2 -2
  67. data/lib/arel_extensions/visitors/ibm_db.rb +5 -5
  68. data/lib/arel_extensions/visitors/mssql.rb +91 -92
  69. data/lib/arel_extensions/visitors/mysql.rb +89 -69
  70. data/lib/arel_extensions/visitors/oracle.rb +100 -104
  71. data/lib/arel_extensions/visitors/oracle12.rb +5 -6
  72. data/lib/arel_extensions/visitors/postgresql.rb +107 -94
  73. data/lib/arel_extensions/visitors/sqlite.rb +57 -65
  74. data/lib/arel_extensions/visitors/to_sql.rb +84 -74
  75. data/lib/arel_extensions/visitors.rb +6 -6
  76. data/lib/arel_extensions/warning.rb +5 -5
  77. data/lib/arel_extensions.rb +34 -27
  78. data/test/real_db_test.rb +31 -31
  79. data/test/visitors/test_to_sql.rb +2 -2
  80. data/test/with_ar/all_agnostic_test.rb +149 -15
  81. data/version_v1.rb +3 -1
  82. data/version_v2.rb +3 -1
  83. metadata +2 -30
@@ -18,7 +18,6 @@ require 'arel_extensions/nodes/collate'
18
18
  require 'arel_extensions/nodes/levenshtein_distance'
19
19
  require 'arel_extensions/nodes/md5'
20
20
 
21
-
22
21
  module ArelExtensions
23
22
  module StringFunctions
24
23
  include ArelExtensions::Warning
@@ -27,7 +26,7 @@ module ArelExtensions
27
26
  def &(other)
28
27
  ArelExtensions::Nodes::FindInSet.new [
29
28
  Arel.quoted(other.is_a?(Integer) ? other.to_s : other),
30
- self,
29
+ self
31
30
  ]
32
31
  end
33
32
 
@@ -52,11 +51,11 @@ module ArelExtensions
52
51
 
53
52
  # LOCATE function returns the first starting position of a string in another string.
54
53
  # If string1 or string2 is NULL then it returns NULL. If string1 not found in string2 then it returns 0.
55
- def locate val
54
+ def locate(val)
56
55
  ArelExtensions::Nodes::Locate.new [self, val]
57
56
  end
58
57
 
59
- def substring start, len = nil
58
+ def substring(start, len = nil)
60
59
  ArelExtensions::Nodes::Substring.new [self, start, len]
61
60
  end
62
61
 
@@ -71,9 +70,9 @@ module ArelExtensions
71
70
  # It's ignored in all other cases.
72
71
  def [](start, end_ = nil)
73
72
  if start.is_a?(String) || start.is_a?(Symbol)
74
- self.send(start)
73
+ send(start)
75
74
  elsif start.is_a?(Range)
76
- ArelExtensions::Nodes::Substring.new [self, start.begin + 1, start.end - start.begin + 1]
75
+ ArelExtensions::Nodes::Substring.new [self, start]
77
76
  elsif start.is_a?(Integer) && !end_
78
77
  ArelExtensions::Nodes::Substring.new [self, start + 1, 1]
79
78
  elsif start.is_a?(Integer)
@@ -89,11 +88,11 @@ module ArelExtensions
89
88
  ArelExtensions::Nodes::Soundex.new [self]
90
89
  end
91
90
 
92
- def imatches others, escape = nil
91
+ def imatches(others, escape = nil)
93
92
  ArelExtensions::Nodes::IMatches.new self, others, escape
94
93
  end
95
94
 
96
- def imatches_any others, escape = nil
95
+ def imatches_any(others, escape = nil)
97
96
  grouping_any :imatches, others, escape
98
97
  end
99
98
 
@@ -110,31 +109,31 @@ module ArelExtensions
110
109
  # res
111
110
  # end
112
111
 
113
- def imatches_all others, escape = nil
112
+ def imatches_all(others, escape = nil)
114
113
  grouping_all :imatches, others, escape, escape
115
114
  end
116
115
 
117
- def idoes_not_match others, escape = nil
116
+ def idoes_not_match(others, escape = nil)
118
117
  ArelExtensions::Nodes::IDoesNotMatch.new self, others, escape
119
118
  end
120
119
 
121
- def idoes_not_match_any others, escape = nil
120
+ def idoes_not_match_any(others, escape = nil)
122
121
  grouping_any :idoes_not_match, others, escape
123
122
  end
124
123
 
125
- def idoes_not_match_all others, escape = nil
124
+ def idoes_not_match_all(others, escape = nil)
126
125
  grouping_all :idoes_not_match, others, escape
127
126
  end
128
127
 
129
- def ai_matches other # accent insensitive & case sensitive
128
+ def ai_matches(other) # accent insensitive & case sensitive
130
129
  ArelExtensions::Nodes::AiMatches.new(self, other)
131
130
  end
132
131
 
133
- def ai_imatches other # accent insensitive & case insensitive
132
+ def ai_imatches(other) # accent insensitive & case insensitive
134
133
  ArelExtensions::Nodes::AiIMatches.new(self, other)
135
134
  end
136
135
 
137
- def smatches other # accent sensitive & case sensitive
136
+ def smatches(other) # accent sensitive & case sensitive
138
137
  ArelExtensions::Nodes::SMatches.new(self, other)
139
138
  end
140
139
 
@@ -146,12 +145,12 @@ module ArelExtensions
146
145
  ArelExtensions::Nodes::Collate.new(self, nil, false, true)
147
146
  end
148
147
 
149
- def collate ai = false, ci = false, option = nil
148
+ def collate(ai = false, ci = false, option = nil)
150
149
  ArelExtensions::Nodes::Collate.new(self, option, ai, ci)
151
150
  end
152
151
 
153
152
  # REPLACE function replaces a sequence of characters in a string with another set of characters, not case-sensitive.
154
- def replace pattern, substitute
153
+ def replace(pattern, substitute)
155
154
  if pattern.is_a? Regexp
156
155
  ArelExtensions::Nodes::RegexpReplace.new self, pattern, substitute
157
156
  else
@@ -159,11 +158,11 @@ module ArelExtensions
159
158
  end
160
159
  end
161
160
 
162
- def regexp_replace pattern, substitute
161
+ def regexp_replace(pattern, substitute)
163
162
  ArelExtensions::Nodes::RegexpReplace.new self, pattern, substitute
164
163
  end
165
164
 
166
- def concat other
165
+ def concat(other)
167
166
  ArelExtensions::Nodes::Concat.new [self, other]
168
167
  end
169
168
 
@@ -172,26 +171,26 @@ module ArelExtensions
172
171
  if orders.present?
173
172
  deprecated 'Use the kwarg `order` instead.', what: 'orders'
174
173
  end
175
- order_tabs = [orders].flatten.map{ |o|
174
+ order_tabs = [orders].flatten.map { |o|
176
175
  if o.is_a?(Arel::Nodes::Ascending) || o.is_a?(Arel::Nodes::Descending)
177
176
  o
178
177
  elsif o.respond_to?(:asc)
179
178
  o.asc
180
179
  end
181
180
  }.compact
182
- ArelExtensions::Nodes::GroupConcat.new(self, sep, group: group, order: (order || order_tabs))
181
+ ArelExtensions::Nodes::GroupConcat.new(self, sep, group: group, order: order || order_tabs)
183
182
  end
184
183
 
185
184
  # Function returns a string after removing left, right or the both prefixes or suffixes int argument
186
- def trim other = ' '
185
+ def trim(other = ' ')
187
186
  ArelExtensions::Nodes::Trim.new [self, other]
188
187
  end
189
188
 
190
- def ltrim other = ' '
189
+ def ltrim(other = ' ')
191
190
  ArelExtensions::Nodes::Ltrim.new [self, other]
192
191
  end
193
192
 
194
- def rtrim other = ' '
193
+ def rtrim(other = ' ')
195
194
  ArelExtensions::Nodes::Rtrim.new [self, other]
196
195
  end
197
196
 
@@ -212,15 +211,15 @@ module ArelExtensions
212
211
  end
213
212
  alias present not_blank
214
213
 
215
- def repeat other = 1
214
+ def repeat(other = 1)
216
215
  ArelExtensions::Nodes::Repeat.new [self, other]
217
216
  end
218
217
 
219
- def levenshtein_distance other
218
+ def levenshtein_distance(other)
220
219
  ArelExtensions::Nodes::LevenshteinDistance.new [self, other]
221
220
  end
222
221
 
223
- def edit_distance other
222
+ def edit_distance(other)
224
223
  ArelExtensions::Nodes::LevenshteinDistance.new [self, other]
225
224
  end
226
225
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ArelExtensions
2
- VERSION = '2.4.0'.freeze
4
+ VERSION = '2.5.0'
3
5
  end
@@ -2,13 +2,13 @@ module ArelExtensions
2
2
  module Visitors
3
3
  # Convert date format in strftime syntax to whatever the RDBMs
4
4
  # wants, based on the table of conversion +mapping+.
5
- def self.strftime_to_format format, mapping
5
+ def self.strftime_to_format(format, mapping)
6
6
  @mapping_regexps ||= {}
7
7
  @mapping_regexps[mapping] ||=
8
8
  Regexp.new(
9
9
  mapping
10
10
  .keys
11
- .map{|k| Regexp.escape(k)}
11
+ .map { |k| Regexp.escape(k) }
12
12
  .join('|')
13
13
  )
14
14
 
@@ -1,14 +1,14 @@
1
1
  module ArelExtensions
2
2
  module Visitors
3
3
  class Arel::Visitors::IBM_DB
4
- def visit_ArelExtensions_Nodes_Ceil o, collector
4
+ def visit_ArelExtensions_Nodes_Ceil(o, collector)
5
5
  collector << 'CEILING('
6
6
  collector = visit o.expr, collector
7
7
  collector << ')'
8
8
  collector
9
9
  end
10
10
 
11
- def visit_ArelExtensions_Nodes_Trim o, collector
11
+ def visit_ArelExtensions_Nodes_Trim(o, collector)
12
12
  collector << 'LTRIM(RTRIM('
13
13
  o.expressions.each_with_index { |arg, i|
14
14
  collector << COMMA if i != 0
@@ -18,7 +18,7 @@ module ArelExtensions
18
18
  collector
19
19
  end
20
20
 
21
- def visit_ArelExtensions_Nodes_DateDiff o, collector
21
+ def visit_ArelExtensions_Nodes_DateDiff(o, collector)
22
22
  collector << 'DAY('
23
23
  collector = visit o.left, collector
24
24
  collector << ','
@@ -31,7 +31,7 @@ module ArelExtensions
31
31
  collector
32
32
  end
33
33
 
34
- def visit_ArelExtensions_Nodes_Duration o, collector
34
+ def visit_ArelExtensions_Nodes_Duration(o, collector)
35
35
  # visit left for period
36
36
  if o.left == 'd'
37
37
  collector << 'DAY('
@@ -52,7 +52,7 @@ module ArelExtensions
52
52
  collector
53
53
  end
54
54
 
55
- def visit_ArelExtensions_Nodes_IsNull o, collector
55
+ def visit_ArelExtensions_Nodes_IsNull(o, collector)
56
56
  collector << 'COALESCE('
57
57
  collector = visit o.left, collector
58
58
  collector << ','