biz 1.3.2 → 1.3.3

Sign up to get free protection for your applications and to get access to all the features.
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