baby-bro 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.
- data/VERSION +1 -1
- data/baby-bro.gemspec +2 -2
- data/lib/baby-bro/exec.rb +15 -2
- data/lib/baby-bro/monitor.rb +0 -4
- data/lib/baby-bro/reporter.rb +45 -19
- data/lib/baby-bro/session.rb +1 -1
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.5
|
data/baby-bro.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{baby-bro}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Bill Doughty"]
|
12
|
-
s.date = %q{2010-12-
|
12
|
+
s.date = %q{2010-12-08}
|
13
13
|
s.default_executable = %q{bro}
|
14
14
|
s.description = %q{Baby Bro monitors timestamp changes of files and and estimates time spent actively working in project directories.}
|
15
15
|
s.email = %q{billdoughty@capitalthought.com}
|
data/lib/baby-bro/exec.rb
CHANGED
@@ -73,7 +73,7 @@ module BabyBroExec
|
|
73
73
|
# @param opts [OptionParser]
|
74
74
|
def set_opts(opts)
|
75
75
|
opts.banner = <<END
|
76
|
-
Usage: bro [options] [command]
|
76
|
+
Usage: bro [options] [command] [date_string]
|
77
77
|
|
78
78
|
Command is one of the following:
|
79
79
|
|
@@ -83,6 +83,15 @@ Command is one of the following:
|
|
83
83
|
restart - restarts the monitor process (forces re-reading of config file)
|
84
84
|
report - prints out time tracking reports
|
85
85
|
|
86
|
+
date_string is an optional argument for the report command and can be a
|
87
|
+
qualified date string, 'today', 'yesterday' or a number representing an
|
88
|
+
offset from today's date.
|
89
|
+
|
90
|
+
eg. 'bro report 2' would print the report for all projects from two days ago.
|
91
|
+
|
92
|
+
If date_string can't be parsed, reporter will default to today's date.
|
93
|
+
|
94
|
+
Options are as follows:
|
86
95
|
END
|
87
96
|
|
88
97
|
@options[:config_file] = "#{ENV["HOME"]}/.babybrorc"
|
@@ -91,7 +100,7 @@ END
|
|
91
100
|
@options[:config_file] = config_file
|
92
101
|
end
|
93
102
|
|
94
|
-
opts.on('-t', '--tron', :NONE, 'Trace on. Show debug output and a full stack trace on error') do
|
103
|
+
opts.on('-t', '--tron', :NONE, 'Trace on. Show debug output and a full stack trace on error.') do
|
95
104
|
@options[:tron] = true
|
96
105
|
end
|
97
106
|
|
@@ -99,6 +108,10 @@ END
|
|
99
108
|
@options[:force_start] = true
|
100
109
|
end
|
101
110
|
|
111
|
+
opts.on('-b', '--brief', :NONE, "Ignore inactive projects and display daily totals without individual sessions.") do
|
112
|
+
@options[:brief] = true
|
113
|
+
end
|
114
|
+
|
102
115
|
opts.on_tail("-?", "-h", "--help", "Show this message") do
|
103
116
|
puts opts
|
104
117
|
exit
|
data/lib/baby-bro/monitor.rb
CHANGED
data/lib/baby-bro/reporter.rb
CHANGED
@@ -8,14 +8,31 @@ module BabyBro
|
|
8
8
|
attr_accessor :data_directory, :projects, :config
|
9
9
|
|
10
10
|
def initialize( options, args )
|
11
|
-
@config = HashObject.new( process_base_config( options ) )
|
11
|
+
@config = HashObject.new( process_base_config( options ), true )
|
12
12
|
process_reporting_config( @config )
|
13
13
|
initialize_database
|
14
|
+
date_string = args.shift
|
15
|
+
if date_string == 'today'
|
16
|
+
@date = Date.today
|
17
|
+
elsif date_string == 'yesterday'
|
18
|
+
@date = Date.today - 1
|
19
|
+
elsif date_string
|
20
|
+
begin
|
21
|
+
@date = Date.parse(date_string)
|
22
|
+
rescue
|
23
|
+
@date = Date.today - date_string.to_i
|
24
|
+
end
|
25
|
+
end
|
14
26
|
end
|
15
27
|
|
16
28
|
def run
|
29
|
+
if @config.brief && @date
|
30
|
+
$stdout.puts
|
31
|
+
$stdout.puts "#{@date.strftime("%Y-%m-%d")}:"
|
32
|
+
end
|
33
|
+
@longest_project_name = @projects.inject(0){|max,p| p.name.size>max ? p.name.size : max}
|
17
34
|
@projects.each do |project|
|
18
|
-
print_project_report( project )
|
35
|
+
print_project_report( project, @date )
|
19
36
|
end
|
20
37
|
end
|
21
38
|
|
@@ -23,26 +40,35 @@ module BabyBro
|
|
23
40
|
def process_reporting_config( config )
|
24
41
|
end
|
25
42
|
|
26
|
-
def print_project_report( project,
|
27
|
-
$stdout.puts
|
28
|
-
$stdout.puts "#{project.name}"
|
29
|
-
$stdout.puts "="*project.name.size
|
30
|
-
cumulative_time = 0
|
43
|
+
def print_project_report( project, report_date=nil )
|
31
44
|
sessions = project.sessions
|
32
|
-
if sessions.
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
45
|
+
return if @config.brief && sessions.empty?
|
46
|
+
if true
|
47
|
+
if @config.brief && report_date
|
48
|
+
$stdout.print " #{project.name}#{" "*(@longest_project_name - project.name.size)} :"
|
49
|
+
else
|
50
|
+
$stdout.puts
|
51
|
+
$stdout.puts "#{project.name}"
|
52
|
+
$stdout.puts "="*project.name.size
|
53
|
+
end
|
54
|
+
cumulative_time = 0
|
55
|
+
if sessions.any?
|
56
|
+
sessions_by_date = sessions.group_by(&:start_date)
|
57
|
+
sessions_by_date.keys.sort.each do |date|
|
58
|
+
next if report_date && date != report_date
|
59
|
+
sessions = sessions_by_date[date].sort
|
60
|
+
$stdout.puts " #{date.strftime("%Y-%m-%d")}" unless @config.brief && report_date
|
61
|
+
sessions.each do |session|
|
62
|
+
$stdout.puts " #{session.start_time.strftime("%I:%M %p")} - #{session.duration_in_english}" unless @config.brief
|
63
|
+
cumulative_time += session.duration
|
64
|
+
end
|
65
|
+
$stdout.print " Total:" unless @config.brief && report_date
|
66
|
+
$stdout.puts " #{Session.duration_in_english(sessions.inject(0){|sum,n| sum = sum+n.duration})}"
|
40
67
|
end
|
41
|
-
$stdout.puts "
|
68
|
+
$stdout.puts "Grand Total: #{Session.duration_in_english(cumulative_time)}" unless @config.brief
|
69
|
+
else
|
70
|
+
$stdout.puts " No sessions for this project."
|
42
71
|
end
|
43
|
-
$stdout.puts "Grand Total: #{Session.duration_in_english(cumulative_time)}"
|
44
|
-
else
|
45
|
-
$stdout.puts " No sessions for this project."
|
46
72
|
end
|
47
73
|
end
|
48
74
|
end
|
data/lib/baby-bro/session.rb
CHANGED
@@ -58,7 +58,7 @@ module BabyBro
|
|
58
58
|
end
|
59
59
|
time << "#{time_duration.to_i}s"
|
60
60
|
breakdown = time.join(' ')
|
61
|
-
output = "#{"
|
61
|
+
output = "#{(duration/1.hour).to_i < 10 ? " " : ""}#{"%.2f" % (duration/1.hour)} hours or #{breakdown}"
|
62
62
|
end
|
63
63
|
|
64
64
|
def <=> b
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: baby-bro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 5
|
10
|
+
version: 0.0.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Bill Doughty
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-12-
|
18
|
+
date: 2010-12-08 00:00:00 -06:00
|
19
19
|
default_executable: bro
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|