time_rounder 0.2.1 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5b97765b791cf873270763327d61a5a854d3c8a3
4
- data.tar.gz: a9b17a2d47a7f2cc702b8e0a1e89db238dc267a7
3
+ metadata.gz: 22d760e156469ae8f078b5d45951feb0067ae102
4
+ data.tar.gz: c9bafa2190e085fd76b232e86219c7cee24d5c4e
5
5
  SHA512:
6
- metadata.gz: a4e61a96ff160a18485d204f450b3178519d8e8203ab912e3dc3b9ba88b879254821761eeb28e6b40a935db2074ebf40fa2d0db6e981a6d4865d0d7db9b21b83
7
- data.tar.gz: 68564c636c3138ca9b181772a661e0f6ca3b4f243e3dcce2ae56c76e2bcc115aa8d976a3989d29580b92126ff79c79547c525ff421f31b4343c561c6930ed1aa
6
+ metadata.gz: 570fe67ea8e998b9d2c0c38af813b6239851b7498601116292556bf8e0be7c4bcc8bbc2a786127e06a3cacfcbb46583421ce3785b58ace9840fd1b5ea3ecb7f8
7
+ data.tar.gz: fd548c15fe22302c8d69f8d568c4b76bf6db281cc253f6ffbcd87f6034adcb4411c99b58f8e8a5b119fdbb69492a31587a142f96c0b2d808c4cdac6fbfc4db6c
data/.travis.yml CHANGED
@@ -1,5 +1,6 @@
1
1
  language: ruby
2
- rvm:
2
+ rvm:
3
+ - 2.3.0
3
4
  - 2.2.2
4
5
  - 2.1.7
5
6
  - 2.0.0
data/README.md CHANGED
@@ -23,13 +23,13 @@ Or install it yourself as:
23
23
  TimeRounder has simple methods to access internal classes that calculate the total hours to the nearest quarter hours in a given number of seconds.
24
24
 
25
25
  ```ruby
26
- TimeRounder.seconds_to_hours(seconds)
26
+ TimeRounder.seconds_to_hours(seconds) #seconds is the total seconds to be rounded into quarter hours
27
27
  ```
28
28
 
29
29
  TimeRounder can also take a DateTime/Time object and round it to the nearest quarter hour
30
30
 
31
31
  ```ruby
32
- TimeRounder.rounded_time(seconds)
32
+ TimeRounder.rounded_time(date) #date is DateTime/Time object
33
33
  ```
34
34
 
35
35
  ## Development
data/bin/console CHANGED
File without changes
data/bin/setup CHANGED
File without changes
@@ -0,0 +1,19 @@
1
+ require 'time_rounder/schedule/fifteen_minute'
2
+
3
+ module TimeRounder
4
+ ##
5
+ # Handles loading of the proper schedule
6
+ module LoadSchedule
7
+
8
+ ##
9
+ # loads the proper schedule based what minute is passed
10
+ def get_schedule(minutes)
11
+ case minutes
12
+ when 15
13
+ self.class.send(:include, TimeRounder::Schedule::FifteenMinute)
14
+ else
15
+ raise TimeRounder::ScheduleNotFound
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,8 +1,11 @@
1
+ require "time_rounder/load_schedule"
2
+
1
3
  ##
2
4
  # Round a Time/DateTime object to Quarter Hours 0, 15, 30, 45
3
5
 
4
6
  module TimeRounder
5
7
  class RoundedTime
8
+ include TimeRounder::LoadSchedule
6
9
 
7
10
  ##
8
11
  # returns the DateTime/Time object on the correct quarter hour
@@ -18,15 +21,16 @@ module TimeRounder
18
21
  ##
19
22
  # initailize the object with a date/time object
20
23
 
21
- def initialize(time)
24
+ def initialize(time, schedule=15)
22
25
  @@time = time
26
+ get_schedule(schedule)
23
27
  end
24
28
 
25
29
  ##
26
30
  # The number of seconds to add to the time to get to the nearest quarter hour
27
31
 
28
32
  def magic_number
29
- minutes_hash[minutes] * 60
33
+ minutes_to_closest_partial[minutes] * 60
30
34
  end
31
35
 
32
36
  ##
@@ -36,13 +40,5 @@ module TimeRounder
36
40
  @@time.strftime('%M').to_i
37
41
  end
38
42
 
39
- ##
40
- # hash of minutes and the number of minutes to add to get to the nearest quarter hour
41
-
42
- def minutes_hash
43
- {0 => 0, 1 => -1, 2 => -2, 3 => -3, 4 => -4, 5 => -5, 6 => -6, 7 => -7, 8 => 7, 9 => 6, 10 => 5, 11 => 4, 12 => 3, 13 => 2, 14 => 1, 15 => 0, 16 => -1, 17 => -2, 18 => -3, 19 => -4, 20 => -5, 21 => -6, 22 => -7, 23 => 7, 24 => 6, 25 => 5, 26 => 4, 27 => 3, 28 => 2, 29 => 1, 30 => 0, 31 => -1, 32 => -2, 33 => -3, 34 => -4, 35 => -5, 36 => -6, 37 => -7, 38 => 7, 39 => 6, 40 => 5, 41 => 4, 42 => 3, 43 => 2, 44 => 1, 45 => 0, 46 => -1, 47 => -2, 48 => -3, 49 => -4, 50 => -5, 51 => -6, 52 => -7, 53 => 7, 54 => 6, 55 => 5, 56 => 4, 57 => 3, 58 => 2, 59 => 1}
44
- end
45
-
46
-
47
43
  end
48
44
  end
@@ -1,8 +1,11 @@
1
+ require "time_rounder/load_schedule"
2
+
1
3
  ##
2
4
  # Takes seconds and returns a decimal of hours and partial hours.
3
5
 
4
6
  module TimeRounder
5
7
  class RoundedTimeFromSeconds
8
+ include TimeRounder::LoadSchedule
6
9
 
7
10
  ##
8
11
  # Returns the total rounded hours in the number of seconds
@@ -14,15 +17,16 @@ module TimeRounder
14
17
 
15
18
  private
16
19
 
17
- def initialize(seconds)
20
+ def initialize(seconds, schedule=15)
18
21
  @@seconds = seconds
22
+ get_schedule(schedule)
19
23
  end
20
24
 
21
25
  ##
22
26
  # Determines if an hour needs to be added to total if the partial is rounding up at the end of an hour
23
27
 
24
28
  def add_hour?
25
- add_hour_array.include?(minutes)
29
+ add_hours_array.include?(minutes)
26
30
  end
27
31
 
28
32
  ##
@@ -43,23 +47,8 @@ module TimeRounder
43
47
  # Takes the number of minutes in the total of seconds after hours are removed, to retrieve the decimal portion of the total.
44
48
 
45
49
  def quarter_hours
46
- minutes_hash[minutes]
47
- end
48
-
49
- ##
50
- # This is where the magic happens. This hash contains every minute of an hour and what decimal partial hours it rounds to.
51
- # This partial is added to the total.
52
-
53
- def minutes_hash
54
- {0 => 0.0, 1 => 0.0, 2 => 0.0, 3 => 0.0, 4 => 0.0, 5 => 0.0, 6 => 0.0, 7 => 0.0, 8 => 0.25, 9 => 0.25, 10 => 0.25, 11 => 0.25, 12 => 0.25, 13 => 0.25, 14 => 0.25, 15 => 0.25, 16 => 0.25, 17 => 0.25, 18 => 0.25, 19 => 0.25, 20 => 0.25, 21 => 0.25, 22 => 0.25, 23 => 0.50, 24 => 0.50, 25 => 0.50, 26 => 0.50, 27 => 0.50, 28 => 0.50, 29 => 0.50, 30 => 0.50, 31 => 0.50, 32 => 0.50, 33 => 0.50, 34 => 0.50, 35 => 0.50, 36 => 0.50, 37 => 0.50, 38 => 0.75, 39 => 0.75, 40 => 0.75, 41 => 0.75, 42 => 0.75, 43 => 0.75, 44 => 0.75, 45 => 0.75, 46 => 0.75, 47 => 0.75, 48 => 0.75, 49 => 0.75, 50 => 0.75, 51 => 0.75, 52 => 0.75, 53 => 0.0, 54 => 0.0, 55 => 0.0, 56 => 0.0, 57 => 0.0, 58 => 0.0, 59 => 0.0}
50
+ partial_hours_from_minutes[minutes]
55
51
  end
56
52
 
57
- ##
58
- # This array is used to determine if it close to the next hour and an hour needs added to the total.
59
- # The partial hours will show as zero, and hours is added to correct the total.
60
-
61
- def add_hour_array
62
- [53, 54, 55, 56, 57, 58, 59]
63
- end
64
53
  end
65
54
  end
@@ -0,0 +1,26 @@
1
+ module TimeRounder
2
+ module Schedule
3
+ ##
4
+ # Schedule to round on 00, 15, 30, 45
5
+ module FifteenMinute
6
+
7
+ ##
8
+ # Array of minutes that will require an hour be added to the total, because the number return from the partial hours has is .00
9
+ def add_hours_array
10
+ [53, 54, 55, 56, 57, 58, 59]
11
+ end
12
+
13
+ ##
14
+ # returns the partial hour total based on what the minute is
15
+ def partial_hours_from_minutes
16
+ {0 => 0.0, 1 => 0.0, 2 => 0.0, 3 => 0.0, 4 => 0.0, 5 => 0.0, 6 => 0.0, 7 => 0.0, 8 => 0.25, 9 => 0.25, 10 => 0.25, 11 => 0.25, 12 => 0.25, 13 => 0.25, 14 => 0.25, 15 => 0.25, 16 => 0.25, 17 => 0.25, 18 => 0.25, 19 => 0.25, 20 => 0.25, 21 => 0.25, 22 => 0.25, 23 => 0.50, 24 => 0.50, 25 => 0.50, 26 => 0.50, 27 => 0.50, 28 => 0.50, 29 => 0.50, 30 => 0.50, 31 => 0.50, 32 => 0.50, 33 => 0.50, 34 => 0.50, 35 => 0.50, 36 => 0.50, 37 => 0.50, 38 => 0.75, 39 => 0.75, 40 => 0.75, 41 => 0.75, 42 => 0.75, 43 => 0.75, 44 => 0.75, 45 => 0.75, 46 => 0.75, 47 => 0.75, 48 => 0.75, 49 => 0.75, 50 => 0.75, 51 => 0.75, 52 => 0.75, 53 => 0.0, 54 => 0.0, 55 => 0.0, 56 => 0.0, 57 => 0.0, 58 => 0.0, 59 => 0.0}
17
+ end
18
+
19
+ ##
20
+ # returns the number of minutes to get to the closest partial hour
21
+ def minutes_to_closest_partial
22
+ {0 => 0, 1 => -1, 2 => -2, 3 => -3, 4 => -4, 5 => -5, 6 => -6, 7 => -7, 8 => 7, 9 => 6, 10 => 5, 11 => 4, 12 => 3, 13 => 2, 14 => 1, 15 => 0, 16 => -1, 17 => -2, 18 => -3, 19 => -4, 20 => -5, 21 => -6, 22 => -7, 23 => 7, 24 => 6, 25 => 5, 26 => 4, 27 => 3, 28 => 2, 29 => 1, 30 => 0, 31 => -1, 32 => -2, 33 => -3, 34 => -4, 35 => -5, 36 => -6, 37 => -7, 38 => 7, 39 => 6, 40 => 5, 41 => 4, 42 => 3, 43 => 2, 44 => 1, 45 => 0, 46 => -1, 47 => -2, 48 => -3, 49 => -4, 50 => -5, 51 => -6, 52 => -7, 53 => 7, 54 => 6, 55 => 5, 56 => 4, 57 => 3, 58 => 2, 59 => 1}
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,7 @@
1
+ module TimeRounder
2
+ ##
3
+ # Error class that get raised when a schedule is not found
4
+ class ScheduleNotFound
5
+
6
+ end
7
+ end
@@ -1,3 +1,3 @@
1
1
  module TimeRounder
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/time_rounder.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require "time_rounder/version"
2
2
  require "time_rounder/rounded_time_from_seconds"
3
3
  require "time_rounder/rounded_time"
4
+ require "time_rounder/schedule_not_found"
4
5
 
5
6
  ##
6
7
  # TimeRounder is a library to round time.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: time_rounder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Condron
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-11-03 00:00:00.000000000 Z
11
+ date: 2016-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -69,8 +69,11 @@ files:
69
69
  - bin/console
70
70
  - bin/setup
71
71
  - lib/time_rounder.rb
72
+ - lib/time_rounder/load_schedule.rb
72
73
  - lib/time_rounder/rounded_time.rb
73
74
  - lib/time_rounder/rounded_time_from_seconds.rb
75
+ - lib/time_rounder/schedule/fifteen_minute.rb
76
+ - lib/time_rounder/schedule_not_found.rb
74
77
  - lib/time_rounder/version.rb
75
78
  - time_rounder.gemspec
76
79
  homepage: https://github.com/rebelweb/time_rounder
@@ -93,8 +96,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
93
96
  version: '0'
94
97
  requirements: []
95
98
  rubyforge_project:
96
- rubygems_version: 2.4.8
99
+ rubygems_version: 2.2.3
97
100
  signing_key:
98
101
  specification_version: 4
99
102
  summary: Round time with ease
100
103
  test_files: []
104
+ has_rdoc: