slack-ruby-client 0.7.1 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
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.