lita-gitlab-interactive 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ script: bundle exec rake
5
+ before_install:
6
+ - gem update --system
7
+ services:
8
+ - redis-server
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
@@ -0,0 +1,22 @@
1
+ # lita-gitlab-interactive
2
+
3
+ [![Build Status](https://travis-ci.org/natesholland/lita-gitlab-interactive.png?branch=master)](https://travis-ci.org/natesholland/lita-gitlab-interactive)
4
+ [![Coverage Status](https://coveralls.io/repos/natesholland/lita-gitlab-interactive/badge.png)](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.
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
@@ -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
@@ -0,0 +1,4 @@
1
+ en:
2
+ lita:
3
+ handlers:
4
+ gitlab_interactive:
@@ -0,0 +1,4 @@
1
+ require "spec_helper"
2
+
3
+ describe Lita::Handlers::GitlabInteractive, lita_handler: true do
4
+ end
@@ -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
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