herodot 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 01a3b43aff308c8da024870cb12c96fb19b1dbb7
4
- data.tar.gz: 534a1faf059dada2df482fcc3a7a8f7ea28e1ea9
3
+ metadata.gz: 29a451b50c5b14cc6e2f1acf802439ce7755932f
4
+ data.tar.gz: 510e67c25f443cfe889fc5f8b754d3c519dd0b42
5
5
  SHA512:
6
- metadata.gz: 1fd244e8f79a85020fbfcc7809acefeb17b7ddd3af8918e89719a960b3d60b6d041b4250036630353c19a9879242db09d2930255c3aaee8c9aeb532eed0d6a22
7
- data.tar.gz: 6789ce7512930e6deefb6f9484de39ae52cd658b64bd1f64b042ddcdbe56a5ce3713aa0727d48380d0203ad481e7101c3db9d472c8dd08a1eca75c7d0987df23
6
+ metadata.gz: c3040f3a6f6f29870e5a7f0ceb4993f644919be1e81774b6822a51d7187dd829510763a159bc9096c28390bc51960c1c2e021cbb3ee46922753cabb1251a9270
7
+ data.tar.gz: 76cd7068583335589940f231424fefe727439cea68073e46bf49961a1bb35259e34da07483666fe4a2ca0e5faf82ffe38726f025d31d354942a8eb3ce24087fa
@@ -1,5 +1,6 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
+ - 2.0.0
4
5
  - 2.3.3
5
6
  before_install: gem install bundler -v 1.14.4
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Herodot
2
2
 
3
+ [![Build Status](https://travis-ci.org/bitcrowd/herodot.svg?branch=master)](https://travis-ci.org/bitcrowd/herodot)
4
+
3
5
  Tracks your work based on git branch checkouts and commits. With herodot every time you switch branches or commit into a branch,
4
6
  the brach name, time and project is logged into a worklog file. Herodot can then parse that worklog file and show you a *rough
5
7
  estimate* on which branch in which folder you worked on and how long. This can aid you with your personal time tracking.
@@ -35,6 +37,11 @@ Show worklogs from 19-12-2016
35
37
 
36
38
  Herodot uses Chronic (https://github.com/mojombo/chronic) under the hood so you can enter anything that chronic supports.
37
39
 
40
+ Instead of a terminal table you can also output into the `json` format:
41
+
42
+ $ herodot show -f json
43
+ $ herodot show -f json last week
44
+ $ herodot show --format json last week
38
45
 
39
46
  Show Help:
40
47
 
@@ -5,7 +5,7 @@ require_relative 'herodot/configuration'
5
5
  require_relative 'herodot/worklog'
6
6
  require_relative 'herodot/parser'
7
7
  require_relative 'herodot/commands'
8
- require_relative 'herodot/table'
8
+ require_relative 'herodot/output'
9
9
 
10
10
  class Herodot::Application
11
11
  include Commander::Methods
@@ -45,9 +45,10 @@ class Herodot::Application
45
45
  c.syntax = 'herodot show [<time range>]'
46
46
  c.summary = 'Shows worklogs'
47
47
  c.description = SHOW_DESCRIPTION
48
+ c.option '--format FORMAT', String, 'Uses specific output format (Supported: json)'
48
49
  show_command_examples(c)
49
- c.action do |args, _options|
50
- Herodot::Commands.show(args, config)
50
+ c.action do |args, options|
51
+ Herodot::Commands.show(args, config, options)
51
52
  end
52
53
  end
53
54
  end
@@ -57,5 +58,7 @@ class Herodot::Application
57
58
  c.example 'Shows last weeks worklogs', 'herodot show last week'
58
59
  c.example 'Shows worklogs for last monday', 'herodot show monday'
59
60
  c.example 'Shows worklogs for 12-12-2016', 'herodot show 12-12-2016'
61
+ c.example 'Shows last weeks worklogs as json', 'herodot show --format json last week'
62
+ c.example 'Shows last weeks worklogs as json (short)', 'herodot show -f json last week'
60
63
  end
61
64
  end
@@ -9,12 +9,12 @@ class Herodot::Commands
9
9
  'echo "$(date);$project;$branch" >> ~/worklog'.freeze
10
10
  DEFAULT_RANGE = 'this week'.freeze
11
11
 
12
- def self.show(args, config)
12
+ def self.show(args, config, opts = {})
13
13
  subject = args.empty? ? DEFAULT_RANGE : args.join(' ')
14
14
  range = Chronic.parse(subject, guess: false, context: :past)
15
15
  abort "Date not parsable: #{args.join(' ')}" unless range
16
16
  worklog = Herodot::Parser.parse(range, config)
17
- output = Herodot::Table.print(worklog.totals)
17
+ output = Herodot::Output.print(worklog.totals, opts)
18
18
  puts output
19
19
  end
20
20
 
@@ -1,6 +1,7 @@
1
1
  require 'terminal-table'
2
+ require 'json'
2
3
 
3
- class Herodot::Table
4
+ class Herodot::Output
4
5
  HEADERS = %w(Project Branch Time).freeze
5
6
  EMPTY_WORKLOG_MESSAGE = Rainbow('Not enough entries in the worklog.').red +
6
7
  ' On a tracked repository `git checkout`'\
@@ -16,7 +17,19 @@ class Herodot::Table
16
17
  "#{hours}:#{minutes.to_s.rjust(2, '0')}:#{seconds.to_s.rjust(2, '0')}"
17
18
  end
18
19
 
19
- def print(worklogs_totals_per_day)
20
+ def print(worklogs_totals_per_day, opts)
21
+ return convert_format(worklogs_totals_per_day, opts.format) if opts.format
22
+ print_table(worklogs_totals_per_day)
23
+ end
24
+
25
+ def convert_format(worklogs_totals_per_day, format)
26
+ case format
27
+ when 'json'
28
+ worklogs_totals_per_day.to_json
29
+ end
30
+ end
31
+
32
+ def print_table(worklogs_totals_per_day)
20
33
  abort EMPTY_WORKLOG_MESSAGE if worklogs_totals_per_day.empty?
21
34
  Terminal::Table.new(headings: HEADERS) do |table|
22
35
  worklogs_totals_per_day.each do |date, times|
@@ -8,11 +8,7 @@ class Herodot::Parser
8
8
  def parse(range, config)
9
9
  worklog = Herodot::Worklog.new(config)
10
10
  from, to = from_to_from_range(range)
11
- CSV.foreach(config.worklog_file, col_sep: ';') do |row|
12
- next if row[2] == 'HEAD'
13
- time = Time.parse(row[0])
14
- worklog.add_entry(time, row[1], row[2]) if time >= from && time <= to
15
- end
11
+ parse_into_worklog(worklog, config.worklog_file, from, to)
16
12
  worklog
17
13
  rescue Errno::ENOENT
18
14
  abort NO_SUCH_FILE
@@ -22,5 +18,15 @@ class Herodot::Parser
22
18
  return [range, Time.now] unless range.respond_to?(:begin) && range.respond_to?(:end)
23
19
  [range.begin, range.end + 3600]
24
20
  end
21
+
22
+ private
23
+
24
+ def parse_into_worklog(worklog, file, from, to)
25
+ CSV.foreach(file, col_sep: ';') do |row|
26
+ next if row[2] == 'HEAD'
27
+ time = Time.parse(row[0])
28
+ worklog.add_entry(time, row[1], row[2]) if time >= from && time <= to
29
+ end
30
+ end
25
31
  end
26
32
  end
@@ -1,3 +1,3 @@
1
1
  module Herodot
2
- VERSION = '0.1.7'.freeze
2
+ VERSION = '0.1.8'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: herodot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - bitcrowd
@@ -174,8 +174,8 @@ files:
174
174
  - lib/herodot.rb
175
175
  - lib/herodot/commands.rb
176
176
  - lib/herodot/configuration.rb
177
+ - lib/herodot/output.rb
177
178
  - lib/herodot/parser.rb
178
- - lib/herodot/table.rb
179
179
  - lib/herodot/version.rb
180
180
  - lib/herodot/worklog.rb
181
181
  - post-checkout