jekyll-timeago 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,3 +1,5 @@
1
1
  pkg
2
2
  .rvmrc
3
- Gemfile.lock
3
+ Gemfile.lock
4
+ spec/_site
5
+ .rpsec
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1
4
+ - 2.0
5
+ - 1.9.3
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Jekyll-Timeago
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/jekyll-timeago.svg)](http://badge.fury.io/rb/jekyll-timeago)
3
+ [![Gem Version](https://badge.fury.io/rb/jekyll-timeago.svg)](http://badge.fury.io/rb/jekyll-timeago) [![Build Status](https://travis-ci.org/markets/jekyll-timeago.svg?branch=master)](https://travis-ci.org/markets/jekyll-timeago)
4
4
 
5
5
  Custom and simple implementation of `timeago` date filter. Main features:
6
6
 
@@ -12,8 +12,8 @@ Custom and simple implementation of `timeago` date filter. Main features:
12
12
 
13
13
  In fact, `jekyll-timeago` is an extension of [Liquid](https://github.com/Shopify/liquid) Filters and Tags, so you can use it in other Liquid templates (like Octopress).
14
14
 
15
-
16
15
  ## Installation
16
+
17
17
  You have 3 options to install the plugin:
18
18
 
19
19
  **Via Jekyll plugin system**
@@ -51,25 +51,20 @@ Bundler.require(:default)
51
51
 
52
52
  Alternatively, you can simply copy [this file](lib/jekyll-timeago/filter.rb) and [this file](lib/jekyll-timeago/tag.rb) directly into your `_plugins/` directory!
53
53
 
54
-
55
54
  ## Usage
55
+
56
56
  By default `timeago` computes distance of dates from passed date to current date (using `Date.today`). But you are able to modify this range passing a second argument in order to compute the distance of these dates in words.
57
57
 
58
58
  **Filter example**:
59
59
 
60
60
  ```html
61
- <span>{{ page.date | timeago }}</span>
62
- <h2>{{ page.title }}</h2>
63
-
64
- <div class="post">
65
- {{ content }}
66
- </div>
61
+ <p>{{ page.date | timeago }}</p>
67
62
  ```
68
63
 
69
64
  Passing a parameter:
70
65
 
71
66
  ```html
72
- <span>{{ page.date | timeago: '2020-1-1' }}</span>
67
+ <p>{{ page.date | timeago: '2020-1-1' }}</p>
73
68
  ```
74
69
 
75
70
  **Tag example**:
@@ -81,11 +76,11 @@ Passing a parameter:
81
76
  Passing a second parameter:
82
77
 
83
78
  ```html
84
- <p>{% timeago 2000-1-1 20010-1-1 %}</p>
79
+ <p>{% timeago 2000-1-1 2010-1-1 %}</p>
85
80
  ```
86
81
 
87
-
88
82
  ## Localization
83
+
89
84
  The plugin allows you to localize the strings needed to build the time ago sentences. For do this, you must add some extra keys to your `_config.yml`. You can simply copy them from [this example file](_config.yml.example) and translate it to your site's language. Sample:
90
85
 
91
86
  ```
@@ -109,8 +104,8 @@ jekyll_timeago:
109
104
  day: 'day'
110
105
  ```
111
106
 
112
-
113
107
  ## Level of detail (Depth)
108
+
114
109
  You are able to change the level of detail (from 1 up to 4, 2 by default) to get higher or lower granularity. This option is setted via the `config` file (see sample in previous section). Examples:
115
110
 
116
111
  * Depht => 1 `1 year ago`
@@ -118,8 +113,8 @@ You are able to change the level of detail (from 1 up to 4, 2 by default) to get
118
113
  * Depht => 3 `1 year, 4 months and 1 week ago`
119
114
  * Depht => 4 `1 year, 4 months, 1 week and 4 days ago`
120
115
 
121
-
122
116
  ## Output Examples
117
+
123
118
  Run `script/console` to start a custom IRB session and play with `timeago` method:
124
119
 
125
120
  ```ruby
@@ -143,5 +138,15 @@ Run `script/console` to start a custom IRB session and play with `timeago` metho
143
138
  => "in 2 years and 8 months"
144
139
  ```
145
140
 
141
+ Play with `options`:
142
+
143
+ ```ruby
144
+ >> options[:yesterday] = "ayer"
145
+ => "ayer"
146
+ >> timeago(Date.today - 1.day)
147
+ => "ayer"
148
+ ```
149
+
146
150
  ## License
151
+
147
152
  Copyright (c) 2013-2014 Marc Anguera. Jekyll-Timeago is released under the [MIT](LICENSE) License.
data/Rakefile CHANGED
@@ -1 +1,6 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.version = Jekyll::Timeago::VERSION
9
9
  spec.authors = ["markets"]
10
10
  spec.email = ["srmarc.ai@gmail.com"]
11
- spec.description = %q{Custom timeago filter for Jekyll (Liquid filter). Localization and futures supported.}
12
- spec.summary = %q{Custom timeago filter for Jekyll (Liquid filter). Localization and futures supported.}
11
+ spec.description = "Custom timeago filter for Jekyll (Liquid Filter and Tag). Localization and futures supported."
12
+ spec.summary = "Custom timeago filter for Jekyll (Liquid Filter and Tag). Localization and futures supported."
13
13
  spec.homepage = "https://github.com/markets/jekyll-timeago"
14
14
  spec.license = "MIT"
15
15
 
@@ -18,6 +18,9 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
+ spec.add_development_dependency "jekyll", ">= 1.5"
21
22
  spec.add_development_dependency "bundler", "~> 1.3"
22
23
  spec.add_development_dependency "rake"
24
+ spec.add_development_dependency "rspec"
25
+ spec.add_development_dependency "activesupport"
23
26
  end
@@ -3,6 +3,7 @@ require 'date'
3
3
  module Jekyll
4
4
  module Timeago
5
5
  module Filter
6
+ extend self
6
7
 
7
8
  DAYS_PER = {
8
9
  :days => 1,
@@ -28,6 +29,15 @@ module Jekyll
28
29
  time_ago_to_now(from, to, depth)
29
30
  end
30
31
 
32
+ def options
33
+ @options ||= setup
34
+ end
35
+
36
+ # Restore default configuration
37
+ def reset!
38
+ setup
39
+ end
40
+
31
41
  private
32
42
 
33
43
  def validate_date!(date)
@@ -39,30 +49,31 @@ module Jekyll
39
49
  depth
40
50
  end
41
51
 
42
- # Get plugin configuration from site. Returns an empty hash if not provided.
43
- def config
44
- @config ||= Jekyll.configuration({}).fetch('jekyll_timeago', {}) rescue {}
52
+ # Load settings from Jekyll configuration
53
+ def jekyll_config
54
+ @jekyll_config ||= Jekyll.configuration({}).fetch('jekyll_timeago', {}) rescue {}
45
55
  end
46
56
 
47
- def options
48
- @options ||= {
49
- :depth => config['depth'] || DEFAULT_DEPTH_LEVEL,
50
- :today => config['day'] || 'today',
51
- :yesterday => config['yesterday'] || 'yesterday',
52
- :tomorrow => config['tomorrow'] || 'tomorrow',
53
- :and => config['and'] ||'and',
54
- :suffix => config['suffix'] || 'ago',
55
- :prefix => config['prefix'] || '',
56
- :suffix_future => config['suffix_future'] || '',
57
- :prefix_future => config['prefix_future'] || 'in',
58
- :years => config['years'] || 'years',
59
- :year => config['year'] || 'year',
60
- :months => config['months'] || 'months',
61
- :month => config['month'] || 'month',
62
- :weeks => config['weeks'] || 'weeks',
63
- :week => config['week'] || 'week',
64
- :days => config['days'] || 'days',
65
- :day => config['day'] || 'day'
57
+ # Configure plugin options with defaults
58
+ def setup
59
+ @options = {
60
+ :depth => jekyll_config['depth'] || DEFAULT_DEPTH_LEVEL,
61
+ :today => jekyll_config['day'] || 'today',
62
+ :yesterday => jekyll_config['yesterday'] || 'yesterday',
63
+ :tomorrow => jekyll_config['tomorrow'] || 'tomorrow',
64
+ :and => jekyll_config['and'] ||'and',
65
+ :suffix => jekyll_config['suffix'] || 'ago',
66
+ :prefix => jekyll_config['prefix'] || '',
67
+ :suffix_future => jekyll_config['suffix_future'] || '',
68
+ :prefix_future => jekyll_config['prefix_future'] || 'in',
69
+ :years => jekyll_config['years'] || 'years',
70
+ :year => jekyll_config['year'] || 'year',
71
+ :months => jekyll_config['months'] || 'months',
72
+ :month => jekyll_config['month'] || 'month',
73
+ :weeks => jekyll_config['weeks'] || 'weeks',
74
+ :week => jekyll_config['week'] || 'week',
75
+ :days => jekyll_config['days'] || 'days',
76
+ :day => jekyll_config['day'] || 'day'
66
77
  }
67
78
  end
68
79
 
@@ -99,7 +110,8 @@ module Jekyll
99
110
 
100
111
  time_range = days_to_time_range(days_passed)
101
112
  days = DAYS_PER[time_range]
102
- num_elems = days_passed / days
113
+ num_elems = (days_passed / days).to_i
114
+
103
115
  range_type = if num_elems == 1
104
116
  t(time_range[0...-1]) # singularize key
105
117
  else
@@ -107,18 +119,18 @@ module Jekyll
107
119
  end
108
120
 
109
121
  current_slots << "#{num_elems} #{range_type}"
110
- pending_days = days_passed - (num_elems*days)
122
+ pending_days = days_passed - (num_elems * days)
111
123
  build_time_ago_slots(pending_days, depth - 1, current_slots)
112
124
  end
113
125
 
114
126
  # Number of days to minimum period time which can be grouped
115
127
  def days_to_time_range(days_passed)
116
128
  case days_passed.abs
117
- when 0...7
129
+ when 1..6
118
130
  :days
119
- when 7...31
131
+ when 7..30
120
132
  :weeks
121
- when 31...365
133
+ when 31..365
122
134
  :months
123
135
  else
124
136
  :years
@@ -1,5 +1,5 @@
1
1
  module Jekyll
2
2
  module Timeago
3
- VERSION = "0.7.0"
3
+ VERSION = "0.8.0"
4
4
  end
5
5
  end
@@ -0,0 +1,81 @@
1
+ require 'spec_helper'
2
+
3
+ describe Jekyll::Timeago do
4
+ context 'Jekyll integration' do
5
+ let(:site) do
6
+ Jekyll::Site.new(site_configuration)
7
+ end
8
+
9
+ it 'setup from Jekyll configuration' do
10
+ expect(site.config['jekyll_timeago']).to eql(configuration_file['jekyll_timeago'])
11
+ end
12
+
13
+ it 'process successfully the site using filters and tags' do
14
+ expect { site.process }.to_not raise_error
15
+ end
16
+ end
17
+
18
+ context 'Timeago calculations' do
19
+ let (:sample_date) { Date.new(2014, 7, 30) }
20
+
21
+ before(:each) do
22
+ Jekyll::Timeago::Filter.reset!
23
+ end
24
+
25
+ it 'does not accept invalid depth' do
26
+ options[:depth] = 5
27
+
28
+ expect { timeago(today) }.to raise_error
29
+ end
30
+
31
+ it 'yesterday, today and tomorrow' do
32
+ today = Date.today
33
+
34
+ expect(timeago(today - 1.day)).to eql(options[:yesterday])
35
+ expect(timeago(today)).to eql(options[:today])
36
+ expect(timeago(today + 1.day)).to eql(options[:tomorrow])
37
+ end
38
+
39
+ context 'past time' do
40
+ it 'should process distances' do
41
+ expect(timeago(sample_date - 10.days, sample_date)).to eql('1 week and 3 days ago')
42
+ expect(timeago(sample_date - 100.days, sample_date)).to eql('3 months and 1 week ago')
43
+ expect(timeago(sample_date - 500.days, sample_date)).to eql('1 year and 4 months ago')
44
+ end
45
+ end
46
+
47
+ context 'future time' do
48
+ it 'should process distances' do
49
+ expect(timeago(sample_date + 7.days, sample_date)).to eql('in 1 week')
50
+ expect(timeago(sample_date + 1000.days, sample_date)).to eql('in 2 years and 9 months')
51
+ end
52
+ end
53
+
54
+ it 'allow different date inputs' do
55
+ expect(timeago('2010-1-1', '2012-1-1')).to eql('2 years ago')
56
+ expect(timeago('2010/1/1', '2012/1/1')).to eql('2 years ago')
57
+ expect(timeago('Jan 2010, 1', 'Jan 2012, 1')).to eql('2 years ago')
58
+ end
59
+
60
+ it 'allow to change level of detail' do
61
+ options[:depth] = 1
62
+ expect(timeago(sample_date - 500.days, sample_date)).to eql('1 year ago')
63
+
64
+ options[:depth] = 3
65
+ expect(timeago(sample_date - 500.days, sample_date)).to eql('1 year, 4 months and 2 weeks ago')
66
+
67
+ options[:depth] = 4
68
+ expect(timeago(sample_date - 500.days, sample_date)).to eql('1 year, 4 months, 2 weeks and 1 day ago')
69
+ end
70
+
71
+ it 'allow localization' do
72
+ options[:prefix] = 'hace'
73
+ options[:months] = 'meses'
74
+ options[:and] = 'y'
75
+ options[:week] = 'semana'
76
+ options[:suffix] = nil
77
+
78
+ expect(timeago(sample_date - 100.days, sample_date)).to eql('hace 3 meses y 1 semana')
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,21 @@
1
+ gems:
2
+ - jekyll-timeago
3
+
4
+ jekyll_timeago:
5
+ depth: 3
6
+ today: 'today'
7
+ yesterday: 'yesterday'
8
+ tomorrow: 'tomorrow'
9
+ and: 'and'
10
+ suffix: 'ago'
11
+ prefix: ''
12
+ suffix_future: 'in'
13
+ prefix_future: ''
14
+ years: 'years'
15
+ year: 'year'
16
+ months: 'months'
17
+ month: 'month'
18
+ weeks: 'weeks'
19
+ week: 'week'
20
+ days: 'days'
21
+ day: 'day'
@@ -0,0 +1,8 @@
1
+ ---
2
+ ---
3
+
4
+ <p>{% timeago 2014-1-1 %}</p>
5
+ <p>{% timeago 2014-1-1 2015-1-1 %}</p>
6
+ <p>{{ '2014-1-1' | timeago: '2015-1-1' }}</p>
7
+ <p>{{ '2014-1-1' | timeago }}</p>
8
+ <p>{{ 'Aug 2014, 15' | timeago }}</p>
@@ -0,0 +1,43 @@
1
+ require 'fileutils'
2
+ require 'active_support'
3
+ require 'active_support/core_ext'
4
+ require 'jekyll'
5
+ require File.expand_path('lib/jekyll-timeago/filter')
6
+
7
+ RSpec.configure do |config|
8
+ config.run_all_when_everything_filtered = true
9
+ config.filter_run :focus
10
+ config.order = 'random'
11
+
12
+ SOURCE_DIR = File.expand_path('../source', __FILE__)
13
+ DEST_DIR = File.expand_path('../_site', __FILE__)
14
+ FileUtils.rm_rf(DEST_DIR)
15
+ FileUtils.mkdir_p(DEST_DIR)
16
+
17
+ def source_dir(*files)
18
+ File.join(SOURCE_DIR, *files)
19
+ end
20
+
21
+ def dest_dir(*files)
22
+ File.join(DEST_DIR, *files)
23
+ end
24
+
25
+ def configuration_file
26
+ YAML.load_file(File.join(SOURCE_DIR, '_config.yml'))
27
+ end
28
+
29
+ def site_configuration(overrides = {})
30
+ Jekyll.configuration(overrides.merge({
31
+ 'source' => source_dir,
32
+ 'destination' => dest_dir
33
+ }))
34
+ end
35
+
36
+ def timeago(from, to = Date.today)
37
+ Jekyll::Timeago::Filter.timeago(from, to)
38
+ end
39
+
40
+ def options
41
+ @options ||= Jekyll::Timeago::Filter.options
42
+ end
43
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-timeago
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,8 +9,24 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-05-02 00:00:00.000000000 Z
12
+ date: 2014-07-31 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: jekyll
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '1.5'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '1.5'
14
30
  - !ruby/object:Gem::Dependency
15
31
  name: bundler
16
32
  requirement: !ruby/object:Gem::Requirement
@@ -43,8 +59,40 @@ dependencies:
43
59
  - - ! '>='
44
60
  - !ruby/object:Gem::Version
45
61
  version: '0'
46
- description: Custom timeago filter for Jekyll (Liquid filter). Localization and futures
47
- supported.
62
+ - !ruby/object:Gem::Dependency
63
+ name: rspec
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: activesupport
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ description: Custom timeago filter for Jekyll (Liquid Filter and Tag). Localization
95
+ and futures supported.
48
96
  email:
49
97
  - srmarc.ai@gmail.com
50
98
  executables: []
@@ -52,6 +100,7 @@ extensions: []
52
100
  extra_rdoc_files: []
53
101
  files:
54
102
  - .gitignore
103
+ - .travis.yml
55
104
  - Gemfile
56
105
  - LICENSE
57
106
  - README.md
@@ -63,6 +112,10 @@ files:
63
112
  - lib/jekyll-timeago/tag.rb
64
113
  - lib/jekyll-timeago/version.rb
65
114
  - script/console
115
+ - spec/jekyll_timeago_spec.rb
116
+ - spec/source/_config.yml
117
+ - spec/source/index.html
118
+ - spec/spec_helper.rb
66
119
  homepage: https://github.com/markets/jekyll-timeago
67
120
  licenses:
68
121
  - MIT
@@ -76,17 +129,27 @@ required_ruby_version: !ruby/object:Gem::Requirement
76
129
  - - ! '>='
77
130
  - !ruby/object:Gem::Version
78
131
  version: '0'
132
+ segments:
133
+ - 0
134
+ hash: 3767954602793850700
79
135
  required_rubygems_version: !ruby/object:Gem::Requirement
80
136
  none: false
81
137
  requirements:
82
138
  - - ! '>='
83
139
  - !ruby/object:Gem::Version
84
140
  version: '0'
141
+ segments:
142
+ - 0
143
+ hash: 3767954602793850700
85
144
  requirements: []
86
145
  rubyforge_project:
87
146
  rubygems_version: 1.8.23
88
147
  signing_key:
89
148
  specification_version: 3
90
- summary: Custom timeago filter for Jekyll (Liquid filter). Localization and futures
91
- supported.
92
- test_files: []
149
+ summary: Custom timeago filter for Jekyll (Liquid Filter and Tag). Localization and
150
+ futures supported.
151
+ test_files:
152
+ - spec/jekyll_timeago_spec.rb
153
+ - spec/source/_config.yml
154
+ - spec/source/index.html
155
+ - spec/spec_helper.rb