arel_extensions 1.1.8 → 1.1.9

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: bcbd0d968a06d04df7d1b214a72aeaf46dd9e950
4
- data.tar.gz: 717c053e7925a4d4ec6c1aa43d7db95a928224ba
3
+ metadata.gz: 57e8a31276fb8b6bba831c0934378f6e45150e86
4
+ data.tar.gz: 36aa4b3a0792e618cc2fce1ea7afd0736b2229f6
5
5
  SHA512:
6
- metadata.gz: c47c4d2544182c27b7effe868a157545d3bb9b16096ebf0c9078373d3682a008a7e481d30f2a2d2a2bf40e1f1b6ea2431e08a8129b07998bf90f005e0eb9173a
7
- data.tar.gz: 4817767ae9f17846f9909a1f7ceadaddd4ca9745d65c64b50be06184e31ddfc93ae55ac9c27e4b0d97fbc1c91fd14c805f298d2414a9b77130c4737bf3489e8a
6
+ metadata.gz: 0ea1d6ad9ee4b4417edee7773cc86982e8dc844e5e6d907fbf859c806b152a7b0dd96832fa452d760157e26a5774282544761aa045633ad19592dc6fea377585
7
+ data.tar.gz: 1ee956c003f1d2edcae2d57c38b3e66205091c66323e9dda0c0c46138b9b0fe11679a7ad5c92aecda65e6cd9f0f03f4a1d59fb30f68a8c0cedbf6d8e39c39062
data/.travis.yml CHANGED
@@ -175,6 +175,8 @@ matrix:
175
175
  gemfile: gemfiles/rails5_1_4.gemfile
176
176
  - rvm: 2.1
177
177
  gemfile: gemfiles/rails5_1_4.gemfile
178
+ - rvm: 2.2.5
179
+ gemfile: gemfiles/rails5_1_4.gemfile
178
180
  - rvm: ruby-head
179
181
  gemfile: gemfiles/rails4.gemfile
180
182
  - rvm: 2.0.0
data/Gemfile CHANGED
@@ -3,7 +3,7 @@ source "https://rubygems.org"
3
3
  gemspec
4
4
 
5
5
  group :development, :test do
6
- gem "sqlite3", :platforms => [:mri, :mswin, :x64_mingw, :mingw]
6
+ gem "sqlite3", '<= 1.3.13', :platforms => [:mri, :mswin, :x64_mingw, :mingw]
7
7
  gem "mysql2", '0.4.10', :platforms => [:mri, :mswin, :x64_mingw, :mingw]
8
8
  gem "pg", '< 1', :platforms => [:mri, :mingw, :x64_mingw, :mswin]
9
9
 
@@ -3,18 +3,18 @@ source "https://rubygems.org"
3
3
  gem 'arel', '~> 3.0' # too old...
4
4
 
5
5
  group :development, :test do
6
- gem "sqlite3", :platform => [:ruby, :mswin, :mingw]
7
- gem "mysql2", '0.4.10', :platform => [:ruby, :mswin, :mingw]
8
- gem "activerecord-mysql2-adapter", :platform => [:ruby, :mswin, :mingw]
9
- gem "pg", :platform => [:ruby, :mswin, :mingw]
10
- # for JRuby
11
- gem "jdbc-sqlite3", :platform => :jruby
12
- gem "activerecord-jdbcsqlite3-adapter", :platform => :jruby
13
- gem "activerecord-jdbcmysql-adapter", :platform => :jruby
14
- gem "activerecord-jdbcpostgresql-adapter", :platform => :jruby
15
- gem 'activesupport', '~> 3.2'
16
- gem 'activemodel', '~> 3.2'
17
- gem 'activerecord', '~> 3.2'
6
+ gem "sqlite3", '<= 1.3.13', :platform => [:ruby, :mswin, :mingw]
7
+ gem "mysql2", '0.4.10', :platform => [:ruby, :mswin, :mingw]
8
+ gem "activerecord-mysql2-adapter", :platform => [:ruby, :mswin, :mingw]
9
+ gem "pg", :platform => [:ruby, :mswin, :mingw]
10
+ # for JRuby
11
+ gem "jdbc-sqlite3", :platform => :jruby
12
+ gem "activerecord-jdbcsqlite3-adapter", :platform => :jruby
13
+ gem "activerecord-jdbcmysql-adapter", :platform => :jruby
14
+ gem "activerecord-jdbcpostgresql-adapter", :platform => :jruby
15
+ gem 'activesupport', '~> 3.2'
16
+ gem 'activemodel', '~> 3.2'
17
+ gem 'activerecord', '~> 3.2'
18
18
  end
19
19
 
20
20
  gemspec :path => "../"
@@ -3,27 +3,27 @@ source "https://rubygems.org"
3
3
  gem 'arel', '~> 6.0'
4
4
 
5
5
  group :development, :test do
6
- gem 'activesupport', '~> 4.0'
7
- gem 'activemodel', '~> 4.0'
8
- gem 'activerecord', '~> 4.0'
6
+ gem 'activesupport', '~> 4.0'
7
+ gem 'activemodel', '~> 4.0'
8
+ gem 'activerecord', '~> 4.0'
9
9
 
10
- gem "sqlite3", :platforms => [:mri, :mswin, :mingw]
11
- gem "mysql2", '0.4.10', :platforms => [:mri, :mswin, :mingw]
12
- gem "pg",'< 1.0.0', :platforms => [:mri, :mingw]
10
+ gem "sqlite3", '<= 1.3.13', :platforms => [:mri, :mswin, :mingw]
11
+ gem "mysql2", '0.4.10', :platforms => [:mri, :mswin, :mingw]
12
+ gem "pg",'< 1.0.0', :platforms => [:mri, :mingw]
13
13
 
14
- gem "tiny_tds", :platforms => [:mri, :mingw, :mswin] if RUBY_PLATFORM =~ /windows/
15
- gem "activerecord-sqlserver-adapter", '~> 4.2.0', :platforms => [:mri, :mingw, :mswin] if RUBY_PLATFORM =~ /windows/
14
+ gem "tiny_tds", :platforms => [:mri, :mingw, :mswin] if RUBY_PLATFORM =~ /windows/
15
+ gem "activerecord-sqlserver-adapter", '~> 4.2.0', :platforms => [:mri, :mingw, :mswin] if RUBY_PLATFORM =~ /windows/
16
16
 
17
- gem 'ruby-oci8', :platforms => [:mri, :mswin, :mingw] if ENV.has_key? 'ORACLE_HOME'
18
- gem 'activerecord-oracle_enhanced-adapter', '~> 1.6.0' if ENV.has_key? 'ORACLE_HOME'
17
+ gem 'ruby-oci8', :platforms => [:mri, :mswin, :mingw] if ENV.has_key? 'ORACLE_HOME'
18
+ gem 'activerecord-oracle_enhanced-adapter', '~> 1.6.0' if ENV.has_key? 'ORACLE_HOME'
19
19
 
20
- # for JRuby
21
- gem 'activerecord-jdbc-adapter', :platforms => :jruby
22
- gem "jdbc-sqlite3", :platforms => :jruby
23
- gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
24
- gem "activerecord-jdbcmysql-adapter", :platforms => :jruby
25
- gem "activerecord-jdbcpostgresql-adapter", :platforms => :jruby
26
- gem "activerecord-jdbcmssql-adapter", :platforms => :jruby
20
+ # for JRuby
21
+ gem 'activerecord-jdbc-adapter', :platforms => :jruby
22
+ gem "jdbc-sqlite3", :platforms => :jruby
23
+ gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
24
+ gem "activerecord-jdbcmysql-adapter", :platforms => :jruby
25
+ gem "activerecord-jdbcpostgresql-adapter", :platforms => :jruby
26
+ gem "activerecord-jdbcmssql-adapter", :platforms => :jruby
27
27
  end
28
28
 
29
29
  gemspec :path => "../"
@@ -3,27 +3,27 @@ source "https://rubygems.org"
3
3
  gem 'arel', '~> 7.0'
4
4
 
5
5
  group :development, :test do
6
- gem 'activesupport', '~> 5.0'
7
- gem 'activemodel', '~> 5.0'
8
- gem 'activerecord', '5.0.6'
6
+ gem 'activesupport', '~> 5.0'
7
+ gem 'activemodel', '~> 5.0'
8
+ gem 'activerecord', '5.0.6'
9
9
 
10
- gem "sqlite3", :platforms => [:mri, :mswin, :mingw]
11
- gem "mysql2", '0.4.10', :platforms => [:mri, :mswin, :mingw]
12
- gem "pg",'< 1.0.0', :platforms => [:mri, :mingw]
10
+ gem "sqlite3", '<= 1.3.13', :platforms => [:mri, :mswin, :mingw]
11
+ gem "mysql2", '0.4.10', :platforms => [:mri, :mswin, :mingw]
12
+ gem "pg",'< 1.0.0', :platforms => [:mri, :mingw]
13
13
 
14
- gem "tiny_tds", :platforms => [:mri, :mingw] if RUBY_PLATFORM =~ /windows/
15
- # gem "activerecord-sqlserver-adapter", :platforms => [:mri, :mingw]
14
+ gem "tiny_tds", :platforms => [:mri, :mingw] if RUBY_PLATFORM =~ /windows/
15
+ #gem "activerecord-sqlserver-adapter", :platforms => [:mri, :mingw]
16
16
 
17
- gem 'ruby-oci8', :platforms => [:mri, :mswin, :mingw] if ENV.has_key? 'ORACLE_HOME'
18
- gem 'activerecord-oracle_enhanced-adapter', '~> 1.7' if ENV.has_key? 'ORACLE_HOME'
17
+ gem 'ruby-oci8', :platforms => [:mri, :mswin, :mingw] if ENV.has_key? 'ORACLE_HOME'
18
+ gem 'activerecord-oracle_enhanced-adapter', '~> 1.7' if ENV.has_key? 'ORACLE_HOME'
19
19
 
20
- # for JRuby
21
- gem 'activerecord-jdbc-adapter', :github => 'jruby/activerecord-jdbc-adapter', :tag => 'v50.0', :platforms => :jruby
22
- gem "jdbc-sqlite3", :platforms => :jruby
23
- gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
24
- gem "activerecord-jdbcmysql-adapter", :platforms => :jruby
25
- gem "activerecord-jdbcpostgresql-adapter", :platforms => :jruby
26
- gem "activerecord-jdbcmssql-adapter", :platforms => :jruby
20
+ # for JRuby
21
+ gem 'activerecord-jdbc-adapter', :github => 'jruby/activerecord-jdbc-adapter', :tag => 'v50.0', :platforms => :jruby
22
+ gem "jdbc-sqlite3", :platforms => :jruby
23
+ gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
24
+ gem "activerecord-jdbcmysql-adapter", :platforms => :jruby
25
+ gem "activerecord-jdbcpostgresql-adapter", :platforms => :jruby
26
+ gem "activerecord-jdbcmssql-adapter", :platforms => :jruby
27
27
  end
28
28
 
29
29
  gemspec :path => "../"
@@ -4,27 +4,27 @@ gem 'rails', '5.1.4'
4
4
  gem 'arel', '~> 8'
5
5
 
6
6
  group :development, :test do
7
- gem 'activesupport', '5.1.4'
8
- gem 'activemodel', '5.1.4'
9
- gem 'activerecord', '5.1.4'
7
+ gem 'activesupport', '5.1.4'
8
+ gem 'activemodel', '5.1.4'
9
+ gem 'activerecord', '5.1.4'
10
10
 
11
- gem "sqlite3", :platforms => [:mri, :mswin, :mingw]
12
- gem "mysql2", '0.4.10', :platforms => [:mri, :mswin, :mingw]
13
- gem "pg",'< 1.0.0', :platforms => [:mri, :mingw]
11
+ gem "sqlite3", '<= 1.3.13', :platforms => [:mri, :mswin, :mingw]
12
+ gem "mysql2", '0.4.10', :platforms => [:mri, :mswin, :mingw]
13
+ gem "pg",'< 1.0.0', :platforms => [:mri, :mingw]
14
14
 
15
- gem "tiny_tds", :platforms => [:mri, :mingw] if RUBY_PLATFORM =~ /windows/
16
- # gem "activerecord-sqlserver-adapter", :platforms => [:mri, :mingw]
15
+ gem "tiny_tds", :platforms => [:mri, :mingw] if RUBY_PLATFORM =~ /windows/
16
+ #gem "activerecord-sqlserver-adapter", :platforms => [:mri, :mingw]
17
17
 
18
- gem 'ruby-oci8', :platforms => [:mri, :mswin, :mingw] if ENV.has_key? 'ORACLE_HOME'
19
- gem 'activerecord-oracle_enhanced-adapter', '~> 1.8' if ENV.has_key? 'ORACLE_HOME'
18
+ gem 'ruby-oci8', :platforms => [:mri, :mswin, :mingw] if ENV.has_key? 'ORACLE_HOME'
19
+ gem 'activerecord-oracle_enhanced-adapter', '~> 1.8' if ENV.has_key? 'ORACLE_HOME'
20
20
 
21
- # for JRuby
22
- gem 'activerecord-jdbc-adapter', :github => 'jruby/activerecord-jdbc-adapter', :tag => 'v51.0', :platforms => :jruby
23
- gem "jdbc-sqlite3", :platforms => :jruby
24
- gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
25
- gem "activerecord-jdbcmysql-adapter", :platforms => :jruby
26
- gem "activerecord-jdbcpostgresql-adapter", :platforms => :jruby
27
- gem "activerecord-jdbcmssql-adapter", :platforms => :jruby
21
+ # for JRuby
22
+ gem 'activerecord-jdbc-adapter', :github => 'jruby/activerecord-jdbc-adapter', :tag => 'v51.0', :platforms => :jruby
23
+ gem "jdbc-sqlite3", :platforms => :jruby
24
+ gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
25
+ gem "activerecord-jdbcmysql-adapter", :platforms => :jruby
26
+ gem "activerecord-jdbcpostgresql-adapter", :platforms => :jruby
27
+ gem "activerecord-jdbcmssql-adapter", :platforms => :jruby
28
28
  end
29
29
 
30
30
  gemspec :path => "../"
@@ -4,27 +4,27 @@ gem 'rails', '~> 5.2.0'
4
4
  gem 'arel', '~> 9'
5
5
 
6
6
  group :development, :test do
7
- gem 'activesupport', '~> 5.2.0'
8
- gem 'activemodel', '~> 5.2.0'
9
- gem 'activerecord', '~> 5.2.0'
7
+ gem 'activesupport', '~> 5.2.0'
8
+ gem 'activemodel', '~> 5.2.0'
9
+ gem 'activerecord', '~> 5.2.0'
10
10
 
11
- gem "sqlite3", :platforms => [:mri, :mswin, :mingw]
12
- gem "mysql2", '0.4.10', :platforms => [:mri, :mswin, :mingw]
13
- gem "pg",'< 1.0.0', :platforms => [:mri, :mingw]
11
+ gem "sqlite3", '<= 1.3.13', :platforms => [:mri, :mswin, :mingw]
12
+ gem "mysql2", '0.4.10', :platforms => [:mri, :mswin, :mingw]
13
+ gem "pg",'< 1.0.0', :platforms => [:mri, :mingw]
14
14
 
15
- gem "tiny_tds", :platforms => [:mri, :mingw] if RUBY_PLATFORM =~ /windows/
16
- # gem "activerecord-sqlserver-adapter", :platforms => [:mri, :mingw]
15
+ gem "tiny_tds", :platforms => [:mri, :mingw] if RUBY_PLATFORM =~ /windows/
16
+ #gem "activerecord-sqlserver-adapter", :platforms => [:mri, :mingw]
17
17
 
18
- gem 'ruby-oci8', :platforms => [:mri, :mswin, :mingw] if ENV.has_key? 'ORACLE_HOME'
19
- gem 'activerecord-oracle_enhanced-adapter', '~> 5.2.0' if ENV.has_key? 'ORACLE_HOME'
18
+ gem 'ruby-oci8', :platforms => [:mri, :mswin, :mingw] if ENV.has_key? 'ORACLE_HOME'
19
+ gem 'activerecord-oracle_enhanced-adapter', '~> 5.2.0' if ENV.has_key? 'ORACLE_HOME'
20
20
 
21
- # for JRuby
22
- gem 'activerecord-jdbc-adapter', :github => 'jruby/activerecord-jdbc-adapter', :tag => 'v52.0', :platforms => :jruby
23
- gem "jdbc-sqlite3", :platforms => :jruby
24
- gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
25
- gem "activerecord-jdbcmysql-adapter", :platforms => :jruby
26
- gem "activerecord-jdbcpostgresql-adapter", :platforms => :jruby
27
- gem "activerecord-jdbcmssql-adapter", :platforms => :jruby
21
+ # for JRuby
22
+ gem 'activerecord-jdbc-adapter', :github => 'jruby/activerecord-jdbc-adapter', :tag => 'v52.0', :platforms => :jruby
23
+ gem "jdbc-sqlite3", :platforms => :jruby
24
+ gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
25
+ gem "activerecord-jdbcmysql-adapter", :platforms => :jruby
26
+ gem "activerecord-jdbcpostgresql-adapter", :platforms => :jruby
27
+ gem "activerecord-jdbcmssql-adapter", :platforms => :jruby
28
28
  end
29
29
 
30
30
  gemspec :path => "../"
@@ -1,20 +1,33 @@
1
1
  require 'arel_extensions/nodes/then'
2
2
 
3
3
  module ArelExtensions
4
- module BooleanFunctions
4
+ module BooleanFunctions
5
5
 
6
- def ⋀(other)
7
- self.and(other)
8
- end
6
+ def ⋀(other)
7
+ self.and(other)
8
+ end
9
9
 
10
- def ⋁(other)
11
- self.or(other)
12
- end
10
+ def and *others
11
+ Arel::Nodes::And.new([self]+ others.flatten)
12
+ end
13
13
 
14
- def then(t, f = nil)
15
- ArelExtensions::Nodes::Then.new [self, t, f]
16
- end
17
- end
14
+ def (other)
15
+ self.or(other)
16
+ end
17
+
18
+ def or *others
19
+ args = others.flatten
20
+ if args.length == 1
21
+ Arel::Nodes::Or.new(self, args.first)
22
+ else
23
+ ArelExtensions::Nodes::Or.new([self]+ args)
24
+ end
25
+ end
26
+
27
+ def then(t, f = nil)
28
+ ArelExtensions::Nodes::Then.new [self, t, f]
29
+ end
30
+ end
18
31
  end
19
32
 
20
33
  Arel::Nodes::And.class_eval do
@@ -24,3 +37,9 @@ end
24
37
  Arel::Nodes::Or.class_eval do
25
38
  include ArelExtensions::BooleanFunctions
26
39
  end
40
+
41
+ ArelExtensions::Nodes.const_set('Or',Class.new(Arel::Nodes::And)).class_eval do
42
+ include ArelExtensions::BooleanFunctions
43
+ end
44
+
45
+
@@ -15,123 +15,122 @@ module ArelExtensions
15
15
  #String and others (convert in string) allows you to concatenate 2 or more strings together.
16
16
  #Date and integer adds or subtracts a specified time interval from a date.
17
17
  def +(other)
18
- case self
19
- when Arel::Nodes::Quoted
20
- return self.concat(other)
21
- when Arel::Nodes::Grouping
22
- if self.expr.left.is_a?(String) || self.expr.right.is_a?(String)
23
- return self.concat(other)
24
- else
25
- return Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
26
- end
27
- when ArelExtensions::Nodes::Function,ArelExtensions::Nodes::Case
28
- return case self.return_type
29
- when :string, :text
30
- self.concat(other)
31
- when :integer, :decimal, :float, :number, :int
32
- Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
33
- when :date, :datetime
34
- ArelExtensions::Nodes::DateAdd.new [self, other]
35
- else
36
- self.concat(other)
37
- end
38
- when Arel::Nodes::Function
39
- Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
40
- else
41
- begin
42
- col = Arel::Table.engine.connection.schema_cache.columns_hash(self.relation.table_name)[self.name.to_s]
43
- rescue Exception
44
- col = nil
45
- end
46
- if (!col) #if the column doesn't exist in the database
47
- Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new(self, other))
48
- else
49
- arg = col.type
50
- if arg == :integer || (!arg)
51
- other = other.to_i if other.is_a?(String)
52
- Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
53
- elsif arg == :decimal || arg == :float
54
- other = Arel.sql(other) if other.is_a?(String) # Arel should accept Float & BigDecimal!
55
- Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
56
- elsif arg == :datetime || arg == :date
57
- ArelExtensions::Nodes::DateAdd.new [self, other]
58
- elsif arg == :string || arg == :text
59
- self.concat(other)
60
- end
61
- end
62
- end
18
+ case self
19
+ when Arel::Nodes::Quoted
20
+ return self.concat(other)
21
+ when Arel::Nodes::Grouping
22
+ if self.expr.left.is_a?(String) || self.expr.right.is_a?(String)
23
+ return self.concat(other)
24
+ else
25
+ return Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
26
+ end
27
+ when ArelExtensions::Nodes::Function,ArelExtensions::Nodes::Case
28
+ return case self.return_type
29
+ when :string, :text
30
+ self.concat(other)
31
+ when :integer, :decimal, :float, :number, :int
32
+ Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
33
+ when :date, :datetime
34
+ ArelExtensions::Nodes::DateAdd.new [self, other]
35
+ else
36
+ self.concat(other)
37
+ end
38
+ when Arel::Nodes::Function
39
+ Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
40
+ else
41
+ begin
42
+ col = Arel::Table.engine.connection.schema_cache.columns_hash(self.relation.table_name)[self.name.to_s]
43
+ rescue Exception
44
+ col = nil
45
+ end
46
+ if (!col) #if the column doesn't exist in the database
47
+ Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new(self, other))
48
+ else
49
+ arg = col.type
50
+ if arg == :integer || (!arg)
51
+ other = other.to_i if other.is_a?(String)
52
+ Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
53
+ elsif arg == :decimal || arg == :float
54
+ other = Arel.sql(other) if other.is_a?(String) # Arel should accept Float & BigDecimal!
55
+ Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
56
+ elsif arg == :datetime || arg == :date
57
+ ArelExtensions::Nodes::DateAdd.new [self, other]
58
+ elsif arg == :string || arg == :text
59
+ self.concat(other)
60
+ end
61
+ end
62
+ end
63
63
  end
64
64
 
65
65
  #function returns the time between two dates
66
66
  #function returns the substraction between two ints
67
67
  def -(other)
68
- case self
69
- when Arel::Nodes::Grouping
70
- if self.expr.left.is_a?(Date) || self.expr.left.is_a?(DateTime)
71
- Arel::Nodes::Grouping.new(ArelExtensions::Nodes::DateSub.new [self, other])
72
- else
73
- Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other))
74
- end
75
- when ArelExtensions::Nodes::Function, ArelExtensions::Nodes::Case
76
- case self.return_type
77
- when :string, :text # ???
78
- Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other)) # ??
79
- when :integer, :decimal, :float, :number
80
- Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other))
81
- when :date, :datetime
82
- ArelExtensions::Nodes::DateSub.new [self, other]
83
- else
84
- Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other))
85
- end
86
- when Arel::Nodes::Function
87
- Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other))
88
- else
89
-
90
- begin
91
- col = Arel::Table.engine.connection.schema_cache.columns_hash(self.relation.table_name)[self.name.to_s]
92
- rescue Exception
93
- col = nil
94
- end
95
- if (!col) #if the column doesn't exist in the database
96
- Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other))
97
- else
98
- arg = col.type
99
- if (arg == :date || arg == :datetime)
100
- case other
101
- when Arel::Attributes::Attribute
102
- begin
103
- col2 = Arel::Table.engine.connection.schema_cache.columns_hash(other.relation.table_name)[other.name.to_s]
104
- rescue Exception
105
- col = nil
106
- end
107
- if (!col2) #if the column doesn't exist in the database
108
- ArelExtensions::Nodes::DateSub.new [self, other]
109
- else
110
- arg2 = col2.type
111
- if arg2 == :date || arg2 == :datetime
112
- ArelExtensions::Nodes::DateDiff.new [self, other]
113
- else
114
- ArelExtensions::Nodes::DateSub.new [self, other]
115
- end
116
- end
117
- when Arel::Nodes::Node, DateTime, Time, String, Date
118
- ArelExtensions::Nodes::DateDiff.new [self, other]
119
- when Integer
120
- ArelExtensions::Nodes::DateSub.new [self, other]
121
- end
122
- else
123
- case other
124
- when Integer, Float, BigDecimal
125
- Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, Arel.sql(other.to_s)))
126
- when String
127
- Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, Arel.sql(other)))
128
- else
129
- Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other))
130
- end
131
- end
132
- end
133
- end
68
+ case self
69
+ when Arel::Nodes::Grouping
70
+ if self.expr.left.is_a?(Date) || self.expr.left.is_a?(DateTime)
71
+ Arel::Nodes::Grouping.new(ArelExtensions::Nodes::DateSub.new [self, other])
72
+ else
73
+ Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other))
74
+ end
75
+ when ArelExtensions::Nodes::Function, ArelExtensions::Nodes::Case
76
+ case self.return_type
77
+ when :string, :text # ???
78
+ Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other)) # ??
79
+ when :integer, :decimal, :float, :number
80
+ Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other))
81
+ when :date, :datetime
82
+ ArelExtensions::Nodes::DateSub.new [self, other]
83
+ else
84
+ Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other))
85
+ end
86
+ when Arel::Nodes::Function
87
+ Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other))
88
+ else
89
+ begin
90
+ col = Arel::Table.engine.connection.schema_cache.columns_hash(self.relation.table_name)[self.name.to_s]
91
+ rescue Exception
92
+ col = nil
93
+ end
94
+ if (!col) #if the column doesn't exist in the database
95
+ Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other))
96
+ else
97
+ arg = col.type
98
+ if (arg == :date || arg == :datetime)
99
+ case other
100
+ when Arel::Attributes::Attribute
101
+ begin
102
+ col2 = Arel::Table.engine.connection.schema_cache.columns_hash(other.relation.table_name)[other.name.to_s]
103
+ rescue Exception
104
+ col = nil
105
+ end
106
+ if (!col2) #if the column doesn't exist in the database
107
+ ArelExtensions::Nodes::DateSub.new [self, other]
108
+ else
109
+ arg2 = col2.type
110
+ if arg2 == :date || arg2 == :datetime
111
+ ArelExtensions::Nodes::DateDiff.new [self, other]
112
+ else
113
+ ArelExtensions::Nodes::DateSub.new [self, other]
114
+ end
115
+ end
116
+ when Arel::Nodes::Node, DateTime, Time, String, Date
117
+ ArelExtensions::Nodes::DateDiff.new [self, other]
118
+ when Integer
119
+ ArelExtensions::Nodes::DateSub.new [self, other]
120
+ end
121
+ else
122
+ case other
123
+ when Integer, Float, BigDecimal
124
+ Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, Arel.sql(other.to_s)))
125
+ when String
126
+ Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, Arel.sql(other)))
127
+ else
128
+ Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other))
129
+ end
130
+ end
131
+ end
132
+ end
134
133
  end
135
-
134
+
136
135
  end
137
136
  end