lita-deploygate 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 477a51d7644b360d5cf0dbf25f20745ad017d3bd
4
+ data.tar.gz: 9a2003bfed68731cc1820ce86d2fd73deacb9bc1
5
+ SHA512:
6
+ metadata.gz: a6b32a9bdcd887642b0a541e96953700a2f1390837ceef6dab775e0c3da1723b782550fea380d0dbeb0342d2fb5441108b1ad0827a1a7a6ddd10a05514e31613
7
+ data.tar.gz: 3bd7e9f3086be31a0428b8b7a6c6bd493b7c12c7b0ad3c7ce5885a16a34237933a660575e4747b84af842e1e7c8613c8ed8b6ac5eadae51fb507c0cde62b9348
data/.gitignore ADDED
@@ -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
data/.rubocop.yml ADDED
@@ -0,0 +1,17 @@
1
+ ClassLength:
2
+ Max: 400
3
+
4
+ CyclomaticComplexity:
5
+ Max: 10
6
+
7
+ Documentation:
8
+ Enabled: false
9
+
10
+ FileName:
11
+ Enabled: false
12
+
13
+ LineLength:
14
+ Max: 105
15
+
16
+ MethodLength:
17
+ Max: 30
data/.travis.yml ADDED
@@ -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/CONTRIBUTING.md ADDED
@@ -0,0 +1,9 @@
1
+ Pull requests are awesome! Pull requests with tests are even more awesome!
2
+
3
+ ## Quick steps
4
+
5
+ 1. Fork the repo.
6
+ 2. Run the tests: `bundle && rake`
7
+ 3. Add a test for your change. Only refactoring and documentation changes require no new tests. If you are adding functionality or fixing a bug, it needs a test!
8
+ 4. Make the test pass.
9
+ 5. Push to your fork and submit a pull request.
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2014 Eric Sigler
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,57 @@
1
+ # lita-deploygate
2
+
3
+ [![Build Status](https://img.shields.io/travis/esigler/lita-deploygate/master.svg)](https://travis-ci.org/esigler/lita-deploygate)
4
+ [![MIT License](https://img.shields.io/badge/license-MIT-brightgreen.svg)](https://tldrlegal.com/license/mit-license)
5
+ [![RubyGems :: RMuh Gem Version](http://img.shields.io/gem/v/lita-deploygate.svg)](https://rubygems.org/gems/lita-deploygate)
6
+ [![Coveralls Coverage](https://img.shields.io/coveralls/esigler/lita-deploygate/master.svg)](https://coveralls.io/r/esigler/lita-deploygate)
7
+ [![Code Climate](https://img.shields.io/codeclimate/github/esigler/lita-deploygate.svg)](https://codeclimate.com/github/esigler/lita-deploygate)
8
+ [![Gemnasium](https://img.shields.io/gemnasium/esigler/lita-deploygate.svg)](https://gemnasium.com/esigler/lita-deploygate)
9
+
10
+ DeployGate (http://deploygate.com) handler for inviting and removing application collaborators.
11
+
12
+ ## Installation
13
+
14
+ Add lita-deploygate to your Lita instance's Gemfile:
15
+
16
+ ``` ruby
17
+ gem "lita-deploygate"
18
+ ```
19
+
20
+ ## Configuration
21
+
22
+ You'll need to get an API key, which you can find at the bottom of this page: https://deploygate.com/settings
23
+
24
+ Add the following variables to your Lita config file:
25
+ ``` ruby
26
+ config.handlers.deploygate.user_name = '_user_name_here_'
27
+ config.handlers.deploygate.api_key = '_api_key_here_'
28
+ config.handlers.deploygate.app_names = { 'ios' => 'platforms/ios/apps/com.yourappname.YourAppName',
29
+ 'android' => 'apps/com.yourappname.android',
30
+ 'short_name' => 'path component' }
31
+ ```
32
+
33
+ Apologies for the odd syntax, DeployGate has slightly different behavior for iOS vs. Android. You'll need to determine which URL path your app is using.
34
+
35
+ ## Usage
36
+
37
+ ### Inviting users
38
+
39
+ ```
40
+ deploygate add <username or email> <short name> - Add <username or email> to <short name>
41
+ ```
42
+
43
+ ### Removing users
44
+
45
+ ```
46
+ deploygate remove <username or email> <short name> - Remove <username or email> from <short name>
47
+ ```
48
+
49
+ ### Listing Users
50
+
51
+ ```
52
+ deploygate list <short name> - List all users associated with <short name>
53
+ ```
54
+
55
+ ## License
56
+
57
+ [MIT](http://opensource.org/licenses/MIT)
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+ require 'rubocop/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new(:spec)
6
+ Rubocop::RakeTask.new(:rubocop)
7
+
8
+ task default: [ :spec, :rubocop ]
@@ -0,0 +1,136 @@
1
+ module Lita
2
+ module Handlers
3
+ class Deploygate < Handler
4
+ route(
5
+ /^(deploygate|dg)\sadd\s(\S+)\s(\S+)$/,
6
+ :add,
7
+ command: true,
8
+ help: {
9
+ 'deploygate add <username or email> <short name>' =>
10
+ 'Add <username or email> to <short name>'
11
+ }
12
+ )
13
+
14
+ route(
15
+ /^(deploygate|dg)\sremove\s(\S+)\s(\S+)$/,
16
+ :remove,
17
+ command: true,
18
+ help: {
19
+ 'deploygate remove <username or email> <short name>' =>
20
+ 'Remove <username or email> from <short name>'
21
+ }
22
+ )
23
+
24
+ route(
25
+ /^(deploygate|dg)\slist\s(\S+)$/,
26
+ :list,
27
+ command: true,
28
+ help: {
29
+ 'deploygate list <short name>' =>
30
+ 'List all users associated with <short name>'
31
+ }
32
+ )
33
+
34
+ def self.default_config(config)
35
+ config.user_name = nil
36
+ config.api_key = nil
37
+ config.default_app_id = nil
38
+ end
39
+
40
+ def add(response)
41
+ short_name = response.matches[0][2]
42
+ user_identifier = response.matches[0][1]
43
+ if valid_app_name?(short_name)
44
+ result = api_request('post',
45
+ "/#{app_path(short_name)}/members",
46
+ 'users' => "[#{user_identifier}]")
47
+ if result
48
+ response.reply("#{short_name}: #{user_identifier} added")
49
+ else
50
+ response.reply('There was an error making the request to DeployGate')
51
+ end
52
+ else
53
+ response.reply("#{short_name}: unknown application name")
54
+ end
55
+ end
56
+
57
+ def remove(response)
58
+ short_name = response.matches[0][2]
59
+ user_identifier = response.matches[0][1]
60
+ if valid_app_name?(short_name)
61
+ result = api_request('delete',
62
+ "/#{app_path(short_name)}/members",
63
+ 'users' => "[#{user_identifier}]")
64
+ if result
65
+ response.reply("#{short_name}: #{user_identifier} removed")
66
+ else
67
+ response.reply('There was an error making the request to DeployGate')
68
+ end
69
+ else
70
+ response.reply("#{short_name}: unknown application name")
71
+ end
72
+ end
73
+
74
+ def list(response)
75
+ short_name = response.matches[0][1]
76
+ if valid_app_name?(short_name)
77
+ result = api_request('get', "/#{app_path(short_name)}/members")
78
+ if result
79
+ users = result['results']['users']
80
+ if users.count > 0
81
+ users.each do |user|
82
+ response.reply("#{short_name}: #{user['name']}, role: #{user['role']}")
83
+ end
84
+ else
85
+ response.reply("#{short_name}: No users")
86
+ end
87
+ else
88
+ response.reply('There was an error making the request to DeployGate')
89
+ end
90
+ else
91
+ response.reply("#{short_name}: unknown application name")
92
+ end
93
+ end
94
+
95
+ private
96
+
97
+ def valid_app_name?(name)
98
+ Lita.config.handlers.deploygate.app_names.key?(name)
99
+ end
100
+
101
+ def app_path(name)
102
+ Lita.config.handlers.deploygate.app_names[name]
103
+ end
104
+
105
+ def api_request(method, component, args = {})
106
+ if Lita.config.handlers.deploygate.user_name.nil? ||
107
+ Lita.config.handlers.deploygate.api_key.nil?
108
+ Lita.logger.error('Missing API key or Page ID for Deploygate')
109
+ fail 'Missing config'
110
+ end
111
+
112
+ url = "https://deploygate.com/api/users/" \
113
+ "#{Lita.config.handlers.deploygate.user_name}" \
114
+ "#{component}"
115
+
116
+ args['token'] = Lita.config.handlers.deploygate.api_key
117
+
118
+ http_response = http.send(method) do |req|
119
+ req.url url, args
120
+ end
121
+
122
+ if http_response.status == 200 ||
123
+ http_response.status == 201
124
+ MultiJson.load(http_response.body)
125
+ else
126
+ Lita.logger.error("HTTP #{method} for #{url} with #{args} " \
127
+ "returned #{http_response.status}")
128
+ Lita.logger.error(http_response.body)
129
+ nil
130
+ end
131
+ end
132
+ end
133
+
134
+ Lita.register_handler(Deploygate)
135
+ end
136
+ end
@@ -0,0 +1,9 @@
1
+ require 'lita'
2
+
3
+ Lita.load_locales Dir[File.expand_path(
4
+ File.join('..', '..', 'locales', '*.yml'), __FILE__
5
+ )]
6
+
7
+ require 'lita/handlers/deploygate'
8
+
9
+ require 'multi_json'
@@ -0,0 +1,26 @@
1
+ Gem::Specification.new do |spec|
2
+ spec.name = 'lita-deploygate'
3
+ spec.version = '0.1.0'
4
+ spec.authors = ['Eric Sigler']
5
+ spec.email = ['me@esigler.com']
6
+ spec.description = %q{Add, remove members to Deploygate releases}
7
+ spec.summary = %q{Add, remove members to Deploygate releases}
8
+ spec.homepage = 'http://github.com/esigler/lita-deploygate'
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', '>= 3.1'
18
+ spec.add_runtime_dependency 'multi_json'
19
+
20
+ spec.add_development_dependency 'bundler', '~> 1.3'
21
+ spec.add_development_dependency 'coveralls'
22
+ spec.add_development_dependency 'rake'
23
+ spec.add_development_dependency 'rspec', '>= 3.0.0.beta2'
24
+ spec.add_development_dependency 'rubocop'
25
+ spec.add_development_dependency 'simplecov'
26
+ end
data/locales/en.yml ADDED
@@ -0,0 +1,4 @@
1
+ en:
2
+ lita:
3
+ handlers:
4
+ deploygate:
@@ -0,0 +1 @@
1
+ {"error":false,"results":{"invite":"member invite success"}}
@@ -0,0 +1 @@
1
+ {"error":false,"results":{"usage":{"used":0,"max":1000},"users":[]}}
@@ -0,0 +1 @@
1
+ {"error":false,"results":{"usage":{"used":1,"max":1000},"users":[{"name":"username","role":1}]}}
@@ -0,0 +1 @@
1
+ {"error":false,"results":{"invite":"member remove success"}}
@@ -0,0 +1,141 @@
1
+ require 'spec_helper'
2
+
3
+ describe Lita::Handlers::Deploygate, lita_handler: true do
4
+ let(:members_empty) do
5
+ File.read('spec/files/members_empty.json')
6
+ end
7
+
8
+ let(:members_full) do
9
+ File.read('spec/files/members_full.json')
10
+ end
11
+
12
+ let(:members_add) do
13
+ File.read('spec/files/members_add.json')
14
+ end
15
+
16
+ let(:members_remove) do
17
+ File.read('spec/files/members_remove.json')
18
+ end
19
+
20
+ it { routes_command('deploygate add username abc123').to(:add) }
21
+ it { routes_command('deploygate add foo@example.com abc123').to(:add) }
22
+ it { routes_command('deploygate remove username abc123').to(:remove) }
23
+ it { routes_command('deploygate remove foo@example.com abc123').to(:remove) }
24
+ it { routes_command('deploygate list abc123').to(:list) }
25
+ it { routes_command('dg add username abc123').to(:add) }
26
+ it { routes_command('dg remove username abc123').to(:remove) }
27
+ it { routes_command('dg list abc123').to(:list) }
28
+
29
+ describe '.default_config' do
30
+ it 'sets user_name to nil' do
31
+ expect(Lita.config.handlers.deploygate.user_name).to be_nil
32
+ end
33
+
34
+ it 'sets api_key to nil' do
35
+ expect(Lita.config.handlers.deploygate.api_key).to be_nil
36
+ end
37
+
38
+ it 'sets app_names to nil' do
39
+ expect(Lita.config.handlers.deploygate.app_names).to be_nil
40
+ end
41
+ end
42
+
43
+ describe 'without valid config' do
44
+ it 'errors out on any command' do
45
+ Lita.config.handlers.deploygate.app_names = { 'abc123' => 'path/to/places' }
46
+ expect { send_command('dg list abc123') }.to raise_error('Missing config')
47
+ end
48
+ end
49
+
50
+ describe 'with valid config' do
51
+ before do
52
+ Lita.config.handlers.deploygate.user_name = 'foo'
53
+ Lita.config.handlers.deploygate.api_key = 'bar'
54
+ Lita.config.handlers.deploygate.app_names = { 'abc123' => 'path/to/places' }
55
+ end
56
+
57
+ describe '#add' do
58
+ it 'shows an ack when a username is added' do
59
+ response = double('Faraday::Response', status: 200, body: members_add)
60
+ expect_any_instance_of(Faraday::Connection).to receive(:post).once.and_return(response)
61
+ send_command('deploygate add username abc123')
62
+ expect(replies.last).to eq('abc123: username added')
63
+ end
64
+
65
+ it 'shows an ack when an email is added' do
66
+ response = double('Faraday::Response', status: 200, body: members_add)
67
+ expect_any_instance_of(Faraday::Connection).to receive(:post).once.and_return(response)
68
+ send_command('deploygate add foo@example.com abc123')
69
+ expect(replies.last).to eq('abc123: foo@example.com added')
70
+ end
71
+
72
+ it 'shows a warning if the short name does not exist when adding someone' do
73
+ send_command('deploygate add username doesnotexist')
74
+ expect(replies.last).to eq('doesnotexist: unknown application name')
75
+ end
76
+
77
+ it 'shows an error if there was an issue adding someone' do
78
+ response = double('Faraday::Response', status: 500, body: nil)
79
+ expect_any_instance_of(Faraday::Connection).to receive(:post).once.and_return(response)
80
+ send_command('deploygate add username abc123')
81
+ expect(replies.last).to eq('There was an error making the request to DeployGate')
82
+ end
83
+ end
84
+
85
+ describe '#remove' do
86
+ it 'shows an ack when a username is removed' do
87
+ response = double('Faraday::Response', status: 200, body: members_remove)
88
+ expect_any_instance_of(Faraday::Connection).to receive(:delete).once.and_return(response)
89
+ send_command('deploygate remove username abc123')
90
+ expect(replies.last).to eq('abc123: username removed')
91
+ end
92
+
93
+ it 'shows an ack when an email is removed' do
94
+ response = double('Faraday::Response', status: 200, body: members_remove)
95
+ expect_any_instance_of(Faraday::Connection).to receive(:delete).once.and_return(response)
96
+ send_command('deploygate remove foo@example.com abc123')
97
+ expect(replies.last).to eq('abc123: foo@example.com removed')
98
+ end
99
+
100
+ it 'shows a warning if the short name does not exist when removing someone' do
101
+ send_command('deploygate remove username doesnotexist')
102
+ expect(replies.last).to eq('doesnotexist: unknown application name')
103
+ end
104
+
105
+ it 'shows an error if there was an issue removing someone' do
106
+ response = double('Faraday::Response', status: 500, body: nil)
107
+ expect_any_instance_of(Faraday::Connection).to receive(:delete).once.and_return(response)
108
+ send_command('deploygate remove username abc123')
109
+ expect(replies.last).to eq('There was an error making the request to DeployGate')
110
+ end
111
+ end
112
+
113
+ describe '#list' do
114
+ it 'shows a list of users when there are any' do
115
+ response = double('Faraday::Response', status: 200, body: members_full)
116
+ expect_any_instance_of(Faraday::Connection).to receive(:get).once.and_return(response)
117
+ send_command('deploygate list abc123')
118
+ expect(replies.last).to eq('abc123: username, role: 1')
119
+ end
120
+
121
+ it 'shows an empty list of users when there arent any' do
122
+ response = double('Faraday::Response', status: 200, body: members_empty)
123
+ expect_any_instance_of(Faraday::Connection).to receive(:get).once.and_return(response)
124
+ send_command('deploygate list abc123')
125
+ expect(replies.last).to eq('abc123: No users')
126
+ end
127
+
128
+ it 'shows a warning if the short name does not exist when listing' do
129
+ send_command('deploygate list doesnotexist')
130
+ expect(replies.last).to eq('doesnotexist: unknown application name')
131
+ end
132
+
133
+ it 'shows an error if there was an issue listing users' do
134
+ response = double('Faraday::Response', status: 500, body: nil)
135
+ expect_any_instance_of(Faraday::Connection).to receive(:get).once.and_return(response)
136
+ send_command('deploygate list abc123')
137
+ expect(replies.last).to eq('There was an error making the request to DeployGate')
138
+ end
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,10 @@
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-deploygate'
10
+ require 'lita/rspec'
metadata ADDED
@@ -0,0 +1,181 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lita-deploygate
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Eric Sigler
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-04-12 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: '3.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '3.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: multi_json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: coveralls
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: rake
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.beta2
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.beta2
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
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: simplecov
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: Add, remove members to Deploygate releases
126
+ email:
127
+ - me@esigler.com
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - ".gitignore"
133
+ - ".rubocop.yml"
134
+ - ".travis.yml"
135
+ - CONTRIBUTING.md
136
+ - Gemfile
137
+ - LICENSE
138
+ - README.md
139
+ - Rakefile
140
+ - lib/lita-deploygate.rb
141
+ - lib/lita/handlers/deploygate.rb
142
+ - lita-deploygate.gemspec
143
+ - locales/en.yml
144
+ - spec/files/members_add.json
145
+ - spec/files/members_empty.json
146
+ - spec/files/members_full.json
147
+ - spec/files/members_remove.json
148
+ - spec/lita/handlers/deploygate_spec.rb
149
+ - spec/spec_helper.rb
150
+ homepage: http://github.com/esigler/lita-deploygate
151
+ licenses:
152
+ - MIT
153
+ metadata:
154
+ lita_plugin_type: handler
155
+ post_install_message:
156
+ rdoc_options: []
157
+ require_paths:
158
+ - lib
159
+ required_ruby_version: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ required_rubygems_version: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
169
+ requirements: []
170
+ rubyforge_project:
171
+ rubygems_version: 2.2.1
172
+ signing_key:
173
+ specification_version: 4
174
+ summary: Add, remove members to Deploygate releases
175
+ test_files:
176
+ - spec/files/members_add.json
177
+ - spec/files/members_empty.json
178
+ - spec/files/members_full.json
179
+ - spec/files/members_remove.json
180
+ - spec/lita/handlers/deploygate_spec.rb
181
+ - spec/spec_helper.rb