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 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