arel_extensions 0.9.1 → 0.9.2

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: 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