timesheet 0.2.6 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
data/lib/timesheet.rb CHANGED
@@ -17,7 +17,7 @@ require 'timesheet/timesheet_parser'
17
17
 
18
18
  class Timesheet
19
19
 
20
- VERSION = '0.2.6'
20
+ VERSION = '0.2.7'
21
21
 
22
22
  def self.run(params)
23
23
  command_hash = {}
@@ -64,6 +64,9 @@ class Timesheet
64
64
  def process_edit_command(command_opts)
65
65
  record_number = command_opts.delete(:record_number)
66
66
  @timelog.update(record_number, command_opts)
67
+ entries = [@timelog.find(record_number)]
68
+ time_report = TimeReport.new(entries)
69
+ time_report.report({:dump => true})
67
70
  end
68
71
 
69
72
  def process_delete_command(command_opts)
@@ -53,6 +53,14 @@ class ReportItem < DelegateClass(TimeEntry)
53
53
  sprintf("%5d", @time_entry.record_number)
54
54
  end
55
55
 
56
+ def formatted_start_time
57
+ start_time.strftime("%m/%d/%Y at %I:%M:%S %p")
58
+ end
59
+
60
+ def formatted_end_time
61
+ end_time.strftime("%m/%d/%Y at %I:%M:%S %p")
62
+ end
63
+
56
64
  def formatted_times
57
65
  str = ""
58
66
  str << start_slice_indication
@@ -67,6 +75,10 @@ class ReportItem < DelegateClass(TimeEntry)
67
75
  @time_entry.comment || ""
68
76
  end
69
77
 
78
+ def record_number
79
+ @time_entry.record_number || "N/A"
80
+ end
81
+
70
82
  def formatted_duration
71
83
  str = ""
72
84
  str << duration.strftime("%d Days ") if duration.days > 0
@@ -22,6 +22,7 @@ class TimeReport
22
22
  else
23
23
  constrain(command_options[:start], command_options[:end])
24
24
 
25
+ dump_report(outstream) if command_options[:dump]
25
26
  detail_report(outstream) if command_options[:detail]
26
27
  summary_report(outstream) if command_options[:summary]
27
28
  byday_report(outstream) if command_options[:byday]
@@ -30,6 +31,23 @@ class TimeReport
30
31
 
31
32
  private
32
33
 
34
+ def dump_report(outstream)
35
+ fields = [
36
+ {:name => "Record:", :method => :record_number },
37
+ {:name => "Project:", :method => :project},
38
+ {:name => "Start:", :method => :formatted_start_time},
39
+ {:name => "End:", :method => :formatted_end_time},
40
+ {:name => "Hours:", :method => :formatted_duration},
41
+ {:name => "Comment:", :method => :comment}
42
+ ]
43
+
44
+ item = @entries.first
45
+
46
+ label_width = fields.inject(0) { |max, field| max = [max, field[:name].length].max }
47
+ fields.each { |field| outstream.puts "#{field[:name].ljust(label_width)} #{item.send(field[:method])}" }
48
+
49
+ end
50
+
33
51
  def detail_report(outstream)
34
52
 
35
53
  fields = [
@@ -78,6 +78,10 @@ EOS
78
78
 
79
79
  Allows editing of existing entries
80
80
 
81
+ Special Case: When the edit is done, the entire entry is displayed.
82
+ You can invoke an edit without changing anything
83
+ to see a dump of a particular record.
84
+
81
85
  OPTIONS are:
82
86
 
83
87
  EOS
@@ -40,6 +40,21 @@ describe TimeReport do
40
40
  stream.string.should eql("No data available.\n")
41
41
  end
42
42
 
43
+ it "should be able to produce a dump report" do
44
+ command_options = {:dump => true}
45
+ stream = StringIO.new
46
+ @time_report.report(command_options, stream)
47
+ stream.string.should eql( <<EOS
48
+ Record: N/A
49
+ Project: ProjectA
50
+ Start: 12/01/2009 at 09:00:00 AM
51
+ End: 12/01/2009 at 12:00:00 PM
52
+ Hours: 3h 0m
53
+ Comment: comment 1
54
+ EOS
55
+ )
56
+ end
57
+
43
58
  it "should be able to produce a detail report" do
44
59
  command_options = {:detail => true, :start => Time.local(2009, 12, 1), :end => Time.local(2009, 12, 6)}
45
60
  stream = StringIO.new
@@ -136,12 +136,17 @@ describe Timesheet do
136
136
  context "when processing edit command" do
137
137
 
138
138
  it "should perform an edit" do
139
- command = mock("edit command")
139
+ command = mock("dump command")
140
140
  timelog = mock("timelog")
141
141
  timesheet = Timesheet.new(timelog)
142
+ time_report = mock("time report")
143
+ entries = mock("entries")
142
144
 
143
145
  command.should_receive(:delete).with(:record_number).once.and_return(100)
144
146
  timelog.should_receive(:update).with(100, command)
147
+ timelog.should_receive(:find).with(100).once.and_return(entries)
148
+ TimeReport.should_receive(:new).with([entries]).once.and_return(time_report)
149
+ time_report.should_receive(:report).with({:dump => true})
145
150
 
146
151
  timesheet.process_edit_command(command)
147
152
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: timesheet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - John F. Schank III