Skip to content

Commit e69d32a

Browse files
committed
Display Time-likes with more precision
Specifically, include subseconds in the inspected version of the time-like to match the absolute maximum precision you can use when defining a Time. This means that the following two Times will no longer appear as though they are the same time when diffed: Time.at(1620017167711.0 / 1000) Time.local(2021, 5, 2, 22, 46, 7, 710_999)
1 parent 5f3bf06 commit e69d32a

22 files changed

+214
-43
lines changed

Gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
66

77
gem "appraisal"
88
gem "childprocess"
9+
gem "climate_control"
910
gem "pry-byebug", platform: :mri
1011
gem "pry-nav", platform: :jruby
1112
gem "rake"

gemfiles/no_rails_rspec_gte_3_10.gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ source "https://rubygems.org"
44

55
gem "appraisal"
66
gem "childprocess"
7+
gem "climate_control"
78
gem "pry-byebug", platform: :mri
89
gem "pry-nav", platform: :jruby
910
gem "rake"

gemfiles/no_rails_rspec_gte_3_10.gemfile.lock

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ GEM
1717
attr_extras (6.2.4)
1818
byebug (11.1.3)
1919
childprocess (4.0.0)
20+
climate_control (1.0.0)
2021
coderay (1.1.3)
2122
diff-lcs (1.4.4)
2223
method_source (1.0.0)
@@ -71,6 +72,7 @@ PLATFORMS
7172
DEPENDENCIES
7273
appraisal
7374
childprocess
75+
climate_control
7476
pry-byebug
7577
pry-nav
7678
rake
@@ -80,4 +82,4 @@ DEPENDENCIES
8082
warnings_logger
8183

8284
BUNDLED WITH
83-
2.1.4
85+
2.2.16

gemfiles/no_rails_rspec_lt_3_10.gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ source "https://rubygems.org"
44

55
gem "appraisal"
66
gem "childprocess"
7+
gem "climate_control"
78
gem "pry-byebug", platform: :mri
89
gem "pry-nav", platform: :jruby
910
gem "rake"

gemfiles/no_rails_rspec_lt_3_10.gemfile.lock

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ GEM
1717
attr_extras (6.2.4)
1818
byebug (11.1.3)
1919
childprocess (4.0.0)
20+
climate_control (1.0.0)
2021
coderay (1.1.3)
2122
diff-lcs (1.4.4)
2223
method_source (1.0.0)
@@ -71,6 +72,7 @@ PLATFORMS
7172
DEPENDENCIES
7273
appraisal
7374
childprocess
75+
climate_control
7476
pry-byebug
7577
pry-nav
7678
rake
@@ -80,4 +82,4 @@ DEPENDENCIES
8082
warnings_logger
8183

8284
BUNDLED WITH
83-
2.1.4
85+
2.2.16

gemfiles/rails_5_0_rspec_gte_3_10.gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ source "https://rubygems.org"
44

55
gem "appraisal"
66
gem "childprocess"
7+
gem "climate_control"
78
gem "pry-byebug", platform: :mri
89
gem "pry-nav", platform: :jruby
910
gem "rake"

gemfiles/rails_5_0_rspec_lt_3_10.gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ source "https://rubygems.org"
44

55
gem "appraisal"
66
gem "childprocess"
7+
gem "climate_control"
78
gem "pry-byebug", platform: :mri
89
gem "pry-nav", platform: :jruby
910
gem "rake"

gemfiles/rails_5_1_rspec_gte_3_10.gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ source "https://rubygems.org"
44

55
gem "appraisal"
66
gem "childprocess"
7+
gem "climate_control"
78
gem "pry-byebug", platform: :mri
89
gem "pry-nav", platform: :jruby
910
gem "rake"

gemfiles/rails_5_1_rspec_lt_3_10.gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ source "https://rubygems.org"
44

55
gem "appraisal"
66
gem "childprocess"
7+
gem "climate_control"
78
gem "pry-byebug", platform: :mri
89
gem "pry-nav", platform: :jruby
910
gem "rake"

gemfiles/rails_5_2_rspec_gte_3_10.gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ source "https://rubygems.org"
44

55
gem "appraisal"
66
gem "childprocess"
7+
gem "climate_control"
78
gem "pry-byebug", platform: :mri
89
gem "pry-nav", platform: :jruby
910
gem "rake"

gemfiles/rails_5_2_rspec_lt_3_10.gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ source "https://rubygems.org"
44

55
gem "appraisal"
66
gem "childprocess"
7+
gem "climate_control"
78
gem "pry-byebug", platform: :mri
89
gem "pry-nav", platform: :jruby
910
gem "rake"

gemfiles/rails_6_0_rspec_gte_3_10.gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ source "https://rubygems.org"
44

55
gem "appraisal"
66
gem "childprocess"
7+
gem "climate_control"
78
gem "pry-byebug", platform: :mri
89
gem "pry-nav", platform: :jruby
910
gem "rake"

gemfiles/rails_6_0_rspec_gte_3_10.gemfile.lock

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ GEM
4242
builder (3.2.4)
4343
byebug (11.1.3)
4444
childprocess (4.0.0)
45+
climate_control (1.0.0)
4546
coderay (1.1.3)
4647
concurrent-ruby (1.1.7)
4748
crass (1.0.6)
@@ -139,6 +140,7 @@ DEPENDENCIES
139140
activerecord-jdbcsqlite3-adapter
140141
appraisal
141142
childprocess
143+
climate_control
142144
jdbc-sqlite3
143145
pry-byebug
144146
pry-nav

gemfiles/rails_6_0_rspec_lt_3_10.gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ source "https://rubygems.org"
44

55
gem "appraisal"
66
gem "childprocess"
7+
gem "climate_control"
78
gem "pry-byebug", platform: :mri
89
gem "pry-nav", platform: :jruby
910
gem "rake"

gemfiles/rails_6_0_rspec_lt_3_10.gemfile.lock

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ GEM
4242
builder (3.2.4)
4343
byebug (11.1.3)
4444
childprocess (4.0.0)
45+
climate_control (1.0.0)
4546
coderay (1.1.3)
4647
concurrent-ruby (1.1.7)
4748
crass (1.0.6)
@@ -139,6 +140,7 @@ DEPENDENCIES
139140
activerecord-jdbcsqlite3-adapter
140141
appraisal
141142
childprocess
143+
climate_control
142144
jdbc-sqlite3
143145
pry-byebug
144146
pry-nav
@@ -152,4 +154,4 @@ DEPENDENCIES
152154
warnings_logger
153155

154156
BUNDLED WITH
155-
2.1.4
157+
2.2.16

lib/super_diff/object_inspection/inspectors/time_like.rb

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,55 @@ def self.applies_to?(value)
66
SuperDiff.time_like?(value)
77
end
88

9-
TIME_FORMAT = "%Y-%m-%d %H:%M:%S.%3N %Z %:z".freeze
10-
119
protected
1210

1311
def inspection_tree
1412
InspectionTree.new do
1513
add_text do |time|
16-
"#{time.strftime(TIME_FORMAT)} (#{time.class})"
14+
"#<#{time.class} "
15+
end
16+
17+
when_singleline do
18+
add_text do |time|
19+
time.strftime("%Y-%m-%d %H:%M:%S") +
20+
(time.subsec == 0 ? "" : "+#{time.subsec.inspect}") +
21+
" " + time.strftime("%:z") +
22+
(time.zone ? " (#{time.zone})" : "")
23+
end
24+
end
25+
26+
when_multiline do
27+
add_text "{"
28+
29+
nested do |time|
30+
add_break " "
31+
32+
insert_separated_list(
33+
[
34+
:year,
35+
:month,
36+
:day,
37+
:hour,
38+
:min,
39+
:sec,
40+
:subsec,
41+
:zone,
42+
:utc_offset
43+
],
44+
separator: ","
45+
) do |name|
46+
add_text name.to_s
47+
add_text ": "
48+
add_inspection_of time.public_send(name)
49+
end
50+
end
51+
52+
add_break
53+
54+
add_text "}"
1755
end
56+
57+
add_text ">"
1858
end
1959
end
2060
end
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
module SuperDiff
22
module OperationTreeBuilders
3-
DEFAULTS = [Array, Hash, CustomObject].freeze
3+
DEFAULTS = [Array, Hash, TimeLike, CustomObject].freeze
44
end
55
end

lib/super_diff/operation_tree_builders/time_like.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ def attribute_names
1515
"hour",
1616
"min",
1717
"sec",
18-
"nsec",
18+
"subsec",
1919
"zone",
20-
"gmt_offset",
20+
"utc_offset",
2121
]
2222

2323
# If timezones are different, also show a normalized timestamp at the

spec/integration/rspec/eq_matcher_spec.rb

Lines changed: 39 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -188,10 +188,12 @@
188188
expectation: proc {
189189
line do
190190
plain %|Expected |
191-
actual %|2011-12-13 14:15:16.000 UTC +00:00 (Time)|
192-
plain %| to eq |
193-
expected %|2011-12-13 14:15:16.500 UTC +00:00 (Time)|
194-
plain %|.|
191+
actual %|#<Time 2011-12-13 14:15:16 +00:00 (UTC)>|
192+
end
193+
194+
line do
195+
plain %| to eq |
196+
expected %|#<Time 2011-12-13 14:15:16+(1/2) +00:00 (UTC)>|
195197
end
196198
},
197199
diff: proc {
@@ -202,10 +204,10 @@
202204
plain_line " hour: 14,"
203205
plain_line " min: 15,"
204206
plain_line " sec: 16,"
205-
expected_line "- nsec: 500000000,"
206-
actual_line "+ nsec: 0,"
207+
expected_line "- subsec: (1/2),"
208+
actual_line "+ subsec: 0,"
207209
plain_line " zone: \"UTC\","
208-
plain_line " gmt_offset: 0"
210+
plain_line " utc_offset: 0"
209211
plain_line " }>"
210212
},
211213
)
@@ -234,12 +236,12 @@
234236
expectation: proc {
235237
line do
236238
plain %| Expected |
237-
actual %|2011-12-13 14:15:16.000 UTC +00:00 (Time)|
239+
actual %|#<Time 2011-12-13 14:15:16 +00:00 (UTC)>|
238240
end
239241

240242
line do
241243
plain %|not to eq |
242-
expected %|2011-12-13 14:15:16.000 UTC +00:00 (Time)|
244+
expected %|#<Time 2011-12-13 14:15:16 +00:00 (UTC)>|
243245
end
244246
},
245247
)
@@ -270,31 +272,41 @@
270272
expectation: proc {
271273
line do
272274
plain %|Expected |
273-
actual %|2011-12-13 14:15:16.000 UTC +00:00 (Time)|
275+
actual %|#<Time 2011-12-13 14:15:16 +00:00 (UTC)>|
274276
end
275277

276278
line do
277279
plain %| to eq |
278-
expected %|2011-12-13 16:15:16.000 CET +01:00 (ActiveSupport::TimeWithZone)|
280+
expected %|#<ActiveSupport::TimeWithZone 2011-12-13 16:15:16 +01:00 (CET)>|
279281
end
280282
},
281283
diff: proc {
282-
plain_line " #<ActiveSupport::TimeWithZone {"
283-
plain_line " year: 2011,"
284-
plain_line " month: 12,"
285-
plain_line " day: 13,"
286-
expected_line "- hour: 16,"
287-
actual_line "+ hour: 14,"
288-
plain_line " min: 15,"
289-
plain_line " sec: 16,"
290-
plain_line " nsec: 0,"
291-
expected_line "- zone: \"CET\","
292-
actual_line "+ zone: \"UTC\","
293-
expected_line "- gmt_offset: 3600,"
294-
actual_line "+ gmt_offset: 0,"
295-
expected_line "- utc: 2011-12-13 15:15:16.000 UTC +00:00 (Time)"
296-
actual_line "+ utc: 2011-12-13 14:15:16.000 UTC +00:00 (Time)"
297-
plain_line " }>"
284+
plain_line %| #<ActiveSupport::TimeWithZone {|
285+
plain_line %| year: 2011,|
286+
plain_line %| month: 12,|
287+
plain_line %| day: 13,|
288+
expected_line %|- hour: 16,|
289+
actual_line %|+ hour: 14,|
290+
plain_line %| min: 15,|
291+
plain_line %| sec: 16,|
292+
plain_line %| subsec: 0,|
293+
expected_line %|- zone: \"CET\",|
294+
actual_line %|+ zone: \"UTC\",|
295+
expected_line %|- utc_offset: 3600,|
296+
actual_line %|+ utc_offset: 0,|
297+
plain_line %| utc: #<Time {|
298+
plain_line %| year: 2011,|
299+
plain_line %| month: 12,|
300+
plain_line %| day: 13,|
301+
expected_line %|- hour: 15,|
302+
actual_line %|+ hour: 14,|
303+
plain_line %| min: 15,|
304+
plain_line %| sec: 16,|
305+
plain_line %| subsec: 0,|
306+
plain_line %| zone: "UTC",|
307+
plain_line %| utc_offset: 0|
308+
plain_line %| }>|
309+
plain_line %| }>|
298310
},
299311
)
300312

spec/integration/rspec/have_attributes_matcher_spec.rb

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,17 @@
411411
expected_line %|- data: #<a hash including (|
412412
expected_line %|- active: true|
413413
expected_line %|- )>,|
414-
expected_line %|- created_at: #<a value within 1 of 2020-04-09 00:00:00.000 UTC +00:00 (Time)>|
414+
expected_line %|- created_at: #<a value within 1 of #<Time {|
415+
expected_line %|- year: 2020,|
416+
expected_line %|- month: 4,|
417+
expected_line %|- day: 9,|
418+
expected_line %|- hour: 0,|
419+
expected_line %|- min: 0,|
420+
expected_line %|- sec: 0,|
421+
expected_line %|- subsec: 0,|
422+
expected_line %|- zone: "UTC",|
423+
expected_line %|- utc_offset: 0|
424+
expected_line %|- }>>|
415425
plain_line %| }|
416426
},
417427
)

spec/spec_helper.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
require "pp"
2+
13
begin
24
require "pry-byebug"
35
rescue LoadError
@@ -8,7 +10,7 @@
810
rescue LoadError
911
end
1012

11-
require "pp"
13+
require "climate_control"
1214

1315
#---
1416

0 commit comments

Comments
 (0)