time_diff 0.1.1 → 0.2.0

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/README CHANGED
@@ -16,3 +16,19 @@ You can use the difference like:
16
16
 
17
17
  diff[:year], diff[:month], diff[:week]
18
18
 
19
+
20
+ Formatted Time difference
21
+ -------------------------
22
+
23
+ %y - year
24
+ %M - month
25
+ %w - week
26
+ %d - day
27
+ %h - hour
28
+ %m - minute
29
+ %s - second
30
+
31
+ By default the format is '%y, %M, %w, %d and %h:%m:%s' this will return '1 year, 2 months, 3 weeks, 4 days and 12:05:52'.
32
+ You will get the result from the output hash, time_diff_components[:diff]
33
+
34
+ You can pass your own format as third parameter to this function.
@@ -8,13 +8,28 @@ gem install time_diff
8
8
 
9
9
  require 'time_diff'
10
10
 
11
- diff = Time.diff(start_date_time, end_date_time)
11
+ time_diff_components = Time.diff(start_date_time, end_date_time)
12
12
 
13
13
  This will return the hash of time difference in terms of years, month, week, day, hour, minute and second.
14
14
 
15
15
  You can use the difference like:
16
16
 
17
- diff[:year], diff[:month], diff[:week]
17
+ time_diff_components[:year], time_diff_components[:month], time_diff_components[:week]
18
+
19
+ ==Formatted Time difference
20
+
21
+ %y - year
22
+ %M - month
23
+ %w - week
24
+ %d - day
25
+ %h - hour
26
+ %m - minute
27
+ %s - second
28
+
29
+ By default the format is '%y, %M, %w, %d and %h:%m:%s' this will return '1 year, 2 months, 3 weeks, 4 days and 12:05:52'.
30
+ You will get the result from the output hash, time_diff_components[:diff]
31
+
32
+ You can pass your own format as third parameter to this function.
18
33
 
19
34
  == Contributing to time_diff
20
35
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.2.0
@@ -2,17 +2,52 @@ require 'rubygems'
2
2
  require 'active_support/all'
3
3
 
4
4
  class Time
5
- def self.diff(start_date, end_date)
6
- from_time = start_date.to_time if start_date.respond_to?(:to_time)
7
- to_time = end_date.to_time if end_date.respond_to?(:to_time)
8
- distance_in_seconds = ((to_time - from_time).abs).round
5
+ def self.diff(start_date, end_date, format_string='%y, %M, %w, %d and %h:%m:%s')
6
+ start_time = start_date.to_time if start_date.respond_to?(:to_time)
7
+ end_time = end_date.to_time if end_date.respond_to?(:to_time)
8
+ distance_in_seconds = ((end_time - start_time).abs).round
9
9
  components = []
10
10
 
11
11
  %w(year month week day hour minute second).each do |interval|
12
- delta = (distance_in_seconds / 1.send(interval)).floor
13
- distance_in_seconds -= delta.send(interval)
14
- components << delta
12
+ component = (distance_in_seconds / 1.send(interval)).floor
13
+ distance_in_seconds -= component.send(interval)
14
+ components << component
15
15
  end
16
- return {:year => components[0], :month => components[1], :week => components[2], :day => components[3], :hour => components[4], :minute => components[5], :second => components[6]}
16
+ time_diff_components = {:year => components[0], :month => components[1], :week => components[2], :day => components[3], :hour => components[4], :minute => components[5], :second => components[6]}
17
+ format_string = remove_format_string_for_zero_components(time_diff_components, format_string)
18
+ time_diff_components[:diff] = format_date_time(time_diff_components, format_string) unless format_string.nil?
19
+ return time_diff_components
20
+ end
21
+
22
+ def Time.format_date_time(time_diff_components, format_string)
23
+ format_string.gsub!('%y', "#{time_diff_components[:year]} #{pluralize('year', time_diff_components[:year])}")
24
+ format_string.gsub!('%M', "#{time_diff_components[:month]} #{pluralize('month', time_diff_components[:month])}")
25
+ format_string.gsub!('%w', "#{time_diff_components[:week]} #{pluralize('week', time_diff_components[:week])}")
26
+ format_string.gsub!('%d', "#{time_diff_components[:day]} #{pluralize('day', time_diff_components[:day])}")
27
+ format_string.gsub!('%h', format_digit(time_diff_components[:hour]).to_s)
28
+ format_string.gsub!('%m', format_digit(time_diff_components[:minute]).to_s)
29
+ format_string.gsub!('%s', format_digit(time_diff_components[:second]).to_s)
30
+ format_string
31
+ end
32
+
33
+ def Time.pluralize(word, count)
34
+ return count > 1 ? word.pluralize : word
35
+ end
36
+
37
+ def Time.remove_format_string_for_zero_components(time_diff_components, format_string)
38
+ format_string.gsub!('%y, ','') if time_diff_components[:year] == 0
39
+ format_string.gsub!('%M, ','') if time_diff_components[:month] == 0
40
+ format_string.gsub!('%w, ','') if time_diff_components[:week] == 0
41
+ if format_string.slice(0..1) == '%d'
42
+ format_string.gsub!('%d ','') if time_diff_components[:day] == 0
43
+ else
44
+ format_string.gsub!(', %d','') if time_diff_components[:day] == 0
45
+ end
46
+ format_string.slice!(0..3) if format_string.slice(0..3) == 'and '
47
+ format_string
48
+ end
49
+
50
+ def Time.format_digit(number)
51
+ return '%02d' % number
17
52
  end
18
53
  end
@@ -3,15 +3,25 @@ require 'time'
3
3
 
4
4
  class TestTimeDiff < Test::Unit::TestCase
5
5
  should "return the time differnce in displayable format" do
6
- assert_test_scenarios(Time.parse('2011-03-06'), Time.parse('2011-03-07'), {:year => 0, :month => 0, :week => 0, :day => 1, :hour => 0, :minute => 0, :second => 0})
7
- assert_test_scenarios(Time.parse('2011-03-06'), Time.parse('2011-04-08'), {:year => 0, :month => 1, :week => 0, :day => 3, :hour => 0, :minute => 0, :second => 0})
8
- assert_test_scenarios(Time.parse('2011-03-06 12:30:00'), Time.parse('2011-03-07 12:30:30'), {:year => 0, :month => 0, :week => 0, :day => 1, :hour => 0, :minute => 0, :second => 30})
9
- assert_test_scenarios(Time.parse('2011-03-06'), Time.parse('2013-03-07'), {:year => 2, :month => 0, :week => 0, :day => 1, :hour => 12, :minute => 0, :second => 0})
10
- assert_test_scenarios(Time.parse('2011-03-06'), Time.parse('2011-03-14'), {:year => 0, :month => 0, :week => 1, :day => 1, :hour => 0, :minute => 0, :second => 0})
6
+ assert_test_scenarios(Time.parse('2011-03-06'), Time.parse('2011-03-07'), {:year => 0, :month => 0, :week => 0, :day => 1, :hour => 0, :minute => 0, :second => 0, :diff => '1 day and 00:00:00'})
7
+ assert_test_scenarios(Time.parse('2011-03-06'), Time.parse('2011-04-08'), {:year => 0, :month => 1, :week => 0, :day => 3, :hour => 0, :minute => 0, :second => 0, :diff => '1 month, 3 days and 00:00:00'})
8
+ assert_test_scenarios(Time.parse('2011-03-06 12:30:00'), Time.parse('2011-03-07 12:30:30'), {:year => 0, :month => 0, :week => 0, :day => 1, :hour => 0, :minute => 0, :second => 30, :diff => '1 day and 00:00:30'})
9
+ assert_test_scenarios(Time.parse('2011-03-06'), Time.parse('2013-03-07'), {:year => 2, :month => 0, :week => 0, :day => 1, :hour => 12, :minute => 0, :second => 0, :diff => '2 years, 1 day and 12:00:00'})
10
+ assert_test_scenarios(Time.parse('2011-03-06'), Time.parse('2011-03-14'), {:year => 0, :month => 0, :week => 1, :day => 1, :hour => 0, :minute => 0, :second => 0, :diff => '1 week, 1 day and 00:00:00'})
11
+ assert_test_scenarios(Time.parse('2011-03-06 12:30:00'), Time.parse('2011-03-06 12:30:30'), {:year => 0, :month => 0, :week => 0, :day => 0, :hour => 0, :minute => 0, :second => 30, :diff => '00:00:30'})
12
+ end
13
+
14
+ should "return the time difference in a formatted text" do
15
+ assert_test_scenarios_for_formatted_diff(Time.parse('2010-03-06 12:30:00'), Time.parse('2011-03-07 12:30:30'), '%y, %d and %h:%m:%s', '1 year and 18:00:30')
11
16
  end
12
17
 
13
18
  def assert_test_scenarios(start_date, end_date, expected_result)
14
19
  date_diff = Time.diff(start_date, end_date)
15
20
  assert_equal(date_diff, expected_result)
16
21
  end
22
+
23
+ def assert_test_scenarios_for_formatted_diff(start_date, end_date, format_string, expected_result)
24
+ date_diff = Time.diff(start_date, end_date, format_string)
25
+ assert_equal(date_diff[:diff], expected_result)
26
+ end
17
27
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{time_diff}
8
- s.version = "0.1.1"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["abhilash"]
12
- s.date = %q{2011-03-07}
12
+ s.date = %q{2011-04-04}
13
13
  s.description = %q{It returns a hash file with the difference in terms of year, month, week, day, hour, minute and second}
14
14
  s.email = %q{abhidsm@gmail.com}
15
15
  s.extra_rdoc_files = [
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: time_diff
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 1
10
- version: 0.1.1
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - abhilash
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-03-07 00:00:00 +05:30
18
+ date: 2011-04-04 00:00:00 +05:30
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency