slack-ruby-client 0.7.1 → 0.7.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 98b81ae4b6471c6f769605ec94413778475e2867
4
- data.tar.gz: 3f4a212131fbc5042d5eea7399606521ceafef97
3
+ metadata.gz: cddbe0828a85f10ae1f1ba5750ebb7c2092ce320
4
+ data.tar.gz: 5e65e541eb3dc373a49772ab0b5584ed043e848c
5
5
  SHA512:
6
- metadata.gz: 56dff3761a755c63dccb02156317ba099f0e892be2152a3743bae95e04245c272cc55f42dad3d54d635d9e95f4347184fa4dc2a775e8c1e5e638778d71c8e71e
7
- data.tar.gz: cf2ce35d6963d68b4c210eb852fe61f51cc9b0933b289fd000142ebfd3278b70dc07aa971da5e448e53ab1b63c00a6cec78a2e11533ecb3ea1be0bffc7550e97
6
+ metadata.gz: 3b529246891dca92b7134462247c88a5b72730e5ebf1806fd15fcf55e72e709ce8134898c15aaeb777931a3f62c7b00c86579d877e3c234abc8ac0bee4883249
7
+ data.tar.gz: 0a7a750afdcef449823797818ea192a02093908b140e4db145f64369151e4a1a4ead6503f22372b2239d918cc20f6212daae7d4e81eaa099f94e886325e3c2f4
data/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  pkg
3
3
  Gemfile.lock
4
4
  .DS_Store
5
+ .bundle
data/.rubocop_todo.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2016-05-02 08:01:33 -0400 using RuboCop version 0.35.0.
3
+ # on 2016-05-03 16:35:06 -0400 using RuboCop version 0.35.0.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
@@ -28,13 +28,13 @@ Metrics/AbcSize:
28
28
  # Offense count: 2
29
29
  # Configuration parameters: CountComments.
30
30
  Metrics/ClassLength:
31
- Max: 155
31
+ Max: 156
32
32
 
33
33
  # Offense count: 2
34
34
  Metrics/CyclomaticComplexity:
35
35
  Max: 9
36
36
 
37
- # Offense count: 571
37
+ # Offense count: 595
38
38
  # Configuration parameters: AllowURI, URISchemes.
39
39
  Metrics/LineLength:
40
40
  Max: 288
@@ -48,7 +48,7 @@ Metrics/MethodLength:
48
48
  Metrics/PerceivedComplexity:
49
49
  Max: 11
50
50
 
51
- # Offense count: 54
51
+ # Offense count: 55
52
52
  # Configuration parameters: Exclude.
53
53
  Style/Documentation:
54
54
  Enabled: false
@@ -59,7 +59,7 @@ Style/FileName:
59
59
  Exclude:
60
60
  - 'lib/slack-ruby-client.rb'
61
61
 
62
- # Offense count: 95
62
+ # Offense count: 100
63
63
  # Configuration parameters: AllowedVariables.
64
64
  Style/GlobalVars:
65
65
  Enabled: false
data/.travis.yml CHANGED
@@ -2,17 +2,19 @@ language: ruby
2
2
 
3
3
  cache: bundler
4
4
 
5
- rvm:
6
- - 2.3.0
7
- - 2.2
8
- - 2.1
9
- - 2.0
10
- - rbx-2
11
- - jruby-19mode
12
- - ruby-head
13
- - jruby-head
14
-
15
5
  matrix:
6
+ include:
7
+ - rvm: 2.3.0
8
+ env: CONCURRENCY=celluloid-io
9
+ - rvm: 2.3.0
10
+ env: CONCURRENCY=faye-websocket
11
+ - rvm: 2.2
12
+ - rvm: 2.1
13
+ - rvm: 2.0
14
+ - rvm: rbx-2
15
+ - rvm: jruby-19mode
16
+ - rvm: ruby-head
17
+ - rvm: jruby-head
16
18
  allow_failures:
17
19
  - rvm: ruby-head
18
20
  - rvm: jruby-head
@@ -21,7 +23,3 @@ matrix:
21
23
 
22
24
  git:
23
25
  submodules: false
24
-
25
- env:
26
- - CONCURRENCY=celluloid-io
27
- - CONCURRENCY=faye-websocket
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ### 0.7.2 (5/5/2016)
2
+
3
+ * [#84](https://github.com/dblock/slack-ruby-client/issues/84): Fix: Celluloid concurrency doesn't parallelize the connection setup - [@dblock](https://github.com/dblock).
4
+
1
5
  ### 0.7.1 (5/2/2016)
2
6
 
3
7
  * [#82](https://github.com/dblock/slack-ruby-client/pull/82): Fix `usergroups.users.{list,update}` and `files.comments.{add,edit,delete}` APIs - [@masatomo](https://github.com/masatomo).
data/README.md CHANGED
@@ -18,7 +18,7 @@ A Ruby client for the Slack [Web](https://api.slack.com/web) and [RealTime Messa
18
18
 
19
19
  ## Stable Release
20
20
 
21
- You're reading the documentation for the **stable** release of slack-ruby-client, 0.7.1. See [UPGRADING](UPGRADING.md) when upgrading from an older version.
21
+ You're reading the documentation for the **stable** release of slack-ruby-client, 0.7.2. See [UPGRADING](UPGRADING.md) when upgrading from an older version.
22
22
 
23
23
  ## Installation
24
24
 
@@ -3,7 +3,7 @@ require 'slack-ruby-client'
3
3
  Slack.configure do |config|
4
4
  config.token = ENV['SLACK_API_TOKEN']
5
5
  config.logger = Logger.new(STDOUT)
6
- config.logger.level = Logger::WARN
6
+ config.logger.level = Logger::INFO
7
7
  fail 'Missing ENV[SLACK_API_TOKEN]!' unless config.token
8
8
  end
9
9
 
@@ -28,7 +28,6 @@ end
28
28
 
29
29
  client.on :close do |_data|
30
30
  puts 'Connection closing, exiting.'
31
- EM.stop
32
31
  end
33
32
 
34
33
  client.on :closed do |_data|
@@ -0,0 +1,6 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'slack-ruby-client', path: '../..'
4
+
5
+ gem 'celluloid-io'
6
+ gem 'foreman'
@@ -0,0 +1,2 @@
1
+ console: bundle exec ruby hi.rb
2
+
@@ -0,0 +1,36 @@
1
+ require 'slack-ruby-client'
2
+
3
+ fail 'Missing ENV[SLACK_API_TOKENS]!' unless ENV.key?('SLACK_API_TOKENS')
4
+
5
+ $stdout.sync = true
6
+ logger = Logger.new($stdout)
7
+ logger.level = Logger::DEBUG
8
+
9
+ ENV['SLACK_API_TOKENS'].split.each do |token|
10
+ logger.info "Starting #{token[0..12]} ..."
11
+
12
+ client = Slack::RealTime::Client.new(token: token)
13
+
14
+ client.on :hello do
15
+ logger.info "Successfully connected, welcome '#{client.self.name}' to the '#{client.team.name}' team at https://#{client.team.domain}.slack.com."
16
+ end
17
+
18
+ client.on :message do |data|
19
+ logger.info data
20
+
21
+ client.typing channel: data.channel
22
+
23
+ case data.text
24
+ when 'bot hi' then
25
+ client.message channel: data.channel, text: "Hi <@#{data.user}>!"
26
+ when /^bot/ then
27
+ client.message channel: data.channel, text: "Sorry <@#{data.user}>, what?"
28
+ end
29
+ end
30
+
31
+ client.start_async
32
+ end
33
+
34
+ loop do
35
+ Thread.pass
36
+ end
@@ -0,0 +1,6 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'slack-ruby-client', path: '../..'
4
+
5
+ gem 'faye-websocket'
6
+ gem 'foreman'
@@ -0,0 +1,2 @@
1
+ console: bundle exec ruby hi.rb
2
+
@@ -0,0 +1,36 @@
1
+ require 'slack-ruby-client'
2
+
3
+ fail 'Missing ENV[SLACK_API_TOKENS]!' unless ENV.key?('SLACK_API_TOKENS')
4
+
5
+ $stdout.sync = true
6
+ logger = Logger.new($stdout)
7
+ logger.level = Logger::DEBUG
8
+
9
+ ENV['SLACK_API_TOKENS'].split.each do |token|
10
+ logger.info "Starting #{token[0..12]} ..."
11
+
12
+ client = Slack::RealTime::Client.new(token: token)
13
+
14
+ client.on :hello do
15
+ logger.info "Successfully connected, welcome '#{client.self.name}' to the '#{client.team.name}' team at https://#{client.team.domain}.slack.com."
16
+ end
17
+
18
+ client.on :message do |data|
19
+ logger.info data
20
+
21
+ client.typing channel: data.channel
22
+
23
+ case data.text
24
+ when 'bot hi' then
25
+ client.message channel: data.channel, text: "Hi <@#{data.user}>!"
26
+ when /^bot/ then
27
+ client.message channel: data.channel, text: "Sorry <@#{data.user}>, what?"
28
+ end
29
+ end
30
+
31
+ client.start_async
32
+ end
33
+
34
+ loop do
35
+ Thread.pass
36
+ end
@@ -45,18 +45,18 @@ module Slack
45
45
  end
46
46
 
47
47
  # Start RealTime client and block until it disconnects.
48
- # @yieldparam [Websocket::Driver] driver
49
48
  def start!(&block)
50
- socket = build_socket
51
- socket.start_sync { run_loop(socket, &block) }
49
+ @callback = block if block_given?
50
+ @socket = build_socket
51
+ @socket.start_sync(self)
52
52
  end
53
53
 
54
54
  # Start RealTime client and return immediately.
55
55
  # The RealTime::Client will run in the background.
56
- # @yieldparam [Websocket::Driver] driver
57
56
  def start_async(&block)
58
- socket = build_socket
59
- socket.start_async { run_loop(socket, &block) }
57
+ @callback = block if block_given?
58
+ @socket = build_socket
59
+ @socket.start_async(self)
60
60
  end
61
61
 
62
62
  def stop!
@@ -78,31 +78,9 @@ module Slack
78
78
  end
79
79
  end
80
80
 
81
- protected
82
-
83
- # @return [Slack::RealTime::Socket]
84
- def build_socket
85
- fail ClientAlreadyStartedError if started?
86
- start = web_client.rtm_start(start_options)
87
- data = Slack::Messages::Message.new(start)
88
- @url = data.url
89
- @store = @store_class.new(data) if @store_class
90
- socket_class.new(@url, socket_options)
91
- end
92
-
93
- def socket_options
94
- socket_options = {}
95
- socket_options[:ping] = websocket_ping if websocket_ping
96
- socket_options[:proxy] = websocket_proxy if websocket_proxy
97
- socket_options[:logger] = logger
98
- socket_options
99
- end
100
-
101
- def run_loop(socket)
102
- @socket = socket
103
-
81
+ def run_loop
104
82
  @socket.connect! do |driver|
105
- yield driver if block_given?
83
+ @callback.call(driver) if @callback
106
84
 
107
85
  driver.on :open do |event|
108
86
  logger.debug("#{self.class}##{__method__}") { event.class.name }
@@ -124,6 +102,26 @@ module Slack
124
102
  end
125
103
  end
126
104
 
105
+ protected
106
+
107
+ # @return [Slack::RealTime::Socket]
108
+ def build_socket
109
+ fail ClientAlreadyStartedError if started?
110
+ start = web_client.rtm_start(start_options)
111
+ data = Slack::Messages::Message.new(start)
112
+ @url = data.url
113
+ @store = @store_class.new(data) if @store_class
114
+ socket_class.new(@url, socket_options)
115
+ end
116
+
117
+ def socket_options
118
+ socket_options = {}
119
+ socket_options[:ping] = websocket_ping if websocket_ping
120
+ socket_options[:proxy] = websocket_proxy if websocket_proxy
121
+ socket_options[:logger] = logger
122
+ socket_options
123
+ end
124
+
127
125
  attr_reader :callbacks
128
126
  def socket_class
129
127
  concurrency::Socket
@@ -22,18 +22,17 @@ module Slack
22
22
 
23
23
  def initialize(*args)
24
24
  super
25
- @driver = build_driver
26
25
  end
27
26
 
28
- # @yieldparam [WebSocket::Driver] driver
29
27
  def connect!
30
28
  super
31
-
32
- driver.start
33
- future.run_loop
29
+ run_loop
34
30
  end
35
31
 
36
32
  def run_loop
33
+ @socket = build_socket
34
+ @connected = @socket.connect
35
+ driver.start
37
36
  loop { read } if socket
38
37
  rescue EOFError
39
38
  # connection closed
@@ -50,10 +49,13 @@ module Slack
50
49
  socket.write(data)
51
50
  end
52
51
 
53
- def start_async
54
- future = yield self if block_given?
52
+ def start_async(client)
53
+ @client = client
54
+ Actor.new(future.run_client_loop)
55
+ end
55
56
 
56
- Actor.new(future)
57
+ def run_client_loop
58
+ @client.run_loop
57
59
  end
58
60
 
59
61
  def connected?
@@ -89,8 +91,7 @@ module Slack
89
91
  end
90
92
 
91
93
  def connect
92
- @socket = build_socket
93
- @connected = @socket.connect
94
+ @driver = build_driver
94
95
  end
95
96
  end
96
97
  end
@@ -26,10 +26,10 @@ module Slack
26
26
  end
27
27
 
28
28
  class Socket < Slack::RealTime::Socket
29
- def start_async
29
+ def start_async(client)
30
30
  thread = ensure_reactor_running
31
31
 
32
- yield self if block_given?
32
+ client.run_loop
33
33
 
34
34
  thread
35
35
  end
@@ -41,15 +41,15 @@ module Slack
41
41
  !driver.nil?
42
42
  end
43
43
 
44
- def start_sync(&block)
45
- thread = start_async(&block)
44
+ def start_sync(client)
45
+ thread = start_async(client)
46
46
  thread.join if thread
47
47
  rescue Interrupt
48
48
  thread.exit if thread
49
49
  end
50
50
 
51
51
  # @return [#join]
52
- def start_async
52
+ def start_async(_client)
53
53
  fail NotImplementedError, "Expected #{self.class} to implement #{__method__}."
54
54
  end
55
55
 
data/lib/slack/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Slack
2
- VERSION = '0.7.1'.freeze
2
+ VERSION = '0.7.2'.freeze
3
3
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- RSpec.describe 'integration test', skip: !ENV['SLACK_API_TOKEN'] && 'missing SLACK_API_TOKEN' do
3
+ RSpec.describe 'integration test', skip: (!ENV['SLACK_API_TOKEN'] || !ENV['CONCURRENCY']) && 'missing SLACK_API_TOKEN and/or CONCURRENCY' do
4
4
  around do |ex|
5
5
  WebMock.allow_net_connect!
6
6
  VCR.turned_off { ex.run }
@@ -51,7 +51,7 @@ RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' }
51
51
  before do
52
52
  allow(Slack::RealTime::Socket).to receive(:new).with(url, ping: 30, logger: Slack::Logger.default).and_return(socket)
53
53
  allow(socket).to receive(:connect!)
54
- allow(socket).to receive(:start_sync).and_yield
54
+ allow(socket).to receive(:start_sync)
55
55
  client.start!
56
56
  end
57
57
  context 'properties provided upon connection' do
@@ -254,7 +254,7 @@ RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' }
254
254
  before do
255
255
  allow(Slack::RealTime::Socket).to receive(:new).and_return(socket)
256
256
  allow(socket).to receive(:connect!)
257
- allow(socket).to receive(:start_sync).and_yield
257
+ allow(socket).to receive(:start_sync)
258
258
  end
259
259
  it 'calls rtm_start with start options' do
260
260
  expect(client.web_client).to receive(:rtm_start).with(simple_latest: true).and_call_original
@@ -282,7 +282,7 @@ RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' }
282
282
  before do
283
283
  allow(Slack::RealTime::Socket).to receive(:new).and_return(socket)
284
284
  allow(socket).to receive(:connect!)
285
- allow(socket).to receive(:start_sync).and_yield
285
+ allow(socket).to receive(:start_sync)
286
286
  end
287
287
  it 'instantiates the correct store class' do
288
288
  client.start!
@@ -16,20 +16,8 @@ begin
16
16
  end
17
17
 
18
18
  describe '#connect!' do
19
- before do
20
- allow(ws).to receive(:on).with(:close)
21
- end
22
-
23
- xit 'connects' do
24
- expect(socket.driver).to receive(:start)
25
-
26
- socket.connect!
27
- end
28
-
29
- xit 'pings every 30s' do
30
- expect(driver).to receive(:client).with(socket).and_return(ws)
31
- socket.connect!
32
- end
19
+ pending 'connects'
20
+ pending 'pings every 30s'
33
21
  end
34
22
 
35
23
  describe '#disconnect!' do
@@ -40,19 +28,7 @@ begin
40
28
  end
41
29
  end
42
30
 
43
- describe 'send_data' do
44
- let(:driver) { socket.driver }
45
- before do
46
- allow(driver).to receive(:start)
47
- allow(subject).to receive(:run_loop)
48
- socket.connect!
49
- end
50
-
51
- it 'sends data' do
52
- expect(driver).to receive(:text).with('data')
53
- subject.send_data('data')
54
- end
55
- end
31
+ pending 'send_data'
56
32
  end
57
33
  end
58
34
  rescue LoadError
@@ -9,9 +9,9 @@ module Slack
9
9
  def self.close
10
10
  end
11
11
 
12
- def start_async
12
+ def start_async(client)
13
13
  reactor = Thread.new {}
14
- yield self if block_given?
14
+ client.run_loop
15
15
  reactor
16
16
  end
17
17
 
@@ -8,8 +8,8 @@ RSpec.shared_context 'connected client' do |opts|
8
8
  config.concurrency = Slack::RealTime::Concurrency::Mock
9
9
  end
10
10
  allow(Slack::RealTime::Socket).to receive(:new).with(url, ping: 30, logger: Slack::Logger.default).and_return(socket)
11
- allow(socket).to receive(:start_sync).and_yield
12
- allow(socket).to receive(:connect!).and_yield(ws)
11
+ allow(socket).to receive(:start_sync)
12
+ allow(socket).to receive(:connect!)
13
13
  allow(ws).to receive(:on)
14
14
  client.start!
15
15
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slack-ruby-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Doubrovkine
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-02 00:00:00.000000000 Z
11
+ date: 2016-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -259,6 +259,12 @@ files:
259
259
  - examples/hi_real_time_and_web/hi.rb
260
260
  - examples/hi_real_time_async/Gemfile
261
261
  - examples/hi_real_time_async/hi.rb
262
+ - examples/hi_real_time_async_celluloid/Gemfile
263
+ - examples/hi_real_time_async_celluloid/Procfile
264
+ - examples/hi_real_time_async_celluloid/hi.rb
265
+ - examples/hi_real_time_async_eventmachine/Gemfile
266
+ - examples/hi_real_time_async_eventmachine/Procfile
267
+ - examples/hi_real_time_async_eventmachine/hi.rb
262
268
  - examples/hi_web/Gemfile
263
269
  - examples/hi_web/hi.gif
264
270
  - examples/hi_web/hi.rb
@@ -434,7 +440,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
434
440
  version: 1.3.6
435
441
  requirements: []
436
442
  rubyforge_project:
437
- rubygems_version: 2.4.8
443
+ rubygems_version: 2.5.1
438
444
  signing_key:
439
445
  specification_version: 4
440
446
  summary: Slack Web and RealTime API client.