takoyaki 0.1.0 → 0.2.0

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: 61de62f7f98364a4f3f5d3dd4c474dc360e46a7d
4
- data.tar.gz: 754603899b5cee7ce7cbdc80bd82ac70164665dc
3
+ metadata.gz: 36c2edab1e5af30b43fdf1d3b020dee7e669459b
4
+ data.tar.gz: e3568adb6a590097df7b62ea4b548cf1de014146
5
5
  SHA512:
6
- metadata.gz: 22e923d8a8f030dc27e92a676823e4d539778bbb9f946295a1677e313f6a46b516586b4b60bb5d7421efbc7dc067451cc3da6308f68fb569d4cd7e82cb66618f
7
- data.tar.gz: 69d199b6e4191ca498068c0478cd0186502fbbbea190b5bcf248ea79078e3e5cf7732edaf178cd11164e742519892208ed1488744cae8731eeffadebf19aeec2
6
+ metadata.gz: ecbaab0d3f6e4f83c3183144d701f8f7302fa466590227846059ba25d9f747708dd2be31797e74f247166f1dffde1226b0adff94a55678d9832443605efa2bd1
7
+ data.tar.gz: 72ce3ed7bf8a2d92db17b72576e776fc55674628f683220ab532e94feec8f8cc1e6ebe71b033362e0219473aa8062d7ca72a89155b12ae846beb825ec90c1030
data/.rubocop.yml CHANGED
@@ -71,3 +71,7 @@ Style/StringLiterals:
71
71
 
72
72
  Style/TrailingCommaInLiteral:
73
73
  Enabled: false
74
+
75
+ ######## Metrics ########
76
+ Metrics/LineLength:
77
+ Max: 100
data/README.md CHANGED
@@ -21,12 +21,17 @@ repositories:
21
21
  - repo4
22
22
  ```
23
23
 
24
- Run `tkyk` command:
25
-
24
+ ### Activities
26
25
  ```bash
27
26
  $ tkyk activities
28
27
  ```
29
28
 
29
+ ### Code Reviews
30
+ ```bash
31
+ $ tkyk reviews # only your reviews
32
+ $ tkyk reviews all # all open pull requests
33
+ ```
34
+
30
35
  ## Contributing
31
36
 
32
37
  Bug reports and pull requests are welcome on GitHub at https://github.com/nownabe/takoyaki.
@@ -54,6 +54,8 @@ module Takoyaki
54
54
  end
55
55
  end
56
56
 
57
+ private
58
+
57
59
  def client
58
60
  @client ||= Octokit::Client.new(access_token: config["access_token"])
59
61
  end
@@ -0,0 +1,88 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Takoyaki
4
+ module Commands
5
+ class Reviews
6
+ attr_reader :target
7
+
8
+ def initialize(target = nil)
9
+ @target = target
10
+ end
11
+
12
+ def execute
13
+ output
14
+ end
15
+
16
+ private
17
+
18
+ def client
19
+ @client ||= Octokit::Client.new(access_token: config["access_token"])
20
+ end
21
+
22
+ def config
23
+ @config ||= YAML.load_file(File.expand_path("~/.takoyaki.yaml"))
24
+ end
25
+
26
+ def filtered_reviews
27
+ @filtered_reviews ||=
28
+ reviews.each_with_object({}) do |(repo, prs), obj|
29
+ obj[repo] = prs.keep_if { |pr| pr[:reviewers].include?(user) }
30
+ end
31
+ end
32
+
33
+ def generate_pull_request_hash(pr)
34
+ reviewers = pr.assignees.map(&:login).delete_if { |u| u == pr.user.login }
35
+ {
36
+ number: pr.number,
37
+ title: pr.title,
38
+ author: pr.user.login,
39
+ reviewers: reviewers,
40
+ created_at: pr.created_at.getlocal.strftime("%Y-%m-%d"),
41
+ url: pr.html_url
42
+ }
43
+ end
44
+ alias pr_hash generate_pull_request_hash
45
+
46
+ def only_me?
47
+ target != "all"
48
+ end
49
+
50
+ def fetch_pull_requests(repository)
51
+ client.pull_requests(repository, state: "open")
52
+ end
53
+ alias fetch_pr fetch_pull_requests
54
+
55
+ def format_pull_request(pr)
56
+ "- [##{pr[:number]} #{pr[:title]}](#{pr[:url]}) " \
57
+ "from #{pr[:created_at]}, " \
58
+ "reviewes: #{pr[:reviewers].join(', ')}"
59
+ end
60
+ alias format_pr format_pull_request
61
+
62
+ def output
63
+ output_reviews = only_me? ? filtered_reviews : reviews
64
+ output_reviews.each do |repo, prs|
65
+ puts "### #{repo}"
66
+ prs.each { |pr| puts format_pr(pr) }
67
+ end
68
+ end
69
+
70
+ def repositories
71
+ config["repositories"].map do |org, repos|
72
+ repos.map { |repo| "#{org}/#{repo}" }
73
+ end.flatten
74
+ end
75
+
76
+ def reviews
77
+ @reviews ||=
78
+ repositories.each_with_object({}) do |repo, obj|
79
+ obj[repo] = fetch_pr(repo).map { |pr| pr_hash(pr) }
80
+ end
81
+ end
82
+
83
+ def user
84
+ client.user.login
85
+ end
86
+ end
87
+ end
88
+ end
@@ -6,3 +6,4 @@ module Takoyaki
6
6
  end
7
7
 
8
8
  require "takoyaki/commands/activities"
9
+ require "takoyaki/commands/reviews"
@@ -19,6 +19,8 @@ module Takoyaki
19
19
  case command
20
20
  when "activities"
21
21
  Commands::Activities.new.execute
22
+ when "reviews"
23
+ Commands::Reviews.new(*args[1..-1]).execute
22
24
  end
23
25
  end
24
26
 
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Takoyaki
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: takoyaki
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - nownabe
@@ -104,6 +104,7 @@ files:
104
104
  - lib/takoyaki.rb
105
105
  - lib/takoyaki/commands.rb
106
106
  - lib/takoyaki/commands/activities.rb
107
+ - lib/takoyaki/commands/reviews.rb
107
108
  - lib/takoyaki/runner.rb
108
109
  - lib/takoyaki/version.rb
109
110
  - takoyaki.gemspec