dotiw 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dotiw (0.6.0)
4
+ dotiw (0.7.0)
5
5
  actionpack (~> 3.0.0)
6
6
 
7
7
  GEM
@@ -51,6 +51,3 @@ DEPENDENCIES
51
51
  bundler (~> 1.0.0)
52
52
  dotiw!
53
53
  rspec (~> 2.0)
54
-
55
- METADATA
56
- version: 1.0.6
data/README.markdown CHANGED
@@ -18,60 +18,47 @@ Better than "about 1 year", am I right? Of course I am.
18
18
  >> distance_of_time_in_words(Time.now, Time.now + 1.second, false)
19
19
  => "1 second"
20
20
 
21
- This takes the same options plus an additional one on the end for passing options to the output (which uses `to_sentence`).
22
-
23
- Oh, and did I mention it supports I18n? Oh yeah.
24
-
25
- ## distance\_of\_time
26
-
27
- If you have simply a number of seconds you can get the "stringified" version of this by using `distance_of_time`:
28
-
29
- >> distance_of_time(300)
30
- => "5 minutes"
21
+ The third argument for this method is whether or not to include seconds. By default this is `false` (because in Rails' `distance_of_time_in_words` it is), you can turn it on though by passing `true` as the third argument:
31
22
 
32
- ## distance\_of\_time\_in\_words\_hash
23
+ >> distance_of_time_in_words(Time.now, Time.now + 1.year + 1.second, true)
24
+ => "1 year, and 1 second"
33
25
 
34
- Don't like any format you're given? That's cool too! Here, have an indifferent hash version:
26
+ Yes this could just be merged into the options hash but I'm leaving it here to ensure "backwards-compatibility".
35
27
 
36
- >> distance_of_time_in_words_hash(Time.now, Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds)
37
- => {"days"=>3, "seconds"=>6, "minutes"=>5, "years"=>1, "hours"=>4, "months"=>2}
28
+ The last argument is an optional options hash that can be used to manipulate behavior and (which uses `to_sentence`).
38
29
 
39
- Indiferrent means that you can access all keys by their `String` or `Symbol` version.
30
+ Oh, and did I mention it supports I18n? Oh yeah.
40
31
 
41
32
  ### Options
42
33
 
43
34
  #### :locale
44
35
 
45
- The keys can be in your local language too:
36
+ You can pass in a locale and it'll output it in whatever language you want (provided you have translations, otherwise it'll default to English):
46
37
 
47
- >> distance_of_time_in_words_hash(Time.now, Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds, :locale => "es")
48
- => {"horas"=>4, "días"=>3, "minutos"=>5, "segundos"=>6, "años"=>1, "meses"=>2}
38
+ >> distance_of_time_in_words(Time.now, Time.now + 1.minute, false, :locale => "es")
39
+ => "1 minuto"
49
40
 
50
- You are not guaranteed the order of the hash in Ruby 1.8.
41
+ This will also be passed to `to_sentence`
51
42
 
52
- ## distance\_of\_time\_in\_words
43
+ #### :vague
53
44
 
54
- ### Options
45
+ Specify this if you want it to use the old `distance_of_time_in_words`. The value can be anything except `nil` or `false`.
55
46
 
56
- The third argument for this method is whether or not to include seconds. By default this is `false` (because in Rails' `distance_of_time_in_words` it is), you can turn it on though by passing `true` as the third argument:
47
+ #### :singularize
57
48
 
58
- >> distance_of_time_in_words(Time.now, Time.now + 1.year + 1.second, true)
59
- => "1 year, and 1 second"
60
-
61
- Yes this could just be merged into the options hash but I'm leaving it here to ensure "backwards-compatibility".
49
+ Specify if all values of the hash should be presented in their singular form. By default they will be pluralized whenever outside the `-1..1` range. If you wish to have them signularized, just add the option `:singularize => :always`.
62
50
 
63
- #### :vague
51
+ This option is useful for Russian and Icelandic folks (https://github.com/radar/dotiw/issues#issue/2).
64
52
 
65
- Specify this if you want it to use the old `distance_of_time_in_words`. The value can be anything except `nil` or `false`.
53
+ >> distance_of_time_in_words(Time.now, Time.now + 2.hour + 2.minute, true, :singularize => :always)
54
+ => "2 hour and 2 minute"
66
55
 
67
- #### :locale
56
+ #### :accumulate_on
68
57
 
69
- You can pass in a locale and it'll output it in whatever language you want (provided you have translations, otherwise it'll default to English):
58
+ Specifies the maximum output unit which will accumulate all the surplus. Say you set it to seconds and your time difference is of 2 minutes then the output would be 120 seconds. Here's a code example:
70
59
 
71
- >> distance_of_time_in_words(Time.now, Time.now + 1.minute, false, :locale => "es")
72
- => "1 minuto"
73
-
74
- This will also be passed to `to_sentence`
60
+ >> distance_of_time_in_words(Time.now, Time.now + 2.hour + 70.second, true, :accumulate_on => :minutes)
61
+ => "121 minutes minute and 10 seconds"
75
62
 
76
63
  #### :only
77
64
 
@@ -127,6 +114,22 @@ Using something other than ', and':
127
114
 
128
115
  >> distance_of_time_in_words(Time.now, Time.now + 1.hour + 1.minute + 1.second, true, { :last_word_connector => ', finally ' })
129
116
  => "1 hour, 1 minute, finally 1 second"
117
+
118
+ ## distance\_of\_time
119
+
120
+ If you have simply a number of seconds you can get the "stringified" version of this by using `distance_of_time`:
121
+
122
+ >> distance_of_time(300)
123
+ => "5 minutes"
124
+
125
+ ## distance\_of\_time\_in\_words\_hash
126
+
127
+ Don't like any format you're given? That's cool too! Here, have an indifferent hash version:
128
+
129
+ >> distance_of_time_in_words_hash(Time.now, Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds)
130
+ => {"days"=>3, "seconds"=>6, "minutes"=>5, "years"=>1, "hours"=>4, "months"=>2}
131
+
132
+ Indifferent means that you can access all keys by their `String` or `Symbol` version.
130
133
 
131
134
  ## distance\_of\_time\_in\_percent
132
135
 
@@ -139,4 +142,4 @@ If you want to calculate a distance of time in percent, use `distance_of_time_in
139
142
 
140
143
  * [chendo][http://github.com/chendo] - for talking through it with me and drawing on the whiteboard
141
144
  * [Derander][http://github.com/derander] - correct Spanish translations
142
- * [DBA][http://github.com/dba] - Commits leading up to the 0.6 release.
145
+ * [DBA][http://github.com/dba] - Commits leading up to the 0.7 release.
data/lib/dotiw/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module DOTIW
4
- VERSION = "0.6.0"
5
- end
4
+ VERSION = "0.7.0"
5
+ end
data/lib/dotiw.rb CHANGED
@@ -21,45 +21,6 @@ module ActionView
21
21
  display_time_in_words DOTIW::TimeHash.new(seconds).to_hash, options
22
22
  end
23
23
 
24
- def display_time_in_words(hash, include_seconds = false, options = {})
25
- options.symbolize_keys!
26
- I18n.locale = options[:locale] if options[:locale]
27
-
28
- time_measurements = { :years => I18n.t(:years, :default => "years"),
29
- :months => I18n.t(:months, :default => "months"),
30
- :weeks => I18n.t(:weeks, :default => "weeks"),
31
- :days => I18n.t(:days, :default => "days"),
32
- :hours => I18n.t(:hours, :default => "hours"),
33
- :minutes => I18n.t(:minutes, :default => "minutes"),
34
- :seconds => I18n.t(:seconds, :default => "seconds") }
35
-
36
- hash.delete(time_measurements[:seconds]) if !include_seconds && hash[time_measurements[:minutes]]
37
-
38
- # Remove all the values that are nil or excluded. Keep the required ones.
39
- time_measurements.delete_if do |measure, key|
40
- hash[key].nil? || hash[key].zero? || (!options[:except].nil? && options[:except].include?(key)) ||
41
- (options[:only] && !options[:only].include?(key))
42
- end
43
-
44
- options.delete(:except)
45
- options.delete(:only)
46
-
47
- output = []
48
-
49
- time_measurements.each do |measure, key|
50
- name = hash[key] > 1 ? key : key.singularize
51
- output += ["#{hash[key]} #{name}"]
52
- end
53
-
54
- # maybe only grab the first few values
55
- if options[:precision]
56
- output = output[0...options[:precision]]
57
- options.delete(:precision)
58
- end
59
-
60
- output.to_sentence(options)
61
- end
62
-
63
24
  def distance_of_time_in_words(from_time, to_time, include_seconds = false, options = {})
64
25
  return old_distance_of_time_in_words(from_time, to_time, include_seconds, options) if options.delete(:vague)
65
26
  hash = distance_of_time_in_words_hash(from_time, to_time, options)
@@ -72,6 +33,48 @@ module ActionView
72
33
  result = ((current_time - from_time) / distance) * 100
73
34
  number_with_precision(result, options).to_s + "%"
74
35
  end
36
+
37
+ private
38
+ def display_time_in_words(hash, include_seconds = false, options = {})
39
+ options.symbolize_keys!
40
+ I18n.locale = options[:locale] if options[:locale]
41
+
42
+ time_measurements = { :years => I18n.t(:years, :default => "years"),
43
+ :months => I18n.t(:months, :default => "months"),
44
+ :weeks => I18n.t(:weeks, :default => "weeks"),
45
+ :days => I18n.t(:days, :default => "days"),
46
+ :hours => I18n.t(:hours, :default => "hours"),
47
+ :minutes => I18n.t(:minutes, :default => "minutes"),
48
+ :seconds => I18n.t(:seconds, :default => "seconds") }
49
+
50
+ hash.delete(time_measurements[:seconds]) if !include_seconds && hash[time_measurements[:minutes]]
51
+
52
+ # Remove all the values that are nil or excluded. Keep the required ones.
53
+ time_measurements.delete_if do |measure, key|
54
+ hash[key].nil? || hash[key].zero? || (!options[:except].nil? && options[:except].include?(key)) ||
55
+ (options[:only] && !options[:only].include?(key))
56
+ end
57
+
58
+ options.delete(:except)
59
+ options.delete(:only)
60
+
61
+ output = []
62
+
63
+ time_measurements.each do |measure, key|
64
+ name = options[:singularize] == :always || hash[key].between?(-1, 1) ? key.singularize : key
65
+ output += ["#{hash[key]} #{name}"]
66
+ end
67
+
68
+ options.delete(:singularize)
69
+
70
+ # maybe only grab the first few values
71
+ if options[:precision]
72
+ output = output[0...options[:precision]]
73
+ options.delete(:precision)
74
+ end
75
+
76
+ output.to_sentence(options)
77
+ end
75
78
  end # DateHelper
76
79
  end # Helpers
77
80
  end # ActionView
@@ -199,6 +199,10 @@ describe "A better distance_of_time_in_words" do
199
199
  Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds,
200
200
  { "except" => "minutes" },
201
201
  "1 year, 2 months, 3 days, 4 hours, and 6 seconds"],
202
+ [Time.now,
203
+ Time.now + 2.year + 3.months + 4.days + 5.hours + 6.minutes + 7.seconds,
204
+ { :singularize => :always },
205
+ "2 year, 3 month, 4 day, 5 hour, 6 minute, and 7 second"]
202
206
  ].each do |start, finish, options, output|
203
207
  it "should be #{output}" do
204
208
  distance_of_time_in_words(start, finish, true, options).should eql(output)
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dotiw
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 3
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
- - 6
8
+ - 7
8
9
  - 0
9
- version: 0.6.0
10
+ version: 0.7.0
10
11
  platform: ruby
11
12
  authors:
12
13
  - Ryan Bigg
@@ -25,6 +26,7 @@ dependencies:
25
26
  requirements:
26
27
  - - ~>
27
28
  - !ruby/object:Gem::Version
29
+ hash: 7
28
30
  segments:
29
31
  - 3
30
32
  - 0
@@ -40,6 +42,7 @@ dependencies:
40
42
  requirements:
41
43
  - - ~>
42
44
  - !ruby/object:Gem::Version
45
+ hash: 23
43
46
  segments:
44
47
  - 1
45
48
  - 0
@@ -55,6 +58,7 @@ dependencies:
55
58
  requirements:
56
59
  - - ~>
57
60
  - !ruby/object:Gem::Version
61
+ hash: 3
58
62
  segments:
59
63
  - 2
60
64
  - 0
@@ -101,6 +105,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
101
105
  requirements:
102
106
  - - ">="
103
107
  - !ruby/object:Gem::Version
108
+ hash: 3
104
109
  segments:
105
110
  - 0
106
111
  version: "0"
@@ -109,6 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
114
  requirements:
110
115
  - - ">="
111
116
  - !ruby/object:Gem::Version
117
+ hash: 23
112
118
  segments:
113
119
  - 1
114
120
  - 3