calc_working_hours 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 +4 -4
- data/lib/calc_working_hours/time_card_row.rb +10 -2
- data/lib/calc_working_hours/time_recorder.rb +3 -4
- data/lib/calc_working_hours/version.rb +1 -1
- data/spec/calc_working_hours/time_card_row_spec.rb +14 -14
- data/spec/calc_working_hours/time_card_spec.rb +4 -4
- data/spec/calc_working_hours/time_recorder_spec.rb +1 -1
- metadata +14 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 16b8b8c6774066be91cce24c079db2df12b65c81
|
4
|
+
data.tar.gz: ab99ed5e2a1c3a5df82d2560b8a4a4336485e4a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c3fb572921a516701f0b4b954bccc2ec750efeba9dcbd3ebe7d688fbaa88667c7c458625089b52a28eebe5010b133d739eb04b0e73a6755c30f980ba2f366d94
|
7
|
+
data.tar.gz: 2467a654f306c79deefc8388253fd93129c6d5abadbe5953e6daf7a0140deb6e0c86926a444dc094d9cf185531c14009ca553aec9f54d0651afb375636317c1a
|
@@ -6,7 +6,15 @@ module CalcWorkingHours
|
|
6
6
|
|
7
7
|
class TimeCardRow
|
8
8
|
attr_reader :starting_time, :ending_time, :break_time, :working_hours, :date_string, :time_point, :over_time, :id
|
9
|
-
def initialize(date_string, starting_time, ending_time, *break_time)
|
9
|
+
def initialize(date_string, starting_time, ending_time, auto_correction, *break_time)
|
10
|
+
|
11
|
+
if auto_correction
|
12
|
+
unless CalcHelper.valid_time_order?(starting_time, ending_time)
|
13
|
+
et = WorkingHours.new(ending_time)
|
14
|
+
ending_time = et.add_time("24:00")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
10
18
|
unless date_string.class == String
|
11
19
|
raise "failure set_date (date should string class)! TimeCardRow class"
|
12
20
|
end
|
@@ -24,7 +32,7 @@ module CalcWorkingHours
|
|
24
32
|
raise "failure initialize (invalid break time! TimeCardRow class)"
|
25
33
|
end
|
26
34
|
end
|
27
|
-
|
35
|
+
|
28
36
|
break_time.each do |time|
|
29
37
|
unless CalcHelper.valid_time_order?(time[0], time[1])
|
30
38
|
raise "failure initialize (invalid time order(break time)! TimeCardRow class)"
|
@@ -5,8 +5,7 @@ module CalcWorkingHours
|
|
5
5
|
|
6
6
|
class TimeRecorder
|
7
7
|
attr_reader :time_cards
|
8
|
-
def initialize(path_to_csv, set_encode,
|
9
|
-
|
8
|
+
def initialize(path_to_csv, set_encode ,id_row, card_id_row, date_row, starting_time_row, ending_time_row, auto_correction, *break_time_rows)
|
10
9
|
csv_data = File.read(path_to_csv) if set_encode == nil || set_encode == false
|
11
10
|
csv_data = File.read(path_to_csv, :encoding => set_encode + ":UTF-8") if set_encode
|
12
11
|
time_cards = {}
|
@@ -27,10 +26,10 @@ module CalcWorkingHours
|
|
27
26
|
|
28
27
|
if time_cards.has_key?(row[card_id_row])
|
29
28
|
raise "id mismatching! (TimeRecorder class)" unless time_cards[row[card_id_row]].id == row[id_row]
|
30
|
-
time_cards[row[card_id_row]].add_row(TimeCardRow.new(row[date_row], row[starting_time_row], row[ending_time_row],
|
29
|
+
time_cards[row[card_id_row]].add_row(TimeCardRow.new(row[date_row], row[starting_time_row], row[ending_time_row], auto_correction ,*break_times))
|
31
30
|
else
|
32
31
|
time_cards[row[card_id_row]] = TimeCard.new(row[card_id_row], row[id_row])
|
33
|
-
time_cards[row[card_id_row]].add_row(TimeCardRow.new(row[date_row], row[starting_time_row], row[ending_time_row], *break_times))
|
32
|
+
time_cards[row[card_id_row]].add_row(TimeCardRow.new(row[date_row], row[starting_time_row], row[ending_time_row], auto_correction , *break_times))
|
34
33
|
end
|
35
34
|
end
|
36
35
|
end
|
@@ -6,7 +6,7 @@ include CalcWorkingHours
|
|
6
6
|
describe TimeCardRow do
|
7
7
|
context "始業9:00、終業19:00、休憩11:00〜12:00、15:00〜16:00のとき" do
|
8
8
|
before do
|
9
|
-
@time_card_row = TimeCardRow.new("2013/5/12", "9:00", "19:00", ["11:00", "12:00"], ["15:00", "16:00"])
|
9
|
+
@time_card_row = TimeCardRow.new("2013/5/12", "9:00", "19:00", false, ["11:00", "12:00"], ["15:00", "16:00"])
|
10
10
|
end
|
11
11
|
|
12
12
|
it "始業時間は9:00となっている" do
|
@@ -48,7 +48,7 @@ describe TimeCardRow do
|
|
48
48
|
|
49
49
|
context "始業11:30、終業23:34、休憩15:38〜17:14のとき" do
|
50
50
|
before do
|
51
|
-
@time_card_row = TimeCardRow.new("2013/5/12", "11:30", "23:34", ["15:38", "17:14"])
|
51
|
+
@time_card_row = TimeCardRow.new("2013/5/12", "11:30", "23:34", false, ["15:38", "17:14"])
|
52
52
|
end
|
53
53
|
|
54
54
|
it "所定労働時間を8:00とすると、残業時間は2:28となる" do
|
@@ -58,7 +58,7 @@ describe TimeCardRow do
|
|
58
58
|
|
59
59
|
context "始業9:00、終業18:00、休憩9:00〜18:00のとき" do
|
60
60
|
before do
|
61
|
-
@time_card_row = TimeCardRow.new("2013/5/12", "9:00", "18:00", ["9:00", "18:00"])
|
61
|
+
@time_card_row = TimeCardRow.new("2013/5/12", "9:00", "18:00", false, ["9:00", "18:00"])
|
62
62
|
end
|
63
63
|
|
64
64
|
it "労働時間は0:00となる" do
|
@@ -68,51 +68,51 @@ describe TimeCardRow do
|
|
68
68
|
|
69
69
|
context "適正な時間設定と、不適な設定時間を設定したとき" do
|
70
70
|
it "set_dateにString以外を設定すると例外が発生する" do
|
71
|
-
proc { TimeCardRow.new(Date.new(2013, 5, 12), "22:00", "28:00") }.should raise_error
|
71
|
+
proc { TimeCardRow.new(Date.new(2013, 5, 12), "22:00", "28:00", false) }.should raise_error
|
72
72
|
end
|
73
73
|
|
74
74
|
it "始業22:00、終業28:00は適正な始業・終業時間設定(0:00〜48:00)なので、エラーは発生しないこと" do
|
75
|
-
proc{ TimeCardRow.new("2013/5/12", "22:00", "28:00") }.should_not raise_error
|
75
|
+
proc{ TimeCardRow.new("2013/5/12", "22:00", "28:00", false) }.should_not raise_error
|
76
76
|
end
|
77
77
|
|
78
78
|
it "始業44:00、終業50:00は不適正な始業・終業時間設定なので、エラーが発生すること" do
|
79
|
-
proc{ TimeCardRow.new("2013/5/12", "44:00", "50:00") }.should raise_error
|
79
|
+
proc{ TimeCardRow.new("2013/5/12", "44:00", "50:00", false) }.should raise_error
|
80
80
|
end
|
81
81
|
|
82
82
|
it "始業四:00、終業5:00は不適正な時間フォーマットなので、エラーが発生すること" do
|
83
|
-
proc{ TimeCardRow.new("2013/5/12", "四:00", "5:00")
|
83
|
+
proc{ TimeCardRow.new("2013/5/12", "四:00", "5:00" ,false)}.should raise_error
|
84
84
|
end
|
85
85
|
|
86
86
|
it "始業9:00、終業19:00の時系列に誤りが無いので、エラーは発生しないこと" do
|
87
|
-
proc { TimeCardRow.new("2013/5/12", "9:00", "19:00")
|
87
|
+
proc { TimeCardRow.new("2013/5/12", "9:00", "19:00" ,false)}.should_not raise_error
|
88
88
|
end
|
89
89
|
|
90
90
|
it "始業18:00、終業8:00は時系列が誤っているので、エラーが発生すること" do
|
91
|
-
proc { TimeCardRow.new("2013/5/12", "18:00", "9:00")
|
91
|
+
proc { TimeCardRow.new("2013/5/12", "18:00", "9:00" ,false)}.should raise_error
|
92
92
|
end
|
93
93
|
|
94
94
|
it "始業8:00、終業19:00、休憩12:00〜11:00は時系列が誤っているので、エラーが発生すること" do
|
95
|
-
proc { TimeCardRow.new("2013/5/12", "8:00", "19:00",
|
95
|
+
proc { TimeCardRow.new("2013/5/12", "8:00", "19:00",false,["12:00", "10:00"]) }.should raise_error
|
96
96
|
end
|
97
97
|
|
98
98
|
it "始業8:00、終業19:00、休憩12:00は休憩時間設定が誤っているので、エラーが発生すること" do
|
99
|
-
proc { TimeCardRow.new("2013/5/12", "8:00", "19:00", "12:00") }.should raise_error
|
99
|
+
proc { TimeCardRow.new("2013/5/12", "8:00", "19:00", "12:00",false) }.should raise_error
|
100
100
|
end
|
101
101
|
|
102
102
|
it "始業8:00、終業19:00、休憩7:00〜11:00は時系列が誤っているので、エラーが発生すること" do
|
103
|
-
proc { TimeCardRow.new("2013/5/12", "8:00", "19:00", ["7:00", "10:00"]) }.should raise_error
|
103
|
+
proc { TimeCardRow.new("2013/5/12", "8:00", "19:00",false, ["7:00", "10:00"]) }.should raise_error
|
104
104
|
end
|
105
105
|
end
|
106
106
|
|
107
107
|
context "始業20:00、終業25:00のとき" do
|
108
108
|
it "深夜勤務時間は3:00となる" do
|
109
|
-
TimeCardRow.new("2013/5/12", "20:00", "25:00").between_10pm_and_5am.should == "3:00"
|
109
|
+
TimeCardRow.new("2013/5/12", "20:00", "25:00", false).between_10pm_and_5am.should == "3:00"
|
110
110
|
end
|
111
111
|
end
|
112
112
|
|
113
113
|
context "始業20:00、終業25:00、休憩23:00〜24:00のとき" do
|
114
114
|
it "深夜勤務時間は4:00となる" do
|
115
|
-
TimeCardRow.new("2013/5/12", "20:00", "25:00", ["23:00", "24:00"]).between_10pm_and_5am.should == "2:00"
|
115
|
+
TimeCardRow.new("2013/5/12", "20:00", "25:00", false,["23:00", "24:00"]).between_10pm_and_5am.should == "2:00"
|
116
116
|
end
|
117
117
|
end
|
118
118
|
|
@@ -7,8 +7,8 @@ describe TimeCard do
|
|
7
7
|
context "始業9:00、終業19:00、休憩11:00〜12:00、15:00〜16:00が2日間のとき" do
|
8
8
|
before do
|
9
9
|
@time_card = TimeCard.new(1,1)
|
10
|
-
@time_card.add_row(TimeCardRow.new("2013/5/12", "9:00", "19:00", ["11:00", "12:00"], ["15:00", "16:00"]).set_fixed_working_hours("7:00"))
|
11
|
-
@time_card.add_row(TimeCardRow.new("2013/5/13", "9:00", "19:00", ["11:00", "12:00"], ["15:00", "16:00"]).set_fixed_working_hours("7:00"))
|
10
|
+
@time_card.add_row(TimeCardRow.new("2013/5/12", "9:00", "19:00", false, ["11:00", "12:00"], ["15:00", "16:00"]).set_fixed_working_hours("7:00"))
|
11
|
+
@time_card.add_row(TimeCardRow.new("2013/5/13", "9:00", "19:00", false, ["11:00", "12:00"], ["15:00", "16:00"]).set_fixed_working_hours("7:00"))
|
12
12
|
end
|
13
13
|
|
14
14
|
it "残業時間のトータルは2:00となる" do
|
@@ -19,8 +19,8 @@ describe TimeCard do
|
|
19
19
|
context "始業24:00、終業30:00、休憩25:00〜26:00が2日間のとき" do
|
20
20
|
before do
|
21
21
|
@time_card = TimeCard.new(1,1)
|
22
|
-
@time_card.add_row(TimeCardRow.new("2013/5/12", "24:00", "30:00",["25:00", "26:00"]).set_fixed_working_hours("7:00"))
|
23
|
-
@time_card.add_row(TimeCardRow.new("2013/5/13", "24:00", "30:00",["25:00", "26:00"]).set_fixed_working_hours("7:00"))
|
22
|
+
@time_card.add_row(TimeCardRow.new("2013/5/12", "24:00", "30:00", false,["25:00", "26:00"]).set_fixed_working_hours("7:00"))
|
23
|
+
@time_card.add_row(TimeCardRow.new("2013/5/13", "24:00", "30:00", false,["25:00", "26:00"]).set_fixed_working_hours("7:00"))
|
24
24
|
end
|
25
25
|
|
26
26
|
it "深夜時間のトータルは8:00となる" do
|
@@ -7,7 +7,7 @@ describe TimeRecorder do
|
|
7
7
|
context "data_sample.csv(Shift_JIS)の通りTimeRecorderが与えられている場合" do
|
8
8
|
before do
|
9
9
|
path_to_csv = File.expand_path(File.dirname(__FILE__)) + "/data_sample.csv"
|
10
|
-
@time_recorder = TimeRecorder.new(path_to_csv, "Shift_JIS", "従業員番号", "カード番号", "年/月/日", "出勤打刻", "退勤打刻", ["外出打刻", "戻打刻"])
|
10
|
+
@time_recorder = TimeRecorder.new(path_to_csv, "Shift_JIS", "従業員番号", "カード番号", "年/月/日", "出勤打刻", "退勤打刻", false,["外出打刻", "戻打刻"])
|
11
11
|
end
|
12
12
|
|
13
13
|
it "タイムカードのデータが5件あること" do
|
metadata
CHANGED
@@ -1,55 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: calc_working_hours
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Takashi_U
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-07-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
description: 例えば、173:08のような表記の時間を計算するライブラリです
|
@@ -59,9 +59,9 @@ executables: []
|
|
59
59
|
extensions: []
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
|
-
- .gitignore
|
63
|
-
- .rspec
|
64
|
-
- .travis.yml
|
62
|
+
- ".gitignore"
|
63
|
+
- ".rspec"
|
64
|
+
- ".travis.yml"
|
65
65
|
- Gemfile
|
66
66
|
- LICENSE.txt
|
67
67
|
- README.md
|
@@ -92,17 +92,17 @@ require_paths:
|
|
92
92
|
- lib
|
93
93
|
required_ruby_version: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- -
|
95
|
+
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
98
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
99
|
requirements:
|
100
|
-
- -
|
100
|
+
- - ">="
|
101
101
|
- !ruby/object:Gem::Version
|
102
102
|
version: '0'
|
103
103
|
requirements: []
|
104
104
|
rubyforge_project:
|
105
|
-
rubygems_version: 2.
|
105
|
+
rubygems_version: 2.5.1
|
106
106
|
signing_key:
|
107
107
|
specification_version: 4
|
108
108
|
summary: 時間計算
|