lita-group-mention 1.0.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: 97fbc674c3408e504bec402d173c811da7d3309d
4
+ data.tar.gz: 200da6b42de94d5b7f94c42a3606f152eff89f5c
5
+ SHA512:
6
+ metadata.gz: 18851940178cd49ba2f38e57553a28f8800727c3ce12ca00aafef4580d180b9a7ddcd2393a2b5349ab39b8ad2ebe496036f7130c3be101504c091c31db68b56a
7
+ data.tar.gz: eaff5ea8a29843bf1ad62cdb194e1544884b2a32277ec04137986d520a0abf45915e326a3c1ff2147b6d55514a34bccd61add20e65b8eae73a84a557e57e8b81
data/.gitignore ADDED
@@ -0,0 +1,19 @@
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
18
+ vendor/*
19
+ *.sw*
data/.rubocop.yml ADDED
@@ -0,0 +1,8 @@
1
+ ClassLength:
2
+ Max: 120
3
+
4
+ FileName:
5
+ Enabled: false
6
+
7
+ LineLength:
8
+ Max: 120
data/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ cache:
2
+ - bundler
3
+ language: ruby
4
+ rvm:
5
+ - 2.2.0
6
+ script: bundle exec rake
7
+ before_install:
8
+ - gem update --system
9
+ services:
10
+ - redis-server
11
+ sudo: false
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) 2015 Ben House
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,44 @@
1
+ # lita-group-mention
2
+
3
+ [![Build Status](https://travis-ci.org/bhouse/lita-group-mention.svg?branch=master)](https://travis-ci.org/bhouse/lita-group-mention)
4
+ [![Coverage Status](https://coveralls.io/repos/bhouse/lita-group-mention/badge.svg?branch=master)](https://coveralls.io/r/bhouse/lita-group-mention?branch=master)
5
+
6
+ ## Installation
7
+
8
+ Add lita-group-mention to your Lita instance's Gemfile:
9
+
10
+ ``` ruby
11
+ gem "lita-group-mention"
12
+ ```
13
+
14
+ ## Usage
15
+
16
+ This plugin will monitor messages for mentions of groups, and expand the group
17
+ to mention a list of each user in that group. Groups are stored in redis, and
18
+ configured with commands.
19
+
20
+ ```shell
21
+ Larry: Lita group mention add moe to ops
22
+ Lita: Added @moe to ops
23
+ Larry: Lita group mention add curly to dev
24
+ Lita: Added @curly to dev
25
+ Larry: Good morning @ops and @dev
26
+ Lita: cc @moe, @curly
27
+ ```
28
+
29
+ ```shell
30
+ Larry: Lita group mention show groups
31
+ Lita: ops: moe
32
+ dev: curly
33
+ Larry: Lita group mention remove group ops
34
+ Lita: Removed the ops group
35
+ Larry: group mention show user curly
36
+ Lita: curly: dev
37
+ Larry: group mention show user moe
38
+ Lita: moe:
39
+ ```
40
+
41
+
42
+ ## License
43
+
44
+ [MIT](http://opensource.org/licenses/MIT)
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+ require 'rubocop/rake_task'
4
+ require 'bump/tasks'
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ RuboCop::RakeTask.new do |task|
9
+ task.fail_on_error = true
10
+ end
11
+
12
+ task default: [:rubocop, :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/group_mention'
8
+
9
+ Lita::Handlers::GroupMention.template_root File.expand_path(
10
+ File.join('..', '..', 'templates'),
11
+ __FILE__
12
+ )
@@ -0,0 +1,143 @@
1
+ module Lita
2
+ # Lita Handler module
3
+ module Handlers
4
+ # GroupMention handler class
5
+ class GroupMention < Handler
6
+ route(/@(\w+)+/, :group_mention)
7
+ route(
8
+ /^group\s+mention\s+add\s+@?(?<user>\w+)\s+to\s+@?(?<group>\w+)/,
9
+ :add_member,
10
+ command: true,
11
+ help: {
12
+ t('help.add_user_key') => t('help.add_user_value')
13
+ }
14
+ )
15
+ route(
16
+ /^group\s+mention\s+remove\s+@?(?<user>\w+)\s+from\s+@?(?<group>\w+)/,
17
+ :remove_member,
18
+ command: true,
19
+ help: {
20
+ t('help.remove_user_key') => t('help.remove_user_value')
21
+ }
22
+ )
23
+ route(
24
+ /^group\s+mention\s+remove\s+group\s+@?(?<group>\w+)/,
25
+ :remove_group,
26
+ command: true,
27
+ help: {
28
+ t('help.remove_group_key') => t('help.remove_group_value')
29
+ }
30
+ )
31
+ route(
32
+ /^group\s+mention\s+show\s+groups$/,
33
+ :show_groups,
34
+ command: true,
35
+ help: {
36
+ t('help.show_groups_key') => t('help.show_groups_value')
37
+ }
38
+ )
39
+ route(
40
+ /^group\s+mention\s+show\s+group\s+@?(?<group>\w+)/,
41
+ :show_group,
42
+ command: true,
43
+ help: {
44
+ t('help.show_group_key') => t('help.show_group_value')
45
+ }
46
+ )
47
+ route(
48
+ /^group\s+mention\s+show\s+user\s+@?(?<user>\w+)/,
49
+ :show_user,
50
+ command: true,
51
+ help: {
52
+ t('help.show_user_key') => t('help.show_user_value')
53
+ }
54
+ )
55
+
56
+ def group_mention(response) # rubocop:disable AbcSize
57
+ return if response.message.body =~ /group\s+mention/
58
+ groups = response.matches.flatten
59
+
60
+ groups.each do |g|
61
+ groups.delete(g) unless redis_groups.keys.include?(g)
62
+ end
63
+ return if groups.empty?
64
+
65
+ response.reply(t('mention.cc') + union_members(groups))
66
+ end
67
+
68
+ def add_member(response)
69
+ group = response.match_data['group']
70
+ user = response.match_data['user']
71
+ redis.sadd("user:#{user}", group)
72
+ redis.sadd("group:#{group}", user)
73
+ response.reply(t('add_member', user: user, group: group))
74
+ end
75
+
76
+ def remove_member(response)
77
+ group = response.match_data['group']
78
+ user = response.match_data['user']
79
+ redis.srem("user:#{user}", group)
80
+ redis.srem("group:#{group}", user)
81
+ response.reply(t('remove_member', user: user, group: group))
82
+ end
83
+
84
+ def remove_group(response)
85
+ group = response.match_data['group']
86
+ members = redis.smembers("group:#{group}")
87
+ members.each do |user|
88
+ redis.srem("user:#{user}", group)
89
+ end
90
+
91
+ redis.del("group:#{group}")
92
+ response.reply(t('remove_group', group: group))
93
+ end
94
+
95
+ def show_groups(response)
96
+ group_list = []
97
+ redis_groups.each do |group, members|
98
+ group_list << "#{group}: #{members.join(', ')}"
99
+ end
100
+ response.reply(group_list.join("\n"))
101
+ end
102
+
103
+ def show_group(response)
104
+ group = response.match_data['group']
105
+
106
+ unless redis_groups.key?(group)
107
+ response.reply(t('group_does_not_exist', group: group))
108
+ return
109
+ end
110
+
111
+ members = redis_groups[group]
112
+ formatted_group = "#{group}: #{members.join(', ')}"
113
+ response.reply(formatted_group)
114
+ end
115
+
116
+ def show_user(response)
117
+ user = response.match_data['user']
118
+ response.reply("#{user}: #{get_user_memberships(user).join(', ')}")
119
+ end
120
+
121
+ private
122
+
123
+ def redis_groups
124
+ @groups ||= {}
125
+ redis.keys('group:*').each do |group|
126
+ @groups[group.split(':')[-1]] = redis.smembers(group)
127
+ end
128
+ @groups
129
+ end
130
+
131
+ def get_user_memberships(user)
132
+ redis.smembers("user:#{user}")
133
+ end
134
+
135
+ def union_members(groups)
136
+ groups = groups.map { |g| "group:#{g}" }
137
+ redis.sunion(groups).sort.map { |m| "@#{m}" }.join(', ')
138
+ end
139
+ end
140
+
141
+ Lita.register_handler(GroupMention)
142
+ end
143
+ end
@@ -0,0 +1,27 @@
1
+ Gem::Specification.new do |spec|
2
+ spec.name = 'lita-group-mention'
3
+ spec.version = '1.0.0'
4
+ spec.authors = ['Ben House']
5
+ spec.email = ['ben@benhouse.io']
6
+ spec.description = %w(cc a list of users when a group is @mentioned)
7
+ spec.summary = %w(add users to a group, @mention the group, and the plugin will cc each user)
8
+ spec.homepage = 'https://github.com/bhouse/lita-group-mention'
9
+ spec.license = 'MIT'
10
+ spec.metadata = { 'lita_plugin_type' => 'handler' }
11
+
12
+ spec.files = `git ls-files`.split($RS)
13
+ spec.executables = spec.files.grep(/^bin\//) { |f| File.basename(f) }
14
+ spec.test_files = spec.files.grep(/^(test|spec|features)\//)
15
+ spec.require_paths = ['lib']
16
+
17
+ spec.add_runtime_dependency 'lita', '>= 4.2'
18
+
19
+ spec.add_development_dependency 'bundler', '~> 1.3'
20
+ spec.add_development_dependency 'rake'
21
+ spec.add_development_dependency 'rack-test'
22
+ spec.add_development_dependency 'rspec', '>= 3.0.0'
23
+ spec.add_development_dependency 'simplecov'
24
+ spec.add_development_dependency 'coveralls'
25
+ spec.add_development_dependency 'bump'
26
+ spec.add_development_dependency 'rubocop'
27
+ end
data/locales/en.yml ADDED
@@ -0,0 +1,23 @@
1
+ en:
2
+ lita:
3
+ handlers:
4
+ group_mention:
5
+ add_member: 'Added @%{user} to %{group}'
6
+ group_does_not_exist: '%{group} does not exist'
7
+ help:
8
+ add_user_key: 'group mention add <user> to <group>'
9
+ add_user_value: '@mention <user> when <group> is mentioned'
10
+ remove_group_key: 'group mention remove group <group>'
11
+ remove_group_value: 'remove the mention group completely'
12
+ remove_user_key: 'group mention remove <user> from <group>'
13
+ remove_user_value: 'remove <user> from list of mentions for <group>'
14
+ show_group_key: 'group mention show group <group>'
15
+ show_group_value: 'show users for <group>'
16
+ show_groups_key: 'group mention show groups'
17
+ show_groups_value: 'show all the groups and their users'
18
+ show_user_key: 'group mention show user <user>'
19
+ show_user_value: 'show all the groups <user> is a member of'
20
+ mention:
21
+ cc: 'cc '
22
+ remove_group: 'Removed the %{group} group'
23
+ remove_member: 'Removed @%{user} from %{group}'
@@ -0,0 +1,132 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples 'commands' do
4
+ before(:each) do
5
+ redis_connection.flushdb
6
+ end
7
+
8
+ it 'adds a user to a group' do
9
+ send_command("group mention add #{command_user} to #{command_group}")
10
+ expect(replies.last).to eq("Added @#{chat_user} to #{chat_group}")
11
+ expect(redis.smembers("group:#{chat_group}")).to include(chat_user)
12
+ expect(redis.smembers("user:#{chat_user}")).to include(chat_group)
13
+ end
14
+
15
+ it 'removes a user from a group' do
16
+ redis.sadd("group:#{chat_group}", chat_user)
17
+ redis.sadd("user:#{chat_user}", chat_group)
18
+
19
+ send_command("group mention remove #{command_user} from #{command_group}")
20
+
21
+ expect(replies.last).to eq(
22
+ "Removed @#{chat_user} from #{chat_group}"
23
+ )
24
+ expect(
25
+ redis.smembers("group:#{chat_group}")
26
+ ).not_to include(chat_user)
27
+ expect(
28
+ redis.smembers("user:#{chat_user}")
29
+ ).not_to include(chat_group)
30
+ end
31
+
32
+ it 'removes a group' do
33
+ redis.sadd("group:#{chat_group}", chat_user)
34
+ redis.sadd("user:#{chat_user}", chat_group)
35
+ redis.sadd("user:#{chat_user}", 'foo')
36
+
37
+ send_command("group mention remove group #{command_group}")
38
+
39
+ expect(replies.last).to eq("Removed the #{chat_group} group")
40
+ expect(redis.smembers("user:#{chat_user}")).to eq(['foo'])
41
+ expect(redis.smembers("group:#{chat_group}")).to be_empty
42
+ end
43
+
44
+ it 'shows all the groups' do
45
+ redis.sadd("group:#{chat_group}", chat_user)
46
+
47
+ send_command('group mention show groups')
48
+ expect(replies.last).to eq("#{chat_group}: #{chat_user}")
49
+ end
50
+
51
+ it 'show that a group does not exist' do
52
+ send_command('group mention show group baz')
53
+ expect(replies.last).to eq('baz does not exist')
54
+ end
55
+
56
+ it 'shows a specific group' do
57
+ redis.sadd("group:#{chat_group}", chat_user)
58
+
59
+ send_command("group mention show group #{command_group}")
60
+ expect(replies.last).to eq("#{chat_group}: #{chat_user}")
61
+ end
62
+
63
+ it 'shows the groups a user is a member of' do
64
+ redis.sadd("user:#{chat_user}", chat_group)
65
+
66
+ send_command("group mention show user #{command_user}")
67
+ expect(replies.last).to eq("#{chat_user}: #{chat_group}")
68
+ end
69
+ end
70
+
71
+ describe Lita::Handlers::GroupMention, lita_handler: true do
72
+ before(:each) do
73
+ redis_connection.flushdb
74
+ end
75
+
76
+ after do
77
+ redis_connection.flushdb
78
+ end
79
+
80
+ let(:redis_namespace) { 'lita.test:handlers:group_mention' }
81
+ let(:redis_connection) do
82
+ Redis::Namespace.new(redis_namespace, redis: Redis.new)
83
+ end
84
+
85
+ context 'commands sent without @ mentions' do
86
+ include_examples 'commands' do
87
+ let(:redis) { redis_connection }
88
+ let(:chat_user) { 'test_user1' }
89
+ let(:chat_group) { 'test_group1' }
90
+ let(:command_user) { chat_user }
91
+ let(:command_group) { chat_group }
92
+ end
93
+ end
94
+
95
+ context 'commands sent with @ mentions' do
96
+ include_examples 'commands' do
97
+ let(:redis) { redis_connection }
98
+ let(:chat_user) { 'test_user1' }
99
+ let(:chat_group) { 'test_group1' }
100
+ let(:command_user) { '@' + chat_user }
101
+ let(:command_group) { '@' + chat_group }
102
+ end
103
+ end
104
+
105
+ context 'sending a message with a group mention' do
106
+ it 'expands the group mention to mention a list of users' do
107
+ redis_connection.sadd('group:group1', 'user1')
108
+ redis_connection.sadd('group:group1', 'user2')
109
+
110
+ send_message('Hello @group1')
111
+
112
+ expect(replies.last).to eq('cc @user1, @user2')
113
+ end
114
+ end
115
+
116
+ context 'sending a message with multiple group mentions' do
117
+ it 'expands all groups and joins their members in the mention' do
118
+ %w(10 11 12).each do |n|
119
+ redis_connection.sadd('group:group1', "user#{n}")
120
+ end
121
+ redis_connection.sadd('group:group2', 'user20')
122
+ redis_connection.sadd('group:group2', 'user21')
123
+ redis_connection.sadd('group:group2', 'user10')
124
+
125
+ send_message('Hello @group1 and @group2')
126
+
127
+ expect(replies.last).to eq(
128
+ 'cc @user10, @user11, @user12, @user20, @user21'
129
+ )
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,12 @@
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-group-mention'
10
+ require 'lita/rspec'
11
+
12
+ Lita.version_3_compatibility_mode = false
metadata ADDED
@@ -0,0 +1,187 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lita-group-mention
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Ben House
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-08 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.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '4.2'
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: rack-test
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: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 3.0.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 3.0.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: simplecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: coveralls
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: bump
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
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description: '["cc", "a", "list", "of", "users", "when", "a", "group", "is", "@mentioned"]'
140
+ email:
141
+ - ben@benhouse.io
142
+ executables: []
143
+ extensions: []
144
+ extra_rdoc_files: []
145
+ files:
146
+ - ".gitignore"
147
+ - ".rubocop.yml"
148
+ - ".travis.yml"
149
+ - Gemfile
150
+ - LICENSE
151
+ - README.md
152
+ - Rakefile
153
+ - lib/lita-group-mention.rb
154
+ - lib/lita/handlers/group_mention.rb
155
+ - lita-group-mention.gemspec
156
+ - locales/en.yml
157
+ - spec/lita/handlers/group_mention_spec.rb
158
+ - spec/spec_helper.rb
159
+ homepage: https://github.com/bhouse/lita-group-mention
160
+ licenses:
161
+ - MIT
162
+ metadata:
163
+ lita_plugin_type: handler
164
+ post_install_message:
165
+ rdoc_options: []
166
+ require_paths:
167
+ - lib
168
+ required_ruby_version: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ required_rubygems_version: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: '0'
178
+ requirements: []
179
+ rubyforge_project:
180
+ rubygems_version: 2.2.2
181
+ signing_key:
182
+ specification_version: 4
183
+ summary: '["add", "users", "to", "a", "group,", "@mention", "the", "group,", "and",
184
+ "the", "plugin", "will", "cc", "each", "user"]'
185
+ test_files:
186
+ - spec/lita/handlers/group_mention_spec.rb
187
+ - spec/spec_helper.rb