arel_extensions 0.9.1 → 0.9.2

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: 81a5a19e45f8b5b0a625cc277f2a99cbd5b4824d
4
- data.tar.gz: 91a0b61f9d7804eb5c8f54a679f90fb25d1c8aaf
3
+ metadata.gz: f9a9fe5819def3759928d0cea4cdcda31f3a4dbd
4
+ data.tar.gz: 2f0585e04bbb88128e291061160db906baa15028
5
5
  SHA512:
6
- metadata.gz: 68e49c3d6bf45935f491389bc15e9338b3ba981b42fac1db5619ef4b0a76cb74c239099207396814f2ffdf3c9af6cc0fb932779d163297ea2e099d5650912f68
7
- data.tar.gz: da9a008e7e3d3b9c55e3db8eec18444a20608a93c9cadfeb84166c86adeea1a5a7285b80d02bffea407b2301c497c5b3efe7664a3e7aa156cbc8096381222c75
6
+ metadata.gz: 556c4302bdb962dc5a6aaa1f6cfd625b42ae30c4df3a24c0283dbb62f1f380c0feff557fe941fefe84021f9be4ccb40b92adc1ceac2aaabc0d96a1f9ad472da6
7
+ data.tar.gz: cf19efa4600c4b88dc061a28cc9c39b25452e159e9d871a896b1d25d0c8c3b8e4d6fa7578f55a44ea496c47b615e4b231dfdc6be9acc5434553c41119a2d6f02
data/.travis.yml CHANGED
@@ -26,7 +26,7 @@ script:
26
26
  - bundle exec rake test:sqlite
27
27
  - bundle exec rake test:mysql
28
28
  - bundle exec rake test:postgresql
29
- - bundle exec rake test:oracle
29
+ - bundle exec rake test:oracle # service unavailable
30
30
  env:
31
31
  global:
32
32
  - JRUBY_OPTS='--dev -J-Xmx1024M'
data/init/postgresql.sql CHANGED
@@ -11,4 +11,57 @@ AS $function$
11
11
  UNION ALL
12
12
  SELECT 0) z
13
13
  LIMIT 1
14
- $function$
14
+ $function$
15
+ ;
16
+
17
+
18
+ CREATE OR REPLACE FUNCTION public.DateDiff(units VARCHAR(30), start_t TIMESTAMP, end_t TIMESTAMP)
19
+ RETURNS INT AS $$
20
+ DECLARE
21
+ diff_interval INTERVAL;
22
+ diff INT = 0;
23
+ years_diff INT = 0;
24
+ BEGIN
25
+ IF units IN ('yy', 'yyyy', 'year', 'mm', 'm', 'month') THEN
26
+ years_diff = DATE_PART('year', end_t) - DATE_PART('year', start_t);
27
+
28
+ IF units IN ('yy', 'yyyy', 'year') THEN
29
+ -- SQL Server does not count full years passed (only difference between year parts)
30
+ RETURN years_diff;
31
+ ELSE
32
+ -- If end month is less than start month it will subtracted
33
+ RETURN years_diff * 12 + (DATE_PART('month', end_t) - DATE_PART('month', start_t));
34
+ END IF;
35
+ END IF;
36
+
37
+ -- Minus operator returns interval 'DDD days HH:MI:SS'
38
+ diff_interval = end_t - start_t;
39
+
40
+ diff = diff + DATE_PART('day', diff_interval);
41
+
42
+ IF units IN ('wk', 'ww', 'week') THEN
43
+ diff = diff/7;
44
+ RETURN diff;
45
+ END IF;
46
+
47
+ IF units IN ('dd', 'd', 'day') THEN
48
+ RETURN diff;
49
+ END IF;
50
+
51
+ diff = diff * 24 + DATE_PART('hour', diff_interval);
52
+
53
+ IF units IN ('hh', 'hour') THEN
54
+ RETURN diff;
55
+ END IF;
56
+
57
+ diff = diff * 60 + DATE_PART('minute', diff_interval);
58
+
59
+ IF units IN ('mi', 'n', 'minute') THEN
60
+ RETURN diff;
61
+ END IF;
62
+
63
+ diff = diff * 60 + DATE_PART('second', diff_interval);
64
+
65
+ RETURN diff;
66
+ END;
67
+ $$ LANGUAGE plpgsql;
@@ -27,6 +27,18 @@ module ArelExtensions
27
27
  ArelExtensions::Nodes::Duration.new 'wd', self
28
28
  end
29
29
 
30
+ def hour
31
+ ArelExtensions::Nodes::Duration.new "h", self
32
+ end
33
+
34
+ def minute
35
+ ArelExtensions::Nodes::Duration.new "mn", self
36
+ end
37
+
38
+ def second
39
+ ArelExtensions::Nodes::Duration.new "s", self
40
+ end
41
+
30
42
  def format(tpl)
31
43
  ArelExtensions::Nodes::Format.new [self, tpl]
32
44
  end
@@ -9,24 +9,27 @@ module ArelExtensions
9
9
  @@return_type = :integer # by default...
10
10
 
11
11
  def initialize(expr)
12
+ res = []
12
13
  col = expr.first
13
14
  case col
14
- when Arel::Nodes::Node
15
+ when Arel::Nodes::Node, Arel::Attributes::Attribute
15
16
  @left_node_type = type_of_attribute(col)
16
17
  when Date
17
18
  @left_node_type = :ruby_date
18
19
  when DateTime, Time
19
20
  @left_node_type = :ruby_time
20
21
  end
22
+ res << ([:date, :ruby_date].include?(@left_node_type) ? convert_to_date_node(col) : convert_to_datetime_node(col))
21
23
  case expr[1]
22
- when Arel::Nodes::Node
23
- @right_node_type = type_of_attribute(col)
24
+ when Arel::Nodes::Node, Arel::Attributes::Attribute
25
+ @right_node_type = type_of_attribute(expr[1])
24
26
  when Date
25
27
  @right_node_type = :ruby_date
26
28
  when DateTime, Time
27
29
  @right_node_type = :ruby_time
28
30
  end
29
- super [convert_to_date_node(col), convert_to_date_node(expr[1])]
31
+ res << ([:date, :ruby_date].include?(@left_node_type) ? convert_to_date_node(expr[1]) : convert_to_datetime_node(expr[1]))
32
+ super res
30
33
  end
31
34
  end
32
35
 
@@ -91,6 +91,21 @@ module ArelExtensions
91
91
  end
92
92
  end
93
93
 
94
+ def convert_to_datetime_node(object)
95
+ case object
96
+ when Arel::Attributes::Attribute, Arel::Nodes::Node
97
+ object
98
+ when DateTime, Time
99
+ Arel::Nodes.build_quoted(object, self)
100
+ when String
101
+ Arel::Nodes.build_quoted(Time.parse(object), self)
102
+ when Date
103
+ Arel::Nodes.build_quoted(Time.utc(object.year, object.month, object.day, 0, 0, 0), self)
104
+ else
105
+ raise(ArgumentError, "#{object.class} can not be converted to Datetime")
106
+ end
107
+ end
108
+
94
109
  def convert_to_number(object)
95
110
  case object
96
111
  when Arel::Attributes::Attribute, Arel::Nodes::Node
@@ -1,4 +1,4 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module ArelExtensions
3
- VERSION = "0.9.1".freeze
3
+ VERSION = "0.9.2".freeze
4
4
  end
@@ -1,7 +1,7 @@
1
1
  module ArelExtensions
2
2
  module Visitors
3
3
  module MSSQL
4
- Arel::Visitors::MSSQL::DATE_MAPPING = {'d' => 'day', 'm' => 'month', 'y' => 'year', 'wd' => 'weekday', 'w' => 'week'}
4
+ Arel::Visitors::MSSQL::DATE_MAPPING = {'d' => 'day', 'm' => 'month', 'y' => 'year', 'wd' => 'weekday', 'w' => 'week', 'h' => 'hour', 'mn' => 'minute', 's' => 'second'}
5
5
  Arel::Visitors::MSSQL::DATE_FORMAT_DIRECTIVES = {
6
6
  '%Y' => 'YYYY', '%C' => '', '%y' => 'YY', '%m' => 'MM', '%B' => '', '%b' => '', '%^b' => '', # year, month
7
7
  '%d' => 'DD', '%e' => '', '%j' => '', '%w' => 'dw', '%A' => '', # day, weekday
@@ -71,11 +71,15 @@ module ArelExtensions
71
71
  end
72
72
 
73
73
  def visit_ArelExtensions_Nodes_DateDiff o, collector
74
- collector << "DATEDIFF(day"
75
- collector << Arel::Visitors::MSSQL::COMMA
76
- collector = visit o.left, collector
74
+ if o.left_node_type == :ruby_time || o.left_node_type == :datetime || o.left_node_type == :time
75
+ collector << "DATEDIFF(second"
76
+ else
77
+ collector << "DATEDIFF(day"
78
+ end
77
79
  collector << Arel::Visitors::MSSQL::COMMA
78
80
  collector = visit o.right, collector
81
+ collector << Arel::Visitors::MSSQL::COMMA
82
+ collector = visit o.left, collector
79
83
  collector << ")"
80
84
  collector
81
85
  end
@@ -92,10 +96,13 @@ module ArelExtensions
92
96
  end
93
97
 
94
98
  def visit_ArelExtensions_Nodes_Duration o, collector
99
+ conv = ['h', 'mn', 's'].include?(o.left)
95
100
  collector << 'DATEPART('
96
101
  collector << Arel::Visitors::MSSQL::DATE_MAPPING[o.left]
97
102
  collector << Arel::Visitors::MSSQL::COMMA
103
+ collector << 'CONVERT(datetime,' if conv
98
104
  collector = visit o.right, collector
105
+ collector << ')' if conv
99
106
  collector << ")"
100
107
  collector
101
108
  end
@@ -1,7 +1,7 @@
1
1
  module ArelExtensions
2
2
  module Visitors
3
3
  Arel::Visitors::MySQL.class_eval do
4
- Arel::Visitors::MySQL::DATE_MAPPING = {'d' => 'DAY', 'm' => 'MONTH', 'w' => 'WEEK', 'y' => 'YEAR', 'wd' => 'WEEKDAY'}
4
+ Arel::Visitors::MySQL::DATE_MAPPING = {'d' => 'DAY', 'm' => 'MONTH', 'w' => 'WEEK', 'y' => 'YEAR', 'wd' => 'WEEKDAY', 'h' => 'HOUR', 'mn' => 'MINUTE', 's' => 'SECOND'}
5
5
  Arel::Visitors::MySQL::DATE_FORMAT_DIRECTIVES = { # ISO C / POSIX
6
6
  '%Y' => '%Y', '%C' => '', '%y' => '%y', '%m' => '%m', '%B' => '%M', '%b' => '%b', '%^b' => '%b', # year, month
7
7
  '%d' => '%d', '%e' => '%e', '%j' => '%j', '%w' => '%w', '%A' => '%W', # day, weekday
@@ -105,10 +105,14 @@ module ArelExtensions
105
105
  end
106
106
 
107
107
  def visit_ArelExtensions_Nodes_DateDiff o, collector
108
- collector << "DATEDIFF("
109
- collector = visit o.left, collector
110
- collector << Arel::Visitors::MySQL::COMMA
108
+ if o.left_node_type == :ruby_time || o.left_node_type == :datetime || o.left_node_type == :time
109
+ collector << 'TIMESTAMPDIFF(SECOND, '
110
+ else
111
+ collector << "DATEDIFF("
112
+ end
111
113
  collector = visit o.right, collector
114
+ collector << Arel::Visitors::MySQL::COMMA
115
+ collector = visit o.left, collector
112
116
  collector << ")"
113
117
  collector
114
118
  end
@@ -1,7 +1,7 @@
1
1
  module ArelExtensions
2
2
  module Visitors
3
3
  Arel::Visitors::Oracle.class_eval do
4
- Arel::Visitors::Oracle::DATE_MAPPING = {'d' => 'DAY', 'm' => 'MONTH', 'w' => 'IW', 'y' => 'YEAR', 'wd' => 'D'}
4
+ Arel::Visitors::Oracle::DATE_MAPPING = {'d' => 'DAY', 'm' => 'MONTH', 'w' => 'IW', 'y' => 'YEAR', 'wd' => 'D', 'h' => 'HOUR', 'mn' => 'MINUTE', 's' => 'SECOND'}
5
5
  Arel::Visitors::Oracle::DATE_FORMAT_DIRECTIVES = {
6
6
  '%Y' => 'IYYY', '%C' => 'CC', '%y' => 'YY', '%m' => 'MM', '%B' => 'Month', '%^B' => 'MONTH', '%b' => 'Mon', '%^b' => 'MON',
7
7
  '%d' => 'DD', '%e' => 'FMDD', '%j' => 'DDD', '%w' => '', '%A' => 'Day', # day, weekday
@@ -66,16 +66,31 @@ module ArelExtensions
66
66
  collector
67
67
  end
68
68
 
69
+ # :date is not possible in Oracle since this type does not really exist
69
70
  def visit_ArelExtensions_Nodes_DateDiff o, collector
71
+ lc = o.left_node_type == :ruby_date || o.left_node_type == :ruby_time
72
+ rc = o.right_node_type == :ruby_date || o.right_node_type == :ruby_time
70
73
  collector << '('
71
- collector << 'TO_DATE(' unless o.left_node_type == :date || o.left_node_type == :datetime
74
+ collector << 'TO_DATE(' if lc
72
75
  collector = visit o.left, collector
73
- collector << ')' unless o.left_node_type == :date || o.left_node_type == :datetime
76
+ collector << ')' if lc
74
77
  collector << " - "
75
- collector << 'TO_DATE(' unless o.right_node_type == :date || o.right_node_type == :datetime
78
+ collector << 'TO_DATE(' if rc
76
79
  collector = visit o.right, collector
77
- collector << ')' unless o.right_node_type == :date || o.right_node_type == :datetime
80
+ collector << ')' if rc
78
81
  collector << ')'
82
+ if o.left_node_type == :ruby_time || o.left_node_type == :datetime || o.left_node_type == :time
83
+ collector << ' * CASE WHEN (TRUNC('
84
+ collector << 'TO_DATE(' if lc
85
+ collector = visit o.left, collector
86
+ collector << ')' if lc
87
+ collector << Arel::Visitors::Oracle::COMMA
88
+ collector << "'DDD') = "
89
+ collector << 'TO_DATE(' if lc
90
+ collector = visit o.left, collector
91
+ collector << ')' if lc
92
+ collector << ') THEN 1 ELSE 86400 END' # converts to seconds
93
+ end
79
94
  collector
80
95
  end
81
96
 
@@ -1,7 +1,7 @@
1
1
  module ArelExtensions
2
2
  module Visitors
3
3
  Arel::Visitors::PostgreSQL.class_eval do
4
- Arel::Visitors::PostgreSQL::DATE_MAPPING = {'d' => 'DAY', 'm' => 'MONTH', 'w' => 'WEEK', 'y' => 'YEAR', 'wd' => 'DOW'}
4
+ Arel::Visitors::PostgreSQL::DATE_MAPPING = {'d' => 'DAY', 'm' => 'MONTH', 'w' => 'WEEK', 'y' => 'YEAR', 'wd' => 'DOW', 'h' => 'HOUR', 'mn' => 'MINUTE', 's' => 'SECOND'}
5
5
  Arel::Visitors::PostgreSQL::DATE_FORMAT_DIRECTIVES = {
6
6
  '%Y' => 'IYYY', '%C' => 'CC', '%y' => 'YY', '%m' => 'MM', '%B' => 'Month', '%^B' => 'MONTH', '%b' => 'Mon', '%^b' => 'MON',
7
7
  '%d' => 'DD', '%e' => 'FMDD', '%j' => 'DDD', '%w' => '', '%A' => 'Day', # day, weekday
@@ -99,13 +99,16 @@ module ArelExtensions
99
99
  end
100
100
 
101
101
  def visit_ArelExtensions_Nodes_DateDiff o, collector
102
- collector << "DATE_PART('day'"
102
+ if o.left_node_type == :ruby_time || o.left_node_type == :datetime || o.left_node_type == :time
103
+ collector << "DATEDIFF('second', "
104
+ else
105
+ collector << "DATEDIFF('day', "
106
+ end
107
+ collector = visit o.right, collector
108
+ collector << (o.right_node_type == :date ? '::date' : '::timestamp')
103
109
  collector << Arel::Visitors::PostgreSQL::COMMA
104
110
  collector = visit o.left, collector
105
111
  collector << (o.left_node_type == :date ? '::date' : '::timestamp')
106
- collector << " - "
107
- collector = visit o.right, collector
108
- collector << (o.right_node_type == :date ? '::date' : '::timestamp')
109
112
  collector << ")"
110
113
  collector
111
114
  end
@@ -1,7 +1,7 @@
1
1
  module ArelExtensions
2
2
  module Visitors
3
3
  Arel::Visitors::SQLite.class_eval do
4
- Arel::Visitors::SQLite::DATE_MAPPING = {'d' => '%d', 'm' => '%m', 'w' => '%W', 'y' => '%Y', 'wd' => '%w', 'M' => '%M'}
4
+ Arel::Visitors::SQLite::DATE_MAPPING = {'d' => '%d', 'm' => '%m', 'w' => '%W', 'y' => '%Y', 'wd' => '%w', 'M' => '%M', 'h' => '%H', 'mn' => '%M', 's' => '%S'}
5
5
  Arel::Visitors::SQLite::DATE_FORMAT_DIRECTIVES = { # ISO C / POSIX
6
6
  '%Y' => '%Y', '%C' => '', '%y' => '%y', '%m' => '%m', '%B' => '%M', '%b' => '%b', '%^b' => '%b', # year, month
7
7
  '%d' => '%d', '%e' => '%e', '%j' => '%j', '%w' => '%w', '%A' => '%W', # day, weekday
@@ -45,10 +45,17 @@ module ArelExtensions
45
45
  end
46
46
 
47
47
  def visit_ArelExtensions_Nodes_DateDiff o, collector
48
- collector << " julianday("
49
- collector = visit o.left, collector
50
- collector << ")- julianday("
51
- collector = visit o.right, collector
48
+ if o.left_node_type == :ruby_time || o.left_node_type == :datetime || o.left_node_type == :time
49
+ collector << "strftime('%s', "
50
+ collector = visit o.left, collector
51
+ collector << ") - strftime('%s', "
52
+ collector = visit o.right, collector
53
+ else
54
+ collector << "julianday("
55
+ collector = visit o.left, collector
56
+ collector << ") - julianday("
57
+ collector = visit o.right, collector
58
+ end
52
59
  collector << ")"
53
60
  collector
54
61
  end
@@ -194,7 +194,11 @@ module ArelExtensions
194
194
  end
195
195
 
196
196
  def visit_ArelExtensions_Nodes_DateDiff o, collector
197
- collector << "DATEDIFF("
197
+ if o.left_node_type == :ruby_time || o.left_node_type == :datetime || o.left_node_type == :time
198
+ collector << 'TIMEDIFF('
199
+ else
200
+ collector << "DATEDIFF("
201
+ end
198
202
  collector = visit o.left, collector
199
203
  collector << Arel::Visitors::ToSql::COMMA
200
204
  collector = visit o.right, collector
@@ -60,16 +60,17 @@ module ArelExtensions
60
60
  # Maths
61
61
  # DateDiff
62
62
  it "should diff date col and date" do
63
- compile(@table[:created_at] - Date.new(2016, 3, 31)).must_match %{TO_DATE("users"."created_at") - TO_DATE('2016-03-31')}
63
+ compile(@table[:created_at] - Date.new(2016, 3, 31)).must_match %{"users"."created_at" - TO_DATE('2016-03-31')}
64
64
  end
65
65
 
66
66
  it "should diff date col and datetime col" do
67
- compile(@table[:created_at] - @table[:updated_at]).must_match %{TO_DATE("users"."created_at") - TO_DATE("users"."updated_at")}
67
+ compile(@table[:created_at] - @table[:updated_at]).must_match %{"users"."created_at" - "users"."updated_at"}
68
68
  end
69
69
 
70
70
  it "should diff date col and datetime col with AS" do
71
71
  sql = compile((@table[:updated_at] - @table[:created_at]).as('new_name'))
72
- sql.must_be_like %{(TO_DATE("users"."updated_at") - TO_DATE("users"."created_at")) AS new_name}
72
+ # sql.must_be_like %{(TO_DATE("users"."updated_at") - "users"."created_at") * 86400 AS new_name}
73
+ sql.must_be_like %{("users"."updated_at" - "users"."created_at") * CASE WHEN (TRUNC("users"."updated_at", 'DDD') = "users"."updated_at") THEN 1 ELSE 86400 END AS new_name}
73
74
  end
74
75
 
75
76
  it "should diff between time values" do
@@ -82,7 +83,7 @@ module ArelExtensions
82
83
  it "should diff between time values and time col" do
83
84
  d1 = DateTime.new(2015,6,2)
84
85
  sql = compile(ArelExtensions::Nodes::DateDiff.new([d1, @table[:updated_at]]))
85
- sql.must_match %{TO_DATE('2015-06-02') - TO_DATE("users"."updated_at")}
86
+ sql.must_match %{TO_DATE('2015-06-02') - "users"."updated_at"}
86
87
  end
87
88
 
88
89
  it "should accept operators on dates with numbers" do
@@ -111,7 +111,7 @@ module ArelExtensions
111
111
 
112
112
  it "should diff date col and datetime col with AS" do
113
113
  sql = compile((@table[:updated_at] - @table[:created_at]).as('new_name'))
114
- sql.must_match %{DATEDIFF("users"."updated_at", "users"."created_at") AS new_name}
114
+ sql.must_match %{TIMEDIFF("users"."updated_at", "users"."created_at") AS new_name}
115
115
  end
116
116
 
117
117
  it "should diff between time values" do
@@ -150,7 +150,7 @@ module ArelExtensions
150
150
  c = @table[:name]
151
151
  compile(
152
152
  (c.length / 42).round(2).floor > (@table[:updated_at] - Date.new(2000, 3, 31)).abs.ceil
153
- ).must_be_like %{FLOOR(ROUND(LENGTH("users"."name") / 42, 2)) > CEIL(ABS(DATEDIFF("users"."updated_at", '2000-03-31')))}
153
+ ).must_be_like %{FLOOR(ROUND(LENGTH("users"."name") / 42, 2)) > CEIL(ABS(TIMEDIFF("users"."updated_at", '2000-03-31 00:00:00 UTC')))}
154
154
  end
155
155
 
156
156
  end
@@ -73,7 +73,7 @@ module ArelExtensions
73
73
  def setup
74
74
  d = Date.new(2016, 5, 23)
75
75
  setup_db
76
- u = User.create :age => 5, :name => "Lucas", :created_at => d, :score => 20.16, :updated_at => Time.utc(2014, 3, 3, 12, 42)
76
+ u = User.create :age => 5, :name => "Lucas", :created_at => d, :score => 20.16, :updated_at => Time.utc(2014, 3, 3, 12, 42, 0)
77
77
  @lucas = User.where(:id => u.id)
78
78
  u = User.create :age => 15, :name => "Sophie", :created_at => d, :score => 20.16
79
79
  @sophie = User.where(:id => u.id)
@@ -273,8 +273,6 @@ module ArelExtensions
273
273
  end
274
274
  end
275
275
 
276
-
277
-
278
276
  # Comparators
279
277
  def test_number_comparator
280
278
  assert_equal 2, User.where(@age < 6).count
@@ -298,13 +296,31 @@ module ArelExtensions
298
296
  assert_equal 5, t(@camille, @created_at.month).to_i
299
297
  assert_equal 8, User.where(@created_at.month.eq("05")).count
300
298
  #Week
301
- assert_equal (@env_db == 'mssql' ? 22 : 21), t(@arthur, @created_at.week).to_i
299
+ assert_equal(@env_db == 'mssql' ? 22 : 21, t(@arthur, @created_at.week).to_i)
302
300
  assert_equal 8, User.where(@created_at.month.eq("05")).count
303
301
  #Day
304
302
  assert_equal 23, t(@laure, @created_at.day).to_i
305
303
  assert_equal 0, User.where(@created_at.day.eq("05")).count
304
+
305
+ skip "manage DATE" if @env_db == 'oracle'
306
+ #Hour
307
+ assert_equal 0, t(@laure, @created_at.hour).to_i
308
+ assert_equal 12, t(@lucas, @updated_at.hour).to_i
309
+ #Minute
310
+ assert_equal 0, t(@laure, @created_at.minute).to_i
311
+ assert_equal 42, t(@lucas, @updated_at.minute).to_i
312
+ #Second
313
+ assert_equal 0, t(@laure, @created_at.second).to_i
314
+ assert_equal 0, t(@lucas, @updated_at.second).to_i
306
315
  end
307
316
 
317
+ def test_datetime_diff
318
+ assert_equal 0, t(@lucas, @updated_at - Time.utc(2014, 3, 3, 12, 42)).to_i
319
+ assert_equal 42, t(@lucas, @updated_at - Time.utc(2014, 3, 3, 12, 41, 18)).to_i
320
+ assert_equal(-3600, t(@lucas, @updated_at - Time.utc(2014, 3, 3, 13, 42)).to_i)
321
+ end
322
+
323
+
308
324
  def test_cast_types
309
325
  skip "not implemented yet"
310
326
  assert_equal true, t(@arthur, @score =~ /22/)
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: 0.9.1
4
+ version: 0.9.2
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: 2016-11-08 00:00:00.000000000 Z
13
+ date: 2016-11-10 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: arel