senju 0.3.4 → 0.3.5

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
  SHA256:
3
- metadata.gz: 037c6026f81cee82d50ab61bb124b91d20daaaedf74a976c8673efeb8d1e4f46
4
- data.tar.gz: b159aed23d33d78c257e1eb3e3101a143ca726e01e96bf9086511fed291a0615
3
+ metadata.gz: bc49b90adbca31b1b5abd87f73e36b7f102a17bbb0604019abfbac29c6fb43f3
4
+ data.tar.gz: 78acead080465e4a637bbb8bd249c872499a50b0f54e35e56704819fea273cbf
5
5
  SHA512:
6
- metadata.gz: 2ca451f7959e4b2ed67c4c8511da44f134a9f2d4d1fe3c5110bfa5c7522f3492017b86f5e594da6c97df6e3e1e059cd99ec46462abe9a1700137b687249f105b
7
- data.tar.gz: 95f2470e100144d86ec4ab750afd17e676d48158cd171733bd28a743525b328dc1b9c9122a6d215797c399ccca3badf05997010d00cdc3adba3abaad1411d576
6
+ metadata.gz: 4f2f7906d336c0a6918cda5b66611da23a4955f8239440299776f1d100ea5c3653e6091b18d0140f8271568e2e3ab0ada68000be54ca07252f606f17c05ae998
7
+ data.tar.gz: 24fd3b009b5ef2ac38c3bb28f231d2500cd9583d42f1ab79939d45d3c450bb5a5c17cbdf2fed1c38ca36e6593fac8e50bae3d7cfe6bc59955769a666fc48ba8d
data/README.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # Senju
2
2
 
3
- Issue manager.
3
+ Multi issue management serivces integration platform (CLI)
4
+
5
+ * Github
6
+ * GitLab
7
+ * Trello
4
8
 
5
9
  ## Installation
6
10
 
@@ -20,16 +24,18 @@ Edit `~/.senju/credentials`.
20
24
  <type>: <access token>
21
25
  ```
22
26
 
23
- ### Repositories
27
+ ### Projects
24
28
 
25
- Edit `~/.senju/repos`.
29
+ Edit `~/.senju/projects`.
26
30
 
27
31
  ```
28
- <repository alias>:
29
- repo: <team/repository name>
32
+ <project name>:
33
+ repo: <team/repository>
30
34
  type: <repository type>
31
35
  ```
32
36
 
37
+ or interactively `$ senju add <name>`.
38
+
33
39
  ## Usage
34
40
 
35
41
  All repository issues.
data/exe/senju CHANGED
@@ -1,111 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
2
  require "bundler/setup"
3
3
  require "senju"
4
- require "ap"
5
- require "colorize"
6
- require "tty-markdown"
7
- require "rumoji"
8
-
9
- COLORS = %w{green blue light_blue}
10
-
11
- def link_to(text, url)
12
- "\e]8;;#{url}\e\\#{text}\e]8;;\e\\"
13
- end
14
-
15
- def print_issue(issue)
16
- print link_to("##{issue.no} ".colorize(:blue).bold, issue.url) + issue.title
17
- if issue.labels.length != 0
18
- issue.labels.each do |label|
19
- print " [#{label}]".colorize(:light_blue)
20
- end
21
- end
22
- print "\n"
23
- end
24
-
25
- def color_patch(patch)
26
- patch.split("\n").map do |line|
27
- case line
28
- when /^(---|\+\+\+|\\\\)/
29
- "\033[90m#{line.chomp}\033[0m"
30
- when /^\+/
31
- "\033[32m#{line.chomp}\033[0m"
32
- when /^-/
33
- "\033[31m#{line.chomp}\033[0m"
34
- when /^@@/
35
- "\033[36m#{line.chomp}\033[0m"
36
- else
37
- line.chomp
38
- end
39
- end.join("\n") + "\n"
40
- end
41
-
42
- def exec(repo, command, option)
43
- puts "================= #{repo.name} ====================".colorize(:green).bold
44
-
45
- if command.to_i != 0
46
- issue = repo.issue(command.to_i)
47
- print_issue issue
48
- puts "Opened by #{issue.owner} at #{issue.created_at}"
49
-
50
- puts "\n" + Rumoji.decode(TTY::Markdown.parse(issue.body))
51
-
52
- if option == "-v" || option == "comments"
53
- repo.comments(command.to_i).each do |comment|
54
- #color = COLORS[comment.owner[0].ord % 3]
55
- puts "\nComment: #{comment.owner} at #{comment.created_at}".bold
56
- puts Rumoji.decode(TTY::Markdown.parse(comment.body))
57
- end
58
- elsif option == "diff"
59
- repo.changes(command.to_i).each do |change|
60
- puts "\n#{change.filename}".bold
61
- puts color_patch(change.patch)
62
- end
63
- end
64
-
65
- return
66
- end
67
-
68
- case command
69
- when "issues"
70
- repo.issues.each do |issue|
71
- print_issue(issue)
72
- end
73
- when "mr"
74
- command = option
75
- option = ARGV[3]
76
- issue = repo.pull_request(command.to_i)
77
- print_issue issue
78
- puts "Opened by #{issue.owner} at #{issue.created_at}"
79
-
80
- puts "\n" + Rumoji.decode(TTY::Markdown.parse(issue.body))
81
-
82
- if option == "-v" || option == "comments"
83
- repo.comments(command.to_i).each do |comment|
84
- #color = COLORS[comment.owner[0].ord % 3]
85
- puts "\nComment: #{comment.owner} at #{comment.created_at}".bold
86
- puts Rumoji.decode(TTY::Markdown.parse(comment.body))
87
- end
88
- elsif option == "diff"
89
- repo.changes(command.to_i).each do |change|
90
- puts "\n#{change.filename}".bold
91
- puts color_patch(change.patch)
92
- end
93
- end
94
- when "pr"
95
- repo.pull_requests.each do |issue|
96
- print_issue(issue)
97
- end
98
- end
99
- end
100
-
101
- repo = ARGV[0]
102
- command = ARGV[1] || "issues"
103
- option = ARGV[2]
104
-
105
- if repo
106
- exec(Senju::Repository.find(repo), command, option)
107
- else
108
- Senju::Repository.all.each do |repo|
109
- exec(repo, command, option)
110
- end
111
- end
4
+ require "senju/command"
@@ -1,7 +1,8 @@
1
1
  require "senju/version"
2
2
  require "senju/credentials"
3
- require "senju/repository"
3
+ require "senju/projects"
4
4
 
5
+ require "senju/repository"
5
6
  require "senju/github"
6
7
  require "senju/gitlab"
7
8
  require "senju/trello"
@@ -0,0 +1,97 @@
1
+ require "ap"
2
+ require "colorize"
3
+ require "tty-markdown"
4
+ require "rumoji"
5
+ require "senju/diff"
6
+ require "senju/init"
7
+
8
+ COLORS = %w{green blue light_blue}
9
+
10
+ def link_to(text, url)
11
+ "\e]8;;#{url}\e\\#{text}\e]8;;\e\\"
12
+ end
13
+
14
+ def print_issue(issue)
15
+ print link_to("##{issue.no} ".colorize(:blue).bold, issue.url) + issue.title
16
+ if issue.labels.length != 0
17
+ issue.labels.each do |label|
18
+ print " [#{label}]".colorize(:light_blue)
19
+ end
20
+ end
21
+ print "\n"
22
+ end
23
+
24
+ def exec(repo, command, option)
25
+ puts "================= #{repo.name} ====================".colorize(:green).bold
26
+
27
+ if command.to_i != 0
28
+ issue = repo.issue(command.to_i)
29
+ print_issue issue
30
+ puts "Opened by #{issue.owner} at #{issue.created_at}"
31
+
32
+ puts "\n" + Rumoji.decode(TTY::Markdown.parse(issue.body))
33
+
34
+ if option == "-v" || option == "comments"
35
+ repo.comments(command.to_i).each do |comment|
36
+ #color = COLORS[comment.owner[0].ord % 3]
37
+ puts "\nComment: #{comment.owner} at #{comment.created_at}".bold
38
+ puts Rumoji.decode(TTY::Markdown.parse(comment.body))
39
+ end
40
+ elsif option == "diff"
41
+ repo.changes(command.to_i).each do |change|
42
+ puts "\n#{change.filename}".bold
43
+ puts Senju::Diff.print(change.patch)
44
+ end
45
+ end
46
+
47
+ return
48
+ end
49
+
50
+ case command
51
+ when "issues"
52
+ repo.issues.each do |issue|
53
+ print_issue(issue)
54
+ end
55
+ when "mr"
56
+ command = option
57
+ option = ARGV[3]
58
+ issue = repo.pull_request(command.to_i)
59
+ print_issue issue
60
+ puts "Opened by #{issue.owner} at #{issue.created_at}"
61
+
62
+ puts "\n" + Rumoji.decode(TTY::Markdown.parse(issue.body))
63
+
64
+ if option == "-v" || option == "comments"
65
+ repo.comments(command.to_i).each do |comment|
66
+ #color = COLORS[comment.owner[0].ord % 3]
67
+ puts "\nComment: #{comment.owner} at #{comment.created_at}".bold
68
+ puts Rumoji.decode(TTY::Markdown.parse(comment.body))
69
+ end
70
+ elsif option == "diff"
71
+ repo.changes(command.to_i).each do |change|
72
+ puts "\n#{change.filename}".bold
73
+ puts Senju::Diff.print(change.patch)
74
+ end
75
+ end
76
+ when "pr"
77
+ repo.pull_requests.each do |issue|
78
+ print_issue(issue)
79
+ end
80
+ end
81
+ end
82
+
83
+ repo = ARGV[0]
84
+ command = ARGV[1] || "issues"
85
+ option = ARGV[2]
86
+
87
+ if ARGV[0] == "init"
88
+ Senju.init
89
+ elsif ARGV[0] == "add"
90
+ Senju::Projects.add_interactive(ARGV[1])
91
+ elsif repo
92
+ exec(Senju::Repository.find(repo), command, option)
93
+ else
94
+ Senju::Repository.all.each do |repo|
95
+ exec(repo, command, option)
96
+ end
97
+ end
@@ -0,0 +1,18 @@
1
+ class Senju::Diff
2
+ def self.print(patch)
3
+ patch.split("\n").map do |line|
4
+ case line
5
+ when /^(---|\+\+\+|\\\\)/
6
+ "\033[90m#{line.chomp}\033[0m"
7
+ when /^\+/
8
+ "\033[32m#{line.chomp}\033[0m"
9
+ when /^-/
10
+ "\033[31m#{line.chomp}\033[0m"
11
+ when /^@@/
12
+ "\033[36m#{line.chomp}\033[0m"
13
+ else
14
+ line.chomp
15
+ end
16
+ end.join("\n") + "\n"
17
+ end
18
+ end
@@ -2,9 +2,15 @@ require 'gitlab'
2
2
  class Senju::Gitlab
3
3
  attr_reader :client
4
4
 
5
- def initialize(access_token, endpoint = nil)
6
- endpoint ||= "https://gitlab.com/api/v4"
7
- @client = Gitlab.client(endpoint: endpoint, private_token: access_token)
5
+ def initialize(access_token_or_hash)
6
+ if access_token_or_hash.is_a? Hash
7
+ options = access_token_or_hash
8
+ endpoint ||= "https://#{options["host"]}/api/v4"
9
+ @client = Gitlab.client(endpoint: endpoint, private_token: options["token"])
10
+ else
11
+ endpoint ||= "https://gitlab.com/api/v4"
12
+ @client = Gitlab.client(endpoint: endpoint, private_token: access_token)
13
+ end
8
14
  end
9
15
 
10
16
  def method_missing(method, *args, &block)
@@ -0,0 +1,6 @@
1
+ module Senju
2
+ def self.init
3
+ Dir.mkdir Dir.home + "/.senju"
4
+ puts "Create ~/.senju directory".colorize(:green)
5
+ end
6
+ end
@@ -0,0 +1,47 @@
1
+ require 'yaml'
2
+ class Senju::Projects
3
+ PATH = Dir.home + '/.senju/projects'
4
+
5
+ def self.load
6
+ if File.exist? PATH
7
+ @data = YAML.load_file(PATH)
8
+ else
9
+ @data = {}
10
+ end
11
+ end
12
+
13
+ def self.write
14
+ YAML.dump(@data, File.open(PATH, 'w'))
15
+ end
16
+
17
+ def self.data
18
+ self.load
19
+ end
20
+
21
+ def self.[](conf)
22
+ data[conf]
23
+ end
24
+
25
+ def self.[]=(name, table)
26
+ data[name] = table
27
+ end
28
+
29
+ def self.add_interactive(name)
30
+ print "Repository type [github, gitlab, trello]: "
31
+
32
+ type = STDIN.gets.chomp
33
+ case type
34
+ when "github", "gitlab"
35
+ print "Repository path (team/repository): "
36
+ repo = STDIN.gets.chomp
37
+ when "trello"
38
+ print "board id (like aBcDeF1234): "
39
+ repo = STDIN.gets.chomp
40
+ end
41
+
42
+ self[name] = { "repo" => repo, "type" => type }
43
+ write
44
+
45
+ print "Senju project add successfly.\n".colorize(:green)
46
+ end
47
+ end
@@ -1,21 +1,8 @@
1
- require 'yaml'
2
- class Senju::Repos
3
- attr_reader :data
4
- def initialize(filepath = nil)
5
- filepath ||= Dir.home + '/.senju/repos'
6
- @data = YAML.load_file(filepath)
7
- end
8
-
9
- def [](conf)
10
- @data[conf]
11
- end
12
- end
13
-
14
1
  class Senju::Repository
15
2
  attr_reader :name, :options, :type
16
3
 
17
4
  def self.all
18
- Senju::Repos.new.data.map do |repository, config|
5
+ Senju::Projects.data.map do |repository, config|
19
6
  new(repository, config)
20
7
  end
21
8
  end
@@ -25,7 +12,7 @@ class Senju::Repository
25
12
  end
26
13
 
27
14
  def self.find(name)
28
- new(name, Senju::Repos.new[name])
15
+ new(name, Senju::Projects[name])
29
16
  end
30
17
 
31
18
  def initialize(name, options)
@@ -1,3 +1,3 @@
1
1
  module Senju
2
- VERSION = "0.3.4"
2
+ VERSION = "0.3.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: senju
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Akira SUENAMI
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-01-05 00:00:00.000000000 Z
11
+ date: 2019-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: octokit
@@ -169,11 +169,15 @@ files:
169
169
  - exe/senju
170
170
  - lib/senju.rb
171
171
  - lib/senju/change.rb
172
+ - lib/senju/command.rb
172
173
  - lib/senju/comment.rb
173
174
  - lib/senju/credentials.rb
175
+ - lib/senju/diff.rb
174
176
  - lib/senju/github.rb
175
177
  - lib/senju/gitlab.rb
178
+ - lib/senju/init.rb
176
179
  - lib/senju/issue.rb
180
+ - lib/senju/projects.rb
177
181
  - lib/senju/repository.rb
178
182
  - lib/senju/trello.rb
179
183
  - lib/senju/version.rb
@@ -198,7 +202,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
198
202
  version: '0'
199
203
  requirements: []
200
204
  rubyforge_project:
201
- rubygems_version: 2.7.6
205
+ rubygems_version: 2.7.7
202
206
  signing_key:
203
207
  specification_version: 4
204
208
  summary: Transparent wrapper of some task management and collabolation tools.