socket.io-emitter 0.1.0 → 0.2.0

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