dailycrap 0.1.0 → 0.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d710740b7a6ac9865abb707ebda3a1ca8c6b3e3a
4
- data.tar.gz: b9d2ba09eddcf0c3877a8f2d267eabf5103ae196
3
+ metadata.gz: 230fd37ad2ef9e336edf480b205b8b093f3f9f5d
4
+ data.tar.gz: e409e455379301f1f329939b7e4c9bfcab9790f1
5
5
  SHA512:
6
- metadata.gz: 7f44c8e249cbd918f6db91249e8d5dce177c7e2df5f024f72c7f68831501c8cf63bab4a2154f721fd46e24f007b5a60706f6da9fe0566d82e73509ac5832bb06
7
- data.tar.gz: 3dd3d7c891ed859992210671247f5fc57327501f3dcf2c5210fc6156d1b3b30744ad962409d2b6383a63d218a9d229ab18efe692804a9e40b050a0afb53c6f52
6
+ metadata.gz: 4dbd1423f6a09079e9bb37299ed052379641e11d4c30fc0d43fbc766af31bcef9cefa1c8f3b2f8db88ebff53b8b53f14c9865ed5f6b2b18a3df563bebaf02bfd
7
+ data.tar.gz: 88fc0b8a14a3dcf0f8029796db0218f718a38c5cef40433075cfc07b5d90310b3aac50bdc3002d0e2c16831ce4687b83f31e6859fb380b920a33f02e898053d9
data/README.md CHANGED
@@ -1,11 +1,11 @@
1
1
  # Dailycrap
2
2
 
3
- Welcome to Dailycrap, the solution to micro management!
4
- Your company is using scrum and force you to do that daily meeting?
5
- Dailycrap is here to generate that daily meeting for you.
6
- Because engineers use automated tools when they can.
3
+ Welcome to Dailycrap, the solution to micro management!
4
+ Your company is using scrum and force you to do that daily meeting?
5
+ Dailycrap is here to generate that daily meeting for you.
6
+ Because engineers use automated tools when they can.
7
7
 
8
- Note: This has been done in a few hours and may have some bugs, feel free to report those
8
+ Note: This has been done in a few hours and may have some bugs, feel free to report those.
9
9
  Expect a lot of breaking changes, it's alpha.
10
10
 
11
11
  ## Installation
@@ -14,10 +14,11 @@ gem install dailycrap
14
14
  ```
15
15
 
16
16
  ## Usage
17
- Dailycrap assumes your in progress PRs/issues have the label "in progress"
18
- It also assumes you are not working on weekends, so Yesterday becomes Friday when you run the script on Monday.
19
- Nothing else should matter
20
- You need a file containing only your github token see https://github.com/settings/tokens
17
+ Dailycrap assumes your in progress PRs/issues have the label "in progress"
18
+ It also assumes you are not working on weekends, so Yesterday becomes Friday when you run the script on Monday.
19
+ You can always use --day '2017-01-01' to specify a specific date (supports formats supported by Date.parse in ruby)
20
+ Nothing else should matter
21
+ You need a file containing only your github token see https://github.com/settings/tokens
21
22
 
22
23
  ```
23
24
  $> dailycrap -h
@@ -25,9 +26,11 @@ $> dailycrap -h
25
26
  -t, --token-file=<s> File containing your github token (https://github.com/settings/tokens)
26
27
  -r, --repository=<s> The repository you are working on
27
28
  -o, --organization=<s> Your organization name
29
+ -d, --day=<s> The day you want to generate a report for (default is yesterday or last friday if monday)
30
+ -e, --edit send generated report to your $EDITOR
28
31
  -h, --help Show this message
29
32
 
30
- $> dailycrap --token-file=.github_token --organization your_github_orgname --repository your_repo
33
+ $> dailycrap --token-file=.github_token --organization your_github_orgname --repository your_repo --edit
31
34
 
32
35
  Yesterday
33
36
  Worked on:
data/exe/dailycrap CHANGED
@@ -3,6 +3,7 @@
3
3
  require 'dailycrap'
4
4
  require 'date'
5
5
  require 'trollop'
6
+ require 'tempfile'
6
7
 
7
8
  opts = Trollop::options do
8
9
  banner <<-EOS
@@ -12,11 +13,23 @@ opts = Trollop::options do
12
13
  opt :token_file, "File containing your github token (https://github.com/settings/tokens)", required: true, type: :string
13
14
  opt :repository, "The repository you are working on", required: true, type: :string
14
15
  opt :organization, "Your organization name", default: nil, type: :string
16
+ opt :day, "The day you want to generate a report for (default is yesterday or last friday if monday)", type: :string
17
+ opt :edit, "Send generated report to your $EDITOR", default: false
15
18
  end
16
19
 
17
20
  crap = Dailycrap::Dailycrap.new(File.read(opts[:token_file]).strip,
18
- date: Date.today.monday? ? Date.today - 3 : Date.today - 1,
21
+ date: opts[:day] ? Date.parse(opts[:day]) : (Date.today.monday? ? Date.today - 3 : Date.today - 1),
19
22
  repo: opts[:repository],
20
23
  organization: opts[:organization])
21
24
 
22
- puts crap.daily
25
+ report = crap.daily
26
+ puts report
27
+
28
+ if opts[:edit]
29
+ file = Tempfile.new('dailycrap')
30
+ file.write(report)
31
+ file.close
32
+ pid = spawn("#{ENV['EDITOR']} #{file.path}")
33
+ Process.wait(pid)
34
+ file.unlink
35
+ end
@@ -1,3 +1,3 @@
1
1
  module Dailycrap
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/lib/dailycrap.rb CHANGED
@@ -23,7 +23,7 @@ module Dailycrap
23
23
  closed_prs = []
24
24
  reviewed_prs = []
25
25
 
26
- in_progress_issues = api_from_date(github.issues) do |iterator|
26
+ in_progress_issues = iterate(github.issues) do |iterator|
27
27
  iterator.list(user: @organization, repo: @repo, state: 'open', labels: 'in progress')
28
28
  end.select{|x| x.assignee.login == @user }.map{|x| x.title}
29
29
 
@@ -54,7 +54,7 @@ module Dailycrap
54
54
 
55
55
  def events(date)
56
56
  events = github.activity.events.performed(@user)
57
- api_at_date(events, date) do |iterator|
57
+ iterate(events, date: date, behavior: :at_date) do |iterator|
58
58
  iterator.body
59
59
  end.select{|x| x.repo.name.split('/').last == @repo}
60
60
  end
@@ -65,22 +65,22 @@ module Dailycrap
65
65
  %Q{
66
66
  #{@date.monday? ? 'Friday' : 'Yesterday'}
67
67
  \tWorked on:
68
- \t\t#{worked_on_prs.map{|x| x[:title]}.join("\n\t\t")}
68
+ \t\t#{worked_on_prs.map{|x| x[:title]}.uniq.join("\n\t\t")}
69
69
 
70
70
  \tClosed:
71
- \t\t#{closed_prs.join("\n\t\t")}
71
+ \t\t#{closed_prs.uniq.join("\n\t\t")}
72
72
 
73
73
  \tReviewed:
74
- \t\t#{reviewed_prs.join("\n\t\t")}
74
+ \t\t#{reviewed_prs.uniq.join("\n\t\t")}
75
75
 
76
76
  Today:
77
77
  \tIn progress:
78
- \t\t#{in_progress.join("\n\t\t")}
78
+ \t\t#{in_progress.uniq.join("\n\t\t")}
79
79
  }.gsub(/^ +/, '')
80
80
  end
81
81
 
82
82
  def pr_from_ref(ref)
83
- prs = api_from_date(github.pull_requests, @date) do |iterator|
83
+ prs = iterate(github.pull_requests, date: @date, behavior: :from_date) do |iterator|
84
84
  iterator.list(user: @organization, repo: @repo, state: 'all')
85
85
  end.map{|x| {ref: x.head.ref, title: x.title, created_at: x.created_at, merged_at: x.merged_at, href: x['_links']['self']['href'] }}
86
86
  prs.find{|x| x[:ref] == ref.gsub('refs/heads/', '')}
@@ -94,7 +94,7 @@ module Dailycrap
94
94
  @_github ||= Github.new oauth_token: @token
95
95
  end
96
96
 
97
- def api_at_date(iterator, date=nil)
97
+ def iterate(iterator, date: nil, behavior: :at_date)
98
98
  total_events = []
99
99
  begin
100
100
  data = yield(iterator)
@@ -102,19 +102,14 @@ module Dailycrap
102
102
  break if date && data.any?{|x| Date.parse(x.updated_at || x.created_at) < date}
103
103
  iterator = iterator.try(:next_page)
104
104
  end while iterator && iterator.has_next_page?
105
- date ? total_events.select{ |x| Date.parse(x.updated_at || x.created_at) == date } : total_events
106
- end
107
-
108
- def api_from_date(iterator, date=nil)
109
- total_events = []
110
- begin
111
- data = yield(iterator)
112
- total_events += data
113
- break if date && data.any?{|x| Date.parse(x.updated_at || x.created_at) < date}
114
- iterator = iterator.try(:next_page)
115
- end while iterator && iterator.has_next_page?
116
- date ? total_events.select{ |x| Date.parse(x.updated_at || x.created_at) >= date } : total_events
105
+ if date
106
+ if behavior == :at_date
107
+ total_events.select!{ |x| Date.parse(x.updated_at || x.created_at) == date }
108
+ elsif behavior == :from_date
109
+ total_events.select!{ |x| Date.parse(x.updated_at || x.created_at) >= date }
110
+ end
111
+ end
112
+ total_events
117
113
  end
118
-
119
114
  end
120
115
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dailycrap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Hagege
@@ -163,7 +163,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
163
  version: '0'
164
164
  requirements: []
165
165
  rubyforge_project:
166
- rubygems_version: 2.4.8
166
+ rubygems_version: 2.5.1
167
167
  signing_key:
168
168
  specification_version: 4
169
169
  summary: A ruby gem for people who prefer tools over meetings. If you hate scrum this