pepito-slack 0.0.1
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 +41 -0
- data/.rubocop.yml +8 -0
- data/Gemfile +3 -0
- data/README.md +1 -0
- data/Rakefile +11 -0
- data/lib/pepito-slack.rb +2 -0
- data/lib/pepito/adapters/slack.rb +98 -0
- data/pepito-slack.gemspec +30 -0
- data/test/pepito/adapters/test_slack.rb +91 -0
- metadata +164 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 43f7e9493ac78cce4a2aad1ae94ae4fddca4c883
|
4
|
+
data.tar.gz: 01a047a034fd6df95f9fb6f8a78559e132a1e490
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 30c4c71df496015678806144aa711c7b5f65622b6285ecea2ef139405a4d4958e08baeb6eb331aca77ebaee78c1212056b1aa19ce761dbdf61e0249c6fa1bc57
|
7
|
+
data.tar.gz: 9f18b9868a11ffddbe13414443d0b7496bb4728f530da69a2410f343cba8b3a6f32b18a9041a2546791b0495a14ee30afef81865e7a564f7318e2653cbb1ac8d
|
data/.gitignore
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# See https://help.github.com/articles/ignoring-files for more about ignoring files.
|
2
|
+
#
|
3
|
+
# If you find yourself ignoring temporary files generated by your text editor
|
4
|
+
# or operating system, you probably want to add a global ignore instead:
|
5
|
+
# git config --global core.excludesfile '~/.gitignore_global'
|
6
|
+
|
7
|
+
# Ignore bundler config.
|
8
|
+
/.bundle
|
9
|
+
|
10
|
+
# Ignore all logfiles and tempfiles.
|
11
|
+
/log/*
|
12
|
+
!/log/.keep
|
13
|
+
/tmp
|
14
|
+
config/database.yml
|
15
|
+
public/assets/
|
16
|
+
.rvmrc
|
17
|
+
/public/cache
|
18
|
+
/public/system/*
|
19
|
+
.DS_Store
|
20
|
+
**/.DS_Store
|
21
|
+
config/application.yml
|
22
|
+
.ruby-gemset
|
23
|
+
.ruby-version
|
24
|
+
dump.rdb
|
25
|
+
Gemfile.lock
|
26
|
+
|
27
|
+
# Documentation
|
28
|
+
doc
|
29
|
+
.yardoc
|
30
|
+
|
31
|
+
# Vim
|
32
|
+
[._]*.s[a-w][a-z]
|
33
|
+
[._]s[a-w][a-z]
|
34
|
+
*.un~
|
35
|
+
Session.vim
|
36
|
+
.netrwhist
|
37
|
+
*~
|
38
|
+
|
39
|
+
# Pepito Lock
|
40
|
+
pepito.gemspec.lock
|
41
|
+
pepito-*.gem
|
data/.rubocop.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Pepito Slack
|
data/Rakefile
ADDED
data/lib/pepito-slack.rb
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'slack-ruby-client'
|
2
|
+
require 'eventmachine'
|
3
|
+
require 'faye/websocket'
|
4
|
+
|
5
|
+
require 'pepito/source'
|
6
|
+
require 'pepito/adapter'
|
7
|
+
require 'pepito/message'
|
8
|
+
|
9
|
+
module Pepito
|
10
|
+
module Adapters
|
11
|
+
# Adapter for slack
|
12
|
+
class Slack < Adapter
|
13
|
+
class << self
|
14
|
+
# Configs needed for Slack
|
15
|
+
# @return [Array<Hash>]
|
16
|
+
def configs
|
17
|
+
[
|
18
|
+
{
|
19
|
+
name: 'SLACK_API_TOKEN',
|
20
|
+
required: true
|
21
|
+
}
|
22
|
+
]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Slack RealTime client
|
27
|
+
# @return [Slack::RealTime::Client]
|
28
|
+
attr_reader :client
|
29
|
+
|
30
|
+
def initialize(robot, config)
|
31
|
+
super(robot, config)
|
32
|
+
|
33
|
+
configure_slack_api
|
34
|
+
|
35
|
+
@client = ::Slack::RealTime::Client.new
|
36
|
+
@client.web_client.auth_test
|
37
|
+
|
38
|
+
slack_on_message
|
39
|
+
end
|
40
|
+
|
41
|
+
# Runs the slack client
|
42
|
+
# @return [void]
|
43
|
+
def run
|
44
|
+
@client.start!
|
45
|
+
end
|
46
|
+
|
47
|
+
# Send messages to slack.
|
48
|
+
# @param target [Pepito::Source] Where to send the message to.
|
49
|
+
# @param strings [Array<String>] Strings to output.
|
50
|
+
# @return [void]
|
51
|
+
def send_messages(target, strings)
|
52
|
+
message = ''
|
53
|
+
strings.each do |s|
|
54
|
+
message = message + s + "\n"
|
55
|
+
end
|
56
|
+
@client.message(channel: target.room, text: message)
|
57
|
+
end
|
58
|
+
|
59
|
+
# Set topic
|
60
|
+
# @param topic [String] new topic string
|
61
|
+
# @return [void]
|
62
|
+
def topic(target, topic)
|
63
|
+
@client.web_client.channels_setTopic(channel: target.room, topic: topic)
|
64
|
+
end
|
65
|
+
|
66
|
+
# Stops the client
|
67
|
+
# @return [void]
|
68
|
+
def stop
|
69
|
+
@client.stop!
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
# Configures the slack API
|
75
|
+
# @return [void]
|
76
|
+
def configure_slack_api
|
77
|
+
::Slack.configure do |c|
|
78
|
+
c.token = @config['SLACK_API_TOKEN']
|
79
|
+
end
|
80
|
+
|
81
|
+
::Slack::RealTime.configure do |c|
|
82
|
+
c.concurrency = ::Slack::RealTime::Concurrency::Eventmachine
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
# Behavior for slack when it receives a message
|
87
|
+
# @return [void]
|
88
|
+
def slack_on_message
|
89
|
+
@client.on :message do |data|
|
90
|
+
unless data['reply_to']
|
91
|
+
source = Source.new(self, data['user'], data['channel'], false)
|
92
|
+
@robot.receive_message(Message.new(@robot, source, data['text']))
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib/', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'pepito-slack'
|
7
|
+
s.version = '0.0.1'
|
8
|
+
s.authors = ['Olivier']
|
9
|
+
s.email = ['olivier@yafoy.com']
|
10
|
+
s.summary = 'Pepito-slack is your slack adapter for the Pepito bot'
|
11
|
+
s.description = 'Integrate Pepito with you slack team'
|
12
|
+
s.homepage = 'https://github.com/yafoy/pepito-slack'
|
13
|
+
s.license = 'MIT'
|
14
|
+
|
15
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.require_paths = ['lib']
|
19
|
+
|
20
|
+
s.required_ruby_version = '>= 2.0.0'
|
21
|
+
|
22
|
+
s.add_runtime_dependency 'pepito'
|
23
|
+
s.add_runtime_dependency 'slack-ruby-client', '~> 0.5.1', '>= 0.5.1'
|
24
|
+
s.add_runtime_dependency 'eventmachine', '~> 1.0.8', '>= 1.0.8'
|
25
|
+
s.add_runtime_dependency 'faye-websocket'
|
26
|
+
|
27
|
+
s.add_development_dependency 'rake'
|
28
|
+
s.add_development_dependency 'minitest'
|
29
|
+
s.add_development_dependency 'rubocop', '~> 0.37'
|
30
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'pepito/adapters/slack'
|
3
|
+
|
4
|
+
class StubSlack < Pepito::Adapters::Slack
|
5
|
+
attr_accessor :client
|
6
|
+
end
|
7
|
+
|
8
|
+
class TestPepitoAdaptersSlack < MiniTest::Test
|
9
|
+
def test_fail_auth_token
|
10
|
+
assert_raises Slack::Web::Api::Error do
|
11
|
+
create_slack(nil, '1234567890')
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_auth
|
16
|
+
create_slack(nil, ENV['SLACK_API_TOKEN'])
|
17
|
+
pass
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_run
|
21
|
+
mock_client = MiniTest::Mock.new
|
22
|
+
mock_client.expect(:start!, nil)
|
23
|
+
|
24
|
+
slack = create_stub_slack(nil, ENV['SLACK_API_TOKEN'])
|
25
|
+
slack.client = mock_client
|
26
|
+
slack.run
|
27
|
+
|
28
|
+
assert mock_client.verify
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_send_messages
|
32
|
+
room = 'room'
|
33
|
+
message = "1\n2\n3\n"
|
34
|
+
|
35
|
+
mock_target = MiniTest::Mock.new
|
36
|
+
mock_target.expect(:room, room)
|
37
|
+
|
38
|
+
mock_client = MiniTest::Mock.new
|
39
|
+
mock_client.expect(:message, nil, [channel: room, text: message])
|
40
|
+
|
41
|
+
slack = create_stub_slack(nil, ENV['SLACK_API_TOKEN'])
|
42
|
+
slack.client = mock_client
|
43
|
+
slack.send_messages(mock_target, message.split)
|
44
|
+
|
45
|
+
assert mock_target.verify
|
46
|
+
assert mock_client.verify
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_topic
|
50
|
+
room = 'room'
|
51
|
+
topic = 'topic'
|
52
|
+
|
53
|
+
mock_target = MiniTest::Mock.new
|
54
|
+
mock_target.expect(:room, room)
|
55
|
+
|
56
|
+
mock_web_client = MiniTest::Mock.new
|
57
|
+
mock_web_client.expect(:channels_setTopic, nil, [channel: room, topic: topic])
|
58
|
+
|
59
|
+
mock_client = MiniTest::Mock.new
|
60
|
+
mock_client.expect(:web_client, mock_web_client)
|
61
|
+
|
62
|
+
slack = create_stub_slack(nil, ENV['SLACK_API_TOKEN'])
|
63
|
+
slack.client = mock_client
|
64
|
+
slack.topic(mock_target, topic)
|
65
|
+
|
66
|
+
assert mock_target.verify
|
67
|
+
assert mock_web_client.verify
|
68
|
+
assert mock_client.verify
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_stop
|
72
|
+
mock_client = MiniTest::Mock.new
|
73
|
+
mock_client.expect(:stop!, nil)
|
74
|
+
|
75
|
+
slack = create_stub_slack(nil, ENV['SLACK_API_TOKEN'])
|
76
|
+
slack.client = mock_client
|
77
|
+
slack.stop
|
78
|
+
|
79
|
+
assert mock_client.verify
|
80
|
+
end
|
81
|
+
|
82
|
+
private
|
83
|
+
|
84
|
+
def create_slack(mock_robot, token)
|
85
|
+
Pepito::Adapters::Slack.new(mock_robot, 'SLACK_API_TOKEN' => token)
|
86
|
+
end
|
87
|
+
|
88
|
+
def create_stub_slack(mock_robot, token)
|
89
|
+
StubSlack.new(mock_robot, 'SLACK_API_TOKEN' => token)
|
90
|
+
end
|
91
|
+
end
|
metadata
ADDED
@@ -0,0 +1,164 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pepito-slack
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Olivier
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-02-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: pepito
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: slack-ruby-client
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.5.1
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 0.5.1
|
37
|
+
type: :runtime
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - "~>"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 0.5.1
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 0.5.1
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: eventmachine
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 1.0.8
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 1.0.8
|
57
|
+
type: :runtime
|
58
|
+
prerelease: false
|
59
|
+
version_requirements: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - "~>"
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: 1.0.8
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 1.0.8
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: faye-websocket
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
type: :runtime
|
75
|
+
prerelease: false
|
76
|
+
version_requirements: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: rake
|
83
|
+
requirement: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: minitest
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - ">="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
109
|
+
- !ruby/object:Gem::Dependency
|
110
|
+
name: rubocop
|
111
|
+
requirement: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - "~>"
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0.37'
|
116
|
+
type: :development
|
117
|
+
prerelease: false
|
118
|
+
version_requirements: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - "~>"
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '0.37'
|
123
|
+
description: Integrate Pepito with you slack team
|
124
|
+
email:
|
125
|
+
- olivier@yafoy.com
|
126
|
+
executables: []
|
127
|
+
extensions: []
|
128
|
+
extra_rdoc_files: []
|
129
|
+
files:
|
130
|
+
- ".gitignore"
|
131
|
+
- ".rubocop.yml"
|
132
|
+
- Gemfile
|
133
|
+
- README.md
|
134
|
+
- Rakefile
|
135
|
+
- lib/pepito-slack.rb
|
136
|
+
- lib/pepito/adapters/slack.rb
|
137
|
+
- pepito-slack.gemspec
|
138
|
+
- test/pepito/adapters/test_slack.rb
|
139
|
+
homepage: https://github.com/yafoy/pepito-slack
|
140
|
+
licenses:
|
141
|
+
- MIT
|
142
|
+
metadata: {}
|
143
|
+
post_install_message:
|
144
|
+
rdoc_options: []
|
145
|
+
require_paths:
|
146
|
+
- lib
|
147
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
148
|
+
requirements:
|
149
|
+
- - ">="
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: 2.0.0
|
152
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
153
|
+
requirements:
|
154
|
+
- - ">="
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
version: '0'
|
157
|
+
requirements: []
|
158
|
+
rubyforge_project:
|
159
|
+
rubygems_version: 2.4.8
|
160
|
+
signing_key:
|
161
|
+
specification_version: 4
|
162
|
+
summary: Pepito-slack is your slack adapter for the Pepito bot
|
163
|
+
test_files:
|
164
|
+
- test/pepito/adapters/test_slack.rb
|