arel_extensions 1.0 → 1.0.1
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 +4 -4
- data/gemfiles/rails5.gemfile +1 -1
- data/gemfiles/rails5_0.gemfile +1 -1
- data/lib/arel_extensions.rb +4 -3
- data/lib/arel_extensions/math.rb +48 -65
- data/lib/arel_extensions/set_functions.rb +29 -0
- data/lib/arel_extensions/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8fb8d8ac5e42220d4b332dc7cee83a9c433990a8
|
4
|
+
data.tar.gz: 415ccf89692668308acf7a126388fff77dd8b559
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ecb5d555985e025765b3287c5a5aaefe28f5bb6ebce3e04d719aef43b232f51f821308181a360857768f963bd323daf5407c8720fdf09f9157e2bc56cbd1f4c
|
7
|
+
data.tar.gz: 15db9820090448c55de632f7bc524aa86e3954efe8d904e03f2fcf3291d962d4f3705d52b896a7b0fe85459602b432a1db334e7d1ec7fe09fefac375106f424e
|
data/gemfiles/rails5.gemfile
CHANGED
@@ -18,7 +18,7 @@ group :development, :test do
|
|
18
18
|
gem 'activerecord-oracle_enhanced-adapter', '~> 1.8' if ENV.has_key? 'ORACLE_HOME'
|
19
19
|
|
20
20
|
# for JRuby
|
21
|
-
gem 'activerecord-jdbc-adapter', :platforms => :jruby
|
21
|
+
gem 'activerecord-jdbc-adapter', :github => 'jruby/activerecord-jdbc-adapter', :tag => 'v51.0', :platforms => :jruby
|
22
22
|
gem "jdbc-sqlite3", :platforms => :jruby
|
23
23
|
gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
|
24
24
|
gem "activerecord-jdbcmysql-adapter", :platforms => :jruby
|
data/gemfiles/rails5_0.gemfile
CHANGED
@@ -18,7 +18,7 @@ group :development, :test do
|
|
18
18
|
gem 'activerecord-oracle_enhanced-adapter', '~> 1.7' if ENV.has_key? 'ORACLE_HOME'
|
19
19
|
|
20
20
|
# for JRuby
|
21
|
-
gem 'activerecord-jdbc-adapter', :platforms => :jruby
|
21
|
+
gem 'activerecord-jdbc-adapter', :github => 'jruby/activerecord-jdbc-adapter', :tag => 'v50.0', :platforms => :jruby
|
22
22
|
gem "jdbc-sqlite3", :platforms => :jruby
|
23
23
|
gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
|
24
24
|
gem "activerecord-jdbcmysql-adapter", :platforms => :jruby
|
data/lib/arel_extensions.rb
CHANGED
@@ -39,6 +39,7 @@ require 'arel_extensions/boolean_functions'
|
|
39
39
|
require 'arel_extensions/math'
|
40
40
|
require 'arel_extensions/math_functions'
|
41
41
|
require 'arel_extensions/string_functions'
|
42
|
+
require 'arel_extensions/set_functions'
|
42
43
|
|
43
44
|
require 'arel_extensions/insert_manager'
|
44
45
|
|
@@ -98,17 +99,17 @@ Arel::InsertManager.class_eval do
|
|
98
99
|
end
|
99
100
|
|
100
101
|
Arel::SelectManager.class_eval do
|
101
|
-
include ArelExtensions::
|
102
|
+
include ArelExtensions::SetFunctions
|
102
103
|
include ArelExtensions::Nodes
|
103
104
|
end
|
104
105
|
|
105
106
|
Arel::Nodes::Union.class_eval do
|
106
|
-
include ArelExtensions::
|
107
|
+
include ArelExtensions::SetFunctions
|
107
108
|
include ArelExtensions::Nodes
|
108
109
|
end
|
109
110
|
|
110
111
|
Arel::Nodes::UnionAll.class_eval do
|
111
|
-
include ArelExtensions::
|
112
|
+
include ArelExtensions::SetFunctions
|
112
113
|
include ArelExtensions::Nodes
|
113
114
|
end
|
114
115
|
|
data/lib/arel_extensions/math.rb
CHANGED
@@ -13,59 +13,58 @@ module ArelExtensions
|
|
13
13
|
#String and others (convert in string) allows you to concatenate 2 or more strings together.
|
14
14
|
#Date and integer adds or subtracts a specified time interval from a date.
|
15
15
|
def +(other)
|
16
|
-
return ArelExtensions::Nodes::
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
if (!col) #if the column doesn't exist in the database
|
16
|
+
return ArelExtensions::Nodes::Concat.new [self, other] if self.is_a?(Arel::Nodes::Quoted)
|
17
|
+
if self.is_a?(Arel::Nodes::Grouping)
|
18
|
+
if self.expr.left.is_a?(String) || self.expr.right.is_a?(String)
|
19
|
+
return ArelExtensions::Nodes::Concat.new [self, other]
|
20
|
+
else
|
21
|
+
return Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
return case self.class.return_type
|
25
|
+
when :string, :text
|
26
|
+
ArelExtensions::Nodes::Concat.new [self, other]
|
27
|
+
when :integer, :decimal, :float, :number
|
28
|
+
Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
|
29
|
+
when :date, :datetime
|
30
|
+
ArelExtensions::Nodes::DateAdd.new [self, other]
|
31
|
+
else
|
32
|
+
ArelExtensions::Nodes::Concat.new [self, other]
|
33
|
+
end if self.is_a?(ArelExtensions::Nodes::Function)
|
34
|
+
col = Arel::Table.engine.connection.schema_cache.columns_hash(self.relation.table_name)[self.name.to_s]
|
35
|
+
if (!col) #if the column doesn't exist in the database
|
37
36
|
Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new(self, other))
|
38
37
|
else
|
39
38
|
arg = col.type
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
39
|
+
if arg == :integer || (!arg)
|
40
|
+
other = other.to_i if other.is_a?(String)
|
41
|
+
Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
|
42
|
+
elsif arg == :decimal || arg == :float
|
43
|
+
other = Arel.sql(other) if other.is_a?(String) # Arel should accept Float & BigDecimal!
|
44
|
+
Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
|
45
|
+
elsif arg == :datetime || arg == :date
|
46
|
+
ArelExtensions::Nodes::DateAdd.new [self, other]
|
47
|
+
elsif arg == :string || arg == :text
|
48
|
+
ArelExtensions::Nodes::Concat.new [self, other]
|
49
|
+
end
|
50
|
+
end
|
52
51
|
end
|
53
52
|
|
54
53
|
#function returns the time between two dates
|
55
54
|
#function returns the substraction between two ints
|
56
55
|
def -(other)
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
56
|
+
return case self.class.return_type
|
57
|
+
when :string, :text # ???
|
58
|
+
Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other)) # ??
|
59
|
+
when :integer, :decimal, :float, :number
|
60
|
+
Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other))
|
61
|
+
when :date, :datetime
|
62
|
+
ArelExtensions::Nodes::DateSub.new [self, other]
|
63
|
+
else
|
64
|
+
Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other))
|
65
|
+
end if self.is_a?(ArelExtensions::Nodes::Function)
|
66
|
+
col = Arel::Table.engine.connection.schema_cache.columns_hash(self.relation.table_name)[self.name.to_s]
|
67
|
+
if (!col) #if the column doesn't exist in the database
|
69
68
|
return Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other))
|
70
69
|
else
|
71
70
|
arg = col.type
|
@@ -77,11 +76,11 @@ module ArelExtensions
|
|
77
76
|
ArelExtensions::Nodes::DateSub.new [self, other]
|
78
77
|
else
|
79
78
|
arg2 = col2.type
|
80
|
-
|
81
|
-
|
82
|
-
|
79
|
+
if arg2 == :date || arg2 == :datetime
|
80
|
+
ArelExtensions::Nodes::DateDiff.new [self, other]
|
81
|
+
else
|
83
82
|
ArelExtensions::Nodes::DateSub.new [self, other]
|
84
|
-
|
83
|
+
end
|
85
84
|
end
|
86
85
|
when Arel::Nodes::Node, DateTime, Time, String, Date
|
87
86
|
ArelExtensions::Nodes::DateDiff.new [self, other]
|
@@ -100,22 +99,6 @@ module ArelExtensions
|
|
100
99
|
end
|
101
100
|
end
|
102
101
|
end
|
103
|
-
|
104
|
-
#def *(other)
|
105
|
-
#if self.is_a?(Arel::SelectManager) || self.is_a?(Arel::Nodes::UnionAll) || self.is_a?(Arel::Nodes::Union)
|
106
|
-
#return ArelExtensions::Nodes::UnionAll.new self, other
|
107
|
-
#else
|
108
|
-
#return super(other)
|
109
|
-
#end
|
110
|
-
#end
|
111
|
-
|
112
|
-
def union(other)
|
113
|
-
return ArelExtensions::Nodes::Union.new(self,other)
|
114
|
-
end
|
115
|
-
|
116
|
-
def union_all(other)
|
117
|
-
return ArelExtensions::Nodes::UnionAll.new(self,other)
|
118
|
-
end
|
119
102
|
|
120
103
|
end
|
121
104
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'arel_extensions/nodes/union'
|
2
|
+
require 'arel_extensions/nodes/union_all'
|
3
|
+
|
4
|
+
module ArelExtensions
|
5
|
+
module SetFunctions
|
6
|
+
|
7
|
+
def +(other)
|
8
|
+
ArelExtensions::Nodes::Union.new(self,other)
|
9
|
+
end
|
10
|
+
|
11
|
+
def union(other)
|
12
|
+
ArelExtensions::Nodes::Union.new(self,other)
|
13
|
+
end
|
14
|
+
|
15
|
+
def union_all(other)
|
16
|
+
ArelExtensions::Nodes::UnionAll.new(self,other)
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
Arel::Nodes::Union.class_eval do
|
24
|
+
include ArelExtensions::SetFunctions
|
25
|
+
end
|
26
|
+
|
27
|
+
Arel::Nodes::UnionAll.class_eval do
|
28
|
+
include ArelExtensions::SetFunctions
|
29
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arel_extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yann Azoury
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-12-
|
13
|
+
date: 2017-12-19 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: arel
|
@@ -147,6 +147,7 @@ files:
|
|
147
147
|
- lib/arel_extensions/nodes/wday.rb
|
148
148
|
- lib/arel_extensions/null_functions.rb
|
149
149
|
- lib/arel_extensions/railtie.rb
|
150
|
+
- lib/arel_extensions/set_functions.rb
|
150
151
|
- lib/arel_extensions/string_functions.rb
|
151
152
|
- lib/arel_extensions/tasks.rb
|
152
153
|
- lib/arel_extensions/version.rb
|