dotiw 0.3.0 → 0.3.1
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.
- data/.gitignore +1 -0
- data/README.markdown +11 -0
- data/VERSION +1 -1
- data/dotiw.gemspec +5 -5
- data/lib/dotiw.rb +24 -5
- data/spec/dotiw_spec.rb +26 -2
- metadata +2 -3
- data/pkg/dotiw-0.2.4.gem +0 -0
data/.gitignore
CHANGED
data/README.markdown
CHANGED
@@ -16,6 +16,13 @@ This takes the same options plus an additional one on the end for passing option
|
|
16
16
|
|
17
17
|
Oh, and did I mention it supports I18n? Oh yeah.
|
18
18
|
|
19
|
+
## distance\_of\_time
|
20
|
+
|
21
|
+
If you have simply a number of seconds you can get the "stringified" version of this by using `distance_of_time`:
|
22
|
+
|
23
|
+
>> distance_of_time(300)
|
24
|
+
=> "5 minutes"
|
25
|
+
|
19
26
|
## distance\_of\_time\_in\_words\_hash
|
20
27
|
|
21
28
|
Don't like any format you're given? That's cool too! Here, have an indifferent hash version:
|
@@ -47,6 +54,10 @@ The third argument for this method is whether or not to include seconds. By defa
|
|
47
54
|
|
48
55
|
Yes this could just be merged into the options hash but I'm leaving it here to ensure "backwards-compatibility".
|
49
56
|
|
57
|
+
#### :vague
|
58
|
+
|
59
|
+
Specify this if you want it to use the old `distance_of_time_in_words`. The value can be anything except `nil` or `false`.
|
60
|
+
|
50
61
|
#### :locale
|
51
62
|
|
52
63
|
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):
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.1
|
data/dotiw.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{dotiw}
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Ryan Bigg"]
|
12
|
-
s.date = %q{2009-
|
12
|
+
s.date = %q{2009-12-12}
|
13
13
|
s.description = %q{Better distance_of_time_in_words for Rails}
|
14
14
|
s.email = %q{radarlistener@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -24,7 +24,6 @@ Gem::Specification.new do |s|
|
|
24
24
|
"dotiw.gemspec",
|
25
25
|
"lib/dotiw.rb",
|
26
26
|
"lib/i18n.rb",
|
27
|
-
"pkg/dotiw-0.2.4.gem",
|
28
27
|
"rails/init.rb",
|
29
28
|
"spec/dotiw_spec.rb",
|
30
29
|
"spec/spec_helper.rb",
|
@@ -54,3 +53,4 @@ Gem::Specification.new do |s|
|
|
54
53
|
s.add_dependency(%q<rspec>, [">= 0"])
|
55
54
|
end
|
56
55
|
end
|
56
|
+
|
data/lib/dotiw.rb
CHANGED
@@ -1,12 +1,19 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
module ActionView
|
2
3
|
module Helpers
|
3
4
|
module DateHelper
|
4
5
|
def distance_of_time_in_words_hash(from_time, to_time, options={})
|
5
|
-
output = HashWithIndifferentAccess.new
|
6
6
|
from_time = from_time.to_time if from_time.respond_to?(:to_time)
|
7
7
|
to_time = to_time.to_time if to_time.respond_to?(:to_time)
|
8
8
|
|
9
9
|
distance = (from_time - to_time).abs
|
10
|
+
distance_of_time_hash(distance, from_time, to_time, options)
|
11
|
+
end
|
12
|
+
|
13
|
+
def distance_of_time_hash(distance, from_time = nil, to_time = nil, options={})
|
14
|
+
output = HashWithIndifferentAccess.new
|
15
|
+
from_time ||= Time.now
|
16
|
+
to_time ||= from_time + distance.seconds
|
10
17
|
I18n.with_options :locale => options[:locale] do |locale|
|
11
18
|
while distance > 0
|
12
19
|
if distance < 1.minute
|
@@ -34,7 +41,7 @@ module ActionView
|
|
34
41
|
# Convert the last month to days and add to total
|
35
42
|
months -= 1
|
36
43
|
last_month = largest.advance(:months => -1)
|
37
|
-
days += Time.days_in_month(last_month.month, last_month.year)
|
44
|
+
days += Time.days_in_month(last_month.month, last_month.year)
|
38
45
|
end
|
39
46
|
|
40
47
|
if months < 0
|
@@ -54,8 +61,13 @@ module ActionView
|
|
54
61
|
output
|
55
62
|
end
|
56
63
|
|
57
|
-
|
58
|
-
|
64
|
+
alias_method :old_distance_of_time_in_words, :distance_of_time_in_words
|
65
|
+
|
66
|
+
def distance_of_time(seconds, options = {})
|
67
|
+
display_time_in_words(distance_of_time_hash(seconds), options)
|
68
|
+
end
|
69
|
+
|
70
|
+
def display_time_in_words(hash, include_seconds = false, options = {})
|
59
71
|
hash.delete(:seconds) if !include_seconds
|
60
72
|
I18n.with_options :locale => options[:locale] do |locale|
|
61
73
|
# Remove all the values that are nil.
|
@@ -87,8 +99,15 @@ module ActionView
|
|
87
99
|
options.delete(:precision)
|
88
100
|
end
|
89
101
|
|
102
|
+
|
90
103
|
output.to_sentence(options)
|
91
|
-
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def distance_of_time_in_words(from_time, to_time, include_seconds = false, options = {})
|
108
|
+
return old_distance_of_time_in_words(from_time, to_time, include_seconds, options) if options.delete(:vague)
|
109
|
+
hash = distance_of_time_in_words_hash(from_time, to_time, options)
|
110
|
+
display_time_in_words(hash, include_seconds, options)
|
92
111
|
end
|
93
112
|
end
|
94
113
|
end
|
data/spec/dotiw_spec.rb
CHANGED
@@ -12,6 +12,20 @@ describe "A better distance_of_time_in_words" do
|
|
12
12
|
Time.zone.stub!(:now).and_return(time)
|
13
13
|
end
|
14
14
|
|
15
|
+
describe "distance of time" do
|
16
|
+
[
|
17
|
+
[5.minutes.to_i, "5 minutes"],
|
18
|
+
[10.minutes.to_i, "10 minutes"],
|
19
|
+
[1.hour.to_i, "1 hour"],
|
20
|
+
[4.weeks.to_i, "4 weeks"],
|
21
|
+
[24.weeks.to_i, "5 months and 15 days"],
|
22
|
+
].each do |number, result|
|
23
|
+
it "#{number} == #{result}" do
|
24
|
+
distance_of_time(number).should eql(result)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
15
29
|
describe "hash version" do
|
16
30
|
describe "giving correct numbers of" do
|
17
31
|
|
@@ -87,16 +101,26 @@ describe "A better distance_of_time_in_words" do
|
|
87
101
|
describe "with output options" do
|
88
102
|
[
|
89
103
|
# Any numeric sequence is merely coincidental.
|
90
|
-
[Time.now, Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds, { :except => "minutes" }, "1 year, 2 months, 3 days, 4 hours, and 6 seconds"],
|
91
104
|
[Time.now, Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds, { :words_connector => " - " }, "1 year - 2 months - 3 days - 4 hours - 5 minutes, and 6 seconds"],
|
105
|
+
|
92
106
|
[Time.now, Time.now + 5.minutes + 6.seconds, { :two_words_connector => " - " }, "5 minutes - 6 seconds"],
|
107
|
+
|
93
108
|
[Time.now, Time.now + 4.hours + 5.minutes + 6.seconds, { :last_word_connector => " - " }, "4 hours, 5 minutes - 6 seconds"],
|
109
|
+
|
110
|
+
[Time.now, Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds, { :except => "minutes" }, "1 year, 2 months, 3 days, 4 hours, and 6 seconds"],
|
94
111
|
[Time.now, Time.now + 1.hour + 1.minute, { :except => "minutes"}, "1 hour"],
|
95
112
|
[Time.now, Time.now + 1.hour + 1.day + 1.minute, { :except => ["minutes", "hours"]}, "1 day"],
|
113
|
+
|
96
114
|
[Time.now, Time.now + 1.hour + 1.day + 1.minute, { :only => ["minutes", "hours"]}, "1 hour and 1 minute"],
|
115
|
+
|
97
116
|
[Time.now, Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds, { :precision => 2 }, "1 year and 2 months"],
|
98
117
|
[Time.now, Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds, { :precision => 3 }, "1 year, 2 months, and 3 days"],
|
99
|
-
[Time.now, Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds, { :precision => 10 }, "1 year, 2 months, 3 days, 4 hours, 5 minutes, and 6 seconds"]
|
118
|
+
[Time.now, Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds, { :precision => 10 }, "1 year, 2 months, 3 days, 4 hours, 5 minutes, and 6 seconds"],
|
119
|
+
|
120
|
+
[Time.now, Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds, { :vague => true }, "about 1 year"],
|
121
|
+
[Time.now, Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds, { :vague => "Yes please" }, "about 1 year"],
|
122
|
+
[Time.now, Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds, { :vague => false }, "1 year, 2 months, 3 days, 4 hours, 5 minutes, and 6 seconds"],
|
123
|
+
[Time.now, Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds, { :vague => nil }, "1 year, 2 months, 3 days, 4 hours, 5 minutes, and 6 seconds"],
|
100
124
|
].each do |start, finish, options, output|
|
101
125
|
it "should be #{output}" do
|
102
126
|
distance_of_time_in_words(start, finish, true, options).should eql(output)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dotiw
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Bigg
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-12-12 00:00:00 +10:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -39,7 +39,6 @@ files:
|
|
39
39
|
- dotiw.gemspec
|
40
40
|
- lib/dotiw.rb
|
41
41
|
- lib/i18n.rb
|
42
|
-
- pkg/dotiw-0.2.4.gem
|
43
42
|
- rails/init.rb
|
44
43
|
- spec/dotiw_spec.rb
|
45
44
|
- spec/spec_helper.rb
|
data/pkg/dotiw-0.2.4.gem
DELETED
Binary file
|