arel_extensions 0.8.2 → 0.8.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 58bd1c5b91bc632c7697a918369ea19c99ed026b
4
- data.tar.gz: d52eae92a11823a94d51eda6de44187199d0e738
3
+ metadata.gz: cc58508a314b8bc3f5f4eb4aa704c4cba75783f6
4
+ data.tar.gz: a347453b0960efb17862dbb15e7433efa81cdc05
5
5
  SHA512:
6
- metadata.gz: 29438df3218c96066e2d1a76f1ccd00b315c0d0957c6cd321cb9db09fe19d12c966d3d825f536337d87a3bafc547e77e221b871fcf407b01831080d99d872eaf
7
- data.tar.gz: b56534f4ff7e7cde0a7dc64756075cf8a5ed892c1fc35e1913adabba3bc3f1afc430fb3c07e9bfb461523077feb65b78df25ae75e98373cdaac4fe29d0ea06cc
6
+ metadata.gz: 9aab7c24f6cd74293a52b5064764a9cbbffcc5d208140ddfab546ddc985f1435fb6ccbe7418e86e32c03c844670567dc03d16474077d52cd3acea1d5169bcc63
7
+ data.tar.gz: c74789a394dabfd3a8061a174a270312a7eacd3e46e0decd8089b2b4043eda970c65406adc22a60f9278345c4a063c58d1e1ef3450113ebac506ecbddac99dc9
data/.travis.yml CHANGED
@@ -2,13 +2,14 @@ language: ruby
2
2
  sudo: false
3
3
  cache: bundler
4
4
  before_install:
5
+ - gem install bundler
5
6
  # - sudo apt-get update -qq
6
7
  # - sudo apt-get install -qq sqlite3
7
8
  #addons:
8
9
  # mariadb: '10.0'
9
10
  gemfile:
10
- - gemfiles/rails3.gemfile
11
11
  - gemfiles/rails4.gemfile
12
+ # - gemfiles/rails3.gemfile
12
13
  - gemfiles/rails5.gemfile
13
14
  services:
14
15
  - mysql
@@ -20,18 +21,18 @@ script:
20
21
  - "bundle exec rake test"
21
22
  # - "bundle exec rake test:sqlite3"
22
23
  - "gem build arel_extensions.gemspec"
23
- # - "ruby test/real_db_test.rb"
24
+ - "bundle exec ruby test/real_db_test.rb"
24
25
  env:
25
26
  global:
26
27
  - JRUBY_OPTS='--dev -J-Xmx1024M'
27
28
  rvm:
28
- - rbx-2
29
- - jruby-9.0.5.0
30
- - jruby-head
31
29
  - 2.0.0
32
30
  - 2.1
33
31
  - 2.2.5
34
32
  - 2.3.1
33
+ - rbx-2
34
+ - jruby-9.0.5.0
35
+ - jruby-head
35
36
  - ruby-head
36
37
  jdk:
37
38
  - openjdk7
@@ -65,14 +66,20 @@ matrix:
65
66
  jdk: openjdk7
66
67
  - rvm: ruby-head
67
68
  jdk: oraclejdk7
69
+ - rvm: 2.0.0
70
+ gemfile: gemfiles/rails5.gemfile
71
+ - rvm: 2.1
72
+ gemfile: gemfiles/rails5.gemfile
73
+ - rvm: rbx-2
74
+ gemfile: gemfiles/rails5.gemfile
68
75
  allow_failures:
69
76
  # - rvm: jruby-9.0.5.0
70
77
  # - rvm: jruby-head
71
78
  - rvm: ruby-head
72
79
  gemfile: gemfiles/rails4.gemfile
73
- - rvm: ruby-head
74
- gemfile: gemfiles/rails3.gemfile
80
+ # - rvm: ruby-head
81
+ # gemfile: gemfiles/rails3.gemfile
75
82
  # - rvm: jruby-head
76
- bundler_args: --jobs 2 --retry 2
83
+ bundler_args: --jobs 3 --retry 2
77
84
  notifications:
78
85
  email: false
@@ -4,7 +4,7 @@ $:.push File.expand_path("../lib", __FILE__)
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "arel_extensions"
7
- s.version = '0.8.2'
7
+ s.version = '0.8.3'
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ["Yann Azoury", "Mathilde Pechdimaldjian", "Félix Bellanger"]
10
10
  s.email = ["yann.azoury@faveod.com", "mathilde.pechdimaldjian@gmail.com", "felix.bellanger@faveod.com"]
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
21
21
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
22
22
  s.require_paths = ["lib"]
23
23
 
24
- s.add_dependency('arel')
24
+ s.add_dependency('arel', '>= 6.0')
25
25
 
26
26
  s.add_development_dependency('minitest', '~> 5.9')
27
27
  s.add_development_dependency('rdoc', '~> 4.0')
data/functions.html CHANGED
@@ -5,8 +5,9 @@
5
5
  <title>Arel Extensions Features</title>
6
6
  <style type="text/css">
7
7
  .tg {border-collapse:collapse;border-spacing:0;}
8
+ .tg th { font-weight:bold; }
8
9
  .tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;}
9
- .tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;}
10
+ .tg th{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;}
10
11
  .tg .tg-baqh{text-align:center;vertical-align:top}
11
12
  .tg .tg-3oug{background-color:#fd6864;text-align:center;vertical-align:top}
12
13
  .tg .tg-by3v{font-weight:bold;font-size:14px;text-align:center}
@@ -36,8 +37,9 @@
36
37
  <th class="tg-pjz5">DB2</th>
37
38
  </tr>
38
39
  </thead>
40
+ <tbody>
39
41
  <tr>
40
- <td class="tg-82sq" rowspan="6"><br><br><br><br><br><br><br>Math<br>functions<br></td>
42
+ <th class="tg-82sq" rowspan="6"><br><br><br><br><br><br><br>Math<br>functions</th>
41
43
  <td class="tg-yw4l">ABS<br>column.abs<br></td>
42
44
  <td class="tg-baqh">✔</td>
43
45
  <td class="tg-baqh">✔</td>
@@ -92,7 +94,7 @@
92
94
  <td class="tg-baqh">✔</td>
93
95
  </tr>
94
96
  <tr>
95
- <td class="tg-ffjm" rowspan="11"><br><br><br><br><br><br><br><br><br>String <br>functions <br></td>
97
+ <th class="tg-ffjm" rowspan="11"><br><br><br><br><br><br><br><br><br>String <br>functions</th>
96
98
  <td class="tg-yw4l">CONCAT<br>column + "string"</td>
97
99
  <td class="tg-baqh">✔</td>
98
100
  <td class="tg-baqh">✔</td>
@@ -192,7 +194,7 @@
192
194
  <td class="tg-j6lv">TRIM()</td>
193
195
  </tr>
194
196
  <tr>
195
- <td class="tg-4rp9" rowspan="6"><br><br><br><br><br><br><br>Date <br>functions<br></td>
197
+ <th class="tg-4rp9" rowspan="6"><br><br><br><br><br><br><br>Date <br>functions<br></th>
196
198
  <td class="tg-yw4l">DATEADD<br>column + 2.year<br></td>
197
199
  <td class="tg-j6lv">DATE_ADD()<br></td>
198
200
  <td class="tg-baqh">✔</td>
@@ -247,7 +249,7 @@
247
249
  <td class="tg-baqh">✔</td>
248
250
  </tr>
249
251
  <tr>
250
- <td class="tg-72dn" rowspan="8"><br><br><br><br><br><br>Comparators<br>functions<br></td>
252
+ <th class="tg-72dn" rowspan="8"><br><br><br><br><br><br>Comparators<br>functions<br></th>
251
253
  <td class="tg-yw4l">COALESCE<br>column.coalesce(var)</td>
252
254
  <td class="tg-baqh">✔</td>
253
255
  <td class="tg-baqh">✔</td>
@@ -320,7 +322,7 @@
320
322
  <td class="tg-baqh">✔</td>
321
323
  </tr>
322
324
  <tr>
323
- <td class="tg-9hbo" rowspan="2"><br><br>Boolean <br>functions<br></td>
325
+ <th class="tg-9hbo" rowspan="2">Boolean <br>functions</th>
324
326
  <td class="tg-yw4l">OR ( ⋁ )<br>column.eq(var) ⋁ column.eq(var)</td>
325
327
  <td class="tg-baqh">✔</td>
326
328
  <td class="tg-baqh">✔</td>
@@ -338,7 +340,18 @@
338
340
  <td class="tg-baqh">✔</td>
339
341
  <td class="tg-baqh">✔</td>
340
342
  </tr>
343
+ <tr>
344
+ <th class="bulk_insert">Bulk Insert</th>
345
+ <td class="tg-yw4l">insert_manager.bulk_insert(@cols, @data)</td>
346
+ <td class="tg-baqh">✔</td>
347
+ <td class="tg-baqh">✔</td>
348
+ <td class="tg-baqh">✔</td>
349
+ <td class="tg-baqh">✔</td>
350
+ <td class="tg-baqh">✔</td>
351
+ <td class="tg-baqh">✔</td>
352
+ </tr>
353
+ </tbody>
341
354
  </table>
342
- </table>
355
+
343
356
  </body>
344
- </html>
357
+ </html>
@@ -1,10 +1,12 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- gem 'arel', '~> 3.0'
3
+ gem 'arel', '~> 3.0' # too old...
4
4
 
5
5
  group :development, :test do
6
6
  gem "sqlite3", :platform => [:ruby, :mswin, :mingw]
7
7
  gem "mysql2", :platform => [:ruby, :mswin, :mingw]
8
+ gem "activerecord-mysql2-adapter", :platform => [:ruby, :mswin, :mingw]
9
+ gem "pg", :platform => [:ruby, :mswin, :mingw]
8
10
  # for JRuby
9
11
  gem "jdbc-sqlite3", :platform => :jruby
10
12
  gem "activerecord-jdbcsqlite3-adapter", :platform => :jruby
@@ -13,8 +15,6 @@ group :development, :test do
13
15
  gem 'activesupport', '~> 3.2'
14
16
  gem 'activemodel', '~> 3.2'
15
17
  gem 'activerecord', '~> 3.2'
16
- gem 'rdoc'
17
- gem 'rake'
18
18
  end
19
19
 
20
20
  gemspec :path => "../"
@@ -5,6 +5,7 @@ gem 'arel', '~> 6.0'
5
5
  group :development, :test do
6
6
  gem "sqlite3", :platform => [:ruby, :mswin, :mingw]
7
7
  gem "mysql2", :platform => [:ruby, :mswin, :mingw]
8
+ gem "pg", :platform => [:ruby, :mswin, :mingw]
8
9
  # for JRuby
9
10
  gem "jdbc-sqlite3", :platform => :jruby
10
11
  gem "activerecord-jdbcsqlite3-adapter", :platform => :jruby
@@ -13,8 +14,6 @@ group :development, :test do
13
14
  gem 'activesupport', '~> 4.0'
14
15
  gem 'activemodel', '~> 4.0'
15
16
  gem 'activerecord', '~> 4.0'
16
- gem 'rdoc'
17
- gem 'rake', '~> 11'
18
17
  end
19
18
 
20
19
  gemspec :path => "../"
@@ -5,6 +5,8 @@ gem 'arel', '~> 7.0'
5
5
  group :development, :test do
6
6
  gem "sqlite3", :platform => [:ruby, :mswin, :mingw]
7
7
  gem "mysql2", :platform => [:ruby, :mswin, :mingw]
8
+ gem "pg", :platform => [:ruby, :mswin, :mingw]
9
+
8
10
  # for JRuby
9
11
  gem "jdbc-sqlite3", :platform => :jruby
10
12
  gem "activerecord-jdbcsqlite3-adapter", :platform => :jruby
@@ -14,8 +16,6 @@ group :development, :test do
14
16
  gem 'activesupport', '~> 5'
15
17
  gem 'activemodel', '~> 5'
16
18
  gem 'activerecord', '~> 5'
17
- gem 'rdoc'
18
- gem 'rake'
19
19
  end
20
20
 
21
21
  gemspec :path => "../"
@@ -1,11 +1,13 @@
1
+ require 'arel_extensions/nodes'
2
+ require 'arel_extensions/nodes/concat'
3
+
1
4
  module ArelExtensions
2
5
  module Math
3
6
  #function + between
4
7
  #String and others (convert in string) allows you to concatenate 2 or more strings together.
5
8
  #Date and integer adds or subtracts a specified time interval from a date.
6
9
  def +(other)
7
- return ArelExtensions::Nodes::Concat.new(self.expressions + [other]) if self.is_a?(ArelExtensions::Nodes::Concat)
8
- arg = self.relation.engine.connection.schema_cache.columns_hash(self.relation.table_name)[self.name.to_s].type
10
+ arg = Arel::Table.engine.connection.schema_cache.columns_hash(self.relation.table_name)[self.name.to_s].type
9
11
  if arg == :integer || arg == :decimal || arg == :float
10
12
  if other.is_a?(String)
11
13
  other = other.to_i
@@ -21,11 +23,11 @@ module ArelExtensions
21
23
  #function returns the time between two dates
22
24
  #function returns the susbration between two int
23
25
  def -(other)
24
- arg = self.relation.engine.connection.schema_cache.columns_hash(self.relation.table_name)[self.name.to_s].type
26
+ arg = Arel::Table.engine.connection.schema_cache.columns_hash(self.relation.table_name)[self.name.to_s].type
25
27
  if (arg == :date || arg == :datetime)
26
28
  case other
27
29
  when Arel::Attributes::Attribute
28
- arg2 = other.relation.engine.connection.schema_cache.columns_hash(other.relation.table_name)[other.name.to_s].type
30
+ arg2 = Arel::Table.engine.connection.schema_cache.columns_hash(other.relation.table_name)[other.name.to_s].type
29
31
  if arg2 == :date || arg2 == :datetime
30
32
  ArelExtensions::Nodes::DateDiff.new self, other
31
33
  else
@@ -1,22 +1,14 @@
1
1
  module ArelExtensions
2
2
  module Nodes
3
- class Coalesce < Arel::Nodes::Function
4
- include Arel::AliasPredication
3
+ class Coalesce < Function
5
4
 
6
- def initialize arg , aliaz = nil
7
-
8
- super(arg, aliaz)
9
- end
10
-
11
- def left
12
- @expressions.first
5
+ def initialize expr
6
+ tab = expr.map { |arg|
7
+ convert_to_node(arg)
8
+ }
9
+ return super(tab)
13
10
  end
14
-
15
- def other
16
- @expressions.delete_at(0)
17
- @expressions
18
- end
19
-
11
+
20
12
  end
21
13
  end
22
14
  end
@@ -1,31 +1,16 @@
1
1
  module ArelExtensions
2
2
  module Nodes
3
3
  class Concat < Function
4
- include ArelExtensions::Math
5
4
 
6
5
  def initialize expr
7
- tab = expr.map do |arg|
8
- convert(arg)
9
- end
6
+ tab = expr.map { |arg|
7
+ convert_to_node(arg)
8
+ }
10
9
  return super(tab)
11
10
  end
12
11
 
13
- private
14
- def convert(object)
15
- case object
16
- when Arel::Attributes::Attribute, Arel::Nodes::Node, Fixnum
17
- object
18
- when DateTime, Time
19
- Arel::Nodes.build_quoted(Date.new(object.year, object.month, object.day), self)
20
- when String
21
- Arel::Nodes.build_quoted(object)
22
- when Date
23
- Arel::Nodes.build_quoted(object, self)
24
- when ActiveSupport::Duration
25
- object.to_i
26
- else
27
- raise(ArgumentError, "#{object.class} can not be converted to Date")
28
- end
12
+ def +(other)
13
+ return ArelExtensions::Nodes::Concat.new(self.expressions + [other])
29
14
  end
30
15
 
31
16
  end
@@ -38,7 +38,7 @@ module ArelExtensions
38
38
 
39
39
  def initialize expr
40
40
  col = expr.first
41
- @date_type = col.relation.engine.connection.schema_cache.columns_hash(col.relation.table_name)[col.name.to_s].type
41
+ @date_type = Arel::Table.engine.connection.schema_cache.columns_hash(col.relation.table_name)[col.name.to_s].type
42
42
  tab = expr.map do |arg|
43
43
  convert(arg)
44
44
  end
@@ -18,7 +18,27 @@ module ArelExtensions
18
18
  end
19
19
 
20
20
  def right
21
- @expressions.last
21
+ @expressions[1]
22
+ end
23
+
24
+ protected
25
+ def convert_to_node(object)
26
+ case object
27
+ when Arel::Attributes::Attribute, Arel::Nodes::Node, Fixnum, Integer
28
+ object
29
+ when DateTime, Time
30
+ Arel::Nodes.build_quoted(Date.new(object.year, object.month, object.day), self)
31
+ when String
32
+ Arel::Nodes.build_quoted(object)
33
+ when Date
34
+ Arel::Nodes.build_quoted(object, self)
35
+ when NilClass
36
+ Arel.sql('NULL')
37
+ when ActiveSupport::Duration
38
+ object.to_i
39
+ else
40
+ raise(ArgumentError, "#{object.class} can not be converted to CONCAT arg")
41
+ end
22
42
  end
23
43
 
24
44
  end
@@ -1,31 +1,16 @@
1
1
  module ArelExtensions
2
2
  module Nodes
3
3
  class Locate < Function
4
- include ArelExtensions::Math
5
4
 
6
5
  def initialize expr
7
6
  tab = expr.map do |arg|
8
- convert(arg)
7
+ convert_to_node(arg)
9
8
  end
10
9
  return super(tab)
11
10
  end
12
11
 
13
- private
14
- def convert(object)
15
- case object
16
- when Arel::Attributes::Attribute, Arel::Nodes::Node, Fixnum
17
- object
18
- when DateTime, Time
19
- Arel::Nodes.build_quoted(Date.new(object.year, object.month, object.day), self)
20
- when String
21
- Arel::Nodes.build_quoted(object)
22
- when Date
23
- Arel::Nodes.build_quoted(object, self)
24
- when ActiveSupport::Duration
25
- object.to_i
26
- else
27
- raise(ArgumentError, "#{object.class} can not be converted to Date")
28
- end
12
+ def +(other)
13
+ return ArelExtensions::Nodes::Concat.new(self.expressions + [other])
29
14
  end
30
15
 
31
16
  end
@@ -1,26 +1,16 @@
1
1
  module ArelExtensions
2
2
  module Nodes
3
- class Ltrim < Arel::Nodes::Function
3
+ class Ltrim < Function
4
4
 
5
- def initialize left,right,aliaz = nil
6
- tab = Array.new
7
- tab << left
8
- tab << right
9
-
10
- super(tab, aliaz)
11
- end
12
-
13
- def left
14
- @expressions.first
5
+ def initialize expr
6
+ tab = expr.map { |arg|
7
+ convert_to_node(arg)
8
+ }
9
+ return super(tab)
15
10
  end
16
11
 
17
- def right
18
- @expressions[1]
19
- end
20
-
21
-
22
- def as other
23
- Arel::Nodes::As.new self, Arel::Nodes::SqlLiteral.new(other)
12
+ def +(other)
13
+ return ArelExtensions::Nodes::Concat.new(self.expressions + [other])
24
14
  end
25
15
 
26
16
  end
@@ -1,29 +1,18 @@
1
1
  module ArelExtensions
2
2
  module Nodes
3
- class Rtrim < Arel::Nodes::Function
3
+ class Rtrim < Function
4
4
 
5
- def initialize left,right,aliaz = nil
6
- tab = Array.new
7
- tab << left
8
- tab << right
9
-
10
- super(tab, aliaz)
11
- end
12
-
13
- def left
14
- @expressions.first
5
+ def initialize expr
6
+ tab = expr.map { |arg|
7
+ convert_to_node(arg)
8
+ }
9
+ return super(tab)
15
10
  end
16
11
 
17
- def right
18
- @expressions[1]
12
+ def +(other)
13
+ return ArelExtensions::Nodes::Concat.new(self.expressions + [other])
19
14
  end
20
15
 
21
-
22
- def as other
23
- Arel::Nodes::As.new self, Arel::Nodes::SqlLiteral.new(other)
24
- end
25
-
26
-
27
16
  end
28
17
  end
29
18
  end
@@ -1,26 +1,18 @@
1
1
  module ArelExtensions
2
2
  module Nodes
3
- class Trim < Arel::Nodes::Function
3
+ class Trim < Function
4
4
 
5
- def initialize left,right, aliaz = nil
6
- tab = Array.new
7
- tab << left
8
- tab << right
9
- super(tab, aliaz)
5
+ def initialize expr
6
+ tab = expr.map { |arg|
7
+ convert_to_node(arg)
8
+ }
9
+ return super(tab)
10
10
  end
11
11
 
12
- def left
13
- @expressions.first
12
+ def +(other)
13
+ return ArelExtensions::Nodes::Concat.new(self.expressions + [other])
14
14
  end
15
15
 
16
- def right
17
- @expressions[1]
18
- end
19
-
20
-
21
- def as other
22
- Arel::Nodes::As.new self, Arel::Nodes::SqlLiteral.new(other)
23
- end
24
16
  end
25
17
  end
26
18
  end
@@ -19,9 +19,10 @@ require 'arel_extensions/nodes/trim'
19
19
  require 'arel_extensions/nodes/ltrim'
20
20
  require 'arel_extensions/nodes/rtrim'
21
21
 
22
-
23
- require 'arel_extensions/nodes/coalesce'
22
+ # Date functions
24
23
  require 'arel_extensions/nodes/date_diff'
25
24
  require 'arel_extensions/nodes/duration'
25
+
26
+ require 'arel_extensions/nodes/coalesce'
26
27
  require 'arel_extensions/nodes/isnull'
27
28
  require 'arel_extensions/nodes/wday'
@@ -7,10 +7,10 @@ module ArelExtensions
7
7
  end
8
8
  # returns the first non-null expr in the expression list. You must specify at least two expressions.
9
9
  #If all occurrences of expr evaluate to null, then the function returns null.
10
- def coalesce (*args)
10
+ def coalesce *args
11
11
  args.unshift(self)
12
12
  ArelExtensions::Nodes::Coalesce.new args
13
13
  end
14
14
 
15
15
  end
16
- end
16
+ end
@@ -53,15 +53,15 @@ module ArelExtensions
53
53
 
54
54
  #Function returns a string after removing left, right or the both prefixes or suffixes int argument
55
55
  def trim other
56
- ArelExtensions::Nodes::Trim.new self,other
56
+ ArelExtensions::Nodes::Trim.new [self, other]
57
57
  end
58
58
 
59
59
  def ltrim other
60
- ArelExtensions::Nodes::Ltrim.new self,other
60
+ ArelExtensions::Nodes::Ltrim.new [self, other]
61
61
  end
62
62
 
63
63
  def rtrim other
64
- ArelExtensions::Nodes::Rtrim.new self, other
64
+ ArelExtensions::Nodes::Rtrim.new [self, other]
65
65
  end
66
66
 
67
67
  end
@@ -1,4 +1,4 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module ArelExtensions
3
- VERSION = "0.8.2".freeze
3
+ VERSION = "0.8.3".freeze
4
4
  end