calc_working_hours 0.0.3 → 0.0.4

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,4 +21,6 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
22
  spec.add_development_dependency "rake"
23
23
  spec.add_development_dependency "rspec"
24
+
25
+ spec.add_runtime_dependency "activesupport"
24
26
  end
@@ -1,6 +1,8 @@
1
1
  require "calc_working_hours/version"
2
- require "calc_working_hours/working_hours"
2
+ require "active_support/dependencies"
3
3
 
4
4
  module CalcWorkingHours
5
- # Your code goes here...
6
5
  end
6
+
7
+ ActiveSupport::Dependencies.autoload_paths << File.expand_path('..', __FILE__)
8
+ ActiveSupport::Dependencies.autoload_paths << File.expand_path('../calc_working_hours', __FILE__)
@@ -0,0 +1,25 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module CalcWorkingHours
4
+ attr_reader :time_card_rows, :card_id, :working_hours
5
+ class TimeCard
6
+ def initialize(card_id)
7
+ @time_card_rows = []
8
+ @card_id = card_id
9
+ self
10
+ end
11
+
12
+ def add_row(time_card_rows_obj)
13
+ @time_card_rows << time_card_rows_obj
14
+ self
15
+ end
16
+
17
+ def total_working_hours
18
+ array_of_working_hours = []
19
+ @time_card_rows.each do |row|
20
+ array_of_working_hours << row.working_hours.time_string
21
+ end
22
+ @working_hours = WorkingHours.new("0:00").add_array_time(array_of_working_hours).time_string
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,114 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require "date"
4
+
5
+ module CalcWorkingHours
6
+
7
+ class TimeCardRow
8
+ attr_reader :starting_time, :ending_time, :break_time, :working_hours, :date_string
9
+ def initialize(starting_time, ending_time, *break_time)
10
+ unless valid_time_format?(starting_time) && valid_time_format?(ending_time)
11
+ raise "failure initialize (invalid time format! TimeCardRow class)"
12
+ end
13
+
14
+ unless valid_time_order?(starting_time, ending_time)
15
+ raise "failure initialize (invalid time order! TimeCardRow class)"
16
+ end
17
+
18
+ unless break_time.empty?
19
+ unless valid_break_time?(break_time, starting_time, ending_time)
20
+ raise "failure initialize (invalid break time! TimeCardRow class)"
21
+ end
22
+ end
23
+
24
+ break_time.each do |time|
25
+ unless valid_time_order?(time[0], time[1])
26
+ raise "failure initialize (invalid time order(break time)! TimeCardRow class)"
27
+ end
28
+ end
29
+
30
+ total_break_time_string = "0:00"
31
+ unless break_time.empty?
32
+ total_break_time_string = total_break_time(break_time)
33
+ end
34
+
35
+ @starting_time = starting_time
36
+ @ending_time = ending_time
37
+ @break_time = break_time
38
+ @working_hours = WorkingHours.new(ending_time).minus_time(starting_time).minus_time(total_break_time_string)
39
+
40
+ self
41
+ end
42
+
43
+ def set_date(date)
44
+ unless date.class == String
45
+ raise "failure set_date (date should string class)! TimeCardRow class"
46
+ end
47
+ @date_string = date
48
+ self
49
+ end
50
+
51
+ private
52
+
53
+ def total_break_time(break_time)
54
+ total = WorkingHours.new("0:00")
55
+ break_time.each do |time|
56
+ total.add_time(time[1]).minus_time(time[0])
57
+ end
58
+ return total.time_string
59
+ end
60
+
61
+ def valid_time_card_row_format?(starting_time, ending_time)
62
+ # break_timeについてはvalid_break_timeでチェック
63
+ flag = false
64
+ if valid_time_format?(starting_time) && valid_time_format?(ending_time)
65
+ flag = true
66
+ end
67
+ return flag
68
+ end
69
+
70
+ def valid_time_format?(time)
71
+ flag = false
72
+ if time.class == String
73
+ if /(\d+):(\d+)/ =~ time
74
+ if ($1.to_i <= 48 && $1.to_i >= 0) && ($2.to_i < 60 && $2.to_i >= 0)
75
+ flag = true
76
+ end
77
+ end
78
+ end
79
+ return flag
80
+ end
81
+
82
+ def valid_time_order?(first, second)
83
+ false
84
+ true if change_to_minute(first) < change_to_minute(second)
85
+ end
86
+
87
+ def valid_break_time?(break_time, starting_time, ending_time)
88
+ flag = false
89
+ break_time.each do |time|
90
+ if time.length == 2 && time.class == Array
91
+ if valid_time_format?(time[0]) && valid_time_format?(time[1])
92
+ time.each do |t|
93
+ if change_to_minute(starting_time) >= change_to_minute(t) || change_to_minute(ending_time) <= change_to_minute(t)
94
+ return flag = false
95
+ end
96
+ end
97
+ flag = true
98
+ end
99
+ else
100
+ return flag = false
101
+ end
102
+ end
103
+
104
+ return flag
105
+ end
106
+
107
+ def change_to_minute(str)
108
+ /(\d+):(\d+)/ =~ str
109
+ return $1.to_i * 60 + $2.to_i
110
+ end
111
+
112
+ end
113
+
114
+ end
@@ -0,0 +1,32 @@
1
+ # -*- coding: utf-8 -*-
2
+ require "csv"
3
+
4
+ module CalcWorkingHours
5
+
6
+ class TimeRecorder
7
+ attr_reader :time_cards
8
+ def initialize(path_to_csv, card_id_row, starting_time_row, ending_time_row, date_row, ignore_row_flag = 0, *break_time_rows)
9
+ time_cards = {}
10
+ option_of_csv = {:headers => true, :return_headers => false}
11
+ CSV.foreach(path_to_csv, option_of_csv) do |row|
12
+ if row[starting_time_row] != nil && row[ending_time_row] != nil && row[ignore_row_flag].to_i >= 1
13
+ break_times = []
14
+ unless break_time_rows.empty?
15
+ break_time_rows.each do |bt|
16
+ break_times << [row[bt[0]], row[bt[1]]] unless row[bt[0]] == nil || row[bt[1]] == nil
17
+ end
18
+ end
19
+
20
+ if time_cards.has_key?(row[card_id_row])
21
+ time_cards[row[card_id_row]].add_row(TimeCardRow.new(row[starting_time_row], row[ending_time_row], *break_times).set_date(row[date_row]))
22
+ else
23
+ time_cards[row[card_id_row]] = TimeCard.new(row[card_id_row])
24
+ time_cards[row[card_id_row]].add_row(TimeCardRow.new(row[starting_time_row], row[ending_time_row], *break_times).set_date(row[date_row]))
25
+ end
26
+ end
27
+ end
28
+ @time_cards = time_cards
29
+ self
30
+ end
31
+ end
32
+ end
@@ -1,3 +1,3 @@
1
1
  module CalcWorkingHours
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -67,9 +67,12 @@ module CalcWorkingHours
67
67
  end
68
68
 
69
69
  def change_to_time_string(minute)
70
- hour = minute.div(60)
71
- minute = minute % 60
72
- return hour.to_s + ":" + minute.to_s
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
73
76
  end
74
77
 
75
78
  end
@@ -0,0 +1,128 @@
1
+ "�J�[�h�ԍ�","�]�ƈ��ԍ�","�]�ƈ�����","�����ԍ�","�N/��/��","�V�t�g�ԍ�","����/�x���敪","�s�ݗ��R","�o�Αō�","�o�΃}�[�N","�O�o�ō�","�O�o�}�[�N","�ߑō�","�߃}�[�N","�ދΑō�","�ދ΃}�[�N","�R�����g"
2
+ 0000000001,00000001,�����@������,2,2013/07/21,01,00,,09:55,0,14:30,0,16:30,0,21:03,0,
3
+ 0000000001,00000001,�����@������,2,2013/07/22,01,00,,09:47,0,14:30,0,16:30,0,21:13,0,
4
+ 0000000001,00000001,�����@������,2,2013/07/23,01,00,,09:59,0,14:30,0,16:30,0,21:09,0,
5
+ 0000000001,00000001,�����@������,2,2013/07/24,01,00,,,0,,0,,0,,0,
6
+ 0000000001,00000001,�����@������,2,2013/07/25,01,00,,,0,,0,,0,,0,
7
+ 0000000001,00000001,�����@������,2,2013/07/26,01,00,,09:55,0,14:30,0,16:30,0,21:55,0,
8
+ 0000000001,00000001,�����@������,2,2013/07/27,01,00,,09:40,0,14:30,0,16:30,0,21:00,0,
9
+ 0000000001,00000001,�����@������,2,2013/07/28,01,00,,09:57,0,14:30,0,16:30,0,21:38,0,
10
+ 0000000001,00000001,�����@������,2,2013/07/29,01,00,,10:00,0,14:30,0,16:30,0,21:00,0,
11
+ 0000000001,00000001,�����@������,2,2013/07/30,01,00,,10:00,0,14:30,0,16:30,0,21:55,0,
12
+ 0000000001,00000001,�����@������,2,2013/07/31,01,00,,,0,,0,,0,,0,
13
+ 0000000001,00000001,�����@������,2,2013/08/01,01,00,,,0,,0,,0,,0,
14
+ 0000000001,00000001,�����@������,2,2013/08/02,01,00,,10:01,0,14:30,0,16:30,0,21:43,0,
15
+ 0000000001,00000001,�����@������,2,2013/08/03,01,00,,09:58,0,14:30,0,16:30,0,21:35,0,
16
+ 0000000001,00000001,�����@������,2,2013/08/04,01,00,,10:01,0,14:30,0,16:30,0,21:43,0,
17
+ 0000000001,00000001,�����@������,2,2013/08/05,01,00,,09:53,0,14:30,0,16:30,0,21:00,0,
18
+ 0000000001,00000001,�����@������,2,2013/08/06,01,00,,09:38,0,14:30,0,16:30,0,21:59,0,
19
+ 0000000001,00000001,�����@������,2,2013/08/07,01,00,,,0,,0,,0,,0,
20
+ 0000000001,00000001,�����@������,2,2013/08/08,01,00,,,0,,0,,0,,0,
21
+ 0000000001,00000001,�����@������,2,2013/08/09,01,00,,09:58,0,14:30,0,16:30,0,21:44,0,
22
+ 0000000001,00000001,�����@������,2,2013/08/10,01,00,,09:59,0,14:30,0,16:30,0,21:30,0,
23
+ 0000000001,00000001,�����@������,2,2013/08/11,01,00,,09:56,0,14:30,0,16:30,0,21:36,0,
24
+ 0000000001,00000001,�����@������,2,2013/08/12,01,00,,10:03,0,14:30,0,16:30,0,21:56,0,
25
+ 0000000001,00000001,�����@������,2,2013/08/13,01,00,,10:00,0,14:30,0,16:30,0,22:00,0,
26
+ 0000000001,00000001,�����@������,2,2013/08/14,01,00,,10:00,0,14:30,0,16:30,0,22:03,0,
27
+ 0000000001,00000001,�����@������,2,2013/08/15,01,00,,09:58,0,14:30,0,16:30,0,22:33,0,
28
+ 0000000001,00000001,�����@������,2,2013/08/16,01,00,,10:03,0,14:30,0,16:30,0,22:22,0,
29
+ 0000000001,00000001,�����@������,2,2013/08/17,01,00,,09:59,0,14:30,0,16:30,0,22:10,0,
30
+ 0000000001,00000001,�����@������,2,2013/08/18,01,00,,10:02,0,14:30,0,16:30,0,21:30,0,
31
+ 0000000001,00000001,�����@������,2,2013/08/19,01,00,,10:01,0,14:30,0,16:30,0,22:30,0,
32
+ 0000000001,00000001,�����@������,2,2013/08/20,01,00,,09:32,0,14:30,0,16:30,0,22:21,0,
33
+ "�J�[�h�ԍ�","�]�ƈ��ԍ�","�]�ƈ�����","�����ԍ�","�N/��/��","�V�t�g�ԍ�","����/�x���敪","�s�ݗ��R","�o�Αō�","�o�΃}�[�N","�O�o�ō�","�O�o�}�[�N","�ߑō�","�߃}�[�N","�ދΑō�","�ދ΃}�[�N","�R�����g"
34
+ 0000000002,00000002,�����@������,101,2013/07/21,20,00,,10:00,0,,0,,0,15:10,0,
35
+ 0000000002,00000002,�����@������,101,2013/07/22,20,00,,10:30,0,15:09,0,17:50,0,20:03,0,
36
+ 0000000002,00000002,�����@������,101,2013/07/23,20,00,,,0,,0,,0,,0,
37
+ 0000000002,00000002,�����@������,101,2013/07/24,20,00,,,0,,0,,0,,0,
38
+ 0000000002,00000002,�����@������,101,2013/07/25,20,00,,10:00,0,14:09,0,15:49,0,21:08,0,
39
+ 0000000002,00000002,�����@������,101,2013/07/26,20,00,,10:00,0,14:12,0,15:48,0,21:27,0,
40
+ 0000000002,00000002,�����@������,101,2013/07/27,20,00,,10:00,0,15:55,0,17:19,0,21:08,0,
41
+ 0000000002,00000002,�����@������,101,2013/07/28,20,00,,11:24,0,,0,,0,14:28,0,
42
+ 0000000002,00000002,�����@������,101,2013/07/29,20,00,,10:30,0,14:13,0,15:51,0,21:25,0,
43
+ 0000000002,00000002,�����@������,101,2013/07/30,20,00,,10:30,0,14:09,0,14:49,0,20:27,0,
44
+ 0000000002,00000002,�����@������,101,2013/07/31,20,00,,,0,,0,,0,,0,
45
+ 0000000002,00000002,�����@������,101,2013/08/01,20,00,,,0,,0,,0,,0,
46
+ 0000000002,00000002,�����@������,101,2013/08/02,20,00,,10:00,0,14:02,0,15:51,0,20:13,0,
47
+ 0000000002,00000002,�����@������,101,2013/08/03,20,00,,10:00,0,14:00,0,15:49,0,19:05,0,
48
+ 0000000002,00000002,�����@������,101,2013/08/04,20,00,,10:00,0,,0,,0,16:30,0,
49
+ 0000000002,00000002,�����@������,101,2013/08/05,20,00,,10:30,0,14:13,0,15:53,0,21:29,0,
50
+ 0000000002,00000002,�����@������,101,2013/08/06,20,00,,,0,,0,,0,,0,
51
+ 0000000002,00000002,�����@������,101,2013/08/07,20,00,,11:00,0,,0,,0,15:05,0,
52
+ 0000000002,00000002,�����@������,101,2013/08/08,20,00,,18:30,0,,0,,0,22:43,0,
53
+ 0000000002,00000002,�����@������,101,2013/08/09,20,00,,10:30,0,14:16,0,16:11,0,20:12,0,
54
+ 0000000002,00000002,�����@������,101,2013/08/10,20,00,,10:00,0,16:29,0,17:48,0,21:09,0,
55
+ 0000000002,00000002,�����@������,101,2013/08/11,20,00,,10:00,0,,0,,0,15:05,0,
56
+ 0000000002,00000002,�����@������,101,2013/08/12,20,00,,10:00,0,14:27,0,15:58,0,21:56,0,
57
+ 0000000002,00000002,�����@������,101,2013/08/13,20,00,,,0,,0,,0,,0,
58
+ 0000000002,00000002,�����@������,101,2013/08/14,20,00,,10:00,0,14:00,0,15:50,0,21:01,0,
59
+ 0000000002,00000002,�����@������,101,2013/08/15,20,00,,10:00,0,14:09,0,15:52,0,21:09,0,
60
+ 0000000002,00000002,�����@������,101,2013/08/16,20,00,,,0,,0,,0,,0,
61
+ 0000000002,00000002,�����@������,101,2013/08/17,20,00,,10:00,0,14:08,0,15:49,0,21:07,0,
62
+ 0000000002,00000002,�����@������,101,2013/08/18,20,00,,10:00,0,,0,,0,16:16,0,
63
+ 0000000002,00000002,�����@������,101,2013/08/19,20,00,,10:30,0,14:32,0,16:46,0,21:06,0,
64
+ 0000000002,00000002,�����@������,101,2013/08/20,20,00,,10:00,0,14:12,0,15:49,0,20:51,0,
65
+ "�J�[�h�ԍ�","�]�ƈ��ԍ�","�]�ƈ�����","�����ԍ�","�N/��/��","�V�t�g�ԍ�","����/�x���敪","�s�ݗ��R","�o�Αō�","�o�΃}�[�N","�O�o�ō�","�O�o�}�[�N","�ߑō�","�߃}�[�N","�ދΑō�","�ދ΃}�[�N","�R�����g"
66
+ 0000000084,00000004,�����@�‚Ă�,102,2013/07/21,20,00,,12:00,0,,0,,0,17:04,0,
67
+ 0000000084,00000004,�����@�‚Ă�,102,2013/07/22,20,00,,12:00,0,,0,,0,17:00,0,
68
+ 0000000084,00000004,�����@�‚Ă�,102,2013/07/23,20,00,,12:00,0,,0,,0,17:02,0,
69
+ 0000000084,00000004,�����@�‚Ă�,102,2013/07/24,20,00,,,0,,0,,0,,0,
70
+ 0000000084,00000004,�����@�‚Ă�,102,2013/07/25,20,00,,11:00,0,,0,,0,16:06,0,
71
+ 0000000084,00000004,�����@�‚Ă�,102,2013/07/26,20,00,,12:00,0,,0,,0,16:39,0,
72
+ 0000000084,00000004,�����@�‚Ă�,102,2013/07/27,20,00,,12:00,0,,0,,0,17:07,0,
73
+ 0000000084,00000004,�����@�‚Ă�,102,2013/07/28,20,00,,12:00,0,,0,,0,17:08,0,
74
+ 0000000084,00000004,�����@�‚Ă�,102,2013/07/29,20,00,,12:00,0,,0,,0,17:06,0,
75
+ 0000000084,00000004,�����@�‚Ă�,102,2013/07/30,20,00,,12:00,0,,0,,0,17:05,0,
76
+ 0000000084,00000004,�����@�‚Ă�,102,2013/07/31,20,00,,,0,,0,,0,,0,
77
+ 0000000084,00000004,�����@�‚Ă�,102,2013/08/01,20,00,,10:30,0,,0,,0,15:30,0,
78
+ 0000000084,00000004,�����@�‚Ă�,102,2013/08/02,20,00,,12:00,0,,0,,0,16:51,0,
79
+ 0000000084,00000004,�����@�‚Ă�,102,2013/08/03,20,00,,12:00,0,,0,,0,17:05,0,
80
+ 0000000084,00000004,�����@�‚Ă�,102,2013/08/04,20,00,,12:00,0,,0,,0,17:04,0,
81
+ 0000000084,00000004,�����@�‚Ă�,102,2013/08/05,20,00,,10:30,0,,0,,0,15:42,0,
82
+ 0000000084,00000004,�����@�‚Ă�,102,2013/08/06,20,00,,12:00,0,,0,,0,17:21,0,
83
+ 0000000084,00000004,�����@�‚Ă�,102,2013/08/07,20,00,,,0,,0,,0,,0,
84
+ 0000000084,00000004,�����@�‚Ă�,102,2013/08/08,20,00,,12:00,0,,0,,0,16:35,0,
85
+ 0000000084,00000004,�����@�‚Ă�,102,2013/08/09,20,00,,11:00,0,,0,,0,15:14,0,
86
+ 0000000084,00000004,�����@�‚Ă�,102,2013/08/10,20,00,,12:00,0,,0,,0,17:05,0,
87
+ 0000000084,00000004,�����@�‚Ă�,102,2013/08/11,20,00,,12:00,0,,0,,0,17:10,0,
88
+ 0000000084,00000004,�����@�‚Ă�,102,2013/08/12,20,00,,12:00,0,,0,,0,17:13,0,
89
+ 0000000084,00000004,�����@�‚Ă�,102,2013/08/13,20,00,,12:00,0,,0,,0,17:05,0,
90
+ 0000000084,00000004,�����@�‚Ă�,102,2013/08/14,20,00,,,0,,0,,0,,0,
91
+ 0000000084,00000004,�����@�‚Ă�,102,2013/08/15,20,00,,12:00,0,,0,,0,21:30,0,
92
+ 0000000084,00000004,�����@�‚Ă�,102,2013/08/16,20,00,,12:00,0,17:04,0,17:46,0,22:22,0,������
93
+ 0000000084,00000004,�����@�‚Ă�,102,2013/08/17,20,00,,12:00,0,17:07,0,17:59,0,22:27,0,������
94
+ 0000000084,00000004,�����@�‚Ă�,102,2013/08/18,20,00,,12:00,0,,0,,0,17:05,0,
95
+ 0000000084,00000004,�����@�‚Ă�,102,2013/08/19,20,00,,12:00,0,,0,,0,17:08,0,
96
+ 0000000084,00000004,�����@�‚Ă�,102,2013/08/20,20,00,,12:00,0,,0,,0,17:02,0,
97
+ "�J�[�h�ԍ�","�]�ƈ��ԍ�","�]�ƈ�����","�����ԍ�","�N/��/��","�V�t�g�ԍ�","����/�x���敪","�s�ݗ��R","�o�Αō�","�o�΃}�[�N","�O�o�ō�","�O�o�}�[�N","�ߑō�","�߃}�[�N","�ދΑō�","�ދ΃}�[�N","�R�����g"
98
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/07/21,20,00,,,0,,0,,0,,0,
99
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/07/22,20,00,,10:30,0,,0,,0,15:32,0,
100
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/07/23,20,00,,10:30,0,,0,,0,15:31,0,
101
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/07/24,20,00,,,0,,0,,0,,0,
102
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/07/25,20,00,,10:30,0,,0,,0,15:40,0,
103
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/07/26,20,00,,,0,,0,,0,,0,
104
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/07/27,20,01,,10:30,0,,0,,0,16:16,0,
105
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/07/28,20,00,,,0,,0,,0,,0,
106
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/07/29,20,00,,10:30,0,,0,,0,15:39,0,
107
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/07/30,20,00,,10:30,0,,0,,0,15:50,0,
108
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/07/31,20,00,,,0,,0,,0,,0,
109
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/08/01,20,00,,,0,,0,,0,,0,
110
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/08/02,20,00,,10:30,0,,0,,0,15:46,0,
111
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/08/03,20,00,,,0,,0,,0,,0,
112
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/08/04,20,01,,10:30,0,,0,,0,15:53,0,
113
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/08/05,20,00,,,0,,0,,0,,0,
114
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/08/06,20,00,,10:30,0,,0,,0,16:02,0,
115
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/08/07,20,00,,10:30,0,,0,,0,15:30,0,
116
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/08/08,20,00,,,0,,0,,0,,0,
117
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/08/09,20,00,,10:30,0,,0,,0,15:45,0,
118
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/08/10,20,00,,,0,,0,,0,,0,
119
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/08/11,20,01,,10:30,0,,0,,0,16:30,0,
120
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/08/12,20,00,,,0,,0,,0,,0,
121
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/08/13,20,00,,10:30,0,,0,,0,16:12,0,
122
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/08/14,20,00,,10:30,0,,0,,0,16:30,0,
123
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/08/15,20,00,,,0,,0,,0,,0,
124
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/08/16,20,00,,10:30,0,,0,,0,16:26,0,
125
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/08/17,20,01,,10:30,0,16:02,0,17:55,0,22:02,0,������
126
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/08/18,20,00,,,0,,0,,0,,0,
127
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/08/19,20,00,,,0,,0,,0,,0,
128
+ 0000000005,00000016,�ȂɁ@�ʂ˂�,102,2013/08/20,20,00,,10:30,0,,0,,0,15:47,0,
@@ -0,0 +1,65 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ include CalcWorkingHours
5
+
6
+ describe TimeCardRow do
7
+ context "始業9:00、終業19:00、休憩11:00〜12:00、15:00〜16:00のとき" do
8
+ before do
9
+ @time_card_row = TimeCardRow.new("9:00", "19:00", ["11:00", "12:00"], ["15:00", "16:00"])
10
+ end
11
+
12
+ it "始業時間は9:00となっている" do
13
+ @time_card_row.starting_time.should == "9:00"
14
+ end
15
+
16
+ it "終業時間は19:00となっている" do
17
+ @time_card_row.ending_time.should == "19:00"
18
+ end
19
+
20
+ it "労働時間は8:00となっている" do
21
+ @time_card_row.working_hours.time_string.should == "8:00"
22
+ end
23
+
24
+ it "set_dateにDateクラスのオブジェクトを渡すことで日付を設定できる" do
25
+ @time_card_row.set_date("2013/8/1").date_string.class.should == String
26
+ end
27
+
28
+ end
29
+
30
+ context "適正な時間設定と、不適な設定時間を設定したとき" do
31
+ it "始業22:00、終業28:00は適正な始業・終業時間設定(0:00〜48:00)なので、エラーは発生しないこと" do
32
+ proc{ TimeCardRow.new("22:00", "28:00") }.should_not raise_error
33
+ end
34
+
35
+ it "始業44:00、終業50:00は不適正な始業・終業時間設定なので、エラーが発生すること" do
36
+ proc{ TimeCardRow.new("44:00", "50:00") }.should raise_error
37
+ end
38
+
39
+ it "始業四:00、終業5:00は不適正な時間フォーマットなので、エラーが発生すること" do
40
+ proc{ TimeCardRow.new("四:00", "5:00") }.should raise_error
41
+ end
42
+
43
+ it "始業9:00、終業19:00の時系列に誤りが無いので、エラーは発生しないこと" do
44
+ proc { TimeCardRow.new("9:00", "19:00") }.should_not raise_error
45
+ end
46
+
47
+ it "始業18:00、終業8:00は時系列が誤っているので、エラーが発生すること" do
48
+ proc { TimeCardRow.new("18:00", "9:00") }.should raise_error
49
+ end
50
+
51
+ it "始業8:00、終業19:00、休憩12:00〜11:00は時系列が誤っているので、エラーが発生すること" do
52
+ proc { TimeCardRow.new("8:00", "19:00", ["12:00", "10:00"]) }.should raise_error
53
+ end
54
+
55
+ it "始業8:00、終業19:00、休憩12:00は休憩時間設定が誤っているので、エラーが発生すること" do
56
+ proc { TimeCardRow.new("8:00", "19:00", "12:00") }.should raise_error
57
+ end
58
+
59
+ it "始業8:00、終業19:00、休憩7:00〜11:00は時系列が誤っているので、エラーが発生すること" do
60
+ proc { TimeCardRow.new("8:00", "19:00", ["7:00", "10:00"]) }.should raise_error
61
+ end
62
+
63
+ end
64
+
65
+ end
@@ -0,0 +1,14 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ include CalcWorkingHours
5
+
6
+ describe TimeCard do
7
+ context "次の通りTimeCardRowが与えられている場合" do
8
+ before do
9
+ @time_card = TimeCard.new
10
+ # puts "hogefuga"
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,30 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ include CalcWorkingHours
5
+
6
+ describe TimeRecorder do
7
+ context "data_sample.csvの通りTimeRecorderが与えられている場合" do
8
+ before do
9
+ path_to_csv = File.expand_path(File.dirname(__FILE__)) + "/data_sample.csv"
10
+ @time_recorder = TimeRecorder.new(path_to_csv, 0, 8, 14, 4, 0, [10, 12])
11
+ end
12
+
13
+ it "タイムカードのデータが5件あること" do
14
+ @time_recorder.time_cards.size.should == 4
15
+ end
16
+
17
+ it "タイムカードのidが0000000001の人物の出勤日数は25日であること" do
18
+ @time_recorder.time_cards["0000000001"].time_card_rows.size.should == 25
19
+ end
20
+
21
+ it "タイムカードのidが0000000002の人物の5番目の出勤日は2013/07/27であること" do
22
+ @time_recorder.time_cards["0000000002"].time_card_rows[4].date_string.should == "2013/07/27"
23
+ end
24
+
25
+ it "タイムカードのidが0000000084の人物の総労働時間は149:12であること" do
26
+ @time_recorder.time_cards["0000000084"].total_working_hours.should == "149:12"
27
+ end
28
+
29
+ end
30
+ end
@@ -38,7 +38,7 @@ describe WorkingHours do
38
38
  @working_hours.minus_time("2:25").minus_time("3:00").time_string.should == "2:20"
39
39
  end
40
40
 
41
- it '["1:10", "2:20", "3:30", "4:40"]を足すと、19:35になること' do
41
+ it '["1:10", "2:20", "3:30", "4:40"]を足すと、19:35になること(add_array_timeは配列を渡すと合計する)' do
42
42
  @working_hours.add_array_time(["1:10", "2:20", "3:30", "4:40"]).time_string.should == "19:25"
43
43
  end
44
44
 
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.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-19 00:00:00.000000000Z
12
+ date: 2013-09-21 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
16
- requirement: &70166375149760 !ruby/object:Gem::Requirement
16
+ requirement: &70321991304440 !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: *70166375149760
24
+ version_requirements: *70321991304440
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &70166375149160 !ruby/object:Gem::Requirement
27
+ requirement: &70321991303700 !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: *70166375149160
35
+ version_requirements: *70321991303700
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &70166375148340 !ruby/object:Gem::Requirement
38
+ requirement: &70321991302820 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,18 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70166375148340
46
+ version_requirements: *70321991302820
47
+ - !ruby/object:Gem::Dependency
48
+ name: activesupport
49
+ requirement: &70321991301920 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *70321991301920
47
58
  description: 例えば、173:08のような表記の時間を計算するライブラリです
48
59
  email:
49
60
  - ''
@@ -60,8 +71,15 @@ files:
60
71
  - Rakefile
61
72
  - calc_working_hours.gemspec
62
73
  - lib/calc_working_hours.rb
74
+ - lib/calc_working_hours/time_card.rb
75
+ - lib/calc_working_hours/time_card_row.rb
76
+ - lib/calc_working_hours/time_recorder.rb
63
77
  - lib/calc_working_hours/version.rb
64
78
  - lib/calc_working_hours/working_hours.rb
79
+ - spec/calc_working_hours/data_sample.csv
80
+ - spec/calc_working_hours/time_card_row_spec.rb
81
+ - spec/calc_working_hours/time_card_spec.rb
82
+ - spec/calc_working_hours/time_recorder_spec.rb
65
83
  - spec/calc_working_hours/working_hours_spec.rb
66
84
  - spec/calc_working_hours_spec.rb
67
85
  - spec/spec_helper.rb
@@ -78,12 +96,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
78
96
  - - ! '>='
79
97
  - !ruby/object:Gem::Version
80
98
  version: '0'
99
+ segments:
100
+ - 0
101
+ hash: 2137619453684458958
81
102
  required_rubygems_version: !ruby/object:Gem::Requirement
82
103
  none: false
83
104
  requirements:
84
105
  - - ! '>='
85
106
  - !ruby/object:Gem::Version
86
107
  version: '0'
108
+ segments:
109
+ - 0
110
+ hash: 2137619453684458958
87
111
  requirements: []
88
112
  rubyforge_project:
89
113
  rubygems_version: 1.8.10
@@ -91,7 +115,10 @@ signing_key:
91
115
  specification_version: 3
92
116
  summary: 時間計算
93
117
  test_files:
118
+ - spec/calc_working_hours/data_sample.csv
119
+ - spec/calc_working_hours/time_card_row_spec.rb
120
+ - spec/calc_working_hours/time_card_spec.rb
121
+ - spec/calc_working_hours/time_recorder_spec.rb
94
122
  - spec/calc_working_hours/working_hours_spec.rb
95
123
  - spec/calc_working_hours_spec.rb
96
124
  - spec/spec_helper.rb
97
- has_rdoc: