calc_working_hours 0.1.4 → 0.1.5
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/lib/calc_working_hours/calc_helper.rb +84 -0
- data/lib/calc_working_hours/time_card.rb +2 -25
- data/lib/calc_working_hours/time_card_row.rb +10 -78
- data/lib/calc_working_hours/version.rb +1 -1
- data/lib/calc_working_hours/working_hours.rb +8 -35
- data/lib/calc_working_hours.rb +1 -0
- metadata +27 -27
- checksums.yaml +0 -7
@@ -0,0 +1,84 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
module CalcWorkingHours
|
4
|
+
|
5
|
+
class CalcHelper
|
6
|
+
class << self
|
7
|
+
def valid_working_hours_format?(str)
|
8
|
+
flag = false
|
9
|
+
if str.class == String
|
10
|
+
if /\d+:(\d+)/ =~ str
|
11
|
+
if $1.to_i < 60 && $1.to_i >= 0
|
12
|
+
flag = true
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
return flag
|
17
|
+
end
|
18
|
+
|
19
|
+
def valid_time_format?(time)
|
20
|
+
flag = false
|
21
|
+
if time.class == String
|
22
|
+
if /(\d+):(\d+)/ =~ time
|
23
|
+
if ($1.to_i <= 48 && $1.to_i >= 0) && ($2.to_i < 60 && $2.to_i >= 0)
|
24
|
+
flag = true
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
return flag
|
29
|
+
end
|
30
|
+
|
31
|
+
def valid_time_order?(first, second)
|
32
|
+
false
|
33
|
+
true if change_to_minute(first) <= change_to_minute(second)
|
34
|
+
end
|
35
|
+
|
36
|
+
def valid_range?(first, second)
|
37
|
+
false
|
38
|
+
true if change_to_minute(first) <= change_to_minute(second)
|
39
|
+
end
|
40
|
+
|
41
|
+
def valid_break_time?(break_time, starting_time, ending_time)
|
42
|
+
flag = false
|
43
|
+
break_time.each do |time|
|
44
|
+
if time.length == 2 && time.class == Array
|
45
|
+
if valid_time_format?(time[0]) && valid_time_format?(time[1])
|
46
|
+
time.each do |t|
|
47
|
+
if change_to_minute(starting_time) >= change_to_minute(t) || change_to_minute(ending_time) <= change_to_minute(t)
|
48
|
+
return flag = false
|
49
|
+
end
|
50
|
+
end
|
51
|
+
flag = true
|
52
|
+
end
|
53
|
+
else
|
54
|
+
return flag = false
|
55
|
+
end
|
56
|
+
end
|
57
|
+
return flag
|
58
|
+
end
|
59
|
+
|
60
|
+
def total_break_time(break_time)
|
61
|
+
total = WorkingHours.new("0:00")
|
62
|
+
break_time.each do |time|
|
63
|
+
total.add_time(time[1]).minus_time(time[0])
|
64
|
+
end
|
65
|
+
return total
|
66
|
+
end
|
67
|
+
|
68
|
+
def change_to_minute(str)
|
69
|
+
/(\d+):(\d+)/ =~ str
|
70
|
+
return $1.to_i * 60 + $2.to_i
|
71
|
+
end
|
72
|
+
|
73
|
+
def change_to_time_string(minute)
|
74
|
+
hour = minute.div(60).to_s
|
75
|
+
minute = (minute % 60).to_s
|
76
|
+
if minute.length == 1
|
77
|
+
minute = "0" + minute
|
78
|
+
end
|
79
|
+
return hour + ":" + minute
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
end
|
@@ -3,6 +3,7 @@
|
|
3
3
|
module CalcWorkingHours
|
4
4
|
attr_reader :time_card_rows, :card_id, :id
|
5
5
|
class TimeCard
|
6
|
+
|
6
7
|
def initialize(card_id, id)
|
7
8
|
@time_card_rows = []
|
8
9
|
@card_id = card_id
|
@@ -26,7 +27,7 @@ module CalcWorkingHours
|
|
26
27
|
def total_working_hours_in_range(start_range, end_range)
|
27
28
|
array_of_working_hours_in_range = []
|
28
29
|
if start_range == true && end_range == true
|
29
|
-
unless valid_time_format?(start_range) || valid_time_format?(end_range)
|
30
|
+
unless CalcHelper.valid_time_format?(start_range) || CalcHelper.valid_time_format?(end_range)
|
30
31
|
raise "invalid time format (TimeCard total_working_hours)"
|
31
32
|
end
|
32
33
|
end
|
@@ -36,29 +37,5 @@ module CalcWorkingHours
|
|
36
37
|
return WorkingHours.new("0:00").add_array_time(array_of_working_hours_in_range).time_string
|
37
38
|
end
|
38
39
|
|
39
|
-
private
|
40
|
-
|
41
|
-
def valid_range?(first, second)
|
42
|
-
false
|
43
|
-
true if change_to_minute(first) < change_to_minute(second)
|
44
|
-
end
|
45
|
-
|
46
|
-
def valid_time_format?(time)
|
47
|
-
flag = false
|
48
|
-
if time.class == String
|
49
|
-
if /(\d+):(\d+)/ =~ time
|
50
|
-
if ($1.to_i <= 48 && $1.to_i >= 0) && ($2.to_i < 60 && $2.to_i >= 0)
|
51
|
-
flag = true
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
return flag
|
56
|
-
end
|
57
|
-
|
58
|
-
def change_to_minute(str)
|
59
|
-
/(\d+):(\d+)/ =~ str
|
60
|
-
return $1.to_i * 60 + $2.to_i
|
61
|
-
end
|
62
|
-
|
63
40
|
end
|
64
41
|
end
|
@@ -7,29 +7,29 @@ module CalcWorkingHours
|
|
7
7
|
class TimeCardRow
|
8
8
|
attr_reader :starting_time, :ending_time, :break_time, :working_hours, :date_string, :time_point, :working_hours_in_range, :overtime, :id
|
9
9
|
def initialize(starting_time, ending_time, *break_time)
|
10
|
-
unless valid_time_format?(starting_time) && valid_time_format?(ending_time)
|
10
|
+
unless CalcHelper.valid_time_format?(starting_time) && CalcHelper.valid_time_format?(ending_time)
|
11
11
|
raise "failure initialize (invalid time format! TimeCardRow class)"
|
12
12
|
end
|
13
13
|
|
14
|
-
unless valid_time_order?(starting_time, ending_time)
|
14
|
+
unless CalcHelper.valid_time_order?(starting_time, ending_time)
|
15
15
|
raise "failure initialize (invalid time order! TimeCardRow class)"
|
16
16
|
end
|
17
17
|
|
18
18
|
unless break_time.empty?
|
19
|
-
unless valid_break_time?(break_time, starting_time, ending_time)
|
19
|
+
unless CalcHelper.valid_break_time?(break_time, starting_time, ending_time)
|
20
20
|
raise "failure initialize (invalid break time! TimeCardRow class)"
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
break_time.each do |time|
|
25
|
-
unless valid_time_order?(time[0], time[1])
|
25
|
+
unless CalcHelper.valid_time_order?(time[0], time[1])
|
26
26
|
raise "failure initialize (invalid time order(break time)! TimeCardRow class)"
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
total_break_time_string = "0:00"
|
31
31
|
unless break_time.empty?
|
32
|
-
total_break_time_string = total_break_time(break_time)
|
32
|
+
total_break_time_string = CalcHelper.total_break_time(break_time).time_string
|
33
33
|
end
|
34
34
|
|
35
35
|
@starting_time = starting_time
|
@@ -76,86 +76,18 @@ module CalcWorkingHours
|
|
76
76
|
starting_time = @time_point[counter]
|
77
77
|
ending_time = @time_point[counter + 1]
|
78
78
|
|
79
|
-
if valid_range?(end_range, starting_time) || valid_range?(ending_time, start_range)
|
80
|
-
elsif valid_range?(start_range, starting_time) && valid_range?(end_range, ending_time)
|
79
|
+
if CalcHelper.valid_range?(end_range, starting_time) || CalcHelper.valid_range?(ending_time, start_range)
|
80
|
+
elsif CalcHelper.valid_range?(start_range, starting_time) && CalcHelper.valid_range?(end_range, ending_time)
|
81
81
|
array_of_working_hours << WorkingHours.new(end_range).minus_time(starting_time).time_string
|
82
|
-
elsif valid_range?(starting_time, start_range) && valid_range?(end_range, ending_time)
|
82
|
+
elsif CalcHelper.valid_range?(starting_time, start_range) && CalcHelper.valid_range?(end_range, ending_time)
|
83
83
|
array_of_working_hours << WorkingHours.new(end_range).minus_time(start_range).time_string
|
84
|
-
elsif valid_range?(starting_time, start_range) && valid_range?(ending_time, end_range)
|
84
|
+
elsif CalcHelper.valid_range?(starting_time, start_range) && CalcHelper.valid_range?(ending_time, end_range)
|
85
85
|
array_of_working_hours << WorkingHours.new(ending_time).minus_time(start_range).time_string
|
86
|
-
elsif valid_range?(start_range, starting_time) && valid_range?(ending_time, end_range)
|
86
|
+
elsif CalcHelper.valid_range?(start_range, starting_time) && CalcHelper.valid_range?(ending_time, end_range)
|
87
87
|
array_of_working_hours << WorkingHours.new(ending_time).minus_time(starting_time).time_string
|
88
88
|
end
|
89
89
|
end
|
90
90
|
return @working_hours_in_range = WorkingHours.new("0:00").add_array_time(array_of_working_hours).time_string
|
91
91
|
end
|
92
|
-
|
93
|
-
private
|
94
|
-
|
95
|
-
def valid_range?(first, second)
|
96
|
-
false
|
97
|
-
true if change_to_minute(first) <= change_to_minute(second)
|
98
|
-
end
|
99
|
-
|
100
|
-
def total_break_time(break_time)
|
101
|
-
total = WorkingHours.new("0:00")
|
102
|
-
break_time.each do |time|
|
103
|
-
total.add_time(time[1]).minus_time(time[0])
|
104
|
-
end
|
105
|
-
return total.time_string
|
106
|
-
end
|
107
|
-
|
108
|
-
def valid_time_card_row_format?(starting_time, ending_time)
|
109
|
-
# break_timeについてはvalid_break_timeでチェック
|
110
|
-
flag = false
|
111
|
-
if valid_time_format?(starting_time) && valid_time_format?(ending_time)
|
112
|
-
flag = true
|
113
|
-
end
|
114
|
-
return flag
|
115
|
-
end
|
116
|
-
|
117
|
-
def valid_time_format?(time)
|
118
|
-
flag = false
|
119
|
-
if time.class == String
|
120
|
-
if /(\d+):(\d+)/ =~ time
|
121
|
-
if ($1.to_i <= 48 && $1.to_i >= 0) && ($2.to_i < 60 && $2.to_i >= 0)
|
122
|
-
flag = true
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
return flag
|
127
|
-
end
|
128
|
-
|
129
|
-
def valid_time_order?(first, second)
|
130
|
-
false
|
131
|
-
true if change_to_minute(first) < change_to_minute(second)
|
132
|
-
end
|
133
|
-
|
134
|
-
def valid_break_time?(break_time, starting_time, ending_time)
|
135
|
-
flag = false
|
136
|
-
break_time.each do |time|
|
137
|
-
if time.length == 2 && time.class == Array
|
138
|
-
if valid_time_format?(time[0]) && valid_time_format?(time[1])
|
139
|
-
time.each do |t|
|
140
|
-
if change_to_minute(starting_time) >= change_to_minute(t) || change_to_minute(ending_time) <= change_to_minute(t)
|
141
|
-
return flag = false
|
142
|
-
end
|
143
|
-
end
|
144
|
-
flag = true
|
145
|
-
end
|
146
|
-
else
|
147
|
-
return flag = false
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
return flag
|
152
|
-
end
|
153
|
-
|
154
|
-
def change_to_minute(str)
|
155
|
-
/(\d+):(\d+)/ =~ str
|
156
|
-
return $1.to_i * 60 + $2.to_i
|
157
|
-
end
|
158
|
-
|
159
92
|
end
|
160
|
-
|
161
93
|
end
|
@@ -5,7 +5,7 @@ module CalcWorkingHours
|
|
5
5
|
class WorkingHours
|
6
6
|
attr_reader :time_string, :minute
|
7
7
|
def initialize(str)
|
8
|
-
if
|
8
|
+
if CalcHelper.valid_working_hours_format?(str)
|
9
9
|
@time_string = str
|
10
10
|
self.to_minute
|
11
11
|
self
|
@@ -15,13 +15,13 @@ module CalcWorkingHours
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def to_minute
|
18
|
-
@minute = change_to_minute(@time_string)
|
18
|
+
@minute = CalcHelper.change_to_minute(@time_string)
|
19
19
|
end
|
20
20
|
|
21
21
|
def add_time(str)
|
22
|
-
if
|
23
|
-
@minute = @minute + change_to_minute(str)
|
24
|
-
@time_string = change_to_time_string(@minute)
|
22
|
+
if CalcHelper.valid_working_hours_format?(str)
|
23
|
+
@minute = @minute + CalcHelper.change_to_minute(str)
|
24
|
+
@time_string = CalcHelper.change_to_time_string(@minute)
|
25
25
|
self
|
26
26
|
else
|
27
27
|
raise "failure add_time (invalid time format!)"
|
@@ -36,11 +36,11 @@ module CalcWorkingHours
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def minus_time(str)
|
39
|
-
if
|
40
|
-
minute = @minute - change_to_minute(str)
|
39
|
+
if CalcHelper.valid_working_hours_format?(str)
|
40
|
+
minute = @minute - CalcHelper.change_to_minute(str)
|
41
41
|
if minute >= 0
|
42
42
|
@minute = minute
|
43
|
-
@time_string = change_to_time_string(@minute)
|
43
|
+
@time_string = CalcHelper.change_to_time_string(@minute)
|
44
44
|
self
|
45
45
|
else
|
46
46
|
raise "failure add_time (invalid time format!)"
|
@@ -48,32 +48,5 @@ module CalcWorkingHours
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
-
private
|
52
|
-
def valid_time_format?(str)
|
53
|
-
flag = false
|
54
|
-
if str.class == String
|
55
|
-
if /\d+:(\d+)/ =~ str
|
56
|
-
if $1.to_i < 60 && $1.to_i >= 0
|
57
|
-
flag = true
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
return flag
|
62
|
-
end
|
63
|
-
|
64
|
-
def change_to_minute(str)
|
65
|
-
/(\d+):(\d+)/ =~ str
|
66
|
-
return $1.to_i * 60 + $2.to_i
|
67
|
-
end
|
68
|
-
|
69
|
-
def change_to_time_string(minute)
|
70
|
-
hour = minute.div(60).to_s
|
71
|
-
minute = (minute % 60).to_s
|
72
|
-
if minute.length == 1
|
73
|
-
minute = "0" + minute
|
74
|
-
end
|
75
|
-
return hour + ":" + minute
|
76
|
-
end
|
77
|
-
|
78
51
|
end
|
79
52
|
end
|
data/lib/calc_working_hours.rb
CHANGED
metadata
CHANGED
@@ -1,57 +1,49 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: calc_working_hours
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Takashi_U
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2013-09-23 00:00:00.
|
12
|
+
date: 2013-09-23 00:00:00.000000000Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: bundler
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70285409908500 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
19
21
|
version: '1.3'
|
20
22
|
type: :development
|
21
23
|
prerelease: false
|
22
|
-
version_requirements:
|
23
|
-
requirements:
|
24
|
-
- - ~>
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '1.3'
|
24
|
+
version_requirements: *70285409908500
|
27
25
|
- !ruby/object:Gem::Dependency
|
28
26
|
name: rake
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
27
|
+
requirement: &70285409907800 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
30
29
|
requirements:
|
31
|
-
- - '>='
|
30
|
+
- - ! '>='
|
32
31
|
- !ruby/object:Gem::Version
|
33
32
|
version: '0'
|
34
33
|
type: :development
|
35
34
|
prerelease: false
|
36
|
-
version_requirements:
|
37
|
-
requirements:
|
38
|
-
- - '>='
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
35
|
+
version_requirements: *70285409907800
|
41
36
|
- !ruby/object:Gem::Dependency
|
42
37
|
name: rspec
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
+
requirement: &70285409907060 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
44
40
|
requirements:
|
45
|
-
- - '>='
|
41
|
+
- - ! '>='
|
46
42
|
- !ruby/object:Gem::Version
|
47
43
|
version: '0'
|
48
44
|
type: :development
|
49
45
|
prerelease: false
|
50
|
-
version_requirements:
|
51
|
-
requirements:
|
52
|
-
- - '>='
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
46
|
+
version_requirements: *70285409907060
|
55
47
|
description: 例えば、173:08のような表記の時間を計算するライブラリです
|
56
48
|
email:
|
57
49
|
- ''
|
@@ -68,6 +60,7 @@ files:
|
|
68
60
|
- Rakefile
|
69
61
|
- calc_working_hours.gemspec
|
70
62
|
- lib/calc_working_hours.rb
|
63
|
+
- lib/calc_working_hours/calc_helper.rb
|
71
64
|
- lib/calc_working_hours/time_card.rb
|
72
65
|
- lib/calc_working_hours/time_card_row.rb
|
73
66
|
- lib/calc_working_hours/time_recorder.rb
|
@@ -84,26 +77,33 @@ files:
|
|
84
77
|
homepage: https://github.com/Takashi-U/calc_working_hours
|
85
78
|
licenses:
|
86
79
|
- MIT
|
87
|
-
metadata: {}
|
88
80
|
post_install_message:
|
89
81
|
rdoc_options: []
|
90
82
|
require_paths:
|
91
83
|
- lib
|
92
84
|
required_ruby_version: !ruby/object:Gem::Requirement
|
85
|
+
none: false
|
93
86
|
requirements:
|
94
|
-
- - '>='
|
87
|
+
- - ! '>='
|
95
88
|
- !ruby/object:Gem::Version
|
96
89
|
version: '0'
|
90
|
+
segments:
|
91
|
+
- 0
|
92
|
+
hash: -1838675914513887134
|
97
93
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
98
95
|
requirements:
|
99
|
-
- - '>='
|
96
|
+
- - ! '>='
|
100
97
|
- !ruby/object:Gem::Version
|
101
98
|
version: '0'
|
99
|
+
segments:
|
100
|
+
- 0
|
101
|
+
hash: -1838675914513887134
|
102
102
|
requirements: []
|
103
103
|
rubyforge_project:
|
104
|
-
rubygems_version:
|
104
|
+
rubygems_version: 1.8.10
|
105
105
|
signing_key:
|
106
|
-
specification_version:
|
106
|
+
specification_version: 3
|
107
107
|
summary: 時間計算
|
108
108
|
test_files:
|
109
109
|
- spec/calc_working_hours/data_sample.csv
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: de4eaa0b8467abb4b621e819e25038b342c33936
|
4
|
-
data.tar.gz: dee2875a0559607c565770adf163a786da2ba6dd
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 7cd7effd40cc868f38230f3ca02fc17fe6fee931fe23147dfb75fa48b90b24ea16411f27d2e0d03cf58043bd239bca3edab93ea296796e50b303014f01001895
|
7
|
-
data.tar.gz: 451121820aea6dc580c5d603f94c8e9819c7d48e7097dd1ae14d09ef925cc70cb27dbb3c9be412d7c0970476be2962d4428a9c7e8d0b057f9cc19a90ec405e8a
|