socket.io-emitter 0.1.0 → 0.2.0

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: a0a74de36280d4fb1bb38c3203943bcbe3478df7
4
- data.tar.gz: ccc8ceb16873c29cd4d5bc7fc8f56dc018d7e5ab
3
+ metadata.gz: 8949263ea52c8b7bc3bbb22059f3447d63502216
4
+ data.tar.gz: d09ede88e369533f728a0a11a29673b09ab633a8
5
5
  SHA512:
6
- metadata.gz: eac67277a871d4168ca01324e77028ef0fee3bc4366cdc7d5e5004210222659f93dd0185f828eca8b84bae8c462a3dc56809470557adba54f2d555f7815e322d
7
- data.tar.gz: b68ad524adfe3e3fe288f016a614b88168df4c0a5f9bbc5ada3539bd5ac6f0da9ff4004c3a2a07711eefc25d0916e2e74a2807e210ddff9288d4a8a93fd64473
6
+ metadata.gz: 6d641176398d21feee7ebb1f2fc30b9540ac8f01b4ca99fe903258ef0b226076261039a22cba72d2efb8b94e9107c8e28f95102961e30b9c7ce0ab97fd9f1b4f
7
+ data.tar.gz: ca6e0117dd69149324301a0db86a87f4b51f3c167b75bc7d7604a9ba4656e5cd92b2784cca41c59ea3e83bf3b47e08bc3b8c45ffa0ce8e1f29ef9d49d50a88d8
@@ -1,4 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 2.2
3
4
  - 2.1
4
5
  - 2.0
data/Readme.md CHANGED
@@ -1,6 +1,8 @@
1
1
 
2
2
  # SocketIO::Emitter
3
3
 
4
+ [![Build Status](https://travis-ci.org/nulltask/socket.io-ruby-emitter.svg)](https://travis-ci.org/nulltask/socket.io-ruby-emitter)
5
+
4
6
  A Ruby implementation of [socket.io-emitter](https://github.com/Automattic/socket.io-emitter).
5
7
 
6
8
  ## How to use
@@ -14,46 +14,50 @@ module SocketIO
14
14
  def initialize(options = {})
15
15
  @redis = options[:redis] || Redis.new
16
16
  @key = "#{options[:key] || 'socket.io'}#emitter";
17
+ @nsp = nil
17
18
  @rooms = []
18
19
  @flags = {}
19
20
  end
20
21
 
21
22
  FLAGS.each do |flag|
22
- define_method(flag) do
23
- @flags[flag.to_sym] = true
24
- self
25
- end
23
+ define_method(flag) { clone.enable_flag(flag) }
26
24
  end
27
25
 
28
26
  def in(room)
29
- @rooms << room unless @rooms.include?(room)
30
- self
27
+ clone.add_room(room)
31
28
  end
32
29
  alias :to :in
33
30
 
34
31
  def of(nsp)
35
- @flags[:nsp] = nsp
36
- self
32
+ clone.select_namespace(nsp)
37
33
  end
38
34
 
39
35
  def emit(*args)
40
36
  packet = {}
41
37
  packet[:type] = has_binary?(args) ? Type::BINARY_EVENT : Type::EVENT
42
38
  packet[:data] = args
43
-
44
- if @flags.has_key?(:nsp)
45
- packet[:nsp] = @flags[:nsp]
46
- @flags.delete(:nsp)
47
- else
48
- packet[:nsp] = '/'
49
- end
39
+ packet[:nsp] = @nsp || '/'
50
40
 
51
41
  packed = MessagePack.pack([packet, { rooms: @rooms, flags: @flags }])
52
42
  @redis.publish(@key, packed)
53
43
 
54
- @rooms.clear
55
- @flags.clear
44
+ self
45
+ end
46
+
47
+ protected
48
+
49
+ def add_room(room)
50
+ @rooms += [room] unless @rooms.include?(room)
51
+ self
52
+ end
53
+
54
+ def select_namespace(nsp)
55
+ @nsp = nsp
56
+ self
57
+ end
56
58
 
59
+ def enable_flag(flag)
60
+ @flags = @flags.merge(flag.to_sym => true)
57
61
  self
58
62
  end
59
63
 
@@ -1,5 +1,5 @@
1
1
  module SocketIO
2
2
  class Emitter
3
- VERSION = '0.1.0'
3
+ VERSION = '0.2.0'
4
4
  end
5
5
  end
@@ -5,33 +5,65 @@ describe SocketIO::Emitter do
5
5
  include Timeout
6
6
 
7
7
  let(:emitter) { SocketIO::Emitter.new(redis: Redis.new(host: "localhost", port: 6380)) }
8
- it 'should be able to emit messages to client' do
9
- emitter.emit('broadcast event', 'broadcast payload')
10
8
 
11
- timeout(1) do
12
- expect($child_io.gets.chomp).to eq 'broadcast payload'
9
+ describe "integration tests" do
10
+ it 'should be able to emit messages to client' do
11
+ emitter.emit('broadcast event', 'broadcast payload')
12
+
13
+ timeout(1) do
14
+ expect($child_io.gets.chomp).to eq 'broadcast payload'
15
+ end
16
+ end
17
+
18
+ it 'should be able to emit messages to namespace' do
19
+ emitter.of('/nsp').broadcast.emit('broadcast event', 'nsp broadcast payload')
20
+
21
+ timeout(1) do
22
+ expect($child_io.gets.chomp).to eq 'nsp broadcast payload'
23
+ end
13
24
  end
14
- end
15
25
 
16
- it 'should be able to emit messages to namespace' do
17
- emitter.of('/nsp').broadcast.emit('broadcast event', 'nsp broadcast payload')
26
+ it 'should not emit message to all namespace' do
27
+ emitter.of('/nsp').broadcast.emit('nsp broadcast event', 'nsp broadcast payload')
18
28
 
19
- timeout(1) do
20
- expect($child_io.gets.chomp).to eq 'nsp broadcast payload'
29
+ timeout(1) do
30
+ expect($child_io.gets.chomp).to eq 'GOOD'
31
+ end
32
+
33
+ expect {
34
+ timeout(2) do
35
+ $child_io.gets
36
+ end
37
+ }.to raise_error(TimeoutError)
21
38
  end
22
39
  end
23
40
 
24
- it 'should not emit message to all namespace' do
25
- emitter.of('/nsp').broadcast.emit('nsp broadcast event', 'nsp broadcast payload')
41
+ describe "configuration" do
42
+ it 'builds a new object each time a new room is added' do
43
+ single = emitter.in("first")
44
+ double = single.in("second")
26
45
 
27
- timeout(1) do
28
- expect($child_io.gets.chomp).to eq 'GOOD'
46
+ expect(emitter.instance_variable_get(:@rooms)).to eq []
47
+ expect(single.instance_variable_get(:@rooms)).to eq ['first']
48
+ expect(double.instance_variable_get(:@rooms)).to eq ['first', 'second']
29
49
  end
30
50
 
31
- expect {
32
- timeout(2) do
33
- $child_io.gets
51
+ it 'builds a new object each time the namespace is changed' do
52
+ first = emitter.of("first")
53
+ second = first.of("second")
54
+
55
+ expect(emitter.instance_variable_get(:@nsp)).to be nil
56
+ expect(first.instance_variable_get(:@nsp)).to eq "first"
57
+ expect(second.instance_variable_get(:@nsp)).to eq "second"
58
+ end
59
+
60
+ %i(json volatile broadcast).each do |flag|
61
+ it "builds a new object each time the #{flag} flag is changed" do
62
+ flagged = emitter.send(flag)
63
+
64
+ expect(emitter.instance_variable_get(:@flags)[flag]).to be nil
65
+ expect(flagged.instance_variable_get(:@flags)[flag]).to be true
34
66
  end
35
- }.to raise_error(TimeoutError)
67
+ end
36
68
  end
37
69
  end
@@ -4,6 +4,7 @@ var redis = require('socket.io-redis');
4
4
 
5
5
  var srv = io(8125);
6
6
  srv.adapter(redis({ host: 'localhost', port: 6380 }));
7
+ var nsp = srv.of('/nsp');
7
8
 
8
9
  var cli = ioc('ws://localhost:8125', {forceNew: true});
9
10
 
metadata CHANGED
@@ -1,83 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: socket.io-emitter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - nulltask
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-22 00:00:00.000000000 Z
11
+ date: 2015-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: msgpack
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
47
  version: '1.6'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.6'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - '>='
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  description:
@@ -87,9 +87,9 @@ executables: []
87
87
  extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
- - ".gitignore"
91
- - ".rspec"
92
- - ".travis.yml"
90
+ - .gitignore
91
+ - .rspec
92
+ - .travis.yml
93
93
  - Gemfile
94
94
  - Rakefile
95
95
  - Readme.md
@@ -112,17 +112,17 @@ require_paths:
112
112
  - lib
113
113
  required_ruby_version: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ">="
115
+ - - '>='
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  required_rubygems_version: !ruby/object:Gem::Requirement
119
119
  requirements:
120
- - - ">="
120
+ - - '>='
121
121
  - !ruby/object:Gem::Version
122
122
  version: '0'
123
123
  requirements: []
124
124
  rubyforge_project:
125
- rubygems_version: 2.2.2
125
+ rubygems_version: 2.4.8
126
126
  signing_key:
127
127
  specification_version: 4
128
128
  summary: Ruby Socket.IO emitter implementation.