senju 0.3.4 → 0.3.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.
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.