jekyll-timeago 0.12.3 → 0.13.0

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
  SHA256:
3
- metadata.gz: 7a7f64001d4339005b10a76ade11cbd172de94b04cf612df66cdb854cd4ddb10
4
- data.tar.gz: b76814cbbc3aafa0f418fa13b1ebdab98d7d8cda3e49bd25404ae5de1b304301
3
+ metadata.gz: e0d0a282e371c82c7a78ec06daf099ab43248b2164f4eeb2f3ccb99936e266dd
4
+ data.tar.gz: c0b57570ebd40598b83b62e9cb46cae40b7922923382bc03bc11359680ff7964
5
5
  SHA512:
6
- metadata.gz: 5164c7ffbfd45f036a692249d98a9ef5af101f2789b62fb46fbabb60468185f9e7556a9936268cf7939524f516361feba8651fe3a0de641893bf4c63bf919d1f
7
- data.tar.gz: e7c74022476314a128f510c7e8ae34af8dd0b57b5689273c9c293bc636ad5c4b9618b05a57976670396c510234fe43680ae29d0deab9772a942be6131974d9e8
6
+ metadata.gz: dcfd9bc02249b9ae0309130506b4cd13b05b13a1cf3777fa4059c3610d6121c4fa62043a4efd2dbabbe51f2c3796973006846853a2a65fc6aa56e78d0eecba95
7
+ data.tar.gz: 9e7ab93694539ab08bd0df48289c784ae08d41726589af4a5e9d9f72df7a325a950eb07aed2c228af613a8f45b05c369fa765e2fade737c8d55ba8c8dd0ffba0
@@ -1,33 +1,20 @@
1
1
  language: ruby
2
-
3
2
  cache: bundler
4
-
5
- sudo: false
6
-
7
3
  rvm:
8
4
  - ruby-head
9
- - 2.5.3
5
+ - 2.6.3
6
+ - 2.5.5
10
7
  - 2.4.5
11
8
  - 2.3.8
12
9
 
13
10
  gemfile:
14
11
  - gemfiles/jekyll_v3.gemfile
15
- - gemfiles/jekyll_v2.gemfile
16
- - gemfiles/jekyll_v1.gemfile
17
12
 
18
13
  matrix:
19
- exclude:
20
- - rvm: ruby-head
21
- gemfile: gemfiles/jekyll_v2.gemfile
22
- - rvm: ruby-head
23
- gemfile: gemfiles/jekyll_v1.gemfile
24
- - rvm: 2.5.3
25
- gemfile: gemfiles/jekyll_v2.gemfile
26
- - rvm: 2.5.3
27
- gemfile: gemfiles/jekyll_v1.gemfile
28
- - rvm: 2.4.5
14
+ include:
15
+ - rvm: 2.3.8
29
16
  gemfile: gemfiles/jekyll_v2.gemfile
30
- - rvm: 2.4.5
17
+ - rvm: 2.3.8
31
18
  gemfile: gemfiles/jekyll_v1.gemfile
32
19
  allow_failures:
33
20
  - rvm: ruby-head
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gemspec
3
+ gemspec
4
+
5
+ gem 'byebug', group: [:development, :test]
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2013-2018 Marc Anguera Insa
1
+ Copyright 2013-2019 Marc Anguera Insa
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -14,6 +14,7 @@ Main features:
14
14
  - Localization
15
15
  - Level of detail customization
16
16
  - Command line utility
17
+ - Approximate distance, with customizable threshold, ie: `366 days` becomes `1 year ago` instead of `1 year and 1 day ago`
17
18
 
18
19
  In fact, `jekyll-timeago` started as an extension for the [Liquid](https://github.com/Shopify/liquid) template engine, to be used in Jekyll and Octopress backed sites. But actually, you can use it easily on any Ruby project and even as a tool from the [terminal](#cli)!
19
20
 
@@ -107,6 +108,15 @@ You are able to change the level of detail (from 1 up to 4, 2 by default) to get
107
108
  => "5 years, 5 months, 3 weeks and 4 days ago"
108
109
  ```
109
110
 
111
+ - `threshold`
112
+
113
+ The next component in the time must at least match this threshold to be picked. Set to 0 by default, so you don't get any approximations. Can be used to drop "straggling" values which are too low to be of any use (`in 7 months and 2 days` is as good as saying `in 7 months`).
114
+
115
+ ```ruby
116
+ >> timeago(Date.today.prev_day(366), depth: 2, threshold: 0.05)
117
+ => "1 year ago"
118
+ ```
119
+
110
120
  ## Localization
111
121
 
112
122
  By default, `jekyll-timego` already provides translations for some languages. You can check the list [here](lib/locales/). However, you are able to provide your own translations, or even override the originals, easily.
@@ -5,8 +5,8 @@ Gem::Specification.new do |spec|
5
5
  spec.version = Jekyll::Timeago::VERSION
6
6
  spec.authors = ["markets"]
7
7
  spec.email = ["srmarc.ai@gmail.com"]
8
- spec.description = "A Ruby library to compute distance of dates in words. Originally built for Jekyll, as a Liquid extension. It also supports localization and futures."
9
8
  spec.summary = "A date helper to compute distance of dates in words."
9
+ spec.description = "A Ruby library to compute distance of dates in words. Originally built for Jekyll, as a Liquid extension. It also supports localization and futures."
10
10
  spec.homepage = "https://github.com/markets/jekyll-timeago"
11
11
  spec.license = "MIT"
12
12
 
@@ -18,9 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.add_dependency "mini_i18n", '>= 0.8.0'
19
19
 
20
20
  spec.add_development_dependency "jekyll", ">= 1.5"
21
- spec.add_development_dependency "bundler", "~> 1.3"
21
+ spec.add_development_dependency "bundler"
22
22
  spec.add_development_dependency "rake"
23
23
  spec.add_development_dependency "rspec"
24
24
  spec.add_development_dependency "appraisal"
25
- spec.add_development_dependency "byebug"
26
25
  end
@@ -11,6 +11,9 @@ module Jekyll
11
11
  # Default level of detail
12
12
  DEFAULT_DEPTH_LEVEL = 2
13
13
 
14
+ # Default threshold
15
+ DEFAULT_THRESHOLD = 0
16
+
14
17
  def timeago(from, to = Date.today, options = {})
15
18
  if to.is_a?(Hash)
16
19
  options = to
@@ -19,11 +22,12 @@ module Jekyll
19
22
 
20
23
  @options = options
21
24
 
22
- from = validate_date(from)
23
- to = validate_date(to)
24
- depth = validate_depth(@options[:depth] || @options["depth"])
25
+ from = validate_date(from)
26
+ to = validate_date(to)
27
+ depth = validate_depth(@options[:depth] || @options["depth"])
28
+ threshold = validate_threshold(@options[:threshold])
25
29
 
26
- time_ago_to_now(from, to, depth)
30
+ time_ago_to_now(from, to, depth, threshold)
27
31
  end
28
32
 
29
33
  private
@@ -32,11 +36,15 @@ module Jekyll
32
36
  Date.parse(date.to_s)
33
37
  end
34
38
 
39
+ def validate_threshold(threshold)
40
+ (0.0..1.0).include?(threshold) ? threshold : DEFAULT_THRESHOLD
41
+ end
42
+
35
43
  def validate_depth(depth)
36
44
  (1..MAX_DEPTH_LEVEL).include?(depth) ? depth : DEFAULT_DEPTH_LEVEL
37
45
  end
38
46
 
39
- def time_ago_to_now(from, to, depth)
47
+ def time_ago_to_now(from, to, depth, threshold)
40
48
  days_passed = (to - from).to_i
41
49
 
42
50
  return t(:today) if days_passed == 0
@@ -44,7 +52,7 @@ module Jekyll
44
52
  return t(:tomorrow) if days_passed == -1
45
53
 
46
54
  past_or_future = from < to ? :past : :future
47
- slots = build_time_ago_slots(days_passed.abs, depth)
55
+ slots = build_time_ago_slots(days_passed.abs, depth, threshold)
48
56
 
49
57
  t(past_or_future, date_range: to_sentence(slots))
50
58
  end
@@ -56,8 +64,9 @@ module Jekyll
56
64
  # Builds time ranges: ['1 month', '5 days']
57
65
  # - days_passed: integer in absolute
58
66
  # - depth: level of detail
67
+ # - threshold: minimum fractional difference to keep for next slot
59
68
  # - current_slots: built time slots
60
- def build_time_ago_slots(days_passed, depth, current_slots = [])
69
+ def build_time_ago_slots(days_passed, depth, threshold, current_slots = [])
61
70
  return current_slots if depth == 0 || days_passed == 0
62
71
 
63
72
  range = days_to_range(days_passed)
@@ -67,7 +76,12 @@ module Jekyll
67
76
  current_slots << t(range, count: num_elems)
68
77
 
69
78
  pending_days = days_passed - (num_elems * days)
70
- build_time_ago_slots(pending_days, depth - 1, current_slots)
79
+
80
+ if pending_days >= (days_passed * threshold).floor
81
+ build_time_ago_slots(pending_days, depth - 1, threshold, current_slots)
82
+ else
83
+ current_slots
84
+ end
71
85
  end
72
86
 
73
87
  def days_to_range(days)
@@ -1,5 +1,5 @@
1
1
  module Jekyll
2
2
  module Timeago
3
- VERSION = "0.12.3"
3
+ VERSION = "0.13.0"
4
4
  end
5
5
  end
@@ -25,7 +25,8 @@ describe Jekyll::Timeago do
25
25
  "<p>2 años</p>\n"\
26
26
  "<p>12 meses</p>\n"\
27
27
  "<p>12 meses</p>\n"\
28
- "<p>2 años</p>"
28
+ "<p>2 años</p>\n"\
29
+ "<p>en 1 año</p>\n"
29
30
 
30
31
  expect(contents).to eq(expected)
31
32
  end
@@ -71,6 +72,10 @@ describe Jekyll::Timeago do
71
72
  expect(timeago(sample_date.prev_day(500), sample_date, depth: 5)).to eq('1 year and 4 months ago')
72
73
  end
73
74
 
75
+ it 'allow threshold configuration' do
76
+ expect(timeago(sample_date.prev_day(366), sample_date, threshold: 0.05)).to eq('1 year ago')
77
+ end
78
+
74
79
  it 'allow localization' do
75
80
  expect(timeago(sample_date.prev_day(100), sample_date, locale: :fr)).to eq('il y a environ 3 mois et 1 semaine')
76
81
  expect(timeago(sample_date.prev_day(100), sample_date, locale: :ru)).to eq('3 месяца и неделю назад')
@@ -3,6 +3,7 @@ plugins:
3
3
 
4
4
  jekyll_timeago:
5
5
  depth: 1
6
+ threshold: 0.01
6
7
  translations_path: "/_locales/*.yaml"
7
8
  default_locale: 'en'
8
9
  available_locales:
@@ -5,4 +5,5 @@ locale: 'es'
5
5
  <p>{% timeago 2014-1-1 %}</p>
6
6
  <p>{% timeago 2014-1-1 2015-1-1 %}</p>
7
7
  <p>{{ '2014-1-1' | timeago: '2015-1-1' }}</p>
8
- <p>{{ '2014-1-1' | timeago }}</p>
8
+ <p>{{ '2014-1-1' | timeago }}</p>
9
+ <p>{{ '2014-1-1' | timeago: '2012-12-31' }}</p>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-timeago
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.3
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - markets
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-17 00:00:00.000000000 Z
11
+ date: 2019-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mini_i18n
@@ -40,20 +40,6 @@ dependencies:
40
40
  version: '1.5'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '1.3'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '1.3'
55
- - !ruby/object:Gem::Dependency
56
- name: rake
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - ">="
@@ -67,7 +53,7 @@ dependencies:
67
53
  - !ruby/object:Gem::Version
68
54
  version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
- name: rspec
56
+ name: rake
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - ">="
@@ -81,7 +67,7 @@ dependencies:
81
67
  - !ruby/object:Gem::Version
82
68
  version: '0'
83
69
  - !ruby/object:Gem::Dependency
84
- name: appraisal
70
+ name: rspec
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - ">="
@@ -95,7 +81,7 @@ dependencies:
95
81
  - !ruby/object:Gem::Version
96
82
  version: '0'
97
83
  - !ruby/object:Gem::Dependency
98
- name: byebug
84
+ name: appraisal
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
87
  - - ">="
@@ -165,8 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
165
151
  - !ruby/object:Gem::Version
166
152
  version: '0'
167
153
  requirements: []
168
- rubyforge_project:
169
- rubygems_version: 2.7.6
154
+ rubygems_version: 3.0.3
170
155
  signing_key:
171
156
  specification_version: 4
172
157
  summary: A date helper to compute distance of dates in words.