lita-claims 0.0.1

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: 732d239f96492956b6cb2bc64e1f70f466288e11
4
+ data.tar.gz: 545d89715a2786c0899c85567f409de45158fd3c
5
+ SHA512:
6
+ metadata.gz: 181fc3798c01853634389ed24b678755ad07a274c19d6238a8ec9175794c3b2c7de2c16c297f48797da0530f8365331ef0a1becbb16f98c9a51f80c7d513ec53
7
+ data.tar.gz: 3e12eeb56bcfe1844cbde5f2225dc2290ab2e32c19478799c0652f849223a61c2c31308863e3860e8c7b48c5b3507d3524141e7234ec40a81b5f9a5ad470bd66
@@ -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,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ script: bundle exec rake
5
+ before_install:
6
+ - gem update --system
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 Hannes Fostie
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.
@@ -0,0 +1,23 @@
1
+ # lita-claims
2
+
3
+ TODO: Add a description of the plugin.
4
+
5
+ ## Installation
6
+
7
+ Add lita-claims to your Lita instance's Gemfile:
8
+
9
+ ``` ruby
10
+ gem "lita-claims"
11
+ ```
12
+
13
+ ## Configuration
14
+
15
+ TODO: Describe any configuration attributes the plugin exposes.
16
+
17
+ ## Usage
18
+
19
+ TODO: Describe the plugin's features and how to use them.
20
+
21
+ ## License
22
+
23
+ [MIT](http://opensource.org/licenses/MIT)
@@ -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,31 @@
1
+ class Claim
2
+ REDIS_NAMESPACE = 'handlers:claims'
3
+ REDIS_KEY = 'claim'
4
+
5
+ class << self
6
+ def all
7
+ redis.hkeys(REDIS_KEY)
8
+ end
9
+
10
+ def create(property_name, claimer, environment = 'default')
11
+ return false if self.exists?("#{property_name}_#{environment}")
12
+ redis.hset(REDIS_KEY, "#{property_name}_#{environment}", claimer)
13
+ end
14
+
15
+ def read(property_name, environment = 'default')
16
+ redis.hget(REDIS_KEY, "#{property_name}_#{environment}")
17
+ end
18
+
19
+ def destroy(property_name, environment = 'default')
20
+ redis.hdel(REDIS_KEY, "#{property_name}_#{environment}")
21
+ end
22
+
23
+ def exists?(property_name, environment = 'default')
24
+ redis.hexists(REDIS_KEY, "#{property_name}_#{environment}")
25
+ end
26
+
27
+ def redis
28
+ @redis ||= Redis::Namespace.new(REDIS_NAMESPACE, redis: Lita.redis)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,2 @@
1
+ require 'lita/handlers/claims'
2
+ require 'claim'
@@ -0,0 +1,30 @@
1
+ require "lita"
2
+ require 'pry'
3
+
4
+ module Lita
5
+ module Handlers
6
+ class Claims < Handler
7
+ PROPERTY_OR_ENVIRONMENT = /[\w\-]+/
8
+
9
+ route(/^claim\s(#{PROPERTY_OR_ENVIRONMENT.source})(?:\s(#{PROPERTY_OR_ENVIRONMENT.source}))?/i, :create, command: true, help: {
10
+ "claim PROPERTY" => "To claim a property by the name PROPERTY"
11
+ })
12
+
13
+ def create(response)
14
+ claimer = response.message.source.user.name
15
+ property, environment = response.matches.first
16
+ environment ||= 'default'
17
+ environment_string = " (#{environment})" if environment != 'default'
18
+ if property && Claim.create(property, claimer, environment)
19
+ reply = "#{property}#{environment_string} was claimed by #{claimer}"
20
+ else
21
+ existing_claimer = Claim.read(property, environment)
22
+ reply = "Could not claim #{property}#{environment_string} - already claimed by #{existing_claimer}"
23
+ end
24
+ response.reply(reply)
25
+ end
26
+ end
27
+
28
+ Lita.register_handler(Claims)
29
+ end
30
+ end
@@ -0,0 +1,21 @@
1
+ Gem::Specification.new do |spec|
2
+ spec.name = "lita-claims"
3
+ spec.version = "0.0.1"
4
+ spec.authors = ["Hannes Fostie"]
5
+ spec.email = ["hannes@maloik.co"]
6
+ spec.description = %q{A Lita.io plugin to claim 'properties'. Usecases include disabling deployments for environments when they are in use'}
7
+ spec.summary = %q{A Lita.io plugin to claim 'properties'}
8
+ spec.homepage = "https://github.com/hannesfostie/lita-claims"
9
+ spec.license = "MIT"
10
+
11
+ spec.files = `git ls-files`.split($/)
12
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
13
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
14
+ spec.require_paths = ["lib"]
15
+
16
+ spec.add_runtime_dependency "lita", "~> 2.3"
17
+
18
+ spec.add_development_dependency "bundler", "~> 1.3"
19
+ spec.add_development_dependency "rake"
20
+ spec.add_development_dependency "rspec", ">= 2.14"
21
+ end
@@ -0,0 +1,30 @@
1
+ Lita.configure do |config|
2
+ # The name your robot will use.
3
+ config.robot.name = "Lita"
4
+
5
+ # The severity of messages to log. Options are:
6
+ # :debug, :info, :warn, :error, :fatal
7
+ # Messages at the selected level and above will be logged.
8
+ config.robot.log_level = :info
9
+
10
+ # An array of user IDs that are considered administrators. These users
11
+ # the ability to add and remove other users from authorization groups.
12
+ # What is considered a user ID will change depending on which adapter you use.
13
+ # config.robot.admins = ["1", "2"]
14
+
15
+ # The adapter you want to connect with. Make sure you've added the
16
+ # appropriate gem to the Gemfile.
17
+ config.robot.adapter = :shell
18
+
19
+ ## Example: Set options for the chosen adapter.
20
+ # config.adapter.username = "myname"
21
+ # config.adapter.password = "secret"
22
+
23
+ ## Example: Set options for the Redis connection.
24
+ # config.redis.host = "127.0.0.1"
25
+ # config.redis.port = 1234
26
+
27
+ ## Example: Set configuration for any loaded handlers. See the handler's
28
+ ## documentation for options.
29
+ # config.handlers.some_handler.some_config_key = "value"
30
+ end
@@ -0,0 +1,57 @@
1
+ require 'spec_helper'
2
+
3
+ describe Claim, lita: true do
4
+ subject { Claim }
5
+ before { subject.create("property", "hannes", "staging") }
6
+ after {
7
+ subject.all.each do |claim|
8
+ Claim.destroy(claim)
9
+ end
10
+ }
11
+
12
+ describe '#all' do
13
+ it 'returns all claims' do
14
+ expect(subject.all).to eq(["property_staging"])
15
+ end
16
+ end
17
+
18
+ describe '#create' do
19
+ it 'sets the key as the property and the value as the claimer' do
20
+ subject.create('property', 'hannes', 'staging')
21
+ expect(subject.read('property', 'staging')).to eq('hannes')
22
+ end
23
+
24
+ it 'uses default as the environment if none is passed on' do
25
+ subject.create('property', 'hannes')
26
+ expect(subject.read('property', 'default')).to eq('hannes')
27
+ end
28
+ end
29
+
30
+ describe '#read' do
31
+ it 'returns the claimer for the question' do
32
+ expect(subject.read('property', 'staging')).to eq('hannes')
33
+ end
34
+
35
+ it 'returns nil when none is present' do
36
+ expect(subject.read('does_not', 'exist')).to eq(nil)
37
+ end
38
+ end
39
+
40
+ describe '#destroy' do
41
+ it 'updates an unclaimed property' do
42
+ subject.create('property', 'hannes')
43
+ subject.destroy('property')
44
+ expect(subject.read('property')).to be_nil
45
+ end
46
+ end
47
+
48
+ describe '#exists?' do
49
+ it 'returns true if the property exists' do
50
+ expect(subject.exists?('property', 'staging')).to be_true
51
+ end
52
+
53
+ it 'returns false if the property does not exist' do
54
+ expect(subject.exists?('property_does_not_exist')).to be_false
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,32 @@
1
+ require "spec_helper"
2
+
3
+ describe Lita::Handlers::Claims, lita_handler: true do
4
+ describe 'routes' do
5
+ it { routes_command('claim property').to :create }
6
+ it { routes_command('claim property environment').to :create }
7
+ end
8
+
9
+ describe 'creating claims' do
10
+ it 'replies that the claim was made' do
11
+ send_command 'claim property_x'
12
+ expect(replies.last).to eq('property_x was claimed by Test User')
13
+ end
14
+
15
+ it 'replies that the claim was made for a non-default environment' do
16
+ send_command 'claim property_x environment_y'
17
+ expect(replies.last).to eq('property_x (environment_y) was claimed by Test User')
18
+ end
19
+
20
+ it 'replies that a claim could not be made because it already exists' do
21
+ Claim.create('property', 'Test User')
22
+ send_command 'claim property'
23
+ expect(replies.last).to eq('Could not claim property - already claimed by Test User')
24
+ end
25
+
26
+ it 'replies that a claim could not be made for a non-default environment because it already exists' do
27
+ Claim.create('property', 'Test User', 'env')
28
+ send_command 'claim property env'
29
+ expect(replies.last).to eq('Could not claim property (env) - already claimed by Test User')
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,2 @@
1
+ require "lita-claims"
2
+ require "lita/rspec"
metadata ADDED
@@ -0,0 +1,118 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lita-claims
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Hannes Fostie
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-04-11 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: '2.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '2.3'
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: rake
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: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '2.14'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '2.14'
69
+ description: A Lita.io plugin to claim 'properties'. Usecases include disabling deployments
70
+ for environments when they are in use'
71
+ email:
72
+ - hannes@maloik.co
73
+ executables: []
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - .gitignore
78
+ - .travis.yml
79
+ - Gemfile
80
+ - LICENSE
81
+ - README.md
82
+ - Rakefile
83
+ - lib/claim.rb
84
+ - lib/lita-claims.rb
85
+ - lib/lita/handlers/claims.rb
86
+ - lita-claims.gemspec
87
+ - lita_config.rb
88
+ - spec/claim_spec.rb
89
+ - spec/lita/handlers/claims_spec.rb
90
+ - spec/spec_helper.rb
91
+ homepage: https://github.com/hannesfostie/lita-claims
92
+ licenses:
93
+ - MIT
94
+ metadata: {}
95
+ post_install_message:
96
+ rdoc_options: []
97
+ require_paths:
98
+ - lib
99
+ required_ruby_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ required_rubygems_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - '>='
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ requirements: []
110
+ rubyforge_project:
111
+ rubygems_version: 2.2.1
112
+ signing_key:
113
+ specification_version: 4
114
+ summary: A Lita.io plugin to claim 'properties'
115
+ test_files:
116
+ - spec/claim_spec.rb
117
+ - spec/lita/handlers/claims_spec.rb
118
+ - spec/spec_helper.rb