calc_working_hours 0.0.4 → 0.0.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.
@@ -21,5 +21,43 @@ module CalcWorkingHours
|
|
21
21
|
end
|
22
22
|
@working_hours = WorkingHours.new("0:00").add_array_time(array_of_working_hours).time_string
|
23
23
|
end
|
24
|
+
|
25
|
+
def total_working_hours_in_range(start_range, end_range)
|
26
|
+
array_of_working_hours_in_range = []
|
27
|
+
if start_range == true && end_range == true
|
28
|
+
unless valid_time_format?(start_range) || valid_time_format?(end_range)
|
29
|
+
raise "invalid time format (TimeCard total_working_hours)"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
@time_card_rows.each do |row|
|
33
|
+
array_of_working_hours_in_range << row.working_hours_in_range(start_range, end_range)
|
34
|
+
end
|
35
|
+
return WorkingHours.new("0:00").add_array_time(array_of_working_hours_in_range).time_string
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def valid_range?(first, second)
|
41
|
+
false
|
42
|
+
true if change_to_minute(first) < change_to_minute(second)
|
43
|
+
end
|
44
|
+
|
45
|
+
def valid_time_format?(time)
|
46
|
+
flag = false
|
47
|
+
if time.class == String
|
48
|
+
if /(\d+):(\d+)/ =~ time
|
49
|
+
if ($1.to_i <= 48 && $1.to_i >= 0) && ($2.to_i < 60 && $2.to_i >= 0)
|
50
|
+
flag = true
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
return flag
|
55
|
+
end
|
56
|
+
|
57
|
+
def change_to_minute(str)
|
58
|
+
/(\d+):(\d+)/ =~ str
|
59
|
+
return $1.to_i * 60 + $2.to_i
|
60
|
+
end
|
61
|
+
|
24
62
|
end
|
25
63
|
end
|
@@ -5,7 +5,7 @@ require "date"
|
|
5
5
|
module CalcWorkingHours
|
6
6
|
|
7
7
|
class TimeCardRow
|
8
|
-
attr_reader :starting_time, :ending_time, :break_time, :working_hours, :date_string
|
8
|
+
attr_reader :starting_time, :ending_time, :break_time, :working_hours, :date_string, :time_point, :working_hours_in_range
|
9
9
|
def initialize(starting_time, ending_time, *break_time)
|
10
10
|
unless valid_time_format?(starting_time) && valid_time_format?(ending_time)
|
11
11
|
raise "failure initialize (invalid time format! TimeCardRow class)"
|
@@ -36,7 +36,15 @@ module CalcWorkingHours
|
|
36
36
|
@ending_time = ending_time
|
37
37
|
@break_time = break_time
|
38
38
|
@working_hours = WorkingHours.new(ending_time).minus_time(starting_time).minus_time(total_break_time_string)
|
39
|
-
|
39
|
+
@time_point = []
|
40
|
+
@time_point << starting_time
|
41
|
+
unless break_time.empty?
|
42
|
+
break_time.each do |bt|
|
43
|
+
@time_point << bt[0]
|
44
|
+
@time_point << bt[1]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
@time_point << ending_time
|
40
48
|
self
|
41
49
|
end
|
42
50
|
|
@@ -48,8 +56,36 @@ module CalcWorkingHours
|
|
48
56
|
self
|
49
57
|
end
|
50
58
|
|
59
|
+
def working_hours_in_range(start_range, end_range)
|
60
|
+
i = @time_point.size / 2
|
61
|
+
starting_time, ending_time = ""
|
62
|
+
array_of_working_hours = []
|
63
|
+
for counter in 1..i
|
64
|
+
counter = 2 * counter - 2
|
65
|
+
starting_time = @time_point[counter]
|
66
|
+
ending_time = @time_point[counter + 1]
|
67
|
+
|
68
|
+
if valid_range?(end_range, starting_time) || valid_range?(ending_time, start_range)
|
69
|
+
elsif valid_range?(start_range, starting_time) && valid_range?(end_range, ending_time)
|
70
|
+
array_of_working_hours << WorkingHours.new(end_range).minus_time(starting_time).time_string
|
71
|
+
elsif valid_range?(starting_time, start_range) && valid_range?(end_range, ending_time)
|
72
|
+
array_of_working_hours << WorkingHours.new(end_range).minus_time(start_range).time_string
|
73
|
+
elsif valid_range?(starting_time, start_range) && valid_range?(ending_time, end_range)
|
74
|
+
array_of_working_hours << WorkingHours.new(ending_time).minus_time(start_range).time_string
|
75
|
+
elsif valid_range?(start_range, starting_time) && valid_range?(ending_time, end_range)
|
76
|
+
array_of_working_hours << WorkingHours.new(ending_time).minus_time(starting_time).time_string
|
77
|
+
end
|
78
|
+
end
|
79
|
+
return @working_hours_in_range = WorkingHours.new("0:00").add_array_time(array_of_working_hours).time_string
|
80
|
+
end
|
81
|
+
|
51
82
|
private
|
52
83
|
|
84
|
+
def valid_range?(first, second)
|
85
|
+
false
|
86
|
+
true if change_to_minute(first) <= change_to_minute(second)
|
87
|
+
end
|
88
|
+
|
53
89
|
def total_break_time(break_time)
|
54
90
|
total = WorkingHours.new("0:00")
|
55
91
|
break_time.each do |time|
|
@@ -25,6 +25,22 @@ describe TimeCardRow do
|
|
25
25
|
@time_card_row.set_date("2013/8/1").date_string.class.should == String
|
26
26
|
end
|
27
27
|
|
28
|
+
it "time_pointは9:00,11:00,12:00,15:00,16:00,19:00" do
|
29
|
+
@time_card_row.time_point.should == ["9:00", "11:00", "12:00", "15:00", "16:00", "19:00"]
|
30
|
+
end
|
31
|
+
|
32
|
+
it "労働時間のうち、10:00〜15:30の間の労働時間は4:00" do
|
33
|
+
@time_card_row.working_hours_in_range("10:00", "15:30").should == "4:00"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "労働時間のうち、11:30〜14:00の間の労働時間は2:00" do
|
37
|
+
@time_card_row.working_hours_in_range("11:00", "14:00").should == "2:00"
|
38
|
+
end
|
39
|
+
|
40
|
+
it "労働時間のうち、14:00〜17:00の間の労働時間は2:00" do
|
41
|
+
@time_card_row.working_hours_in_range("14:00", "17:00").should == "2:00"
|
42
|
+
end
|
43
|
+
|
28
44
|
end
|
29
45
|
|
30
46
|
context "適正な時間設定と、不適な設定時間を設定したとき" do
|
@@ -26,5 +26,9 @@ describe TimeRecorder do
|
|
26
26
|
@time_recorder.time_cards["0000000084"].total_working_hours.should == "149:12"
|
27
27
|
end
|
28
28
|
|
29
|
+
it "タイムカードのidが0000000002の人物の11:00〜16:00の労働時間は87:02であること" do
|
30
|
+
@time_recorder.time_cards["0000000002"].total_working_hours_in_range("11:00", "16:00").should == "87:02"
|
31
|
+
end
|
32
|
+
|
29
33
|
end
|
30
34
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: calc_working_hours
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2013-09-21 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
16
|
-
requirement: &
|
16
|
+
requirement: &70311384099360 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '1.3'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70311384099360
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &70311384098460 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70311384098460
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &70311384096960 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70311384096960
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: activesupport
|
49
|
-
requirement: &
|
49
|
+
requirement: &70311384095880 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70311384095880
|
58
58
|
description: 例えば、173:08のような表記の時間を計算するライブラリです
|
59
59
|
email:
|
60
60
|
- ''
|
@@ -98,7 +98,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
98
98
|
version: '0'
|
99
99
|
segments:
|
100
100
|
- 0
|
101
|
-
hash:
|
101
|
+
hash: 4216760181021085759
|
102
102
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
103
|
none: false
|
104
104
|
requirements:
|
@@ -107,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
107
107
|
version: '0'
|
108
108
|
segments:
|
109
109
|
- 0
|
110
|
-
hash:
|
110
|
+
hash: 4216760181021085759
|
111
111
|
requirements: []
|
112
112
|
rubyforge_project:
|
113
113
|
rubygems_version: 1.8.10
|