telegram-scrum-bot 0.0.2 → 0.0.3
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 +4 -4
- data/Gemfile +1 -1
- data/Gemfile.lock +3 -20
- data/icon-scrum-bot.jpg +0 -0
- data/lib/telegram-bot/bot.rb +19 -11
- data/lib/telegram-bot/github_wrapper.rb +105 -0
- data/lib/telegram-bot/trello.rb +28 -22
- data/lib/telegram-bot/version.rb +2 -1
- data/telegram-scrum-bot.gemspec +1 -1
- metadata +4 -4
- data/lib/telegram-bot/github.rb +0 -45
- data/lib/telegram-bot/issue.rb +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 55d492159378ef10e11e36f11e618f8763ec3af1a51ea2774f85b3ad74a82584
|
4
|
+
data.tar.gz: 1ca6b9b4b58995ea9027fffef2e8754bfe340a2e8808385b05b4c56b1fe55c41
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d4e0be2e9d9feef0f9008b5f36a019f998cb1624357c83823b7882c53b900ac7fd45a9a409a7fe57b776ecf65cc6a2fd67016317028104adf1b91c1c0472c4e6
|
7
|
+
data.tar.gz: a9cee0655c365abd6d7d2f0ca51eb443ca87ce56f5907783f4cc0404c9deb60b5378759247394922b5d48a88e656215c1ba5543dcbe3dc67ba600531ff22b6f3
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -24,39 +24,22 @@ GEM
|
|
24
24
|
unf (>= 0.0.5, < 1.0.0)
|
25
25
|
equalizer (0.0.11)
|
26
26
|
excon (0.62.0)
|
27
|
-
faraday (0.12.2)
|
28
|
-
multipart-post (>= 1.2, < 3)
|
29
|
-
github_api (0.18.2)
|
30
|
-
addressable (~> 2.4)
|
31
|
-
descendants_tracker (~> 0.0.4)
|
32
|
-
faraday (~> 0.8)
|
33
|
-
hashie (~> 3.5, >= 3.5.2)
|
34
|
-
oauth2 (~> 1.0)
|
35
|
-
hashie (3.6.0)
|
36
27
|
http-cookie (1.0.3)
|
37
28
|
domain_name (~> 0.5)
|
29
|
+
httparty (0.16.2)
|
30
|
+
multi_xml (>= 0.5.2)
|
38
31
|
i18n (1.1.0)
|
39
32
|
concurrent-ruby (~> 1.0)
|
40
33
|
ice_nine (0.11.2)
|
41
34
|
json (2.1.0)
|
42
|
-
jwt (1.5.6)
|
43
35
|
mime-types (3.2.2)
|
44
36
|
mime-types-data (~> 3.2015)
|
45
37
|
mime-types-data (3.2018.0812)
|
46
38
|
minitest (5.11.3)
|
47
|
-
multi_json (1.13.1)
|
48
39
|
multi_xml (0.6.0)
|
49
|
-
multipart-post (2.0.0)
|
50
40
|
netrc (0.11.0)
|
51
41
|
oauth (0.5.4)
|
52
|
-
oauth2 (1.4.0)
|
53
|
-
faraday (>= 0.8, < 0.13)
|
54
|
-
jwt (~> 1.0)
|
55
|
-
multi_json (~> 1.3)
|
56
|
-
multi_xml (~> 0.5)
|
57
|
-
rack (>= 1.2, < 3)
|
58
42
|
public_suffix (3.0.3)
|
59
|
-
rack (2.0.5)
|
60
43
|
rest-client (2.0.2)
|
61
44
|
http-cookie (>= 1.0.2, < 2.0)
|
62
45
|
mime-types (>= 1.16, < 4.0)
|
@@ -99,7 +82,7 @@ PLATFORMS
|
|
99
82
|
ruby
|
100
83
|
|
101
84
|
DEPENDENCIES
|
102
|
-
|
85
|
+
httparty (~> 0.16.2)
|
103
86
|
rspec (~> 3.8)
|
104
87
|
ruby-trello (~> 2.1)
|
105
88
|
telegram_bot (~> 0.0.8)
|
data/icon-scrum-bot.jpg
ADDED
Binary file
|
data/lib/telegram-bot/bot.rb
CHANGED
@@ -2,7 +2,7 @@ require 'yaml'
|
|
2
2
|
require 'telegram_bot'
|
3
3
|
require 'logger'
|
4
4
|
|
5
|
-
require_relative '
|
5
|
+
require_relative 'github_wrapper'
|
6
6
|
require_relative 'trello'
|
7
7
|
|
8
8
|
module TelegramBot
|
@@ -122,16 +122,23 @@ module TelegramBot
|
|
122
122
|
elsif @github_repository.empty?
|
123
123
|
message = "Debe indicar el repositorio de Github, puede hacerlo con /setgithubrepository"
|
124
124
|
else
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
125
|
+
begin
|
126
|
+
github = GitHubWrapper::Repository.find(username: @github_username,
|
127
|
+
repository: @github_repository)
|
128
|
+
|
129
|
+
message = "Incidentes registrados en: @#{github.username}/#{github.repository}:\n\n"
|
130
|
+
github.get_issues(state: 'open').each do |issue|
|
131
|
+
if issue.instance_of?(GitHubWrapper::Issue)
|
132
|
+
message << " issue ##{issue.number}\n #{issue.title}\n"
|
133
|
+
message << " -----\n\n"
|
134
|
+
else
|
135
|
+
message << issue
|
136
|
+
end
|
134
137
|
end
|
138
|
+
rescue TypeError => e
|
139
|
+
message << "User/Repository not found: #{e}"
|
140
|
+
rescue StandardError => e
|
141
|
+
message << "Error: #{e}"
|
135
142
|
end
|
136
143
|
end
|
137
144
|
{
|
@@ -147,7 +154,8 @@ module TelegramBot
|
|
147
154
|
elsif github_repository.empty?
|
148
155
|
message = "Debe indicar el repositorio de Github, puede hacerlo con /setgithubrepository"
|
149
156
|
else
|
150
|
-
trello = TelegramBot::TrelloConnector.new(username: @github_username,
|
157
|
+
trello = TelegramBot::TrelloConnector.new(username: @github_username,
|
158
|
+
repository: @github_repository)
|
151
159
|
message = trello.show_statistics
|
152
160
|
end
|
153
161
|
{
|
@@ -0,0 +1,105 @@
|
|
1
|
+
module TelegramBot
|
2
|
+
module GitHubWrapper
|
3
|
+
require 'httparty'
|
4
|
+
class Repository
|
5
|
+
include HTTParty
|
6
|
+
|
7
|
+
base_uri("https://api.github.com/repos")
|
8
|
+
@@headers = {
|
9
|
+
'User-Agent': 'telegram-scrum-bot'
|
10
|
+
}
|
11
|
+
|
12
|
+
attr_reader :username, :repository, :description, :private_repo, :issues
|
13
|
+
|
14
|
+
def initialize(username:, repository:, description:, private_repo:)
|
15
|
+
@username = username
|
16
|
+
@repository = repository
|
17
|
+
@description = description
|
18
|
+
@private_repo = private_repo
|
19
|
+
@issues = []
|
20
|
+
end
|
21
|
+
|
22
|
+
alias_method :private?, :private_repo
|
23
|
+
|
24
|
+
# Returns the issues from a public repository
|
25
|
+
def get_issues(state: 'all', sort: "created", order_direction: 'asc')
|
26
|
+
query = {
|
27
|
+
"state" => state,
|
28
|
+
"sort" => sort,
|
29
|
+
"direction" => order_direction
|
30
|
+
}
|
31
|
+
|
32
|
+
response = self.class.get("/#{@username}/#{@repository}/issues",
|
33
|
+
headers: @@headers,
|
34
|
+
query: query)
|
35
|
+
|
36
|
+
if response.success?
|
37
|
+
JSON.parse(response.body).each do |issue|
|
38
|
+
@issues << Issue.new(id: issue.fetch('id', ''),
|
39
|
+
number: issue.fetch('number', ''),
|
40
|
+
title: issue.fetch('title', ''),
|
41
|
+
body: issue.fetch('body', ''),
|
42
|
+
state: issue.fetch('state', ''),
|
43
|
+
url: issue.fetch('url', ''))
|
44
|
+
end
|
45
|
+
else
|
46
|
+
raise response.response
|
47
|
+
end
|
48
|
+
@issues
|
49
|
+
end
|
50
|
+
|
51
|
+
# Find a particular repository
|
52
|
+
def self.find(username:, repository:)
|
53
|
+
response = get("/#{username}/#{repository}",
|
54
|
+
headers: @@headers)
|
55
|
+
|
56
|
+
if response.success?
|
57
|
+
self.new(username: username,
|
58
|
+
repository: repository,
|
59
|
+
description: response.fetch("description", ""),
|
60
|
+
private_repo: response.fetch("private", ""))
|
61
|
+
else
|
62
|
+
raise response.response
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
class Issue
|
68
|
+
attr_accessor :id, :number, :title, :body, :state, :url
|
69
|
+
|
70
|
+
def initialize(id:, number:, title:, body:, state:, url:)
|
71
|
+
self.id = id
|
72
|
+
self.number = number
|
73
|
+
self.title = title
|
74
|
+
self.body = body
|
75
|
+
self.state = state
|
76
|
+
self.url = url
|
77
|
+
end
|
78
|
+
|
79
|
+
def to_s
|
80
|
+
"issue: #{id}\n" +
|
81
|
+
"number: #{number}\n" +
|
82
|
+
"title: #{title}\n" +
|
83
|
+
"body: #{body}\n" +
|
84
|
+
"state: #{state}\n" +
|
85
|
+
"url: #{url}\n"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
if __FILE__ == $0
|
92
|
+
begin
|
93
|
+
github = TelegramBot::GitHubWrapper::Repository.find(username: 'hackvan', repository: 'telegram-bot')
|
94
|
+
puts "repository: #{github.username}/#{github.repository}"
|
95
|
+
puts "private repo: #{github.private?}"
|
96
|
+
github.get_issues(state: "open").each do |issue|
|
97
|
+
puts issue
|
98
|
+
puts "-" * 80
|
99
|
+
end
|
100
|
+
rescue TypeError => e
|
101
|
+
puts "User/Repository not found: #{e}"
|
102
|
+
rescue StandardError => e
|
103
|
+
puts "Error: #{e}"
|
104
|
+
end
|
105
|
+
end
|
data/lib/telegram-bot/trello.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
module TelegramBot
|
2
2
|
require 'trello'
|
3
3
|
|
4
|
-
@@
|
5
|
-
@@trello_member_token
|
4
|
+
@@trello_dev_public_key = ''
|
5
|
+
@@trello_member_token = ''
|
6
6
|
|
7
7
|
def self.set_trello_tokens(key, token)
|
8
|
-
@@
|
9
|
-
@@trello_member_token
|
8
|
+
@@trello_dev_public_key = key
|
9
|
+
@@trello_member_token = token
|
10
10
|
|
11
11
|
Trello.configure do |config|
|
12
|
-
config.developer_public_key = @@
|
13
|
-
config.member_token
|
12
|
+
config.developer_public_key = @@trello_dev_public_key
|
13
|
+
config.member_token = @@trello_member_token
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -27,10 +27,9 @@ module TelegramBot
|
|
27
27
|
@board_name = @github_repository.split(/[-_]/i).map(&:capitalize).join(' ')
|
28
28
|
|
29
29
|
@board = find_or_create_board_by_name
|
30
|
-
create_scrum_lists
|
31
|
-
close_default_lists
|
32
|
-
|
33
|
-
populate_issues_cards!
|
30
|
+
create_scrum_lists(@board)
|
31
|
+
close_default_lists(@board)
|
32
|
+
populate_issues_cards
|
34
33
|
end
|
35
34
|
|
36
35
|
def show_statistics
|
@@ -58,7 +57,7 @@ module TelegramBot
|
|
58
57
|
@board.lists.detect { |list| list.name =~ /backlog/i }
|
59
58
|
end
|
60
59
|
|
61
|
-
def create_scrum_lists
|
60
|
+
def create_scrum_lists(board)
|
62
61
|
LIST_NAMES.reverse.each do |name, index|
|
63
62
|
list = board.lists.detect { |list| list.name =~ /#{name}/i }
|
64
63
|
unless list
|
@@ -69,7 +68,7 @@ module TelegramBot
|
|
69
68
|
self
|
70
69
|
end
|
71
70
|
|
72
|
-
def close_default_lists
|
71
|
+
def close_default_lists(board)
|
73
72
|
board.lists.each do |list|
|
74
73
|
unless LIST_NAMES.include?(list.name)
|
75
74
|
list.update_fields(closed: true)
|
@@ -78,23 +77,30 @@ module TelegramBot
|
|
78
77
|
end
|
79
78
|
end
|
80
79
|
|
81
|
-
def archive_existing_cards
|
80
|
+
def archive_existing_cards
|
82
81
|
find_backlog_list.archive_all_cards
|
83
82
|
end
|
84
83
|
|
85
|
-
def populate_issues_cards
|
84
|
+
def populate_issues_cards
|
86
85
|
backlog_list = find_backlog_list
|
87
86
|
if backlog_list
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
87
|
+
begin
|
88
|
+
github = GitHubWrapper::Repository.find(username: @github_username,
|
89
|
+
repository: @github_repository)
|
90
|
+
github.get_issues(state: 'open').each do |issue|
|
91
|
+
if issue.instance_of?(GitHubWrapper::Issue)
|
92
|
+
card = backlog_list.cards.detect { |c| c.name =~ /^##{issue.number}\s[-]/i }
|
92
93
|
|
93
|
-
|
94
|
-
|
95
|
-
|
94
|
+
unless card
|
95
|
+
Trello::Card.create(name: "##{issue.number} - #{issue.title}", desc: issue.body, list_id: backlog_list.id)
|
96
|
+
@statistics[:cards_created] += 1
|
97
|
+
end
|
96
98
|
end
|
97
99
|
end
|
100
|
+
rescue TypeError => e
|
101
|
+
puts "User/Repository not found: #{e}"
|
102
|
+
rescue StandardError => e
|
103
|
+
puts "Error: #{e}"
|
98
104
|
end
|
99
105
|
end
|
100
106
|
self
|
@@ -104,7 +110,7 @@ end
|
|
104
110
|
|
105
111
|
if __FILE__ == $0
|
106
112
|
require 'yaml'
|
107
|
-
require_relative '
|
113
|
+
require_relative 'github_wrapper'
|
108
114
|
config = YAML.load_file("./config/secrets.yml")
|
109
115
|
TelegramBot.set_trello_tokens(config['trello']['key'], config['trello']['token'])
|
110
116
|
trello = TelegramBot::TrelloConnector.new(username: 'hackvan', repository: 'telegram-bot')
|
data/lib/telegram-bot/version.rb
CHANGED
data/telegram-scrum-bot.gemspec
CHANGED
@@ -4,7 +4,7 @@ require "telegram-bot/version"
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = 'telegram-scrum-bot'
|
7
|
-
spec.date =
|
7
|
+
spec.date = TelegramBot::RELEASE_DATE
|
8
8
|
spec.version = TelegramBot::VERSION
|
9
9
|
spec.authors = ["Diego Camacho"]
|
10
10
|
spec.email = 'hackvan@gmail.com'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: telegram-scrum-bot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Diego Camacho
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-10-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: telegram_bot
|
@@ -95,10 +95,10 @@ files:
|
|
95
95
|
- bin/console
|
96
96
|
- bin/setup
|
97
97
|
- exe/telegram-scrum-bot
|
98
|
+
- icon-scrum-bot.jpg
|
98
99
|
- lib/telegram-bot.rb
|
99
100
|
- lib/telegram-bot/bot.rb
|
100
|
-
- lib/telegram-bot/
|
101
|
-
- lib/telegram-bot/issue.rb
|
101
|
+
- lib/telegram-bot/github_wrapper.rb
|
102
102
|
- lib/telegram-bot/trello.rb
|
103
103
|
- lib/telegram-bot/version.rb
|
104
104
|
- telegram-scrum-bot.gemspec
|
data/lib/telegram-bot/github.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
require 'github_api'
|
2
|
-
require_relative 'issue'
|
3
|
-
|
4
|
-
module TelegramBot
|
5
|
-
class GitHubConnector
|
6
|
-
attr_reader :github_object, :username, :repository, :issues_list
|
7
|
-
|
8
|
-
def initialize(username:, repository:)
|
9
|
-
@github_object = Github.new
|
10
|
-
@username = username
|
11
|
-
@repository = repository
|
12
|
-
@issues_list = []
|
13
|
-
end
|
14
|
-
|
15
|
-
def get_issues(state: 'open', order_mode: 'asc')
|
16
|
-
begin
|
17
|
-
issues = @github_object.issues.list user: @username,
|
18
|
-
repo: @repository,
|
19
|
-
state: state,
|
20
|
-
sort: 'created',
|
21
|
-
direction: order_mode
|
22
|
-
issues.each do |issue|
|
23
|
-
@issues_list << Issue.new(id: issue.id,
|
24
|
-
number: issue.number,
|
25
|
-
title: issue.title,
|
26
|
-
body: issue.body,
|
27
|
-
state: issue.state,
|
28
|
-
url: issue.url)
|
29
|
-
end
|
30
|
-
rescue Github::Error::NotFound => exception
|
31
|
-
@issues_list << "Usuario/Repositorio no encontrado"
|
32
|
-
end
|
33
|
-
@issues_list
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
if __FILE__ == $0
|
39
|
-
github = TelegramBot::GitHubConnector.new(username: 'hackvan', repository: 'telegram-bot')
|
40
|
-
github.get_issues(state: 'all').each do |issue|
|
41
|
-
puts issue
|
42
|
-
puts "-" * 80
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
data/lib/telegram-bot/issue.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
module TelegramBot
|
2
|
-
class Issue
|
3
|
-
attr_accessor :id, :number, :title, :body, :state, :url
|
4
|
-
|
5
|
-
def initialize(id:, number:, title:, body:, state:, url:)
|
6
|
-
@id = id
|
7
|
-
@number = number
|
8
|
-
@title = title
|
9
|
-
@body = body
|
10
|
-
@state = state
|
11
|
-
@url = url
|
12
|
-
end
|
13
|
-
|
14
|
-
def to_s
|
15
|
-
"issue: #{@id}\n" +
|
16
|
-
"number: #{@number}\n" +
|
17
|
-
"title: #{@title}\n" +
|
18
|
-
"body: #{@body}\n" +
|
19
|
-
"state: #{@state}\n" +
|
20
|
-
"url: #{@url}\n"
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|