jekyll-timeago 0.9.2 → 0.10.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 +4 -4
- data/.gitignore +2 -1
- data/.travis.yml +18 -11
- data/Appraisals +1 -3
- data/LICENSE +1 -1
- data/README.md +140 -120
- data/bin/jekyll-timeago +27 -6
- data/gemfiles/jekyll_v2.gemfile +0 -1
- data/gemfiles/jekyll_v3.gemfile +1 -2
- data/jekyll-timeago.gemspec +3 -0
- data/lib/jekyll-timeago.rb +14 -7
- data/lib/jekyll-timeago/core.rb +9 -38
- data/lib/jekyll-timeago/jekyll_integration.rb +59 -0
- data/lib/jekyll-timeago/version.rb +1 -1
- data/lib/{jekyll-timeago/config/_config.yml.example.en → locales/en.yml} +1 -2
- data/lib/{jekyll-timeago/config/_config.yml.example.es → locales/es.yml} +1 -2
- data/lib/{jekyll-timeago/config/_config.yml.example.fr → locales/fr.yml} +1 -3
- data/lib/locales/pt.yml +17 -0
- data/spec/jekyll-timeago_spec.rb +42 -50
- data/spec/source/_config.yml +6 -16
- data/spec/source/_locales/overrides.yaml +2 -0
- data/spec/source/index.html +1 -0
- data/spec/spec_helper.rb +2 -4
- metadata +38 -8
- data/lib/jekyll-timeago/filter.rb +0 -11
- data/lib/jekyll-timeago/tag.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 19ad06f15553f22b78e77f182ba857181dbc2eb8
|
4
|
+
data.tar.gz: 2aa9841812c6d4d0f731bbb8ef15de6904b45454
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a07686e7c7e5085071122186ec7f88b0b687de47593edfe5655a84c73b5b86ec4a02f7e82bae56f9ee4d8bd61b9d215bdd49d2fd60e6dfc2a65b6f13ee03b65
|
7
|
+
data.tar.gz: 97125bca25ce2e56f0de941aa9daa19a236eb8d93b90cc24ba0afda6dee1b23e4d54848c09ce782d4cb882be8ae2fd9fb80fe3dc775dcf0143bcd58845c03814
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -5,22 +5,29 @@ cache: bundler
|
|
5
5
|
sudo: false
|
6
6
|
|
7
7
|
rvm:
|
8
|
-
-
|
9
|
-
- 2.
|
10
|
-
- 2.
|
11
|
-
- 2.
|
12
|
-
- 2.0
|
8
|
+
- ruby-head
|
9
|
+
- 2.5.1
|
10
|
+
- 2.4.4
|
11
|
+
- 2.3.7
|
13
12
|
|
14
13
|
gemfile:
|
15
|
-
- gemfiles/jekyll_v1.gemfile
|
16
|
-
- gemfiles/jekyll_v2.gemfile
|
17
14
|
- gemfiles/jekyll_v3.gemfile
|
15
|
+
- gemfiles/jekyll_v2.gemfile
|
16
|
+
- gemfiles/jekyll_v1.gemfile
|
18
17
|
|
19
18
|
matrix:
|
20
19
|
exclude:
|
21
|
-
- rvm:
|
22
|
-
gemfile: gemfiles/
|
23
|
-
- rvm:
|
20
|
+
- rvm: ruby-head
|
21
|
+
gemfile: gemfiles/jekyll_v2.gemfile
|
22
|
+
- rvm: ruby-head
|
23
|
+
gemfile: gemfiles/jekyll_v1.gemfile
|
24
|
+
- rvm: 2.5.1
|
25
|
+
gemfile: gemfiles/jekyll_v2.gemfile
|
26
|
+
- rvm: 2.5.1
|
24
27
|
gemfile: gemfiles/jekyll_v1.gemfile
|
25
|
-
- rvm: 2.4.
|
28
|
+
- rvm: 2.4.4
|
26
29
|
gemfile: gemfiles/jekyll_v2.gemfile
|
30
|
+
- rvm: 2.4.4
|
31
|
+
gemfile: gemfiles/jekyll_v1.gemfile
|
32
|
+
allow_failures:
|
33
|
+
- rvm: ruby-head
|
data/Appraisals
CHANGED
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,186 +1,206 @@
|
|
1
1
|
# Jekyll-Timeago
|
2
2
|
|
3
|
-
[](http://badge.fury.io/rb/jekyll-timeago)
|
3
|
+
[](http://badge.fury.io/rb/jekyll-timeago)
|
4
|
+
[](https://travis-ci.org/markets/jekyll-timeago)
|
5
|
+
[](https://codeclimate.com/github/markets/jekyll-timeago/maintainability)
|
4
6
|
|
5
|
-
> A Ruby library to compute distance of dates in words. Originally built for Jekyll
|
7
|
+
> A Ruby library to compute distance of dates in words, with localization support. Originally built for Jekyll.
|
6
8
|
|
7
9
|
Main features:
|
8
10
|
|
9
|
-
* Compute distance of dates in words, ie: `1 week and 2 days ago`, `5 months ago`, `in 1 year`
|
10
|
-
* Future times
|
11
|
-
* Out of the box support for `Jekyll` (v1
|
12
|
-
* Localization (i18n)
|
13
|
-
* Level of detail
|
14
|
-
*
|
11
|
+
* Compute distance of dates, in words, ie: `1 week and 2 days ago`, `5 months ago`, `in 1 year`
|
12
|
+
* Future times
|
13
|
+
* Out of the box support for `Jekyll` (`v1`, `v2` and `v3`) projects, available as a Liquid Filter and as a Liquid Tag
|
14
|
+
* Localization (i18n)
|
15
|
+
* Level of detail
|
16
|
+
* Command line utility
|
15
17
|
|
16
|
-
In fact, `jekyll-timeago` started
|
18
|
+
In fact, `jekyll-timeago` started as an extension for [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.
|
19
|
+
|
20
|
+
Read more about the Jekyll integration [in this section](#jekyll-integration).
|
17
21
|
|
18
22
|
## Installation
|
19
23
|
|
20
|
-
|
24
|
+
Add this line to your application's Gemfile:
|
21
25
|
|
22
|
-
|
26
|
+
```ruby
|
27
|
+
gem 'jekyll-timeago'
|
28
|
+
```
|
23
29
|
|
24
|
-
|
30
|
+
And then execute:
|
25
31
|
|
26
|
-
|
27
|
-
gem install jekyll-timeago
|
28
|
-
```
|
32
|
+
> bundle install
|
29
33
|
|
30
|
-
|
34
|
+
Or install it yourself as:
|
31
35
|
|
32
|
-
|
33
|
-
gems:
|
34
|
-
- jekyll-timeago
|
35
|
-
```
|
36
|
+
> gem install jekyll-timeago
|
36
37
|
|
37
|
-
|
38
|
+
## Usage
|
38
39
|
|
39
|
-
|
40
|
+
The gem provides the `#timeago` method:
|
40
41
|
|
41
42
|
```ruby
|
42
|
-
|
43
|
-
gem 'jekyll-timeago'
|
44
|
-
end
|
43
|
+
Jekyll::Timeago.timeago(from, to = Date.today, options = {})
|
45
44
|
```
|
46
45
|
|
47
|
-
|
48
|
-
|
49
|
-
Alternatively, you can simply copy the files under [lib/jekyll-timeago](lib/jekyll-timeago/) directly into your `_plugins/` directory. All those files will be loaded by Jekyll.
|
46
|
+
Examples:
|
50
47
|
|
51
|
-
|
48
|
+
```ruby
|
49
|
+
>> Jekyll::Timeago.timeago(Date.today)
|
50
|
+
=> "today"
|
51
|
+
>> Jekyll::Timeago.timeago(Date.today.prev_day)
|
52
|
+
=> "yesterday"
|
53
|
+
>> Jekyll::Timeago.timeago(Date.today.prev_day(10))
|
54
|
+
=> "1 week and 3 days ago"
|
55
|
+
>> Jekyll::Timeago.timeago(Date.today.prev_day(100))
|
56
|
+
=> "3 months and 1 week ago"
|
57
|
+
>> Jekyll::Timeago.timeago(Date.today.prev_day(500))
|
58
|
+
=> "1 year and 4 months ago"
|
59
|
+
>> Jekyll::Timeago.timeago('2010-1-1', '2012-1-1')
|
60
|
+
=> "2 years ago"
|
61
|
+
>> Jekyll::Timeago.timeago(Date.today.next_day)
|
62
|
+
=> "tomorrow"
|
63
|
+
>> Jekyll::Timeago.timeago(Date.today.next_day(7))
|
64
|
+
=> "in 1 week"
|
65
|
+
>> Jekyll::Timeago.timeago(Date.today.next_day(1000))
|
66
|
+
=> "in 2 years and 8 months"
|
67
|
+
```
|
52
68
|
|
53
|
-
|
69
|
+
**NOTE** If you have the gem installed in your system, and you're not using Bundler (probably because you're are writing a basic script), don't forget to require the library first:
|
54
70
|
|
55
|
-
|
71
|
+
```ruby
|
72
|
+
require 'jekyll-timeago'
|
56
73
|
|
57
|
-
|
58
|
-
<p>{{ page.date | timeago }}</p>
|
74
|
+
puts Jekyll::Timeago.timeago('2030-1-1')
|
59
75
|
```
|
60
76
|
|
61
|
-
|
77
|
+
### Options
|
62
78
|
|
63
|
-
|
64
|
-
<p>{{ page.date | timeago: '2020-1-1' }}</p>
|
65
|
-
```
|
79
|
+
* `locale`
|
66
80
|
|
67
|
-
|
81
|
+
To use a different language:
|
68
82
|
|
69
|
-
```
|
70
|
-
|
83
|
+
```ruby
|
84
|
+
>> Jekyll::Timeago.timeago(Date.today.prev_day(200), locale: :es)
|
85
|
+
=> "hace 6 meses y 2 semanas"
|
86
|
+
>> Jekyll::Timeago.timeago(Date.today.prev_day(200), locale: :fr)
|
87
|
+
=> "il y a environ 6 mois et 2 semaines"
|
71
88
|
```
|
72
89
|
|
73
|
-
|
90
|
+
Read more about the localization options [here](#i18n).
|
74
91
|
|
75
|
-
|
76
|
-
|
92
|
+
* `depth`
|
93
|
+
|
94
|
+
You are able to change the level of detail (from 1 up to 4, 2 by default) to get higher or lower granularity:
|
95
|
+
|
96
|
+
```ruby
|
97
|
+
>> Jekyll::Timeago.timeago(Date.today.prev_day(2000), depth: 3)
|
98
|
+
=> "5 years, 5 months and 3 weeks ago"
|
99
|
+
>> Jekyll::Timeago.timeago(Date.today.prev_day(2000), depth: 4)
|
100
|
+
=> "5 years, 5 months, 3 weeks and 4 days ago"
|
77
101
|
```
|
78
102
|
|
79
|
-
##
|
103
|
+
## I18n
|
80
104
|
|
81
|
-
|
105
|
+
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.
|
82
106
|
|
83
|
-
|
107
|
+
This project uses the [mini_i18n](https://github.com/markets/mini_i18n) gem under the hood to deal with translations. You can read further about all options in [its docs](https://github.com/markets/mini_i18n#usage). Example:
|
84
108
|
|
109
|
+
```ruby
|
110
|
+
MiniI18n.configure do |config|
|
111
|
+
config.load_translations('/path_to_your_translations_files/*.yml')
|
112
|
+
config.default_locale = :en
|
113
|
+
end
|
85
114
|
```
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
years: 'years'
|
97
|
-
year: 'year'
|
98
|
-
months: 'months'
|
99
|
-
month: 'month'
|
100
|
-
weeks: 'weeks'
|
101
|
-
week: 'week'
|
102
|
-
days: 'days'
|
103
|
-
day: 'day'
|
115
|
+
|
116
|
+
If you want to contribute and support more languages by default, please feel free to send a pull request.
|
117
|
+
|
118
|
+
## CLI
|
119
|
+
|
120
|
+
```
|
121
|
+
> jekyll-timeago 2016-1-1
|
122
|
+
2 years and 6 months ago
|
123
|
+
> jekyll-timeago 2016-1-1 --locale fr
|
124
|
+
il y a environ 2 années et 6 mois
|
104
125
|
```
|
105
126
|
|
106
|
-
|
127
|
+
### Console
|
107
128
|
|
108
|
-
|
129
|
+
Starts a custom IRB session with the `#timeago` method included:
|
109
130
|
|
110
|
-
|
131
|
+
```
|
132
|
+
> jekyll-timeago --console
|
133
|
+
>> timeago(Date.today)
|
134
|
+
=> "today"
|
135
|
+
```
|
136
|
+
|
137
|
+
## Jekyll integration
|
111
138
|
|
112
|
-
|
113
|
-
* Depth => 2 `1 year and 4 months ago` (default)
|
114
|
-
* Depth => 3 `1 year, 4 months and 1 week ago`
|
115
|
-
* Depth => 4 `1 year, 4 months, 1 week and 4 days ago`
|
139
|
+
You have different options to install and use `jekyll-timeago` into your Jekyll project:
|
116
140
|
|
117
|
-
|
141
|
+
**Via Jekyll plugin system (recommended)**
|
118
142
|
|
119
|
-
|
143
|
+
Install the `gem` to your system:
|
120
144
|
|
121
|
-
```
|
122
|
-
|
145
|
+
```
|
146
|
+
> gem install jekyll-timeago
|
123
147
|
```
|
124
148
|
|
125
|
-
|
149
|
+
In your `_config.yml` file, add a new array with the key gems and the values of the gem names of the plugins you’d like to use. In this case:
|
126
150
|
|
127
|
-
```
|
128
|
-
|
129
|
-
|
130
|
-
"prefix" => "hace",
|
131
|
-
"months" => "meses",
|
132
|
-
"and" => "y",
|
133
|
-
"week" => "semana",
|
134
|
-
"suffix" => nil
|
135
|
-
}
|
151
|
+
```yaml
|
152
|
+
gems:
|
153
|
+
- jekyll-timeago
|
136
154
|
```
|
137
155
|
|
138
|
-
|
156
|
+
**Via Bundler**
|
157
|
+
|
158
|
+
Add this gem to your `Gemfile` and run `bundle install`:
|
139
159
|
|
140
160
|
```ruby
|
141
|
-
|
142
|
-
|
161
|
+
group :jekyll_plugins do
|
162
|
+
gem 'jekyll-timeago'
|
163
|
+
end
|
143
164
|
```
|
144
165
|
|
145
|
-
|
166
|
+
### Usage
|
167
|
+
|
168
|
+
**Liquid Filter**:
|
146
169
|
|
170
|
+
```html
|
171
|
+
<p>{{ page.date | timeago }}</p>
|
172
|
+
<p>{{ page.date | timeago: '2020-1-1' }}</p>
|
147
173
|
```
|
148
|
-
|
149
|
-
|
174
|
+
|
175
|
+
**Liquid Tag**:
|
176
|
+
|
177
|
+
```html
|
178
|
+
<p>{% timeago 2000-1-1 %}</p>
|
179
|
+
<p>{% timeago 2000-1-1 2010-1-1 %}</p>
|
150
180
|
```
|
151
181
|
|
152
|
-
###
|
182
|
+
### Configuration
|
153
183
|
|
154
|
-
|
184
|
+
In your `_config.yml` file:
|
155
185
|
|
156
|
-
```
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
=> "1 year and 4 months ago"
|
167
|
-
>> timeago('2010-1-1', '2012-1-1')
|
168
|
-
=> "2 years ago"
|
169
|
-
>> timeago(Date.today.next_day)
|
170
|
-
=> "tomorrow"
|
171
|
-
>> timeago(Date.today.next_day(7))
|
172
|
-
=> "in 1 week"
|
173
|
-
>> timeago(Date.today.next_day(1000))
|
174
|
-
=> "in 2 years and 8 months"
|
186
|
+
```
|
187
|
+
jekyll_timeago:
|
188
|
+
depth: 2
|
189
|
+
translations_path: '/path_to_your_translations/*.yaml'
|
190
|
+
default_locale: 'en'
|
191
|
+
fallbacks: true
|
192
|
+
available_locales:
|
193
|
+
- 'en'
|
194
|
+
- 'es'
|
195
|
+
- 'fr'
|
175
196
|
```
|
176
197
|
|
177
|
-
|
198
|
+
Also, you can set a different language per page using the [Front Matter](https://jekyllrb.com/docs/frontmatter/) functionality:
|
178
199
|
|
179
|
-
```
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
=> "ayer"
|
200
|
+
```yaml
|
201
|
+
---
|
202
|
+
locale: 'es'
|
203
|
+
---
|
184
204
|
```
|
185
205
|
|
186
206
|
## Development
|
@@ -190,10 +210,10 @@ Any kind of feedback, bug report, idea or enhancement are really appreciated.
|
|
190
210
|
To contribute, just fork the repo, hack on it and send a pull request. Don't forget to add specs for behaviour changes and run the test suite:
|
191
211
|
|
192
212
|
```
|
193
|
-
bundle exec appraisal rake
|
213
|
+
> bundle exec appraisal rake
|
194
214
|
```
|
195
215
|
|
196
|
-
`Appraisal`
|
216
|
+
We use the `Appraisal` gem to ensure compatibility with different Jekyll versions. Check out current supported versions [here](Appraisals).
|
197
217
|
|
198
218
|
## License
|
199
219
|
|
data/bin/jekyll-timeago
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
require "bundler/setup"
|
4
|
+
require_relative "../lib/jekyll-timeago"
|
5
|
+
include Jekyll::Timeago
|
5
6
|
|
6
7
|
help_message = <<END
|
7
8
|
Usage:
|
@@ -12,16 +13,36 @@ Notes:
|
|
12
13
|
[to_date] Optional, defaults to current date
|
13
14
|
|
14
15
|
Options:
|
15
|
-
--help, -h
|
16
|
-
--
|
16
|
+
--help, -h Prints this message
|
17
|
+
--version, -v Prints the current version
|
18
|
+
--console, -c Starts an interactive IRB session with jekyll-timeago included
|
19
|
+
--locale, -l Uses the provided locale
|
17
20
|
END
|
18
21
|
|
19
22
|
if ARGV.empty? || ARGV.include?("--help") || ARGV.include?("-h")
|
20
23
|
puts help_message
|
21
|
-
elsif ARGV.include?
|
24
|
+
elsif ARGV.include?("--version") || ARGV.include?("-v")
|
25
|
+
puts "v#{Jekyll::Timeago::VERSION}"
|
26
|
+
elsif ARGV.include?("--console") || ARGV.include?("-c")
|
22
27
|
require "irb"
|
23
28
|
ARGV.clear
|
24
29
|
IRB.start
|
25
30
|
else
|
26
|
-
|
31
|
+
custom_locale = "--locale" if ARGV.include?("--locale")
|
32
|
+
custom_locale = "-l" if ARGV.include?("-l")
|
33
|
+
|
34
|
+
if custom_locale
|
35
|
+
index = ARGV.index(custom_locale)
|
36
|
+
locale = ARGV.delete_at(index + 1)
|
37
|
+
ARGV.delete_at(index)
|
38
|
+
|
39
|
+
options = { locale: locale }
|
40
|
+
ARGV << options
|
41
|
+
end
|
42
|
+
|
43
|
+
begin
|
44
|
+
puts timeago *ARGV
|
45
|
+
rescue ArgumentError => e
|
46
|
+
puts "ERROR! #{e}"
|
47
|
+
end
|
27
48
|
end
|
data/gemfiles/jekyll_v2.gemfile
CHANGED
data/gemfiles/jekyll_v3.gemfile
CHANGED
data/jekyll-timeago.gemspec
CHANGED
@@ -15,9 +15,12 @@ Gem::Specification.new do |spec|
|
|
15
15
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
16
16
|
spec.require_paths = ["lib"]
|
17
17
|
|
18
|
+
spec.add_dependency "mini_i18n", '~> 0.3.1'
|
19
|
+
|
18
20
|
spec.add_development_dependency "jekyll", ">= 1.5"
|
19
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
20
22
|
spec.add_development_dependency "rake"
|
21
23
|
spec.add_development_dependency "rspec"
|
22
24
|
spec.add_development_dependency "appraisal"
|
25
|
+
spec.add_development_dependency "byebug"
|
23
26
|
end
|
data/lib/jekyll-timeago.rb
CHANGED
@@ -1,10 +1,17 @@
|
|
1
|
-
require '
|
2
|
-
|
1
|
+
require 'mini_i18n'
|
2
|
+
require_relative 'jekyll-timeago/version'
|
3
|
+
require_relative 'jekyll-timeago/core'
|
3
4
|
|
4
|
-
if defined?(Liquid)
|
5
|
-
|
6
|
-
|
5
|
+
if defined?(Jekyll) && defined?(Liquid)
|
6
|
+
require_relative 'jekyll-timeago/jekyll_integration'
|
7
|
+
end
|
7
8
|
|
8
|
-
|
9
|
-
|
9
|
+
module Jekyll
|
10
|
+
module Timeago
|
11
|
+
include Jekyll::Timeago::Core
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
MiniI18n.configure do |config|
|
16
|
+
config.load_translations(__dir__ + '/locales/*.yml')
|
10
17
|
end
|
data/lib/jekyll-timeago/core.rb
CHANGED
@@ -27,57 +27,28 @@ module Jekyll
|
|
27
27
|
to = Date.today
|
28
28
|
end
|
29
29
|
|
30
|
-
@
|
31
|
-
@options = @defaults.merge(options)
|
30
|
+
@options = options
|
32
31
|
|
33
|
-
from = validate_date
|
34
|
-
to = validate_date
|
35
|
-
depth = validate_depth
|
32
|
+
from = validate_date(from)
|
33
|
+
to = validate_date(to)
|
34
|
+
depth = validate_depth(@options[:depth] || @options["depth"])
|
36
35
|
|
37
36
|
time_ago_to_now(from, to, depth)
|
38
37
|
end
|
39
38
|
|
40
|
-
def configure(options = {})
|
41
|
-
@defaults = defaults.merge(options)
|
42
|
-
end
|
43
|
-
|
44
39
|
private
|
45
40
|
|
46
|
-
def validate_date
|
41
|
+
def validate_date(date)
|
47
42
|
Date.parse(date.to_s)
|
48
43
|
end
|
49
44
|
|
50
|
-
def validate_depth
|
51
|
-
(1..MAX_DEPTH_LEVEL).include?(depth)
|
52
|
-
depth
|
53
|
-
end
|
54
|
-
|
55
|
-
def defaults
|
56
|
-
{
|
57
|
-
"depth" => DEFAULT_DEPTH_LEVEL,
|
58
|
-
"today" => 'today',
|
59
|
-
"yesterday" => 'yesterday',
|
60
|
-
"tomorrow" => 'tomorrow',
|
61
|
-
"and" => 'and',
|
62
|
-
"suffix" => 'ago',
|
63
|
-
"prefix" => '',
|
64
|
-
"suffix_future" => '',
|
65
|
-
"prefix_future" => 'in',
|
66
|
-
"years" => 'years',
|
67
|
-
"year" => 'year',
|
68
|
-
"months" => 'months',
|
69
|
-
"month" => 'month',
|
70
|
-
"weeks" => 'weeks',
|
71
|
-
"week" => 'week',
|
72
|
-
"days" => 'days',
|
73
|
-
"day" => 'day'
|
74
|
-
}
|
45
|
+
def validate_depth(depth)
|
46
|
+
(1..MAX_DEPTH_LEVEL).include?(depth) ? depth : DEFAULT_DEPTH_LEVEL
|
75
47
|
end
|
76
48
|
|
77
|
-
def
|
78
|
-
@options
|
49
|
+
def t(key)
|
50
|
+
MiniI18n.translate(key, @options)
|
79
51
|
end
|
80
|
-
alias_method :t, :translate
|
81
52
|
|
82
53
|
# Days passed to time ago sentence
|
83
54
|
def time_ago_to_now(from, to, depth)
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module Timeago
|
3
|
+
@@jekyll_initialized = nil
|
4
|
+
|
5
|
+
def self.jekyll_config(context)
|
6
|
+
@@jekyll_config ||= context.registers[:site].config['jekyll_timeago'] || {}
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.jekyll_page_data(context)
|
10
|
+
options = jekyll_config(context)
|
11
|
+
locale = context['page']['locale']
|
12
|
+
|
13
|
+
options[:locale] = locale if locale
|
14
|
+
|
15
|
+
if !@@jekyll_initialized
|
16
|
+
MiniI18n.configure do |config|
|
17
|
+
if options['translations_path']
|
18
|
+
path = context.registers[:site].source + options['translations_path']
|
19
|
+
config.load_translations(path)
|
20
|
+
end
|
21
|
+
|
22
|
+
config.available_locales = options['available_locales']
|
23
|
+
config.default_locale = options['default_locale']
|
24
|
+
config.fallbacks = options['fallbacks']
|
25
|
+
end
|
26
|
+
|
27
|
+
@@jekyll_initialized = true
|
28
|
+
end
|
29
|
+
|
30
|
+
options
|
31
|
+
end
|
32
|
+
|
33
|
+
module Filter
|
34
|
+
def timeago(from, to = Date.today)
|
35
|
+
options = Jekyll::Timeago.jekyll_page_data(@context)
|
36
|
+
|
37
|
+
Core.timeago(from, to, options)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class Tag < Liquid::Tag
|
42
|
+
def initialize(tag_name, dates, tokens)
|
43
|
+
super
|
44
|
+
@dates = dates.strip.split(' ')
|
45
|
+
end
|
46
|
+
|
47
|
+
def render(context)
|
48
|
+
options = Jekyll::Timeago.jekyll_page_data(context)
|
49
|
+
|
50
|
+
from, to = @dates[0], @dates[1]
|
51
|
+
to = options if to.nil?
|
52
|
+
Core.timeago(from, to, options)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
Liquid::Template.register_filter(Jekyll::Timeago::Filter)
|
59
|
+
Liquid::Template.register_tag('timeago', Jekyll::Timeago::Tag)
|
data/lib/locales/pt.yml
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
pt:
|
2
|
+
today: 'hoje'
|
3
|
+
yesterday: 'ontem'
|
4
|
+
tomorrow: 'amanhã'
|
5
|
+
and: 'e'
|
6
|
+
suffix: 'atrás'
|
7
|
+
prefix: ''
|
8
|
+
suffix_future: ''
|
9
|
+
prefix_future: 'em'
|
10
|
+
years: 'anos'
|
11
|
+
year: 'ano'
|
12
|
+
months: 'meses'
|
13
|
+
month: 'mês'
|
14
|
+
weeks: 'semanas'
|
15
|
+
week: 'semanas'
|
16
|
+
days: 'dias'
|
17
|
+
day: 'dia'
|
data/spec/jekyll-timeago_spec.rb
CHANGED
@@ -14,20 +14,20 @@ describe Jekyll::Timeago do
|
|
14
14
|
let(:contents) { File.read(dest_dir("index.html")) }
|
15
15
|
|
16
16
|
it 'setup from Jekyll configuration' do
|
17
|
-
expect(site.config['jekyll_timeago']).to
|
17
|
+
expect(site.config['jekyll_timeago']).to eq(configuration_file['jekyll_timeago'])
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'process successfully the site using filters and tags' do
|
21
21
|
allow(Date).to receive(:today) { Date.new(2016, 1, 1) }
|
22
22
|
expect { site.process }.to_not raise_error
|
23
23
|
|
24
|
-
|
25
|
-
"<p>2
|
26
|
-
"<p>12
|
27
|
-
"<p>12
|
28
|
-
"<p>2
|
29
|
-
|
30
|
-
expect(contents).to eq(
|
24
|
+
expected =
|
25
|
+
"<p>2 años</p>\n"\
|
26
|
+
"<p>12 meses</p>\n"\
|
27
|
+
"<p>12 meses</p>\n"\
|
28
|
+
"<p>2 años</p>"
|
29
|
+
|
30
|
+
expect(contents).to eq(expected)
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
@@ -35,64 +35,42 @@ describe Jekyll::Timeago do
|
|
35
35
|
let (:sample_date) { Date.new(2014, 7, 30) }
|
36
36
|
let (:today) { Date.today }
|
37
37
|
|
38
|
-
before do
|
39
|
-
Jekyll::Timeago::Core.configure
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'does not accept invalid depth' do
|
43
|
-
expect { timeago(today, sample_date, "depth" => 5) }.to raise_error(ArgumentError)
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'accepts a hash (options) as a second parameter (implicit "to")' do
|
47
|
-
expect(timeago(today, "today" => "during the day")).to eq("during the day")
|
48
|
-
end
|
49
|
-
|
50
38
|
it 'yesterday, today and tomorrow' do
|
51
|
-
expect(timeago(today.prev_day)).to
|
52
|
-
expect(timeago(today)).to
|
53
|
-
expect(timeago(today.next_day)).to
|
39
|
+
expect(timeago(today.prev_day)).to eq("yesterday")
|
40
|
+
expect(timeago(today)).to eq("today")
|
41
|
+
expect(timeago(today.next_day)).to eq("tomorrow")
|
54
42
|
end
|
55
43
|
|
56
44
|
it 'past time' do
|
57
|
-
expect(timeago(sample_date.prev_day(10), sample_date)).to
|
58
|
-
expect(timeago(sample_date.prev_day(100), sample_date)).to
|
59
|
-
expect(timeago(sample_date.prev_day(500), sample_date)).to
|
45
|
+
expect(timeago(sample_date.prev_day(10), sample_date)).to eq('1 week and 3 days ago')
|
46
|
+
expect(timeago(sample_date.prev_day(100), sample_date)).to eq('3 months and 1 week ago')
|
47
|
+
expect(timeago(sample_date.prev_day(500), sample_date)).to eq('1 year and 4 months ago')
|
60
48
|
end
|
61
49
|
|
62
50
|
it 'future time' do
|
63
|
-
expect(timeago(sample_date.next_day(7), sample_date)).to
|
64
|
-
expect(timeago(sample_date.next_day(1000), sample_date)).to
|
51
|
+
expect(timeago(sample_date.next_day(7), sample_date)).to eq('in 1 week')
|
52
|
+
expect(timeago(sample_date.next_day(1000), sample_date)).to eq('in 2 years and 9 months')
|
65
53
|
end
|
66
54
|
|
67
55
|
it 'allow different date formats' do
|
68
|
-
expect(timeago('2010-1-1', '2012-1-1')).to
|
69
|
-
expect(timeago('2010/1/1', '2012/1/1')).to
|
70
|
-
expect(timeago('Jan 2010, 1', 'Jan 2012, 1')).to
|
71
|
-
expect(timeago('20100101', '20120101')).to
|
72
|
-
expect(timeago('2014-10-06 20:00:00', '2014-10-07 20:00:00')).to
|
73
|
-
end
|
74
|
-
|
75
|
-
it 'allow to change defaults at global level' do
|
76
|
-
Jekyll::Timeago::Core.configure("year" => nil, "depth" => 1, "suffix" => nil)
|
77
|
-
expect(timeago(sample_date.prev_day(500), sample_date)).to eql('1')
|
56
|
+
expect(timeago('2010-1-1', '2012-1-1')).to eq('2 years ago')
|
57
|
+
expect(timeago('2010/1/1', '2012/1/1')).to eq('2 years ago')
|
58
|
+
expect(timeago('Jan 2010, 1', 'Jan 2012, 1')).to eq('2 years ago')
|
59
|
+
expect(timeago('20100101', '20120101')).to eq('2 years ago')
|
60
|
+
expect(timeago('2014-10-06 20:00:00', '2014-10-07 20:00:00')).to eq('yesterday')
|
78
61
|
end
|
79
62
|
|
80
63
|
it 'allow to change level of detail' do
|
81
|
-
expect(timeago(sample_date.prev_day(500), sample_date,
|
82
|
-
expect(timeago(sample_date.prev_day(500), sample_date, "depth" =>
|
83
|
-
expect(timeago(sample_date.prev_day(500), sample_date,
|
64
|
+
expect(timeago(sample_date.prev_day(500), sample_date, depth: 1)).to eq('1 year ago')
|
65
|
+
expect(timeago(sample_date.prev_day(500), sample_date, "depth" => 1)).to eq('1 year ago')
|
66
|
+
expect(timeago(sample_date.prev_day(500), sample_date, depth: 2)).to eq('1 year and 4 months ago')
|
67
|
+
expect(timeago(sample_date.prev_day(500), sample_date, depth: 3)).to eq('1 year, 4 months and 2 weeks ago')
|
68
|
+
expect(timeago(sample_date.prev_day(500), sample_date, depth: 4)).to eq('1 year, 4 months, 2 weeks and 1 day ago')
|
69
|
+
expect(timeago(sample_date.prev_day(500), sample_date, depth: 5)).to eq('1 year and 4 months ago')
|
84
70
|
end
|
85
71
|
|
86
72
|
it 'allow localization' do
|
87
|
-
|
88
|
-
"prefix" => 'hace',
|
89
|
-
"months" => 'meses',
|
90
|
-
"and" => 'y',
|
91
|
-
"week" => 'semana',
|
92
|
-
"suffix" => nil
|
93
|
-
}
|
94
|
-
|
95
|
-
expect(timeago(sample_date.prev_day(100), sample_date, new_options)).to eql('hace 3 meses y 1 semana')
|
73
|
+
expect(timeago(sample_date.prev_day(100), sample_date, locale: :fr)).to eq('il y a environ 3 mois et 1 semaine')
|
96
74
|
end
|
97
75
|
end
|
98
76
|
|
@@ -102,8 +80,22 @@ describe Jekyll::Timeago do
|
|
102
80
|
expect(`jekyll-timeago --help`).to match("Usage")
|
103
81
|
end
|
104
82
|
|
83
|
+
it 'prints current version' do
|
84
|
+
expect(`jekyll-timeago -v`).to match("v#{Jekyll::Timeago::VERSION}")
|
85
|
+
expect(`jekyll-timeago --version`).to match("v#{Jekyll::Timeago::VERSION}")
|
86
|
+
end
|
87
|
+
|
105
88
|
it 'computes distance of dates' do
|
106
89
|
expect(`jekyll-timeago 2016-1-1 2016-1-5`).to match("4 days ago")
|
107
90
|
end
|
91
|
+
|
92
|
+
it 'prints error with invalid date' do
|
93
|
+
expect(`jekyll-timeago 1`).to match("ERROR!")
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'with custom locale' do
|
97
|
+
expect(`jekyll-timeago 2016-1-1 2016-1-5 -l fr`).to match("il y a environ 4 jours")
|
98
|
+
expect(`jekyll-timeago 2016-1-1 2016-1-5 --locale fr`).to match("il y a environ 4 jours")
|
99
|
+
end
|
108
100
|
end
|
109
101
|
end
|
data/spec/source/_config.yml
CHANGED
@@ -3,19 +3,9 @@ gems:
|
|
3
3
|
|
4
4
|
jekyll_timeago:
|
5
5
|
depth: 1
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
suffix_future: ''
|
13
|
-
prefix_future: 'in'
|
14
|
-
years: 'years'
|
15
|
-
year: 'year'
|
16
|
-
months: 'months'
|
17
|
-
month: 'month'
|
18
|
-
weeks: 'weeks'
|
19
|
-
week: 'week'
|
20
|
-
days: 'days'
|
21
|
-
day: 'day'
|
6
|
+
translations_path: "/_locales/*.yaml"
|
7
|
+
default_locale: 'en'
|
8
|
+
available_locales:
|
9
|
+
- 'en'
|
10
|
+
- 'es'
|
11
|
+
- 'fr'
|
data/spec/source/index.html
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,11 +1,9 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
require 'jekyll'
|
3
|
-
require
|
3
|
+
require 'jekyll-timeago'
|
4
4
|
|
5
5
|
RSpec.configure do |config|
|
6
|
-
config.
|
7
|
-
config.filter_run :focus
|
8
|
-
config.order = 'random'
|
6
|
+
config.order = :random
|
9
7
|
|
10
8
|
SOURCE_DIR = File.expand_path('../source', __FILE__)
|
11
9
|
DEST_DIR = File.expand_path('../_site', __FILE__)
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-timeago
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- markets
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-07-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: mini_i18n
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.3.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.3.1
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: jekyll
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +94,20 @@ dependencies:
|
|
80
94
|
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: byebug
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
83
111
|
description: A Ruby library to compute distance of dates in words. Originally built
|
84
112
|
for Jekyll, as a Liquid extension. It also supports localization and futures.
|
85
113
|
email:
|
@@ -102,15 +130,16 @@ files:
|
|
102
130
|
- gemfiles/jekyll_v3.gemfile
|
103
131
|
- jekyll-timeago.gemspec
|
104
132
|
- lib/jekyll-timeago.rb
|
105
|
-
- lib/jekyll-timeago/config/_config.yml.example.en
|
106
|
-
- lib/jekyll-timeago/config/_config.yml.example.es
|
107
|
-
- lib/jekyll-timeago/config/_config.yml.example.fr
|
108
133
|
- lib/jekyll-timeago/core.rb
|
109
|
-
- lib/jekyll-timeago/
|
110
|
-
- lib/jekyll-timeago/tag.rb
|
134
|
+
- lib/jekyll-timeago/jekyll_integration.rb
|
111
135
|
- lib/jekyll-timeago/version.rb
|
136
|
+
- lib/locales/en.yml
|
137
|
+
- lib/locales/es.yml
|
138
|
+
- lib/locales/fr.yml
|
139
|
+
- lib/locales/pt.yml
|
112
140
|
- spec/jekyll-timeago_spec.rb
|
113
141
|
- spec/source/_config.yml
|
142
|
+
- spec/source/_locales/overrides.yaml
|
114
143
|
- spec/source/index.html
|
115
144
|
- spec/spec_helper.rb
|
116
145
|
homepage: https://github.com/markets/jekyll-timeago
|
@@ -133,12 +162,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
133
162
|
version: '0'
|
134
163
|
requirements: []
|
135
164
|
rubyforge_project:
|
136
|
-
rubygems_version: 2.
|
165
|
+
rubygems_version: 2.6.13
|
137
166
|
signing_key:
|
138
167
|
specification_version: 4
|
139
168
|
summary: A date helper to compute distance of dates in words.
|
140
169
|
test_files:
|
141
170
|
- spec/jekyll-timeago_spec.rb
|
142
171
|
- spec/source/_config.yml
|
172
|
+
- spec/source/_locales/overrides.yaml
|
143
173
|
- spec/source/index.html
|
144
174
|
- spec/spec_helper.rb
|
data/lib/jekyll-timeago/tag.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
module Jekyll
|
2
|
-
module Timeago
|
3
|
-
class Tag < Liquid::Tag
|
4
|
-
def initialize(tag_name, dates, tokens)
|
5
|
-
super
|
6
|
-
@dates = dates.strip.split(' ')
|
7
|
-
end
|
8
|
-
|
9
|
-
def render(context)
|
10
|
-
from, to = @dates[0], @dates[1]
|
11
|
-
config = context.registers[:site].config.fetch('jekyll_timeago', {})
|
12
|
-
|
13
|
-
if to
|
14
|
-
Jekyll::Timeago::Core.timeago(from, to, config)
|
15
|
-
else
|
16
|
-
Jekyll::Timeago::Core.timeago(from, config)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|