lita-gitlab-interactive 0.1.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 +7 -0
- data/.gitignore +17 -0
- data/.travis.yml +8 -0
- data/Gemfile +3 -0
- data/README.md +22 -0
- data/Rakefile +6 -0
- data/lib/lita-gitlab-interactive.rb +12 -0
- data/lib/lita/handlers/gitlab_interactive.rb +142 -0
- data/lita-gitlab-interactive.gemspec +26 -0
- data/locales/en.yml +4 -0
- data/spec/lita/handlers/gitlab_interactive_spec.rb +4 -0
- data/spec/spec_helper.rb +14 -0
- data/templates/.gitkeep +0 -0
- metadata +171 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f18796cc0eebfd90b5d1e30421893e7b32b51aed
|
4
|
+
data.tar.gz: 080ee42766017943205901aa2308e2e0db9991fd
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f3715b97b6ccdfa56c5239d3251fe1243739d31ee10b1d9522f5166e5e7ece30a0ee61702901289794a37f27d177c89c3291eae8fbe45b05a3db6e30b5ceedc6
|
7
|
+
data.tar.gz: b19959721b7a732181979d2e225d0463680d8ab13271aa4e34013937e723a8f3b01c5edf53eca5e029ae2019e82c2768f4ff0e1209c6815eb85004cc4caf5832
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# lita-gitlab-interactive
|
2
|
+
|
3
|
+
[](https://travis-ci.org/natesholland/lita-gitlab-interactive)
|
4
|
+
[](https://coveralls.io/r/natesholland/lita-gitlab-interactive)
|
5
|
+
|
6
|
+
TODO: Add a description of the plugin.
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
Add lita-gitlab-interactive to your Lita instance's Gemfile:
|
11
|
+
|
12
|
+
``` ruby
|
13
|
+
gem "lita-gitlab-interactive"
|
14
|
+
```
|
15
|
+
|
16
|
+
## Configuration
|
17
|
+
|
18
|
+
TODO: Describe any configuration attributes the plugin exposes.
|
19
|
+
|
20
|
+
## Usage
|
21
|
+
|
22
|
+
TODO: Describe the plugin's features and how to use them.
|
data/Rakefile
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require "lita"
|
2
|
+
|
3
|
+
Lita.load_locales Dir[File.expand_path(
|
4
|
+
File.join("..", "..", "locales", "*.yml"), __FILE__
|
5
|
+
)]
|
6
|
+
|
7
|
+
require "lita/handlers/gitlab_interactive"
|
8
|
+
|
9
|
+
# Lita::Handlers::GitlabInteractive.template_root File.expand_path(
|
10
|
+
# File.join("..", "..", "templates"),
|
11
|
+
# __FILE__
|
12
|
+
#)
|
@@ -0,0 +1,142 @@
|
|
1
|
+
require 'uri'
|
2
|
+
|
3
|
+
module Lita
|
4
|
+
module Handlers
|
5
|
+
class GitlabInteractive < Handler
|
6
|
+
|
7
|
+
config :token
|
8
|
+
config :host
|
9
|
+
|
10
|
+
route(/(?:gl|issue)\s?\#?(\d+)/i, :get_default_issue, command: false, help: {
|
11
|
+
'issue|gl #<issue number>' => 'looks up the issue for the default project in a room'
|
12
|
+
})
|
13
|
+
|
14
|
+
route(/(?:gl|merge request)\s?!(\d+)/i, :get_default_mr, command: false, help: {
|
15
|
+
'merge request|gl #<merge request number>' => 'looks up the merge request for the default project in a room'
|
16
|
+
})
|
17
|
+
|
18
|
+
route(/(?:gl|sha)\s?\$(.+)/i, :get_default_sha, command: false, help: {
|
19
|
+
'sha|gl $<merge request number>' => 'looks up the merge request for the default project in a room'
|
20
|
+
})
|
21
|
+
|
22
|
+
route(/(?:gl|issue)\s+(.*\/.*)\s+\#?(\d+)/i, :get_project_issue, command: true, help: {
|
23
|
+
'gl <namespace/project> #<issue number>' => 'looks up the issue for a names project'
|
24
|
+
})
|
25
|
+
|
26
|
+
route(/(?:gl|issue)\\s+set\s+(.*\/.*)/i, :set_default_project, command: true, help: {
|
27
|
+
'gl set <namespace/project>' => 'Sets the default project for a room.'
|
28
|
+
})
|
29
|
+
|
30
|
+
route(/(?:gl|issue)\ what is the default project/i, :get_default_project, command: true, help: {
|
31
|
+
'gl what is the default project' => 'returns what the default project for this room is'
|
32
|
+
})
|
33
|
+
|
34
|
+
def get_project_issue(response)
|
35
|
+
project_id = get_project_id_from_path(response.matches[0][0])
|
36
|
+
project = get_project_from_id(project_id)
|
37
|
+
issue = get_issue_of_project(project_id, response.matches[0][1])
|
38
|
+
response.reply "##{issue['iid']}: #{issue['title']} #{project['web_url']}/issues/#{issue['iid']}"
|
39
|
+
end
|
40
|
+
|
41
|
+
def get_project_id_from_path(path)
|
42
|
+
id = get_project_id(path)
|
43
|
+
return id if id
|
44
|
+
connection = Faraday.new config.host, :ssl => {:verify => false}
|
45
|
+
project_response = connection.get do |req|
|
46
|
+
req.url '/api/v3/projects/' + path.gsub('/', '%2F')
|
47
|
+
req.headers['PRIVATE-TOKEN'] = config.token
|
48
|
+
end
|
49
|
+
hash = JSON.parse(project_response.body)
|
50
|
+
id = hash["id"]
|
51
|
+
set_project_id(path, id)
|
52
|
+
id
|
53
|
+
end
|
54
|
+
|
55
|
+
def get_mr_of_project(project_id, mr_id)
|
56
|
+
connection = Faraday.new config.host, :ssl => {:verify => false}
|
57
|
+
project_response = connection.get do |req|
|
58
|
+
req.url '/api/v3/projects/' + project_id.to_s + '/merge_requests?iid=' + mr_id
|
59
|
+
req.headers['PRIVATE-TOKEN'] = config.token
|
60
|
+
end
|
61
|
+
hash = JSON.parse(project_response.body)
|
62
|
+
hash[0]
|
63
|
+
end
|
64
|
+
|
65
|
+
def get_sha_of_project(project_id, sha)
|
66
|
+
connection = Faraday.new config.host, :ssl => {:verify => false}
|
67
|
+
project_response = connection.get do |req|
|
68
|
+
req.url '/api/v3/projects/' + project_id.to_s + '/repository/commits/' +sha
|
69
|
+
req.headers['PRIVATE-TOKEN'] = config.token
|
70
|
+
end
|
71
|
+
hash = JSON.parse(project_response.body)
|
72
|
+
end
|
73
|
+
|
74
|
+
def get_issue_of_project(project_id, issue_id)
|
75
|
+
connection = Faraday.new config.host, :ssl => {:verify => false}
|
76
|
+
project_response = connection.get do |req|
|
77
|
+
req.url '/api/v3/projects/' + project_id.to_s + '/issues?iid=' + issue_id
|
78
|
+
req.headers['PRIVATE-TOKEN'] = config.token
|
79
|
+
end
|
80
|
+
hash = JSON.parse(project_response.body)
|
81
|
+
hash[0]
|
82
|
+
end
|
83
|
+
|
84
|
+
def get_project_from_id(project_id)
|
85
|
+
connection = Faraday.new config.host, :ssl => {:verify => false}
|
86
|
+
project_response = connection.get do |req|
|
87
|
+
req.url '/api/v3/projects/' + project_id.to_s
|
88
|
+
req.headers['PRIVATE-TOKEN'] = config.token
|
89
|
+
end
|
90
|
+
hash = JSON.parse(project_response.body)
|
91
|
+
hash
|
92
|
+
end
|
93
|
+
|
94
|
+
def set_project_id(project, id)
|
95
|
+
redis.set(project, id)
|
96
|
+
end
|
97
|
+
|
98
|
+
def get_project_id(project)
|
99
|
+
redis.get(project)
|
100
|
+
end
|
101
|
+
|
102
|
+
def set_default_project(response)
|
103
|
+
project_id = get_project_id_from_path(response.matches[0][0])
|
104
|
+
room = response.message.source.room
|
105
|
+
redis.set("default_room:#{room}", project_id)
|
106
|
+
response.reply("OK I've made #{response.matches[0][0]} the default project")
|
107
|
+
end
|
108
|
+
|
109
|
+
def get_default_project(response)
|
110
|
+
room = response.message.source.room
|
111
|
+
project_id = redis.get("default_room:#{room}")
|
112
|
+
project = get_project_from_id(project_id)
|
113
|
+
response.reply project['name_with_namespace']
|
114
|
+
end
|
115
|
+
|
116
|
+
def get_default_issue(response)
|
117
|
+
room = response.message.source.room
|
118
|
+
project_id = redis.get("default_room:#{room}")
|
119
|
+
issue = get_issue_of_project(project_id, response.matches[0][0])
|
120
|
+
project = get_project_from_id(project_id)
|
121
|
+
response.reply "##{issue['iid']}: #{issue['title']} #{project['web_url']}/issues/#{issue['iid']}"
|
122
|
+
end
|
123
|
+
|
124
|
+
def get_default_mr(response)
|
125
|
+
room = response.message.source.room
|
126
|
+
project_id = redis.get("default_room:#{room}")
|
127
|
+
mr = get_mr_of_project(project_id, response.matches[0][0])
|
128
|
+
project = get_project_from_id(project_id)
|
129
|
+
response.reply "##{mr['iid']}: #{mr['title']}: #{mr['state']} #{project['web_url']}/merge_requests/#{mr['iid']}"
|
130
|
+
end
|
131
|
+
|
132
|
+
def get_default_sha(response)
|
133
|
+
room = response.message.source.room
|
134
|
+
project_id = redis.get("default_room:#{room}")
|
135
|
+
sha = get_sha_of_project(project_id, response.matches[0][0])
|
136
|
+
project = get_project_from_id(project_id)
|
137
|
+
response.reply "##{sha['id']}: #{sha['author_name']}\n#{sha['message']}#{project['web_url']}/commit/#{sha['id']}"
|
138
|
+
end
|
139
|
+
end
|
140
|
+
Lita.register_handler(GitlabInteractive)
|
141
|
+
end
|
142
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
Gem::Specification.new do |spec|
|
2
|
+
spec.name = "lita-gitlab-interactive"
|
3
|
+
spec.version = "0.1.0"
|
4
|
+
spec.authors = ["Nate Holland"]
|
5
|
+
spec.email = ["nateh@spiceworks.com"]
|
6
|
+
spec.description = "A way to interact with gitlab through lita."
|
7
|
+
spec.summary = "A way to interact with gitlab through lita."
|
8
|
+
spec.homepage = "https://github.com/natesholland/lita-gitlab-interactive"
|
9
|
+
spec.license = "MIT"
|
10
|
+
spec.metadata = { "lita_plugin_type" => "handler" }
|
11
|
+
|
12
|
+
spec.files = `git ls-files`.split($/)
|
13
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
14
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
15
|
+
spec.require_paths = ["lib"]
|
16
|
+
|
17
|
+
spec.add_runtime_dependency "lita", ">= 4.0"
|
18
|
+
|
19
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
20
|
+
spec.add_development_dependency "pry-byebug"
|
21
|
+
spec.add_development_dependency "rake"
|
22
|
+
spec.add_development_dependency "rack-test"
|
23
|
+
spec.add_development_dependency "rspec", ">= 3.0.0"
|
24
|
+
spec.add_development_dependency "simplecov"
|
25
|
+
spec.add_development_dependency "coveralls"
|
26
|
+
end
|
data/locales/en.yml
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require "simplecov"
|
2
|
+
require "coveralls"
|
3
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
4
|
+
SimpleCov::Formatter::HTMLFormatter,
|
5
|
+
Coveralls::SimpleCov::Formatter
|
6
|
+
]
|
7
|
+
SimpleCov.start { add_filter "/spec/" }
|
8
|
+
|
9
|
+
require "lita-gitlab-interactive"
|
10
|
+
require "lita/rspec"
|
11
|
+
|
12
|
+
# A compatibility mode is provided for older plugins upgrading from Lita 3. Since this plugin
|
13
|
+
# was generated with Lita 4, the compatibility mode should be left disabled.
|
14
|
+
Lita.version_3_compatibility_mode = false
|
data/templates/.gitkeep
ADDED
File without changes
|
metadata
ADDED
@@ -0,0 +1,171 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: lita-gitlab-interactive
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Nate Holland
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-06-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: lita
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.3'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry-byebug
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rack-test
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 3.0.0
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 3.0.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: simplecov
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: coveralls
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description: A way to interact with gitlab through lita.
|
126
|
+
email:
|
127
|
+
- nateh@spiceworks.com
|
128
|
+
executables: []
|
129
|
+
extensions: []
|
130
|
+
extra_rdoc_files: []
|
131
|
+
files:
|
132
|
+
- ".gitignore"
|
133
|
+
- ".travis.yml"
|
134
|
+
- Gemfile
|
135
|
+
- README.md
|
136
|
+
- Rakefile
|
137
|
+
- lib/lita-gitlab-interactive.rb
|
138
|
+
- lib/lita/handlers/gitlab_interactive.rb
|
139
|
+
- lita-gitlab-interactive.gemspec
|
140
|
+
- locales/en.yml
|
141
|
+
- spec/lita/handlers/gitlab_interactive_spec.rb
|
142
|
+
- spec/spec_helper.rb
|
143
|
+
- templates/.gitkeep
|
144
|
+
homepage: https://github.com/natesholland/lita-gitlab-interactive
|
145
|
+
licenses:
|
146
|
+
- MIT
|
147
|
+
metadata:
|
148
|
+
lita_plugin_type: handler
|
149
|
+
post_install_message:
|
150
|
+
rdoc_options: []
|
151
|
+
require_paths:
|
152
|
+
- lib
|
153
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
154
|
+
requirements:
|
155
|
+
- - ">="
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
|
+
requirements:
|
160
|
+
- - ">="
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: '0'
|
163
|
+
requirements: []
|
164
|
+
rubyforge_project:
|
165
|
+
rubygems_version: 2.4.8
|
166
|
+
signing_key:
|
167
|
+
specification_version: 4
|
168
|
+
summary: A way to interact with gitlab through lita.
|
169
|
+
test_files:
|
170
|
+
- spec/lita/handlers/gitlab_interactive_spec.rb
|
171
|
+
- spec/spec_helper.rb
|