dotiw 1.1.1 → 2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d7ac361d8ee4fa014e09e9f77026c08b4fecbe8c
4
+ data.tar.gz: 0dc62da9541e16dd15228c7659b502013cae5a49
5
+ SHA512:
6
+ metadata.gz: 8effe0793345b5319dd18ccf19bb018c4940d1ffab22094e97490a951548f07e1b22c2273130f09a557ecaefe06572901b33b082d4b5940bd4ad50d0aea44ba4
7
+ data.tar.gz: b659b4568937f7dfc770dc271b9bdc894bd253c5008fed536f8d0aff65257e948d3ea9c45869365fac064020a5ef7a349ddbcdd9fcec56ca9be39be0684a91bc
@@ -0,0 +1,5 @@
1
+ rvm:
2
+ - 2.1.3
3
+ - 2.0.0
4
+ - 1.9.3
5
+ - jruby-19mode
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
- gemspec
3
+ gemspec
@@ -1,4 +1,4 @@
1
- # dotiw
1
+ # dotiw [![](https://travis-ci.org/radar/dotiw.png)](https://travis-ci.org/radar/dotiw)
2
2
 
3
3
  dotiw is a plugin for Rails that overrides the default `distance_of_time_in_words` and provides a more accurate output. Do you crave accuracy down to the second? So do I. That's why I made this plugin. Take this for a totally kickass example:
4
4
 
@@ -23,11 +23,18 @@ The third argument for this method is whether or not to include seconds. By defa
23
23
  >> distance_of_time_in_words(Time.now, Time.now + 1.year + 1.second, true)
24
24
  => "1 year, and 1 second"
25
25
 
26
- Yes this could just be merged into the options hash but I'm leaving it here to ensure "backwards-compatibility".
26
+ Yes this could just be merged into the options hash but I'm leaving it here to ensure "backwards-compatibility",
27
+ because that's just an insanely radical thing to do. \m/
27
28
 
28
- The last argument is an optional options hash that can be used to manipulate behavior and (which uses `to_sentence`).
29
+ The last argument is an optional options hash that can be used to manipulate behavior and (which uses `to_sentence`).
29
30
 
30
- Oh, and did I mention it supports I18n? Oh yeah.
31
+ Don't like having to pass in `Time.now` all the time? Then use `time_ago_in_words` which also will *rock your
32
+ world*:
33
+
34
+ >> time_ago_in_words(Time.now + 3.days + 1.second)
35
+ => "3 days, and 1 second"
36
+
37
+ Oh, and did I mention it supports I18n? Oh yeah. Rock on!
31
38
 
32
39
  ### Options
33
40
 
@@ -35,7 +42,7 @@ Oh, and did I mention it supports I18n? Oh yeah.
35
42
 
36
43
  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):
37
44
 
38
- >> distance_of_time_in_words(Time.now, Time.now + 1.minute, false, :locale => "es")
45
+ >> distance_of_time_in_words(Time.now, Time.now + 1.minute, false, :locale => :es)
39
46
  => "1 minuto"
40
47
 
41
48
  This will also be passed to `to_sentence`
@@ -44,57 +51,65 @@ This will also be passed to `to_sentence`
44
51
 
45
52
  Specify this if you want it to use the old `distance_of_time_in_words`. The value can be anything except `nil` or `false`.
46
53
 
47
- #### :singularize
48
-
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`.
50
-
51
- This option is useful for Russian and Icelandic folks (https://github.com/radar/dotiw/issues#issue/2).
52
-
53
- >> distance_of_time_in_words(Time.now, Time.now + 2.hour + 2.minute, true, :singularize => :always)
54
- => "2 hour and 2 minute"
55
-
56
54
  #### :accumulate_on
57
55
 
58
56
  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:
59
57
 
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"
58
+ >> distance_of_time_in_words(Time.now, Time.now + 2.hours + 70.seconds, true, :accumulate_on => :minutes)
59
+ => "121 minutes and 10 seconds"
62
60
 
63
61
  #### :only
64
62
 
65
- **Note that values passed into this option must be passed in as strings!**
66
-
67
63
  Only want a specific measurement of time? No problem!
68
64
 
69
- >> distance_of_time_in_words(Time.now, Time.now + 1.hour + 1.minute, false, :only => "minutes")
65
+ >> distance_of_time_in_words(Time.now, Time.now + 1.hour + 1.minute, false, :only => :minutes)
70
66
  => "1 minute"
71
67
 
72
68
  You only want some? No problem too!
73
69
 
74
- >> distance_of_time_in_words(Time.now, Time.now + 1.hour + 1.day + 1.minute, false, :only => ["minutes", "hours"])
70
+ >> distance_of_time_in_words(Time.now, Time.now + 1.hour + 1.day + 1.minute, false, :only => [:minutes, :hours])
75
71
  => "1 hour and 1 minute"
76
72
 
77
73
  #### :except
78
74
 
79
- **Note that values passed into this option must be passed in as strings!**
80
-
81
75
  Don't want a measurement of time? No problem!
82
76
 
83
- >> distance_of_time_in_words(Time.now, Time.now + 1.hour + 1.minute, false, :except => "minutes")
77
+ >> distance_of_time_in_words(Time.now, Time.now + 1.hour + 1.minute, false, :except => :minutes)
84
78
  => "1 hour"
85
79
 
86
80
  Culling a whole group of measurements of time:
87
81
 
88
- >> distance_of_time_in_words(Time.now, Time.now + 1.hour + 1.day + 1.minute, false, :except => ["minutes", "hours"])
82
+ >> distance_of_time_in_words(Time.now, Time.now + 1.hour + 1.day + 1.minute, false, :except => [:minutes, :hours])
89
83
  => "1 day"
90
84
 
85
+ #### :highest\_measure\_only
86
+
87
+ For times when Rails `distance_of_time_in_words` is not precise enough and `DOTIW` is too precise. For instance, if you only want to know the highest time part (measure) that elapsed between two dates.
88
+
89
+ >> distance_of_time_in_words(Time.now, Time.now + 1.hour + 1.minute + 1.second, true, :highest_measure_only => true)
90
+ => "1 hour"
91
+
92
+ Notice how minutes and seconds were removed from the output. Another example:
93
+
94
+ >> distance_of_time_in_words(Time.now, Time.now + 1.minute + 1.second, true, :highest_measure_only => true)
95
+ => "1 minute"
96
+
97
+ Minutes are the highest measure, so seconds were discarded from the output.
98
+
99
+ #### :highest\_measures
100
+
101
+ When you want variable precision from `DOTIW`:
102
+
103
+ >> distance_of_time_in_words(Time.now, Time.now + 1.hour + 1.minute + 1.second, true, :highest_measures => 2)
104
+ => "1 hour and 1 minute"
105
+
91
106
  #### :words_connector
92
107
 
93
108
  **This is an option for `to_sentence`, defaults to ', '**
94
109
 
95
110
  Using something other than a comma:
96
111
 
97
- >> distance_of_time_in_words(Time.now, Time.now + 1.hour + 1.minute + 1.second, true, { :words_connector => ' - ' })
112
+ >> distance_of_time_in_words(Time.now, Time.now + 1.hour + 1.minute + 1.second, true, :words_connector => ' - ')
98
113
  => "1 hour - 1 minute, and 1 second"
99
114
 
100
115
  #### :two\_words\_connector
@@ -103,7 +118,7 @@ Using something other than a comma:
103
118
 
104
119
  Using something other than 'and':
105
120
 
106
- >> distance_of_time_in_words(Time.now, Time.now + 1.hour + 1.minute, true, { :two_words_connector => ' plus ' })
121
+ >> distance_of_time_in_words(Time.now, Time.now + 1.hour + 1.minute, true, :two_words_connector => ' plus ')
107
122
  => "1 hour plus 1 minute"
108
123
 
109
124
  #### :last\_word\_connector
@@ -112,23 +127,9 @@ Using something other than 'and':
112
127
 
113
128
  Using something other than ', and':
114
129
 
115
- >> distance_of_time_in_words(Time.now, Time.now + 1.hour + 1.minute + 1.second, true, { :last_word_connector => ', finally ' })
130
+ >> distance_of_time_in_words(Time.now, Time.now + 1.hour + 1.minute + 1.second, true, :last_word_connector => ', finally ')
116
131
  => "1 hour, 1 minute, finally 1 second"
117
132
 
118
- #### :highest\_measure\_only
119
-
120
- For times when Rails `distance_of_time_in_words` is not precise enough and `DOTIW` is too precise. For instance, if you only want to know the highest time part (measure) that elapsed between two dates.
121
-
122
- >> distance_of_time_in_words(Time.now, Time.now + 1.hour + 1.minute + 1.second, true, { :highest_measure_only => true })
123
- => "1 hour"
124
-
125
- Notice how minutes and seconds were removed from the output. Another example:
126
-
127
- >> distance_of_time_in_words(Time.now, Time.now + 1.minute + 1.second, true, { :highest_measure_only => true })
128
- => "1 minute"
129
-
130
- Minutes are the highest measure, so seconds were discarded from the output.
131
-
132
133
  ## distance\_of\_time
133
134
 
134
135
  If you have simply a number of seconds you can get the "stringified" version of this by using `distance_of_time`:
@@ -141,19 +142,20 @@ If you have simply a number of seconds you can get the "stringified" version of
141
142
  Don't like any format you're given? That's cool too! Here, have an indifferent hash version:
142
143
 
143
144
  >> distance_of_time_in_words_hash(Time.now, Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds)
144
- => {"days"=>3, "seconds"=>6, "minutes"=>5, "years"=>1, "hours"=>4, "months"=>2}
145
+ => {:days => 3, :seconds => 6, :minutes => 5, :years => 1, :hours => 4, :months => 2}
145
146
 
146
147
  Indifferent means that you can access all keys by their `String` or `Symbol` version.
147
148
 
148
149
  ## distance\_of\_time\_in\_percent
149
150
 
150
- If you want to calculate a distance of time in percent, use `distance_of_time_in_percent`. The first argument is the beginning time, the second argument the "current" time and the third argument is the end time. This method takes the same options as [`number_with_precision`][http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html#M001687].
151
+ If you want to calculate a distance of time in percent, use `distance_of_time_in_percent`. The first argument is the beginning time, the second argument the "current" time and the third argument is the end time. This method takes the same options as [`number_with_precision`](http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html#method-i-number_with_precision).
151
152
 
152
153
  distance_of_time_in_percent("04-12-2009".to_time, "29-01-2010".to_time, "04-12-2010".to_time, options)
153
154
 
154
155
 
155
156
  ## Contributors
156
157
 
157
- * [chendo][http://github.com/chendo] - for talking through it with me and drawing on the whiteboard
158
- * [Derander][http://github.com/derander] - correct Spanish translations
159
- * [DBA][http://github.com/dba] - Commits leading up to the 0.7 release.
158
+ * [chendo](http://github.com/chendo) - for talking through it with me and drawing on the whiteboard
159
+ * [Derander](http://github.com/derander) - correct Spanish translations
160
+ * [DBA](http://github.com/dba) - commits leading up to the 0.7 release
161
+ * [Sija](http://github.com/Sija) - rails 4 support, v2.0 release
data/Rakefile CHANGED
@@ -1,13 +1,12 @@
1
1
  require 'rubygems'
2
2
  require 'rake'
3
3
  require 'bundler'
4
+
5
+ require 'rspec/core'
6
+ require 'rspec/core/rake_task'
7
+
4
8
  Bundler::GemHelper.install_tasks
5
9
 
10
+ RSpec::Core::RakeTask.new(:spec)
6
11
 
7
- begin
8
- require 'rspec/core/rake_task'
9
- [:spec, :rcov].each { |task| RSpec::Core::RakeTask.new(task) }
10
- task :default => :spec
11
- rescue LoadError
12
- raise 'RSpec could not be loaded. Run `bundle install` to get all development dependencies.'
13
- end
12
+ task :default => :spec
@@ -1,24 +1,26 @@
1
1
  # dotiw.gemspec
2
2
  # -*- encoding: utf-8 -*-
3
3
 
4
- $:.unshift File.join(File.dirname(__FILE__), 'lib') unless $:.include? File.join(File.dirname(__FILE__), 'lib')
4
+ $:.push File.expand_path("../lib", __FILE__)
5
5
  require 'dotiw/version'
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = 'dotiw'
9
9
  s.version = DOTIW::VERSION
10
- s.platform = Gem::Platform::RUBY
11
- s.required_rubygems_version = '>= 1.3.6'
10
+
12
11
  s.authors = ["Ryan Bigg"]
13
12
  s.date = %q{2010-12-23}
14
13
  s.description = "Better distance_of_time_in_words for Rails"
15
14
  s.summary = "Better distance_of_time_in_words for Rails"
16
15
  s.email = "radarlistener@gmail.com"
17
16
 
18
- s.add_dependency "actionpack", "~> 3"
19
-
20
- s.add_development_dependency "bundler", "~> 1.0.0"
21
- s.add_development_dependency "rspec", "~> 2.0"
17
+ s.add_dependency "actionpack", ">= 3"
18
+ s.add_dependency "i18n"
19
+
20
+ s.add_development_dependency "rake"
21
+ s.add_development_dependency "bundler"
22
+ s.add_development_dependency "rspec", "~> 3.0"
23
+ s.add_development_dependency "tzinfo"
22
24
 
23
25
  s.files = `git ls-files`.split("\n")
24
26
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -1,83 +1,30 @@
1
1
  # encoding: utf-8
2
2
 
3
+ require 'i18n'
4
+
5
+ # Rails hacks
6
+ if defined?(ActionView::Helpers)
7
+ require 'dotiw/action_view_ext/helpers/date_helper'
8
+ end
9
+
3
10
  module DOTIW
11
+ extend self
12
+
4
13
  autoload :VERSION, 'dotiw/version'
5
14
  autoload :TimeHash, 'dotiw/time_hash'
6
- end # DOTIW
7
-
8
- module ActionView
9
- module Helpers
10
- module DateHelper
11
- alias_method :old_distance_of_time_in_words, :distance_of_time_in_words
12
-
13
- def distance_of_time_in_words_hash(from_time, to_time, options = {})
14
- from_time = from_time.to_time if !from_time.is_a?(Time) && from_time.respond_to?(:to_time)
15
- to_time = to_time.to_time if !to_time.is_a?(Time) && to_time.respond_to?(:to_time)
16
-
17
- DOTIW::TimeHash.new((from_time - to_time).abs, from_time, to_time, options).to_hash
18
- end
19
-
20
- def distance_of_time(seconds, options = {})
21
- display_time_in_words DOTIW::TimeHash.new(seconds).to_hash, options
22
- end
23
-
24
- def distance_of_time_in_words(from_time, to_time, include_seconds = false, options = {})
25
- return old_distance_of_time_in_words(from_time, to_time, include_seconds, options) if options.delete(:vague)
26
- hash = distance_of_time_in_words_hash(from_time, to_time, options)
27
- display_time_in_words(hash, include_seconds, options)
28
- end
29
-
30
- def distance_of_time_in_percent(from_time, current_time, to_time, options = {})
31
- options[:precision] ||= 0
32
- distance = to_time - from_time
33
- result = ((current_time - from_time) / distance) * 100
34
- number_with_precision(result, options).to_s + "%"
35
- end
36
15
 
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]
16
+ DEFAULT_I18N_SCOPE = :'datetime.dotiw'
41
17
 
42
- time_measurements = ActiveSupport::OrderedHash.new
43
- time_measurements[:years] = I18n.t(:years, :default => "years")
44
- time_measurements[:months] = I18n.t(:months, :default => "months")
45
- time_measurements[:weeks] = I18n.t(:weeks, :default => "weeks")
46
- time_measurements[:days] = I18n.t(:days, :default => "days")
47
- time_measurements[:hours] = I18n.t(:hours, :default => "hours")
48
- time_measurements[:minutes] = I18n.t(:minutes, :default => "minutes")
49
- time_measurements[:seconds] = I18n.t(:seconds, :default => "seconds")
18
+ def init_i18n
19
+ I18n.load_path.unshift(*locale_files)
20
+ I18n.reload!
21
+ end
50
22
 
51
- hash.delete(time_measurements[:seconds]) if !include_seconds && hash[time_measurements[:minutes]]
52
-
53
- # Remove all the values that are nil or excluded. Keep the required ones.
54
- time_measurements.delete_if do |measure, key|
55
- hash[key].nil? || hash[key].zero? || (!options[:except].nil? && options[:except].include?(key)) ||
56
- (options[:only] && !options[:only].include?(key))
57
- end
58
-
59
- options.delete(:except)
60
- options.delete(:only)
61
-
62
- output = []
63
-
64
- time_measurements = Hash[*time_measurements.first] if options.delete(:highest_measure_only)
65
-
66
- time_measurements.each do |measure, key|
67
- name = options[:singularize] == :always || hash[key].between?(-1, 1) ? key.singularize : key
68
- output += ["#{hash[key]} #{name}"]
69
- end
70
-
71
- options.delete(:singularize)
72
-
73
- # maybe only grab the first few values
74
- if options[:precision]
75
- output = output[0...options[:precision]]
76
- options.delete(:precision)
77
- end
23
+ protected
24
+ # Returns all locale files shipped with library
25
+ def locale_files
26
+ Dir[File.join(File.dirname(__FILE__), 'dotiw', 'locale', '**/*')]
27
+ end
28
+ end # DOTIW
78
29
 
79
- output.to_sentence(options)
80
- end
81
- end # DateHelper
82
- end # Helpers
83
- end # ActionView
30
+ DOTIW.init_i18n
@@ -0,0 +1,92 @@
1
+ module ActionView
2
+ module Helpers
3
+ module DateHelper
4
+ alias_method :old_distance_of_time_in_words, :distance_of_time_in_words
5
+
6
+ def distance_of_time_in_words_hash(from_time, to_time, options = {})
7
+ from_time = from_time.to_time if !from_time.is_a?(Time) && from_time.respond_to?(:to_time)
8
+ to_time = to_time.to_time if !to_time.is_a?(Time) && to_time.respond_to?(:to_time)
9
+
10
+ DOTIW::TimeHash.new((from_time - to_time).abs, from_time, to_time, options).to_hash
11
+ end
12
+
13
+ def distance_of_time(seconds, options = {})
14
+ options[:include_seconds] ||= true
15
+ display_time_in_words DOTIW::TimeHash.new(seconds, nil, nil, options).to_hash, options
16
+ end
17
+
18
+ def distance_of_time_in_words(from_time, to_time = 0, include_seconds_or_options = {}, options = {})
19
+ if include_seconds_or_options.is_a?(Hash)
20
+ options = include_seconds_or_options
21
+ else
22
+ options[:include_seconds] ||= !!include_seconds_or_options
23
+ end
24
+ return distance_of_time(from_time, options) if to_time == 0
25
+ return old_distance_of_time_in_words(from_time, to_time, options) if options.delete(:vague)
26
+ hash = distance_of_time_in_words_hash(from_time, to_time, options)
27
+ display_time_in_words(hash, options)
28
+ end
29
+
30
+ def distance_of_time_in_percent(from_time, current_time, to_time, options = {})
31
+ options[:precision] ||= 0
32
+ distance = to_time - from_time
33
+ result = ((current_time - from_time) / distance) * 100
34
+ number_with_precision(result, options).to_s + "%"
35
+ end
36
+
37
+ alias_method :old_time_ago_in_words, :time_ago_in_words
38
+
39
+ def time_ago_in_words(from_time, include_seconds_or_options = {})
40
+ distance_of_time_in_words(from_time, Time.now, include_seconds_or_options)
41
+ end
42
+
43
+ private
44
+ def display_time_in_words(hash, options = {})
45
+ options.reverse_merge!(
46
+ :include_seconds => false
47
+ ).symbolize_keys!
48
+
49
+ include_seconds = options.delete(:include_seconds)
50
+ hash.delete(:seconds) if !include_seconds && hash[:minutes]
51
+
52
+ options[:except] = Array.wrap(options[:except]).map!(&:to_s) if options[:except]
53
+ options[:only] = Array.wrap(options[:only]).map!(&:to_s) if options[:only]
54
+
55
+ # Remove all the values that are nil or excluded. Keep the required ones.
56
+ hash.delete_if do |key, value|
57
+ value.nil? || value.zero? ||
58
+ (options[:except] && options[:except].include?(key.to_s)) ||
59
+ (options[:only] && !options[:only].include?(key.to_s))
60
+ end
61
+ return I18n.t('datetime.distance_in_words.less_than_x_seconds', :count => 1, :locale => options[:locale]) if hash.empty?
62
+
63
+ options.delete(:except)
64
+ options.delete(:only)
65
+
66
+ i18n_scope = options.delete(:scope) || DOTIW::DEFAULT_I18N_SCOPE
67
+ output = []
68
+ I18n.with_options :locale => options[:locale], :scope => i18n_scope do |locale|
69
+ output = hash.map { |key, value| locale.t(key, :count => value) }
70
+ end
71
+
72
+ highest_measures = options.delete(:highest_measures)
73
+ highest_measures = 1 if options.delete(:highest_measure_only)
74
+ if highest_measures
75
+ output = output[0...highest_measures]
76
+ end
77
+
78
+ options[:words_connector] ||= I18n.translate :'datetime.dotiw.words_connector',
79
+ :default => :'support.array.words_connector',
80
+ :locale => options[:locale]
81
+ options[:two_words_connector] ||= I18n.translate :'datetime.dotiw.two_words_connector',
82
+ :default => :'support.array.two_words_connector',
83
+ :locale => options[:locale]
84
+ options[:last_word_connector] ||= I18n.translate :'datetime.dotiw.last_word_connector',
85
+ :default => :'support.array.last_word_connector',
86
+ :locale => options[:locale]
87
+
88
+ output.to_sentence(options)
89
+ end
90
+ end # DateHelper
91
+ end # Helpers
92
+ end # ActionView
@@ -0,0 +1,24 @@
1
+ en:
2
+ datetime:
3
+ dotiw:
4
+ seconds:
5
+ one: 1 second
6
+ other: "%{count} seconds"
7
+ minutes:
8
+ one: 1 minute
9
+ other: "%{count} minutes"
10
+ hours:
11
+ one: 1 hour
12
+ other: "%{count} hours"
13
+ days:
14
+ one: 1 day
15
+ other: "%{count} days"
16
+ weeks:
17
+ one: 1 week
18
+ other: "%{count} weeks"
19
+ months:
20
+ one: 1 month
21
+ other: "%{count} months"
22
+ years:
23
+ one: 1 year
24
+ other: "%{count} years"
@@ -4,18 +4,16 @@ module DOTIW
4
4
  class TimeHash
5
5
  TIME_FRACTIONS = [:seconds, :minutes, :hours, :days, :months, :years]
6
6
 
7
- attr_accessor :distance, :smallest, :largest, :from_time, :to_time, :options
7
+ attr_accessor :distance, :smallest, :largest, :from_time, :to_time
8
8
 
9
9
  def initialize(distance, from_time = nil, to_time = nil, options = {})
10
- self.output = {}
10
+ self.output = ActiveSupport::OrderedHash.new
11
11
  self.options = options
12
12
  self.distance = distance
13
13
  self.from_time = from_time || Time.now
14
14
  self.to_time = to_time || (self.from_time + self.distance.seconds)
15
15
  self.smallest, self.largest = [self.from_time, self.to_time].minmax
16
16
 
17
- I18n.locale = options[:locale] if options[:locale]
18
-
19
17
  build_time_hash
20
18
  end
21
19
 
@@ -23,84 +21,87 @@ module DOTIW
23
21
  output
24
22
  end
25
23
 
26
- private
27
- attr_accessor :options, :output
28
-
29
- def build_time_hash
30
- if accumulate_on = options.delete(:accumulate_on)
31
- return build_time_hash if accumulate_on == :years
32
- TIME_FRACTIONS.index(accumulate_on).downto(0) { |i| self.send("build_#{TIME_FRACTIONS[i]}") }
33
- else
34
- while distance > 0
35
- if distance < 1.minute
36
- build_seconds
37
- elsif distance < 1.hour
38
- build_minutes
39
- elsif distance < 1.day
40
- build_hours
41
- elsif distance < 28.days
42
- build_days
43
- else # greater than a month
44
- build_years_months_days
45
- end
24
+ private
25
+ attr_accessor :options, :output
26
+
27
+ def build_time_hash
28
+ if accumulate_on = options.delete(:accumulate_on)
29
+ accumulate_on = accumulate_on.to_sym
30
+ if accumulate_on == :years
31
+ return build_time_hash
32
+ end
33
+ TIME_FRACTIONS.index(accumulate_on).downto(0) { |i| self.send("build_#{TIME_FRACTIONS[i]}") }
34
+ else
35
+ while distance > 0
36
+ if distance < 1.minute
37
+ build_seconds
38
+ elsif distance < 1.hour
39
+ build_minutes
40
+ elsif distance < 1.day
41
+ build_hours
42
+ elsif distance < 28.days
43
+ build_days
44
+ else # greater than a month
45
+ build_years_months_days
46
46
  end
47
47
  end
48
-
49
- output
50
48
  end
51
49
 
52
- def build_seconds
53
- output[I18n.t(:seconds, :default => "seconds")] = distance.to_i
54
- self.distance = 0
55
- end
50
+ output
51
+ end
56
52
 
57
- def build_minutes
58
- output[I18n.t(:minutes, :default => "minutes")], self.distance = distance.divmod(1.minute)
59
- end
53
+ def build_seconds
54
+ output[:seconds] = distance.to_i
55
+ self.distance = 0
56
+ end
60
57
 
61
- def build_hours
62
- output[I18n.t(:hours, :default => "hours")], self.distance = distance.divmod(1.hour)
63
- end
58
+ def build_minutes
59
+ output[:minutes], self.distance = distance.divmod(1.minute)
60
+ end
64
61
 
65
- def build_days
66
- output[I18n.t(:days, :default => "days")], self.distance = distance.divmod(1.day)
67
- end
62
+ def build_hours
63
+ output[:hours], self.distance = distance.divmod(1.hour)
64
+ end
68
65
 
69
- def build_months
70
- build_years_months_days
66
+ def build_days
67
+ output[:days], self.distance = distance.divmod(1.day)
68
+ end
71
69
 
72
- if (years = output.delete(I18n.t(:years, :default => "years"))) > 0
73
- output[I18n.t(:months, :default => "months")] += (years * 12)
74
- end
70
+ def build_months
71
+ build_years_months_days
72
+
73
+ if (years = output.delete(:years)) > 0
74
+ output[:months] += (years * 12)
75
75
  end
76
+ end
76
77
 
77
- def build_years_months_days
78
- months = (largest.year - smallest.year) * 12 + (largest.month - smallest.month)
79
- years, months = months.divmod(12)
78
+ def build_years_months_days
79
+ months = (largest.year - smallest.year) * 12 + (largest.month - smallest.month)
80
+ years, months = months.divmod(12)
80
81
 
81
- days = largest.day - smallest.day
82
+ days = largest.day - smallest.day
82
83
 
83
- # Will otherwise incorrectly say one more day if our range goes over a day.
84
- days -= 1 if largest.hour < smallest.hour
84
+ # Will otherwise incorrectly say one more day if our range goes over a day.
85
+ days -= 1 if largest.hour < smallest.hour
85
86
 
86
- if days < 0
87
- # Convert the last month to days and add to total
88
- months -= 1
89
- last_month = largest.advance(:months => -1)
90
- days += Time.days_in_month(last_month.month, last_month.year)
91
- end
87
+ if days < 0
88
+ # Convert the last month to days and add to total
89
+ months -= 1
90
+ last_month = largest.advance(:months => -1)
91
+ days += Time.days_in_month(last_month.month, last_month.year)
92
+ end
92
93
 
93
- if months < 0
94
- # Convert a year to months
95
- years -= 1
96
- months += 12
97
- end
94
+ if months < 0
95
+ # Convert a year to months
96
+ years -= 1
97
+ months += 12
98
+ end
98
99
 
99
- output[I18n.t(:years, :default => "years")] = years
100
- output[I18n.t(:months, :default => "months")] = months
101
- output[I18n.t(:days, :default => "days")] = days
100
+ output[:years] = years
101
+ output[:months] = months
102
+ output[:days] = days
102
103
 
103
- total_days, self.distance = (from_time - to_time).abs.divmod(1.day)
104
- end
104
+ total_days, self.distance = (from_time - to_time).abs.divmod(1.day)
105
+ end
105
106
  end # TimeHash
106
- end # DOTIW
107
+ end # DOTIW
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module DOTIW
4
- VERSION = "1.1.1"
4
+ VERSION = "2.0"
5
5
  end
@@ -10,22 +10,38 @@ describe "A better distance_of_time_in_words" do
10
10
  before do
11
11
  I18n.locale = :en
12
12
  time = "01-08-2009".to_time
13
- Time.stub!(:now).and_return(time)
14
- Time.zone.stub!(:now).and_return(time)
13
+ allow(Time).to receive(:now).and_return(time)
14
+ allow(Time.zone).to receive(:now).and_return(time)
15
15
  end
16
16
 
17
17
  describe "distance of time" do
18
- [
18
+ fragments = [
19
+ [0.5.minutes, "30 seconds"],
20
+ [4.5.minutes, "4 minutes and 30 seconds"],
19
21
  [5.minutes.to_i, "5 minutes"],
20
22
  [10.minutes.to_i, "10 minutes"],
21
23
  [1.hour.to_i, "1 hour"],
24
+ [1.hour + 30.seconds, "1 hour and 30 seconds"],
22
25
  [4.weeks.to_i, "28 days"],
23
26
  [24.weeks.to_i, "5 months and 15 days"]
24
- ].each do |number, result|
27
+ ]
28
+ fragments.each do |number, result|
25
29
  it "#{number} == #{result}" do
26
- distance_of_time(number).should eql(result)
30
+ expect(distance_of_time(number)).to eq(result)
27
31
  end
28
32
  end
33
+
34
+ describe "with options" do
35
+ it "except:seconds should skip seconds" do
36
+ expect(distance_of_time(1.2.minute, except: 'seconds')).to eq("1 minute")
37
+ expect(distance_of_time(2.5.hours + 30.seconds, except: 'seconds')).to eq("2 hours and 30 minutes")
38
+ end
39
+
40
+ it "except:seconds har higher presedence than include_seconds:true" do
41
+ expect(distance_of_time(1.2.minute, include_seconds: true, except: 'seconds')).to eq('1 minute')
42
+ end
43
+ end
44
+
29
45
  end
30
46
 
31
47
  describe "hash version" do
@@ -35,12 +51,12 @@ describe "A better distance_of_time_in_words" do
35
51
  describe name do
36
52
  it "exactly" do
37
53
  hash = distance_of_time_in_words_hash(Time.now, Time.now + 1.send(name))
38
- hash[name.to_s].should eql(1)
54
+ expect(hash[name]).to eq(1)
39
55
  end
40
56
 
41
57
  it "two" do
42
58
  hash = distance_of_time_in_words_hash(Time.now, Time.now + 2.send(name))
43
- hash[name.to_s].should eql(2)
59
+ expect(hash[name]).to eq(2)
44
60
  end
45
61
  end
46
62
  end
@@ -48,47 +64,29 @@ describe "A better distance_of_time_in_words" do
48
64
  it "should be happy with lots of measurements" do
49
65
  hash = distance_of_time_in_words_hash(Time.now,
50
66
  Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds)
51
- hash["years"].should eql(1)
52
- hash["months"].should eql(2)
53
- hash["days"].should eql(3)
54
- hash["hours"].should eql(4)
55
- hash["minutes"].should eql(5)
56
- hash["seconds"].should eql(6)
57
- end
58
-
59
- it "debe estar contento con las mediciones en español" do
60
- hash = distance_of_time_in_words_hash(Time.now,
61
- Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds,
62
- :locale => "es")
63
- hash["años"].should eql(1)
64
- hash["meses"].should eql(2)
65
- hash["días"].should eql(3)
66
- hash["horas"].should eql(4)
67
- hash["minutos"].should eql(5)
68
- hash["segundos"].should eql(6)
69
- end
70
-
71
- it "debe hablar español" do
72
- I18n.locale = :es
73
- hash = distance_of_time_in_words_hash(Time.now, Time.now + 5.days)
74
- hash["días"].should eql(5)
67
+ expect(hash[:years]).to eq(1)
68
+ expect(hash[:months]).to eq(2)
69
+ expect(hash[:days]).to eq(3)
70
+ expect(hash[:hours]).to eq(4)
71
+ expect(hash[:minutes]).to eq(5)
72
+ expect(hash[:seconds]).to eq(6)
75
73
  end
76
74
  end
77
75
  end
78
76
 
79
77
  describe "real version" do
80
78
  it "debe hablar español" do
81
- distance_of_time_in_words(Time.now, Time.now + 5.days, true, :locale => "es").should eql("5 días")
79
+ expect(distance_of_time_in_words(Time.now, Time.now + 1.days, true, :locale => :es)).to eq("un día")
80
+ expect(distance_of_time_in_words(Time.now, Time.now + 5.days, true, :locale => :es)).to eq("5 días")
82
81
  end
83
82
 
84
- [
83
+ fragments = [
85
84
  [Time.now, Time.now + 5.days + 3.minutes, "5 days and 3 minutes"],
86
85
  [Time.now, Time.now + 1.minute, "1 minute"],
87
86
  [Time.now, Time.now + 3.years, "3 years"],
88
87
  [Time.now, Time.now + 10.years, "10 years"],
88
+ [Time.now, Time.now + 10.years, "10 years"],
89
89
  [Time.now, Time.now + 3.hour, "3 hours"],
90
- # Need to be +1.day because it will output "1 year and 30 days" otherwise.
91
- # Haven't investigated fully how this is caused.
92
90
  [Time.now, Time.now + 13.months, "1 year and 1 month"],
93
91
  # Any numeric sequence is merely coincidental.
94
92
  [Time.now, Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds, "1 year, 2 months, 3 days, 4 hours, 5 minutes, and 6 seconds"],
@@ -97,14 +95,15 @@ describe "A better distance_of_time_in_words" do
97
95
  ["2009-4-14".to_time, "2008-3-16".to_time, "1 year and 29 days"],
98
96
  ["2009-2-01".to_time, "2009-3-01".to_time, "1 month"],
99
97
  ["2008-2-01".to_time, "2008-3-01".to_time, "1 month"]
100
- ].each do |start, finish, output|
98
+ ]
99
+ fragments.each do |start, finish, output|
101
100
  it "should be #{output}" do
102
- distance_of_time_in_words(start, finish, true).should eql(output)
101
+ expect(distance_of_time_in_words(start, finish, true)).to eq(output)
103
102
  end
104
103
  end
105
104
 
106
105
  describe "accumulate on" do
107
- [
106
+ fragments = [
108
107
  [Time.now,
109
108
  Time.now + 10.minute,
110
109
  :seconds,
@@ -124,21 +123,37 @@ describe "A better distance_of_time_in_words" do
124
123
  [Time.now,
125
124
  Time.now + 2.day + 10000.hour + 10.second,
126
125
  :months,
127
- "13 months, 16 hours, and 10 seconds"],
128
- [Time.now,
129
- Time.now + 2.day + 10000.hour + 10.second,
130
- :years,
131
- "1 year, 1 month, 22 days, 16 hours, and 10 seconds"]
132
- ].each do |start, finish, accumulator, output|
126
+ "13 months, 16 hours, and 10 seconds"]
127
+ ]
128
+ fragments.each do |start, finish, accumulator, output|
133
129
  it "should be #{output}" do
134
- distance_of_time_in_words(start, finish, true, :accumulate_on => accumulator).should eql(output)
130
+ expect(distance_of_time_in_words(start, finish, true, :accumulate_on => accumulator)).to eq(output)
135
131
  end
136
132
  end
137
133
  end # :accumulate_on
134
+
135
+ describe "without finish time" do
136
+ # A missing finish argument should default to zero, essentially returning
137
+ # the equivalent of distance_of_time in order to be backwards-compatible
138
+ # with the original rails distance_of_time_in_words helper.
139
+ fragments = [
140
+ [5.minutes.to_i, "5 minutes"],
141
+ [10.minutes.to_i, "10 minutes"],
142
+ [1.hour.to_i, "1 hour"],
143
+ [4.weeks.to_i, "28 days"],
144
+ [24.weeks.to_i, "5 months and 15 days"]
145
+ ]
146
+ fragments.each do |start, output|
147
+ it "should be #{output}" do
148
+ expect(distance_of_time_in_words(start)).to eq(output)
149
+ end
150
+ end
151
+ end
152
+
138
153
  end
139
154
 
140
155
  describe "with output options" do
141
- [
156
+ fragments = [
142
157
  # Any numeric sequence is merely coincidental.
143
158
  [Time.now,
144
159
  Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds,
@@ -167,18 +182,6 @@ describe "A better distance_of_time_in_words" do
167
182
  Time.now + 1.hour + 1.day + 1.minute,
168
183
  { :only => ["minutes", "hours"]},
169
184
  "1 hour and 1 minute"],
170
- [Time.now,
171
- Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds,
172
- { :precision => 2 },
173
- "1 year and 2 months"],
174
- [Time.now,
175
- Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds,
176
- { :precision => 3 },
177
- "1 year, 2 months, and 3 days"],
178
- [Time.now,
179
- Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds,
180
- { :precision => 10 },
181
- "1 year, 2 months, 3 days, 4 hours, 5 minutes, and 6 seconds"],
182
185
  [Time.now,
183
186
  Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds,
184
187
  { :vague => true },
@@ -197,31 +200,48 @@ describe "A better distance_of_time_in_words" do
197
200
  "1 year, 2 months, 3 days, 4 hours, 5 minutes, and 6 seconds"],
198
201
  [Time.now,
199
202
  Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds,
200
- { "except" => "minutes" },
203
+ { :except => "minutes" },
201
204
  "1 year, 2 months, 3 days, 4 hours, and 6 seconds"],
202
205
  [Time.now,
203
206
  Time.now + 1.hour + 2.minutes + 3.seconds,
204
207
  { :highest_measure_only => true },
205
208
  "1 hour"],
209
+ [Time.now,
210
+ Time.now + 1.hours + 2.minutes + 3.seconds,
211
+ { :highest_measures => 1 },
212
+ "1 hour"],
206
213
  [Time.now,
207
214
  Time.now + 2.year + 3.months + 4.days + 5.hours + 6.minutes + 7.seconds,
208
- { :singularize => :always },
209
- "2 year, 3 month, 4 day, 5 hour, 6 minute, and 7 second"]
210
- ].each do |start, finish, options, output|
215
+ { :highest_measures => 3 },
216
+ "2 years, 3 months, and 4 days"],
217
+ [Time.now,
218
+ Time.now + 2.year + 3.weeks + 4.days + 5.hours + 6.minutes + 7.seconds,
219
+ { :highest_measures => 2 },
220
+ "2 years and 25 days"],
221
+ [Time.now,
222
+ Time.now + 4.days + 6.minutes + 7.seconds,
223
+ { :highest_measures => 3 },
224
+ "4 days, 6 minutes, and 7 seconds"],
225
+ [Time.now,
226
+ Time.now + 1.year + 2.weeks,
227
+ { :highest_measures => 3 },
228
+ "1 year and 14 days"]
229
+ ]
230
+ fragments.each do |start, finish, options, output|
211
231
  it "should be #{output}" do
212
- distance_of_time_in_words(start, finish, true, options).should eql(output)
232
+ expect(distance_of_time_in_words(start, finish, true, options)).to eq(output)
213
233
  end
214
234
  end
215
235
 
216
236
  describe "include_seconds" do
217
237
  it "is ignored if only seconds have passed" do
218
- distance_of_time_in_words(Time.now, Time.now + 1.second, false).should eql("1 second")
238
+ expect(distance_of_time_in_words(Time.now, Time.now + 1.second, false)).to eq("1 second")
219
239
  end
220
240
 
221
241
  it "removes seconds in all other cases" do
222
- distance_of_time_in_words(Time.now,
242
+ expect(distance_of_time_in_words(Time.now,
223
243
  Time.now + 1.year + 2.months + 3.days + 4.hours + 5.minutes + 6.seconds,
224
- false).should eql("1 year, 2 months, 3 days, 4 hours, and 5 minutes")
244
+ false)).to eq("1 year, 2 months, 3 days, 4 hours, and 5 minutes")
225
245
  end
226
246
  end # include_seconds
227
247
  end
@@ -232,11 +252,11 @@ describe "A better distance_of_time_in_words" do
232
252
  end
233
253
 
234
254
  it "calculates 15%" do
235
- time_in_percent.should eql("15%")
255
+ expect(time_in_percent).to eq("15%")
236
256
  end
237
257
 
238
258
  it "calculates 15.3%" do
239
- time_in_percent(:precision => 1).should eql("15.3%")
259
+ expect(time_in_percent(:precision => 1)).to eq("15.3%")
240
260
  end
241
261
  end
242
262
 
@@ -7,13 +7,11 @@ $:.unshift ROOT_PATH unless $:.include? ROOT_PATH
7
7
  require 'erb'
8
8
 
9
9
  require 'active_support/all'
10
+ require 'action_view'
10
11
 
11
- require 'action_view/context'
12
- require 'action_view/helpers'
13
-
14
- require 'init' # require dotiw through init (like a plugin would)
12
+ require 'dotiw'
15
13
 
16
14
  Time.zone = 'UTC'
17
- I18n.load_path.clear
18
- I18n.load_path << Dir[File.join(File.dirname(__FILE__), "translations", "*")]
15
+
16
+ I18n.load_path << Dir[File.join(File.dirname(__FILE__), 'translations', '*')]
19
17
  I18n.locale = :en
@@ -1,9 +1,24 @@
1
1
  es:
2
- seconds: segundos
3
- minutes: minutos
4
- hours: horas
5
- days: días
6
- weeks: semanas
7
- months: meses
8
- years: años
9
-
2
+ datetime:
3
+ dotiw:
4
+ seconds:
5
+ one: uno segundo
6
+ other: "%{count} segundos"
7
+ minutes:
8
+ one: uno minuto
9
+ other: "%{count} minutos"
10
+ hours:
11
+ one: una hora
12
+ other: "%{count} horas"
13
+ days:
14
+ one: un día
15
+ other: "%{count} días"
16
+ weeks:
17
+ one: una semana
18
+ other: "%{count} semanas"
19
+ months:
20
+ one: un mes
21
+ other: "%{count} meses"
22
+ years:
23
+ one: un año
24
+ other: "%{count} años"
metadata CHANGED
@@ -1,103 +1,144 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: dotiw
3
- version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 1.1.1
3
+ version: !ruby/object:Gem::Version
4
+ version: '2.0'
6
5
  platform: ruby
7
- authors:
6
+ authors:
8
7
  - Ryan Bigg
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
-
13
- date: 2010-12-23 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
11
+ date: 2010-12-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
16
14
  name: actionpack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '3'
20
+ type: :runtime
17
21
  prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
19
- none: false
20
- requirements:
21
- - - ~>
22
- - !ruby/object:Gem::Version
23
- version: "3"
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: i18n
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
24
34
  type: :runtime
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
27
- name: bundler
28
35
  prerelease: false
29
- requirement: &id002 !ruby/object:Gem::Requirement
30
- none: false
31
- requirements:
32
- - - ~>
33
- - !ruby/object:Gem::Version
34
- version: 1.0.0
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
35
62
  type: :development
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
38
70
  name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.0'
76
+ type: :development
39
77
  prerelease: false
40
- requirement: &id003 !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- version: "2.0"
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: tzinfo
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
46
90
  type: :development
47
- version_requirements: *id003
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
48
97
  description: Better distance_of_time_in_words for Rails
49
98
  email: radarlistener@gmail.com
50
99
  executables: []
51
-
52
100
  extensions: []
53
-
54
101
  extra_rdoc_files: []
55
-
56
- files:
57
- - .gitignore
102
+ files:
103
+ - ".gitignore"
104
+ - ".travis.yml"
58
105
  - Gemfile
59
106
  - MIT-LICENSE
60
107
  - README.markdown
61
108
  - Rakefile
62
109
  - dotiw.gemspec
63
- - init.rb
64
110
  - lib/dotiw.rb
111
+ - lib/dotiw/action_view_ext/helpers/date_helper.rb
112
+ - lib/dotiw/locale/en.yml
65
113
  - lib/dotiw/time_hash.rb
66
114
  - lib/dotiw/version.rb
67
- - rails/init.rb
68
115
  - spec/lib/dotiw_spec.rb
69
116
  - spec/spec_helper.rb
70
- - spec/translations/en.yml
71
117
  - spec/translations/es.yml
72
118
  homepage:
73
119
  licenses: []
74
-
120
+ metadata: {}
75
121
  post_install_message:
76
122
  rdoc_options: []
77
-
78
- require_paths:
123
+ require_paths:
79
124
  - lib
80
- required_ruby_version: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
125
+ required_ruby_version: !ruby/object:Gem::Requirement
126
+ requirements:
83
127
  - - ">="
84
- - !ruby/object:Gem::Version
85
- version: "0"
86
- required_rubygems_version: !ruby/object:Gem::Requirement
87
- none: false
88
- requirements:
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ required_rubygems_version: !ruby/object:Gem::Requirement
131
+ requirements:
89
132
  - - ">="
90
- - !ruby/object:Gem::Version
91
- version: 1.3.6
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
92
135
  requirements: []
93
-
94
136
  rubyforge_project:
95
- rubygems_version: 1.8.8
137
+ rubygems_version: 2.2.2
96
138
  signing_key:
97
- specification_version: 3
139
+ specification_version: 4
98
140
  summary: Better distance_of_time_in_words for Rails
99
- test_files:
141
+ test_files:
100
142
  - spec/lib/dotiw_spec.rb
101
143
  - spec/spec_helper.rb
102
- - spec/translations/en.yml
103
144
  - spec/translations/es.yml
data/init.rb DELETED
@@ -1,3 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'rails/init'
@@ -1 +0,0 @@
1
- require 'dotiw'
@@ -1,24 +0,0 @@
1
- en:
2
- seconds: seconds
3
- minutes: minutes
4
- hours: hours
5
- days: days
6
- weeks: weeks
7
- months: months
8
- years: years
9
-
10
- support:
11
- array:
12
- two_words_connector: " and "
13
- words_connector: ", "
14
- last_word_connector: ", and "
15
-
16
- datetime:
17
- distance_in_words:
18
- about_x_years:
19
- one: "about 1 year"
20
- many: "about %{count} years"
21
-
22
- number:
23
- format:
24
- separator: "."