biz 1.3.2 → 1.3.3

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: 7d16f3fcb143fead794e794f17195778043ff611
4
- data.tar.gz: 4958afc77a8fddaa749a543c353d88209a213e35
3
+ metadata.gz: 14ced23b25b1eada2cc2120be433aa949741f16e
4
+ data.tar.gz: b2f797726e49278c6388bce71f7b85d04f435d48
5
5
  SHA512:
6
- metadata.gz: b70ed92768f8ae067bcb6cbf3c5f837682555879a92e84a805f6b5d0311a18867523f0d4d01b2f57f72b8d7e5385639f46542f77a636a848c9b83ed2c58a43c5
7
- data.tar.gz: 5d5ad52048db8ad7d800edbb05c4162f0ed311a8d45fd0596b157fcb098d1dd462c51f8362b9ed10c2afe72c6ad0d76eb2a7527d4cd3519f982c37fcc60822e5
6
+ metadata.gz: bb3d77c08bc245fb5220ed69d71809cc52f27379c0d83a325288c2a41f1c4e78e0200ce965e3657694b52aa4967571f59afe841e3f0c9904c8d3fe6358f6bf21
7
+ data.tar.gz: 0b2bb9dc20437369b2c6b760baa87bc381d80640bdc9db7079ddd96105d0b9e4dd222c5bf1769af203af6a3e4e4e6533e98becaa83bec6ac286ac147fd057586
data/lib/biz/date.rb CHANGED
@@ -7,5 +7,10 @@ module Biz
7
7
  EPOCH + day
8
8
  end
9
9
 
10
+ def self.for_dst(date, day_time)
11
+ date +
12
+ (day_time.day_second + Time::SECONDS_IN_HOUR) / Time::SECONDS_IN_DAY
13
+ end
14
+
10
15
  end
11
16
  end
data/lib/biz/day_time.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  module Biz
2
2
  class DayTime
3
3
 
4
+ VALID_SECONDS = 0..Time::SECONDS_IN_DAY
5
+
4
6
  module Timestamp
5
7
  FORMAT = '%02d:%02d'
6
8
  PATTERN = /\A(?<hour>\d{2}):(?<minute>\d{2})(:?(?<second>\d{2}))?\Z/
@@ -13,22 +15,26 @@ module Biz
13
15
  class << self
14
16
 
15
17
  def from_time(time)
16
- new(time.hour * Time::HOUR + time.min * Time::MINUTE + time.sec)
18
+ new(
19
+ time.hour * Time::SECONDS_IN_HOUR +
20
+ time.min * Time::SECONDS_IN_MINUTE +
21
+ time.sec
22
+ )
17
23
  end
18
24
 
19
25
  def from_minute(minute)
20
- new(minute * Time::MINUTE)
26
+ new(minute * Time::SECONDS_IN_MINUTE)
21
27
  end
22
28
 
23
29
  def from_hour(hour)
24
- new(hour * Time::HOUR)
30
+ new(hour * Time::SECONDS_IN_HOUR)
25
31
  end
26
32
 
27
33
  def from_timestamp(timestamp)
28
34
  timestamp.match(Timestamp::PATTERN) { |match|
29
35
  new(
30
- match[:hour].to_i * Time::HOUR +
31
- match[:minute].to_i * Time::MINUTE +
36
+ match[:hour].to_i * Time::SECONDS_IN_HOUR +
37
+ match[:minute].to_i * Time::SECONDS_IN_MINUTE +
32
38
  match[:second].to_i
33
39
  )
34
40
  }
@@ -54,7 +60,7 @@ module Biz
54
60
 
55
61
  attr_reader :day_second
56
62
 
57
- delegate strftime: :day_time
63
+ delegate strftime: :format_time
58
64
 
59
65
  delegate %i[
60
66
  to_i
@@ -63,24 +69,34 @@ module Biz
63
69
 
64
70
  def initialize(day_second)
65
71
  @day_second = Integer(day_second)
72
+
73
+ unless VALID_SECONDS.cover?(@day_second)
74
+ fail ArgumentError, 'Invalid number of seconds for a day.'
75
+ end
66
76
  end
67
77
 
68
78
  def hour
69
- day_second / Time::HOUR
79
+ day_second / Time::SECONDS_IN_HOUR
70
80
  end
71
81
 
72
82
  def minute
73
- day_second % Time::HOUR / Time::MINUTE
83
+ day_second % Time::SECONDS_IN_HOUR / Time::SECONDS_IN_MINUTE
74
84
  end
75
85
 
76
86
  def second
77
- day_second % Time::MINUTE
87
+ day_second % Time::SECONDS_IN_MINUTE
78
88
  end
79
89
 
80
90
  def day_minute
81
91
  hour * Time::MINUTES_IN_HOUR + minute
82
92
  end
83
93
 
94
+ def for_dst
95
+ self.class.new(
96
+ (day_second + Time::SECONDS_IN_HOUR) % Time::SECONDS_IN_DAY
97
+ )
98
+ end
99
+
84
100
  def timestamp
85
101
  format(Timestamp::FORMAT, hour, minute)
86
102
  end
@@ -99,7 +115,7 @@ module Biz
99
115
 
100
116
  private
101
117
 
102
- def day_time
118
+ def format_time
103
119
  ::Time.new(
104
120
  Date::EPOCH.year,
105
121
  Date::EPOCH.month,
data/lib/biz/duration.rb CHANGED
@@ -15,13 +15,13 @@ module Biz
15
15
  alias_method :second, :seconds
16
16
 
17
17
  def minutes(minutes)
18
- new(minutes * Time::MINUTE)
18
+ new(minutes * Time::SECONDS_IN_MINUTE)
19
19
  end
20
20
 
21
21
  alias_method :minute, :minutes
22
22
 
23
23
  def hours(hours)
24
- new(hours * Time::HOUR)
24
+ new(hours * Time::SECONDS_IN_HOUR)
25
25
  end
26
26
 
27
27
  alias_method :hour, :hours
@@ -41,11 +41,11 @@ module Biz
41
41
  end
42
42
 
43
43
  def in_minutes
44
- seconds / Time::MINUTE
44
+ seconds / Time::SECONDS_IN_MINUTE
45
45
  end
46
46
 
47
47
  def in_hours
48
- seconds / Time::HOUR
48
+ seconds / Time::SECONDS_IN_HOUR
49
49
  end
50
50
 
51
51
  def +(other)
data/lib/biz/time.rb CHANGED
@@ -1,18 +1,17 @@
1
1
  module Biz
2
2
  class Time
3
3
 
4
- MINUTE = 60
5
- HOUR = 60 * MINUTE
6
- DAY = 24 * HOUR
7
- WEEK = 7 * DAY
4
+ SECONDS_IN_MINUTE = 60
5
+ MINUTES_IN_HOUR = 60
6
+ HOURS_IN_DAY = 24
7
+ DAYS_IN_WEEK = 7
8
8
 
9
- MINUTES_IN_HOUR = 60
10
- HOURS_IN_DAY = 24
11
- DAYS_IN_WEEK = 7
9
+ SECONDS_IN_HOUR = SECONDS_IN_MINUTE * MINUTES_IN_HOUR
10
+ SECONDS_IN_DAY = SECONDS_IN_HOUR * HOURS_IN_DAY
11
+ SECONDS_IN_WEEK = SECONDS_IN_DAY * DAYS_IN_WEEK
12
12
 
13
13
  MINUTES_IN_DAY = MINUTES_IN_HOUR * HOURS_IN_DAY
14
- MINUTES_IN_WEEK = MINUTES_IN_DAY * DAYS_IN_WEEK
15
- SECONDS_IN_DAY = MINUTES_IN_DAY * 60
14
+ MINUTES_IN_WEEK = MINUTES_IN_DAY * DAYS_IN_WEEK
16
15
 
17
16
  BIG_BANG = ::Time.new(-10**100)
18
17
  HEAT_DEATH = ::Time.new(10**100)
@@ -29,7 +28,7 @@ module Biz
29
28
 
30
29
  def on_date(date, day_time)
31
30
  time_zone.local_to_utc(
32
- ::Time.utc(
31
+ ::Time.new(
33
32
  date.year,
34
33
  date.month,
35
34
  date.mday,
@@ -40,16 +39,11 @@ module Biz
40
39
  true
41
40
  )
42
41
  rescue TZInfo::PeriodNotFound
43
- next_day_second = day_time.day_second + HOUR
44
- if next_day_second > SECONDS_IN_DAY
45
- on_date(date + 1, DayTime.new(next_day_second % SECONDS_IN_DAY))
46
- else
47
- on_date(date, DayTime.new(next_day_second))
48
- end
42
+ on_date(Date.for_dst(date, day_time), day_time.for_dst)
49
43
  end
50
44
 
51
45
  def during_week(week, week_time)
52
- on_date(week.start_date + week_time.wday, week_time)
46
+ on_date(week.start_date + week_time.wday, week_time.day_time)
53
47
  end
54
48
 
55
49
  end
data/lib/biz/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Biz
2
- VERSION = '1.3.2'
2
+ VERSION = '1.3.3'
3
3
  end
@@ -49,6 +49,8 @@ module Biz
49
49
  to_int
50
50
  ] => :week_minute
51
51
 
52
+ abstract_method :day_time
53
+
52
54
  protected
53
55
 
54
56
  def <=>(other)
@@ -69,8 +71,7 @@ module Biz
69
71
  )
70
72
  end
71
73
 
72
- abstract_method :day_of_week,
73
- :day_time
74
+ abstract_method :day_of_week
74
75
 
75
76
  end
76
77
  end
@@ -2,16 +2,16 @@ module Biz
2
2
  module WeekTime
3
3
  class End < Abstract
4
4
 
5
+ def day_time
6
+ DayTime.from_minute(day_of_week.day_minute(week_minute))
7
+ end
8
+
5
9
  private
6
10
 
7
11
  def day_of_week
8
12
  DayOfWeek::DAYS.find { |day| day.contains?(week_minute) }
9
13
  end
10
14
 
11
- def day_time
12
- DayTime.from_minute(day_of_week.day_minute(week_minute))
13
- end
14
-
15
15
  memoize :day_of_week,
16
16
  :day_time
17
17
 
@@ -2,6 +2,10 @@ module Biz
2
2
  module WeekTime
3
3
  class Start < Abstract
4
4
 
5
+ def day_time
6
+ DayTime.from_minute(week_minute % Time::MINUTES_IN_DAY)
7
+ end
8
+
5
9
  private
6
10
 
7
11
  def day_of_week
@@ -10,10 +14,6 @@ module Biz
10
14
  )
11
15
  end
12
16
 
13
- def day_time
14
- DayTime.from_minute(week_minute % Time::MINUTES_IN_DAY)
15
- end
16
-
17
17
  memoize :day_of_week,
18
18
  :day_time
19
19
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: biz
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 1.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Craig Little
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-10-18 00:00:00.000000000 Z
12
+ date: 2015-10-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: abstract_type
@@ -178,7 +178,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
178
178
  version: '0'
179
179
  requirements: []
180
180
  rubyforge_project:
181
- rubygems_version: 2.2.2
181
+ rubygems_version: 2.4.5.1
182
182
  signing_key:
183
183
  specification_version: 4
184
184
  summary: Business hours calculations