dotiw 5.1.0 → 5.3.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.
@@ -23,18 +23,19 @@ describe 'A better distance_of_time_in_words' do
23
23
 
24
24
  describe '#distance_of_time' do
25
25
  [
26
- [0.5.minutes, '30 seconds'],
27
- [4.5.minutes, '4 minutes and 30 seconds'],
28
- [5.minutes, '5 minutes'],
29
- [10.minutes, '10 minutes'],
30
- [1.hour, '1 hour'],
31
- [1.hour + 30.seconds, '1 hour and 30 seconds'],
32
- [4.weeks, '4 weeks'],
33
- [4.weeks + 2.days, '4 weeks and 2 days'],
34
- [24.weeks, '5 months, 2 weeks, and 1 day']
35
- ].each do |number, result|
26
+ [0.5.minutes, '30 seconds', '30s'],
27
+ [4.5.minutes, '4 minutes and 30 seconds', '4m30s'],
28
+ [5.minutes.to_i, '5 minutes', '5m'],
29
+ [10.minutes.to_i, '10 minutes', '10m'],
30
+ [1.hour.to_i, '1 hour', '1h'],
31
+ [1.hour + 30.seconds, '1 hour and 30 seconds', '1h30s'],
32
+ [4.weeks.to_i, '4 weeks', '4w'],
33
+ [4.weeks + 2.days, '4 weeks and 2 days', '4w2d'],
34
+ [24.weeks.to_i, '5 months, 2 weeks, and 1 day', '5mo2w1d']
35
+ ].each do |number, result, compact_result|
36
36
  it "#{number} == #{result}" do
37
37
  expect(distance_of_time(number)).to eq(result)
38
+ expect(distance_of_time(number, compact: true)).to eq(compact_result)
38
39
  end
39
40
  end
40
41
 
@@ -100,6 +101,11 @@ describe 'A better distance_of_time_in_words' do
100
101
  expect(DOTIW.languages.map(&:to_s).sort).to eq languages.sort
101
102
  end
102
103
 
104
+ it 'raises ArgumentError when nil is passed for time' do
105
+ expect { distance_of_time_in_words(nil) }.to raise_error(ArgumentError)
106
+ expect { distance_of_time_in_words(nil, nil) }.to raise_error(ArgumentError)
107
+ end
108
+
103
109
  DOTIW.languages.each do |lang|
104
110
  context lang do
105
111
  YAML.safe_load(
@@ -129,31 +135,33 @@ describe 'A better distance_of_time_in_words' do
129
135
  end
130
136
 
131
137
  [
132
- [START_TIME, START_TIME + 5.days + 3.minutes, '5 days and 3 minutes'],
133
- [START_TIME, START_TIME + 1.minute, '1 minute'],
134
- [START_TIME, START_TIME + 3.years, '3 years'],
135
- [START_TIME, START_TIME + 10.years, '10 years'],
136
- [START_TIME, START_TIME + 8.months, '8 months'],
137
- [START_TIME, START_TIME + 3.hour, '3 hours'],
138
- [START_TIME, START_TIME + 13.months, '1 year and 1 month'],
138
+ [START_TIME, START_TIME + 5.days + 3.minutes, '5 days and 3 minutes', '5d3m'],
139
+ [START_TIME, START_TIME + 1.minute, '1 minute', '1m'],
140
+ [START_TIME, START_TIME + 3.years, '3 years', '3y'],
141
+ [START_TIME, START_TIME + 10.years, '10 years', '10y'],
142
+ [START_TIME, START_TIME + 8.months, '8 months', '8mo'],
143
+ [START_TIME, START_TIME + 3.hour, '3 hours', '3h'],
144
+ [START_TIME, START_TIME + 13.months, '1 year and 1 month', '1y1mo'],
139
145
  # Any numeric sequence is merely coincidental.
140
- [START_TIME, START_TIME + 1.year + 2.months + 3.weeks + 4.days + 5.hours + 6.minutes + 7.seconds, '1 year, 2 months, 3 weeks, 4 days, 5 hours, 6 minutes, and 7 seconds'],
141
- ['2009-3-16'.to_time, '2008-4-14'.to_time, '11 months and 2 days'],
142
- ['2009-3-16'.to_time + 1.minute, '2008-4-14'.to_time, '11 months, 2 days, and 1 minute'],
143
- ['2009-4-14'.to_time, '2008-3-16'.to_time, '1 year, 4 weeks, and 1 day'],
144
- ['2009-2-01'.to_time, '2009-3-01'.to_time, '1 month'],
145
- ['2008-2-01'.to_time, '2008-3-01'.to_time, '1 month'],
146
- [Date.parse('31.03.2015').to_time, Time.parse('01.03.2016'), '10 months, 4 weeks, and 2 days'],
147
- [Date.new(2014, 1, 31), Date.new(2014, 3, 1), '4 weeks and 1 day'],
148
- ['2008-2-01'.to_time, '2008-3-01'.to_time, '1 month'],
149
- ['2014-1-31'.to_time, '2014-3-01'.to_time, '4 weeks and 1 day'],
150
- ['2014-1-31'.to_time, '2014-3-02'.to_time, '4 weeks and 2 days'],
151
- ['2016-1-31'.to_time, '2016-3-01'.to_time, '4 weeks and 2 days'],
152
- ['2016-1-31'.to_time, '2016-3-02'.to_time, '1 month']
153
- ].each do |start, finish, output|
146
+ [START_TIME, START_TIME + 1.year + 2.months + 3.weeks + 4.days + 5.hours + 6.minutes + 7.seconds,
147
+ '1 year, 2 months, 3 weeks, 4 days, 5 hours, 6 minutes, and 7 seconds', '1y2mo3w4d5h6m7s'],
148
+ ['2009-3-16'.to_time, '2008-4-14'.to_time, '11 months and 2 days', '11mo2d'],
149
+ ['2009-3-16'.to_time + 1.minute, '2008-4-14'.to_time, '11 months, 2 days, and 1 minute', '11mo2d1m'],
150
+ ['2009-4-14'.to_time, '2008-3-16'.to_time, '1 year, 4 weeks, and 1 day', '1y4w1d'],
151
+ ['2009-2-01'.to_time, '2009-3-01'.to_time, '1 month', '1mo'],
152
+ ['2008-2-01'.to_time, '2008-3-01'.to_time, '1 month', '1mo'],
153
+ [Date.parse('31.03.2015').to_time, Time.parse('01.03.2016'), '10 months, 4 weeks, and 2 days', '10mo4w2d'],
154
+ [Date.new(2014, 1, 31), Date.new(2014, 3, 1), '4 weeks and 1 day', '4w1d'],
155
+ ['2008-2-01'.to_time, '2008-3-01'.to_time, '1 month', '1mo'],
156
+ ['2014-1-31'.to_time, '2014-3-01'.to_time, '4 weeks and 1 day', '4w1d'],
157
+ ['2014-1-31'.to_time, '2014-3-02'.to_time, '4 weeks and 2 days', '4w2d'],
158
+ ['2016-1-31'.to_time, '2016-3-01'.to_time, '4 weeks and 2 days', '4w2d'],
159
+ ['2016-1-31'.to_time, '2016-3-02'.to_time, '1 month', '1mo']
160
+ ].each do |start, finish, output, compact_result|
154
161
  it "should be #{output}" do
155
162
  expect(distance_of_time_in_words(start, finish, true)).to eq(output)
156
163
  expect(distance_of_time_in_words(finish, start, true)).to eq(output)
164
+ expect(distance_of_time_in_words(start, finish, true, compact: true)).to eq(compact_result)
157
165
  end
158
166
  end
159
167
 
@@ -214,7 +222,7 @@ describe 'A better distance_of_time_in_words' do
214
222
  expect(distance_of_time_in_words(start, finish, true, accumulate_on: accumulator)).to eq(output)
215
223
  end
216
224
  end
217
- end # :accumulate_on
225
+ end
218
226
 
219
227
  describe 'without finish time' do
220
228
  # A missing finish argument should default to zero, essentially returning
@@ -312,7 +320,34 @@ describe 'A better distance_of_time_in_words' do
312
320
  end
313
321
 
314
322
  if defined?(ActionView)
315
- describe 'ActionView' do
323
+ describe 'ActionView without include seconds argument' do
324
+ [
325
+ [START_TIME,
326
+ START_TIME + 1.year + 2.months + 3.weeks + 4.days + 5.hours + 6.minutes + 7.seconds,
327
+ { vague: true },
328
+ 'about 1 year'],
329
+ [START_TIME,
330
+ START_TIME + 1.year + 2.months + 3.weeks + 4.days + 5.hours + 6.minutes + 7.seconds,
331
+ { vague: 'Yes please' },
332
+ 'about 1 year'],
333
+ [START_TIME,
334
+ START_TIME + 1.year + 2.months + 3.weeks + 4.days + 5.hours + 6.minutes + 7.seconds,
335
+ { vague: false },
336
+ '1 year, 2 months, 3 weeks, 4 days, 5 hours, and 6 minutes'],
337
+ [START_TIME,
338
+ START_TIME + 1.year + 2.months + 3.weeks + 4.days + 5.hours + 6.minutes + 7.seconds,
339
+ { vague: nil },
340
+ '1 year, 2 months, 3 weeks, 4 days, 5 hours, and 6 minutes']
341
+ ].each do |start, finish, options, output|
342
+ it "should be #{output}" do
343
+ expect(distance_of_time_in_words(start, finish, options)).to eq(output)
344
+ end
345
+ end
346
+ end
347
+ end
348
+
349
+ if defined?(ActionView)
350
+ describe 'ActionView with include seconds argument' do
316
351
  [
317
352
  [START_TIME,
318
353
  START_TIME + 1.year + 2.months + 3.weeks + 4.days + 5.hours + 6.minutes + 7.seconds,
@@ -335,12 +370,13 @@ describe 'A better distance_of_time_in_words' do
335
370
  expect(distance_of_time_in_words(start, finish, true, options)).to eq(output)
336
371
  end
337
372
  end
338
-
373
+
339
374
  context 'via ActionController::Base.helpers' do
340
375
  it '#distance_of_time_in_words' do
341
376
  end_time = START_TIME + 1.year + 2.months + 3.weeks + 4.days + 5.hours + 6.minutes + 7.seconds
342
377
  expected = '1 year, 2 months, 3 weeks, 4 days, 5 hours, 6 minutes, and 7 seconds'
343
- actual = ActionController::Base.helpers.distance_of_time_in_words(START_TIME, end_time, true, { vague: false })
378
+ actual = ActionController::Base.helpers.distance_of_time_in_words(START_TIME, end_time, true,
379
+ { vague: false })
344
380
  expect(actual).to eq(expected)
345
381
  end
346
382
 
@@ -349,6 +385,105 @@ describe 'A better distance_of_time_in_words' do
349
385
  actual = ActionController::Base.helpers.time_ago_in_words(Time.now - 3.days - 14.minutes)
350
386
  expect(actual).to eq(expected)
351
387
  end
388
+
389
+ describe '#distance_of_time_in_words_to_now' do
390
+ context 'with nil' do
391
+ it 'raises ArgumentError when nil is passed for time' do
392
+ expect do
393
+ ActionController::Base.helpers.distance_of_time_in_words_to_now(nil)
394
+ end.to raise_error(ArgumentError)
395
+ end
396
+ end
397
+
398
+ context 'without options' do
399
+ it 'shows detailed duration without seconds' do
400
+ expected = '3 days and 14 minutes'
401
+ actual = ActionController::Base.helpers.distance_of_time_in_words_to_now(Time.now - 3.days - 14.minutes)
402
+ expect(actual).to eq(expected)
403
+ end
404
+ end
405
+
406
+ context 'with seconds false and vague option true' do
407
+ it 'shows vague duration' do
408
+ expected = '3 days'
409
+ actual = ActionController::Base.helpers.distance_of_time_in_words_to_now(
410
+ Time.now - 3.days - 14.minutes - 20.seconds, false, vague: true
411
+ )
412
+ expect(actual).to eq(expected)
413
+ end
414
+ end
415
+
416
+ context 'with seconds true and vague option true' do
417
+ it 'shows vague duration' do
418
+ expected = '3 days'
419
+ actual = ActionController::Base.helpers.distance_of_time_in_words_to_now(
420
+ Time.now - 3.days - 14.minutes - 20.seconds, true, vague: true
421
+ )
422
+ expect(actual).to eq(expected)
423
+ end
424
+ end
425
+
426
+ context 'with seconds false and vague option false' do
427
+ it 'shows detailed duration without seconds' do
428
+ expected = '3 days and 14 minutes'
429
+ actual = ActionController::Base.helpers.distance_of_time_in_words_to_now(
430
+ Time.now - 3.days - 14.minutes - 20.seconds, false, vague: false
431
+ )
432
+ expect(actual).to eq(expected)
433
+ end
434
+ end
435
+
436
+ context 'with seconds true and vague option false' do
437
+ it 'shows detailed duration with seconds' do
438
+ expected = '3 days, 14 minutes, and 20 seconds'
439
+ actual = ActionController::Base.helpers.distance_of_time_in_words_to_now(
440
+ Time.now - 3.days - 14.minutes - 20.seconds, true, vague: false
441
+ )
442
+ expect(actual).to eq(expected)
443
+ end
444
+ end
445
+
446
+ context 'without seconds and vague option false' do
447
+ it 'shows detailed duration without seconds' do
448
+ expected = '3 days and 14 minutes'
449
+ actual = ActionController::Base.helpers.distance_of_time_in_words_to_now(
450
+ Time.now - 3.days - 14.minutes - 20.seconds, vague: false
451
+ )
452
+ expect(actual).to eq(expected)
453
+ end
454
+ end
455
+
456
+ context 'without seconds and vague option true' do
457
+ it 'shows vague duration' do
458
+ expected = '3 days'
459
+ actual = ActionController::Base.helpers.distance_of_time_in_words_to_now(
460
+ Time.now - 3.days - 14.minutes - 20.seconds, vague: true
461
+ )
462
+ expect(actual).to eq(expected)
463
+ end
464
+ end
465
+
466
+ context 'with options include_seconds true and vague option false' do
467
+ it 'shows detailed duration with seconds' do
468
+ expected = '3 days, 14 minutes, and 20 seconds'
469
+ actual = ActionController::Base.helpers.distance_of_time_in_words_to_now(
470
+ Time.now - 3.days - 14.minutes - 20.seconds, {include_seconds: true, vague: false}
471
+ )
472
+ expect(actual).to eq(expected)
473
+ end
474
+ end
475
+
476
+ context 'with options include_seconds false and vague option true' do
477
+ it 'shows vague duration' do
478
+ expected = '3 days'
479
+ actual = ActionController::Base.helpers.distance_of_time_in_words_to_now(
480
+ Time.now - 3.days - 14.minutes - 20.seconds, {include_seconds: false, vague: true}
481
+ )
482
+ expect(actual).to eq(expected)
483
+ end
484
+ end
485
+
486
+ end
352
487
  end
353
488
  end
354
489
  end
@@ -367,7 +502,7 @@ describe 'A better distance_of_time_in_words' do
367
502
  )
368
503
  ).to eq('1 year, 2 months, 3 weeks, 4 days, 5 hours, and 6 minutes')
369
504
  end
370
- end # include_seconds
505
+ end
371
506
  end
372
507
 
373
508
  if defined?(ActionView)
@@ -0,0 +1,2 @@
1
+ seconds:
2
+ 1.second: 1 sekund
@@ -0,0 +1,2 @@
1
+ seconds:
2
+ 1.second: 1 秒
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dotiw
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.0
4
+ version: 5.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Bigg
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-08-05 00:00:00.000000000 Z
12
+ date: 2021-11-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -146,6 +146,7 @@ files:
146
146
  - MIT-LICENSE
147
147
  - README.markdown
148
148
  - Rakefile
149
+ - benchmarks/time_hash_bench.rb
149
150
  - dotiw.gemspec
150
151
  - gemfiles/.bundle/config
151
152
  - gemfiles/rails_4.gemfile
@@ -170,8 +171,10 @@ files:
170
171
  - lib/dotiw/locale/pl.yml
171
172
  - lib/dotiw/locale/pt-BR.yml
172
173
  - lib/dotiw/locale/ru.yml
174
+ - lib/dotiw/locale/sv.yml
173
175
  - lib/dotiw/locale/vi.yml
174
176
  - lib/dotiw/locale/zh-CN.yml
177
+ - lib/dotiw/locale/zh-TW.yml
175
178
  - lib/dotiw/methods.rb
176
179
  - lib/dotiw/time_hash.rb
177
180
  - lib/dotiw/version.rb
@@ -191,8 +194,10 @@ files:
191
194
  - spec/lib/i18n/pl.yml
192
195
  - spec/lib/i18n/pt-BR.yml
193
196
  - spec/lib/i18n/ru.yml
197
+ - spec/lib/i18n/sv.yml
194
198
  - spec/lib/i18n/vi.yml
195
199
  - spec/lib/i18n/zh-CN.yml
200
+ - spec/lib/i18n/zh-TW.yml
196
201
  - spec/spec_helper.rb
197
202
  homepage: https://github.com/radar/distance_of_time_in_words
198
203
  licenses:
@@ -213,7 +218,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
213
218
  - !ruby/object:Gem::Version
214
219
  version: '0'
215
220
  requirements: []
216
- rubygems_version: 3.1.2
221
+ rubygems_version: 3.1.3
217
222
  signing_key:
218
223
  specification_version: 4
219
224
  summary: Better distance_of_time_in_words for Rails
@@ -234,6 +239,8 @@ test_files:
234
239
  - spec/lib/i18n/pl.yml
235
240
  - spec/lib/i18n/pt-BR.yml
236
241
  - spec/lib/i18n/ru.yml
242
+ - spec/lib/i18n/sv.yml
237
243
  - spec/lib/i18n/vi.yml
238
244
  - spec/lib/i18n/zh-CN.yml
245
+ - spec/lib/i18n/zh-TW.yml
239
246
  - spec/spec_helper.rb