faye_tracking 0.2.4 → 0.2.5

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: 03b77bd441cd1b040c107dae67ed6c01fdfae790
4
- data.tar.gz: 5b3a8a50c73fd8de5fdb28cf3176aafe3bf29c53
3
+ metadata.gz: 3d632c5493a22f757f2b0303fb47f84d12066440
4
+ data.tar.gz: 54cc0a7362c2276f0c99e94f4514275583cae9df
5
5
  SHA512:
6
- metadata.gz: 5a2f72a7ccda879cbbb21e5bc1b69e5e07df92cfaa126d8d4e439dfd3ae3036d11f6e212d74d3b4ff6466d1a467e41ab9273fd55e8fd3199143ec912cba9545f
7
- data.tar.gz: 62ee8a2c0d8ab1b09728717357a072fdefcd7936facca921429c6361741870c3c5e13634a0946707e1e853be69f94f73eef57e80b5958933001c7463f7c5e11e
6
+ metadata.gz: b0cd9f00bf48fa591079ea9e68ed6bff1e2a0b5c97207e1cf56288e7542b34da86788300f60bbe5e0f7ae6e3f1296c52f553adcc15691ebf2587ec5f3d2a142f
7
+ data.tar.gz: 194aea886aae0dd094017530891aad132676342e4b03978506bf35b57273032506868480e33e6b1a8ee7a7d9f6ae26ac9d7a6e37b54e94ace15a8d2f20800bd0
@@ -24,6 +24,14 @@ module FayeTracking
24
24
  tracker.users_in_channel(channel)
25
25
  end
26
26
 
27
+ def user_with_client_id(client_id)
28
+ tracker.user_with_client_id(client_id)
29
+ end
30
+
31
+ def remove_from_channel(channel, client)
32
+ tracker.remove(channel, client)
33
+ end
34
+
27
35
  def reset_store
28
36
  redis.keys('*').each {|k| redis.del k}
29
37
  end
@@ -64,6 +72,6 @@ end
64
72
 
65
73
  require "faye_tracking/faye_extension"
66
74
  require "faye_tracking/tracker"
67
- require "faye_tracking/store/abstract_key_list"
68
- require "faye_tracking/store/adapter/redis_key_list"
69
- require "faye_tracking/store/adapter/namespaced_key_list"
75
+ require "faye_tracking/abstract_key_list"
76
+ require "faye_tracking/redis_key_list"
77
+ require "faye_tracking/namespaced_key_list"
@@ -17,17 +17,16 @@ module FayeTracking
17
17
  FayeTracking.logger.debug "received incoming message: #{message}"
18
18
 
19
19
  unless message['error']
20
- subs_channel = message['subscription']
21
- client_id = message['clientId']
20
+ subs_channel = message['subscription']
21
+ client_id = message['clientId']
22
+ run_subscribe_callbacks = false
22
23
 
23
24
  case message['channel']
24
25
  when '/meta/subscribe'
25
26
  ext = message['ext']
26
27
  if app_client_id = ext['faye_tracking_client_id']
27
28
  @tracker.add(subs_channel, client_id, app_client_id)
28
- FayeTracking.run_on_subscribe_callbacks(
29
- client_id, app_client_id, subs_channel
30
- )
29
+ run_subscribe_callbacks = true
31
30
  else
32
31
  error_message = "missing ext['faye_tracking_client_id']"
33
32
  FayeTracking.logger.error "error with message: #{error_message}"
@@ -36,13 +35,16 @@ module FayeTracking
36
35
  when '/meta/unsubscribe'
37
36
  # This is not reliable, more robust way to detect unsubscribe event.
38
37
  # see: http://faye.jcoglan.com/ruby/monitoring.html
39
- @tracker.remove(subs_channel, client_id)
40
- when '/meta/disconnect'
41
- @tracker.remove_all(client_id)
42
38
  end
43
39
  end
44
40
 
45
41
  callback.call(message)
42
+
43
+ if run_subscribe_callbacks
44
+ FayeTracking.run_on_subscribe_callbacks(
45
+ client_id, app_client_id, subs_channel
46
+ )
47
+ end
46
48
  end
47
49
  end
48
50
  end
@@ -14,6 +14,10 @@ module FayeTracking
14
14
  @client_id_to_users.add(client_id, user)
15
15
  end
16
16
 
17
+ def user_with_client_id(client_id)
18
+ @client_id_to_users.members(client_id).first
19
+ end
20
+
17
21
  def remove(channel, client_id)
18
22
  @channel_to_client_ids.remove(channel, client_id)
19
23
  @client_id_to_channels.remove(client_id, channel)
@@ -1,3 +1,3 @@
1
1
  module FayeTracking
2
- VERSION = "0.2.4"
2
+ VERSION = "0.2.5"
3
3
  end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe FayeTracking::Tracker do
4
+ let(:tracker) { described_class.new(FayeTracking.redis) }
5
+ let(:channel) { 'room' }
6
+ let(:client_id) { 'abcdefg123456' }
7
+ let(:user_id) { 'user_1' }
8
+
9
+ before(:each) do
10
+ FayeTracking.reset_store
11
+ end
12
+
13
+ describe '#remove' do
14
+ before do
15
+ tracker.add(channel, client_id, user_id)
16
+ expect(tracker.users_in_channel(channel)).to_not be_empty
17
+ end
18
+
19
+ it 'removes a user from a channel' do
20
+ tracker.remove channel, client_id
21
+ expect(tracker.users_in_channel(channel)).to be_empty
22
+ end
23
+
24
+ it 'does not raise error when removing a non-existing user' do
25
+ expect {
26
+ tracker.remove channel, 'invalid_user'
27
+ }.to_not raise_error
28
+ end
29
+ end
30
+ end
@@ -1,13 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe FayeTracking do
4
+ let(:client_id) { 'abcdefg123456' }
5
+ let(:another_client_id) { 'anotherclient' }
6
+
4
7
  before(:each) do
5
8
  FayeTracking.reset_store
6
9
  end
7
10
 
8
- let(:client_id) { 'rpy799jnfeq' }
9
- let(:another_client_id) { '651w533ncba' }
10
-
11
11
  def faye_run(meta_action, subscription, client_id, user)
12
12
  message = { "channel" => meta_action, "clientId" => client_id }
13
13
  message["subscription"] = subscription if subscription
@@ -45,70 +45,37 @@ describe FayeTracking do
45
45
  expect(described_class.users_in_channel('room')).to \
46
46
  match_array(['user_1', 'user_2'])
47
47
  end
48
+
49
+ it 'associate client_id with user' do
50
+ faye_subscribe 'room', client_id, 'user_2'
51
+ expect(described_class.user_with_client_id(client_id)).to eq('user_2')
52
+ end
48
53
  end
49
54
 
50
55
  describe 'customize subscribe block' do
51
56
  it 'can set a customize subscribe block' do
52
57
  result = nil
53
- FayeTracking.on_subscribe do |client_id, user_id, channel|
58
+ described_class.on_subscribe do |client_id, user_id, channel|
54
59
  result = [client_id, user_id, channel]
55
60
  end
56
61
  faye_subscribe 'room', client_id, 'user_1'
57
62
  expect(result).to eq([client_id, 'user_1', 'room'])
58
- FayeTracking.reset_on_subscribe_callbacks
63
+ described_class.reset_on_subscribe_callbacks
59
64
  end
60
65
  end
61
66
  end
62
67
 
63
- context 'unsubscribing a channel' do
64
- before do
65
- faye_subscribe 'room', client_id, 'user_1'
66
- end
67
-
68
- it 'removes a user from a subscription channel' do
69
- faye_unsubscribe 'room', client_id
70
- expect(described_class.user_in_any_channel?('user_1')).to be_falsey
71
- expect(described_class.users_in_channel('rooom')).to eq([])
72
-
73
- faye_subscribe 'room', client_id, 'user_2'
74
- expect(described_class.user_in_any_channel?('user_2')).to be_truthy
75
- end
76
-
77
- it 'does not raise error when removing a non-existing user' do
78
- expect {
79
- faye_unsubscribe 'room', 'user_2'
80
- }.to_not raise_error
81
- end
82
- end
83
-
84
- describe 'subscribing/unsubscribing same users with different clientIds' do
85
- before do
68
+ describe 'subscribing same user with different clientIds' do
69
+ it 'user able to have multiple client ids' do
86
70
  faye_subscribe 'room', client_id, 'user_1'
87
71
  faye_subscribe 'room', another_client_id, 'user_1'
88
- end
89
-
90
- it 'user able to have multiple client ids' do
91
72
  expect(described_class.user_in_channel?('user_1', 'room')).to be_truthy
92
73
 
93
- faye_unsubscribe 'room', client_id
74
+ described_class.remove_from_channel 'room', client_id
94
75
  expect(described_class.user_in_channel?('user_1', 'room')).to be_truthy
95
76
 
96
- faye_unsubscribe 'room', another_client_id
77
+ described_class.remove_from_channel 'room', another_client_id
97
78
  expect(described_class.user_in_channel?('user_1', 'room')).to be_falsey
98
79
  end
99
80
  end
100
-
101
- context 'disconnecting' do
102
- before do
103
- faye_subscribe 'room1', client_id, 'user_1'
104
- faye_subscribe 'room2', client_id, 'user_1'
105
- faye_subscribe 'room1', another_client_id, 'user_2'
106
- end
107
-
108
- it 'removes the user from all channels' do
109
- faye_disconnect(client_id)
110
- expect(described_class.user_in_any_channel?('user_1')).to be_falsey
111
- expect(described_class.users_in_channel('room1')).to eq(['user_2'])
112
- end
113
- end
114
81
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faye_tracking
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lin He
@@ -95,12 +95,13 @@ files:
95
95
  - Rakefile
96
96
  - faye_tracking.gemspec
97
97
  - lib/faye_tracking.rb
98
+ - lib/faye_tracking/abstract_key_list.rb
98
99
  - lib/faye_tracking/faye_extension.rb
99
- - lib/faye_tracking/store/abstract_key_list.rb
100
- - lib/faye_tracking/store/adapter/namespaced_key_list.rb
101
- - lib/faye_tracking/store/adapter/redis_key_list.rb
100
+ - lib/faye_tracking/namespaced_key_list.rb
101
+ - lib/faye_tracking/redis_key_list.rb
102
102
  - lib/faye_tracking/tracker.rb
103
103
  - lib/faye_tracking/version.rb
104
+ - spec/faye_tracking/tracker_spec.rb
104
105
  - spec/faye_tracking_spec.rb
105
106
  - spec/spec_helper.rb
106
107
  homepage: https://github.com/he9lin/faye_tracking
@@ -128,6 +129,7 @@ signing_key:
128
129
  specification_version: 4
129
130
  summary: Faye extension for tracking user subscriptions
130
131
  test_files:
132
+ - spec/faye_tracking/tracker_spec.rb
131
133
  - spec/faye_tracking_spec.rb
132
134
  - spec/spec_helper.rb
133
135
  has_rdoc: