time_will_tell 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9df2e1dbc70a4b7a75f46a82274345c31e28503b
4
- data.tar.gz: 6301da2b44cfdf952d658caad8b21d74ae18e051
3
+ metadata.gz: c5a680687c83bfbc5595591eed660e67f9bf6af1
4
+ data.tar.gz: ebbe5e4ffb9981daa57889fbc6bc5c94f290af56
5
5
  SHA512:
6
- metadata.gz: 416388541bc70c215cb26bede5c8f1bd06b35df69b3c08803eadea363ed1fa137561f3b68aabe7da06427614e191fce7e0494c6f85a0f19aa4553aaf51a70def
7
- data.tar.gz: 1adda75db830cf80c1af65ed034b7d721db63c7150a629e26084a8a18750426ffc1fdeed4f660d000f6fa1f26afc7b91fa2bf22d75551fec17ecf0ccf474ff35
6
+ metadata.gz: 4083a53a1234ac98932b8d8b58289dee948369873b1e3e179447c611990514acd8e992d670b93247888ce94f588b4a1d9fb4dd6f230fa2f912c8fefa2947f027
7
+ data.tar.gz: 2697182c903ade85536a061facb3b542d648ff2013a8b76a53b58b979812155ea00ed0799bf11d0b3d1ac90c62255d975d79840947a1eeb4c596926641a515d1
data/README.md CHANGED
@@ -4,21 +4,104 @@ Specialized conversions of dates and times to strings.
4
4
 
5
5
  ## Installation
6
6
 
7
- Add this line to your application's Gemfile:
7
+ Add `time_will_tell` to your Gemfile:
8
8
 
9
9
  gem 'time_will_tell'
10
10
 
11
- And then execute:
11
+ ### Install the default locale file
12
12
 
13
- $ bundle
13
+ Run the generator to add the default locale file `time_will_tell.en.yml` to your `config/locales` directory:
14
14
 
15
- Or install it yourself as:
16
-
17
- $ gem install time_will_tell
15
+ $ rails generate time_will_tell:install
18
16
 
19
17
  ## Usage
20
18
 
21
- TODO: Write usage instructions here
19
+ `time_will_tell` offers 2 view helpers for dealing with dates.
20
+
21
+ ### exact_distance_of_time_in_words
22
+
23
+ The similarity with [`distance_of_time_in_words`](http://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html#method-i-distance_of_time_in_words) is not a coincidence. Both methods share the a similar signature:
24
+
25
+ exact_distance_of_time_in_words(from_time, to_time, options = {})
26
+
27
+ # => '2 hours 33 minutes'
28
+ # => '1 hour and a half'
29
+ # => '3 years 11 months and 21 seconds'
30
+ # => '1 month 15 days and 1 minute'
31
+ # => '1 day 2 hours and a half and 5 seconds'
32
+ # => 'half an hour'
33
+
34
+ #### Options
35
+
36
+ Displaying the seconds is optional and off by default. Use `include_seconds: true` to include them.
37
+
38
+ You can also supply your own locale by specifying a locale `scope`. The default is `time_will_tell.distance_in_words`.
39
+
40
+ #### Locales
41
+
42
+ You can either replace the default locale strings or copy the structure under a different scope to be able to toggle between a default version and an alternate one.
43
+
44
+ For example, the following scope would output
45
+
46
+ ```
47
+ compact_distance_in_words:
48
+ template: "%{count}%{unit}"
49
+ template_long: "%{rest} %{last}"
50
+
51
+ units:
52
+ second: s
53
+ minute: m
54
+ hour: h
55
+ day: d
56
+ month: M
57
+ year: Y
58
+
59
+ special:
60
+ half_an_hour: 30m
61
+ and_a_half: 30m
62
+ ```
63
+
64
+ exact_distance_of_time_in_words(from_time, to_time, scope: 'compact_distance_in_words')
65
+ # => '1d 2h 30m 5s'
66
+
67
+ ### date_range
68
+
69
+ `date_range` simplifies displaying a date range in a brief format.
70
+
71
+ # Oct 3 - 8, 2012
72
+ # Jan 30 - Feb 5, 2013
73
+ # Dec 26, 2012 - Jan 3, 2013
74
+
75
+ The output depends on whether the dates are on the same day, month and year.
76
+
77
+ #### Options
78
+
79
+ ##### format
80
+
81
+ You can choose to display the full month names by specifying `format: :long`.
82
+
83
+ date_range(from_date, to_date, format: :long)
84
+ # January 30 - February 5, 2013
85
+
86
+ ##### separator
87
+
88
+ You can choose a different separator if you don't like this guy `-`.
89
+
90
+ date_range(from_date, to_date, separator: 'to')
91
+ # Oct 3 to 8, 2012
92
+
93
+ ##### show_year
94
+
95
+ Sometimes you don't want the year to show up in the date range.
96
+
97
+ date_range(from_date, to_date, show_year: false)
98
+ # Jan 30 - Feb 5
99
+
100
+ By default the year will always be shown. Also, if the dates are in different years, the years will be shown even if `show_year` is `false`.
101
+
102
+ #### Locales
103
+
104
+ Just as with `exact_distance_of_time_in_words` you can specify your own locale `scope`.
22
105
 
23
106
  ## Contributing
24
107
 
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  module TimeWillTell
2
3
  module Generators
3
4
  class InstallGenerator < Rails::Generators::Base
@@ -1,10 +1,11 @@
1
1
  en:
2
2
  time_will_tell:
3
3
  date_range:
4
- different_months_same_year: "%{from_month} %{from_day} %{sep} %{to_month} %{to_day}, %{year}"
4
+ different_months_same_year: "%{from_month} %{from_day} %{sep} %{to_month} %{to_day}"
5
5
  different_years: "%{from_month} %{from_day}, %{from_year} %{sep} %{to_month} %{to_day}, %{to_year}"
6
- same_month: "%{month} %{from_day} %{sep} %{to_day}, %{year}"
7
- same_date: "%{month} %{from_day}, %{year}"
6
+ same_month: "%{month} %{from_day} %{sep} %{to_day}"
7
+ same_date: "%{month} %{from_day}"
8
+ with_year: "%{date_range}, %{year}"
8
9
 
9
10
  distance_in_words:
10
11
  template: "%{count} %{unit}"
@@ -6,6 +6,7 @@ module TimeWillTell
6
6
  format = options.fetch(:format, :short)
7
7
  scope = options.fetch(:scope, 'time_will_tell.date_range')
8
8
  separator = options.fetch(:separator, '—')
9
+ show_year = options.fetch(:show_year, true)
9
10
 
10
11
  month_names = format.to_sym == :short ? I18n.t("date.abbr_month_names") : I18n.t("date.month_names")
11
12
 
@@ -39,7 +40,13 @@ module TimeWillTell
39
40
  end
40
41
  end
41
42
 
42
- I18n.t("#{scope}.#{template}", dates)
43
+ without_year = I18n.t("#{scope}.#{template}", dates)
44
+
45
+ if show_year && from_date.year == to_date.year
46
+ I18n.t("#{scope}.with_year", date_range: without_year, year: from_year, default: without_year)
47
+ else
48
+ without_year
49
+ end
43
50
  end
44
51
 
45
52
  end
@@ -1,3 +1,3 @@
1
1
  module TimeWillTell
2
- VERSION = '0.0.3'.freeze
2
+ VERSION = '0.1.0'.freeze
3
3
  end
@@ -31,10 +31,11 @@ fr:
31
31
 
32
32
  time_will_tell:
33
33
  date_range:
34
- different_months_same_year: "%{from_day} %{from_month} %{sep} %{to_day} %{to_month} %{year}"
34
+ different_months_same_year: "%{from_day} %{from_month} %{sep} %{to_day} %{to_month}"
35
35
  different_years: "%{from_day} %{from_month} %{from_year} %{sep} %{to_day} %{to_month} %{to_year}"
36
- same_month: "%{from_day} %{sep} %{to_day} %{month} %{year}"
37
- same_date: "%{from_day} %{month} %{year}"
36
+ same_month: "%{from_day} %{sep} %{to_day} %{month}"
37
+ same_date: "%{from_day} %{month}"
38
+ with_year: "%{date_range} %{year}"
38
39
 
39
40
  distance_in_words:
40
41
  template: "%{count} %{unit}"
@@ -11,18 +11,18 @@ describe TimeWillTell::Helpers::DateRangeHelper do
11
11
  describe '#date_range' do
12
12
  {
13
13
  # short form
14
- [Date.new(2012, 10, 3), Date.new(2012, 10, 8)] => 'Oct 3 — 8, 2012',
15
- [Date.new(2013, 1, 30), Date.new(2013, 2, 5)] => 'Jan 30 — Feb 5, 2013',
16
- [Date.new(2012, 12, 26), Date.new(2013, 1, 3)] => 'Dec 26, 2012 — Jan 3, 2013',
17
- [Date.new(2013, 8, 24), Date.new(2013, 8, 24)] => 'Aug 24, 2013',
18
- [Date.new(2014, 2, 10), Date.new(2015, 2, 10)] => 'Feb 10, 2014 — Feb 10, 2015',
14
+ [Date.new(2012, 10, 3), Date.new(2012, 10, 8)] => 'Oct 3 — 8, 2012',
15
+ [Date.new(2013, 1, 30), Date.new(2013, 2, 5)] => 'Jan 30 — Feb 5, 2013',
16
+ [Date.new(2012, 12, 26), Date.new(2013, 1, 3)] => 'Dec 26, 2012 — Jan 3, 2013',
17
+ [Date.new(2013, 8, 24), Date.new(2013, 8, 24)] => 'Aug 24, 2013',
18
+ [Date.new(2014, 2, 10), Date.new(2015, 2, 10)] => 'Feb 10, 2014 — Feb 10, 2015',
19
19
 
20
20
  # long form
21
- [Date.new(2012, 10, 3), Date.new(2012, 10, 8), format: :long] => 'October 3 — 8, 2012',
22
- [Date.new(2013, 1, 30), Date.new(2013, 2, 5), format: :long] => 'January 30 — February 5, 2013',
23
- [Date.new(2012, 12, 26), Date.new(2013, 1, 3), format: :long] => 'December 26, 2012 — January 3, 2013',
24
- [Date.new(2013, 8, 24), Date.new(2013, 8, 24), format: :long] => 'August 24, 2013',
25
- [Date.new(2014, 2, 10), Date.new(2015, 2, 10), format: :long] => 'February 10, 2014 — February 10, 2015',
21
+ [Date.new(2012, 10, 3), Date.new(2012, 10, 8), format: :long] => 'October 3 — 8, 2012',
22
+ [Date.new(2013, 1, 30), Date.new(2013, 2, 5), format: :long] => 'January 30 — February 5, 2013',
23
+ [Date.new(2012, 12, 26), Date.new(2013, 1, 3), format: :long] => 'December 26, 2012 — January 3, 2013',
24
+ [Date.new(2013, 8, 24), Date.new(2013, 8, 24), format: :long] => 'August 24, 2013',
25
+ [Date.new(2014, 2, 10), Date.new(2015, 2, 10), format: :long] => 'February 10, 2014 — February 10, 2015',
26
26
  }.each do |args, expected|
27
27
  it "outputs '#{expected}" do
28
28
  from_date = args[0]
@@ -53,6 +53,27 @@ describe TimeWillTell::Helpers::DateRangeHelper do
53
53
  ).to eq 'Oct 31 ~ Dec 25, 2013'
54
54
  end
55
55
 
56
+ context 'when show_year option is false' do
57
+ let(:options) { { show_year: false } }
58
+
59
+ subject { helper.date_range(from_date, to_date, options) }
60
+
61
+ {
62
+ [Date.new(2012, 10, 3), Date.new(2012, 10, 8)] => 'Oct 3 — 8',
63
+ [Date.new(2013, 1, 30), Date.new(2013, 2, 5)] => 'Jan 30 — Feb 5',
64
+ [Date.new(2012, 12, 26), Date.new(2013, 1, 3)] => 'Dec 26, 2012 — Jan 3, 2013',
65
+ [Date.new(2013, 8, 24), Date.new(2013, 8, 24)] => 'Aug 24',
66
+ [Date.new(2014, 2, 10), Date.new(2015, 2, 10)] => 'Feb 10, 2014 — Feb 10, 2015',
67
+ }.each do |args, expected|
68
+ context "from #{args[0]} to #{args[1]}" do
69
+ let(:from_date) { args[0] }
70
+ let(:to_date) { args[1] }
71
+
72
+ it { should eq expected }
73
+ end
74
+ end
75
+ end # when show_year option is false
76
+
56
77
  context 'with a custom locale' do
57
78
  let(:locale) { :fr }
58
79
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: time_will_tell
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michel Billard
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-18 00:00:00.000000000 Z
11
+ date: 2014-08-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -112,7 +112,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
112
  version: '0'
113
113
  requirements: []
114
114
  rubyforge_project:
115
- rubygems_version: 2.0.3
115
+ rubygems_version: 2.3.0
116
116
  signing_key:
117
117
  specification_version: 4
118
118
  summary: Specialized conversions of dates and times to strings.