arel_extensions 1.1.8 → 1.1.9

Sign up to get free protection for your applications and to get access to all the features.
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