pepito-slack 0.0.1

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: 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
@@ -0,0 +1,8 @@
1
+ Metrics/AbcSize:
2
+ Enabled: false
3
+ Metrics/ClassLength:
4
+ Enabled: false
5
+ Metrics/LineLength:
6
+ Max: 150
7
+ Metrics/MethodLength:
8
+ Enabled: false
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
data/README.md ADDED
@@ -0,0 +1 @@
1
+ Pepito Slack
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require 'rake/testtask'
2
+ require 'rubocop/rake_task'
3
+
4
+ Rake::TestTask.new do |task|
5
+ task.libs << %w(test lib)
6
+ task.pattern = 'test/**/test_*.rb'
7
+ end
8
+
9
+ RuboCop::RakeTask.new
10
+
11
+ task default: [:test, :rubocop]
@@ -0,0 +1,2 @@
1
+ require 'pepito'
2
+ require 'pepito/adapters/slack'
@@ -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