socket.io-emitter 0.0.1 → 0.1.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: 20c7ad7c5bf64297f833e433feff914d1ce62c2d
4
- data.tar.gz: 6c18218cf9ad4ab872eff0612b9b1436496bca1a
3
+ metadata.gz: a0a74de36280d4fb1bb38c3203943bcbe3478df7
4
+ data.tar.gz: ccc8ceb16873c29cd4d5bc7fc8f56dc018d7e5ab
5
5
  SHA512:
6
- metadata.gz: 23ac834cd52c6fa0a8f97bd3af6387a98f590028e943c3cd6cfdddcfa241600502e2eca7f489500e760f657602c55cd9f5c215d3517ed299b75d9cf7f420cd0d
7
- data.tar.gz: d8efc036e436fcc81fbdd2e6e0666a55cacc6d160a6c3c8f3fa7ca167127eca1b95b793fb466ec92840d6591c520c44017d71222ab3f97d1b84250dcfe55b9a1
6
+ metadata.gz: eac67277a871d4168ca01324e77028ef0fee3bc4366cdc7d5e5004210222659f93dd0185f828eca8b84bae8c462a3dc56809470557adba54f2d555f7815e322d
7
+ data.tar.gz: b68ad524adfe3e3fe288f016a614b88168df4c0a5f9bbc5ada3539bd5ac6f0da9ff4004c3a2a07711eefc25d0916e2e74a2807e210ddff9288d4a8a93fd64473
data/.gitignore CHANGED
@@ -20,4 +20,7 @@ tmp
20
20
  *.o
21
21
  *.a
22
22
  mkmf.log
23
- vendor/bundle
23
+ vendor/bundle
24
+
25
+ spec/node_modules
26
+ spec/redis.log
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1
4
+ - 2.0
data/Rakefile CHANGED
@@ -1,2 +1,17 @@
1
-
2
1
  require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ namespace :npm do
7
+ desc "npm package install for testing"
8
+ task :install do
9
+ dir = File.join(File.expand_path("..", __FILE__), "spec")
10
+ sh "cd '#{dir}' && npm install"
11
+ end
12
+ end
13
+
14
+ task :spec_with_npm_install => ["npm:install", "spec"]
15
+
16
+ task :default => :spec_with_npm_install
17
+
@@ -0,0 +1 @@
1
+ require 'socket.io/emitter'
@@ -1,4 +1,3 @@
1
-
2
1
  require 'socket.io/emitter/version'
3
2
  require 'msgpack'
4
3
  require 'redis'
@@ -10,6 +9,8 @@ module SocketIO
10
9
  BINARY_EVENT = 5
11
10
  end
12
11
 
12
+ FLAGS = %w(json volatile broadcast)
13
+
13
14
  def initialize(options = {})
14
15
  @redis = options[:redis] || Redis.new
15
16
  @key = "#{options[:key] || 'socket.io'}#emitter";
@@ -17,23 +18,18 @@ module SocketIO
17
18
  @flags = {}
18
19
  end
19
20
 
20
- def method_missing(name)
21
- match = /(?<flag>\S+)\?$/.match(name)
22
- unless match.nil?
23
- return !!@flags[match[:flag].to_sym]
21
+ FLAGS.each do |flag|
22
+ define_method(flag) do
23
+ @flags[flag.to_sym] = true
24
+ self
24
25
  end
25
- @flags[name.to_sym] = true
26
- self
27
26
  end
28
27
 
29
28
  def in(room)
30
29
  @rooms << room unless @rooms.include?(room)
31
30
  self
32
31
  end
33
-
34
- def to(room)
35
- self.in(room)
36
- end
32
+ alias :to :in
37
33
 
38
34
  def of(nsp)
39
35
  @flags[:nsp] = nsp
@@ -41,21 +37,11 @@ module SocketIO
41
37
  end
42
38
 
43
39
  def emit(*args)
44
- data = []
45
40
  packet = {}
46
- packet[:type] = Type::EVENT
47
-
48
- args.each do |arg|
49
- data << arg.to_s
50
- end
41
+ packet[:type] = has_binary?(args) ? Type::BINARY_EVENT : Type::EVENT
42
+ packet[:data] = args
51
43
 
52
- if self.binary?
53
- packet[:type] = Type::BINARY_EVENT
54
- end
55
-
56
- packet[:data] = data
57
-
58
- unless @flags[:nsp].nil?
44
+ if @flags.has_key?(:nsp)
59
45
  packet[:nsp] = @flags[:nsp]
60
46
  @flags.delete(:nsp)
61
47
  else
@@ -65,10 +51,18 @@ module SocketIO
65
51
  packed = MessagePack.pack([packet, { rooms: @rooms, flags: @flags }])
66
52
  @redis.publish(@key, packed)
67
53
 
68
- @rooms = []
69
- @flags = {}
54
+ @rooms.clear
55
+ @flags.clear
70
56
 
71
57
  self
72
58
  end
59
+
60
+ private
61
+
62
+ def has_binary?(args)
63
+ args.select {|x| x.is_a?(String)}.any? {|str|
64
+ str.encoding == Encoding::ASCII_8BIT && !str.ascii_only?
65
+ }
66
+ end
73
67
  end
74
68
  end
@@ -1,8 +1,5 @@
1
-
2
- require 'socket.io/emitter'
3
-
4
1
  module SocketIO
5
2
  class Emitter
6
- VERSION = '0.0.1'
3
+ VERSION = '0.1.0'
7
4
  end
8
5
  end
@@ -1,4 +1,3 @@
1
-
2
1
  # coding: utf-8
3
2
 
4
3
  lib = File.expand_path('../lib', __FILE__)
@@ -24,4 +23,5 @@ Gem::Specification.new do |spec|
24
23
 
25
24
  spec.add_development_dependency "bundler", "~> 1.6"
26
25
  spec.add_development_dependency "rake"
26
+ spec.add_development_dependency "rspec"
27
27
  end
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "socket.io-ruby-emitter-test",
3
+ "version": "0.0.0",
4
+ "description": "test server",
5
+ "main": "testapp.js",
6
+ "scripts": {
7
+ "test": "echo \"Error: no test specified\" && exit 1"
8
+ },
9
+ "author": "joker1007",
10
+ "license": "MIT",
11
+ "dependencies": {
12
+ "socket.io": "^1.0.6",
13
+ "socket.io-redis": "^0.1.3",
14
+ "socket.io-client": "~1.0.6"
15
+ }
16
+ }
@@ -0,0 +1,27 @@
1
+ daemonize no
2
+
3
+ pidfile /tmp/redis-server-socket.io-emitter-test.pid
4
+
5
+ port 6380
6
+ bind 127.0.0.1
7
+
8
+ timeout 300
9
+
10
+ loglevel notice
11
+ logfile stdout
12
+
13
+ databases 16
14
+
15
+ dir /tmp
16
+
17
+ slave-serve-stale-data yes
18
+
19
+ hash-max-ziplist-entries 512
20
+ hash-max-ziplist-value 64
21
+
22
+ list-max-ziplist-entries 512
23
+ list-max-ziplist-value 64
24
+
25
+ set-max-intset-entries 512
26
+
27
+ activerehashing yes
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+ require 'timeout'
3
+
4
+ describe SocketIO::Emitter do
5
+ include Timeout
6
+
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
+
11
+ timeout(1) do
12
+ expect($child_io.gets.chomp).to eq 'broadcast payload'
13
+ end
14
+ end
15
+
16
+ it 'should be able to emit messages to namespace' do
17
+ emitter.of('/nsp').broadcast.emit('broadcast event', 'nsp broadcast payload')
18
+
19
+ timeout(1) do
20
+ expect($child_io.gets.chomp).to eq 'nsp broadcast payload'
21
+ end
22
+ end
23
+
24
+ it 'should not emit message to all namespace' do
25
+ emitter.of('/nsp').broadcast.emit('nsp broadcast event', 'nsp broadcast payload')
26
+
27
+ timeout(1) do
28
+ expect($child_io.gets.chomp).to eq 'GOOD'
29
+ end
30
+
31
+ expect {
32
+ timeout(2) do
33
+ $child_io.gets
34
+ end
35
+ }.to raise_error(TimeoutError)
36
+ end
37
+ end
@@ -0,0 +1,30 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+
3
+ pwd = File.expand_path('..', __FILE__)
4
+ require 'socket.io-emitter'
5
+
6
+ RSpec.configure do |config|
7
+ config.before(:suite) do
8
+ redis_log = File.open(File.join(pwd, "redis.log"), "w")
9
+ redis_pid = fork do
10
+ exec("redis-server #{File.join(pwd, "redis.conf")}", :out => redis_log)
11
+ end
12
+
13
+ sleep 1
14
+
15
+ $child_io = IO.popen("node #{File.join(File.dirname(__FILE__), "testapp.js")}")
16
+
17
+ sleep 0.5
18
+
19
+ at_exit do
20
+ begin
21
+ Process.kill(:SIGINT, $child_io.pid)
22
+ Process.waitpid($child_io.pid)
23
+ Process.kill(:SIGINT, redis_pid)
24
+ Process.waitpid(redis_pid)
25
+ redis_log.close
26
+ rescue Errno::ESRCH, Errno::ECHILD
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,26 @@
1
+ var io = require('socket.io');
2
+ var ioc = require('socket.io-client');
3
+ var redis = require('socket.io-redis');
4
+
5
+ var srv = io(8125);
6
+ srv.adapter(redis({ host: 'localhost', port: 6380 }));
7
+
8
+ var cli = ioc('ws://localhost:8125', {forceNew: true});
9
+
10
+ cli.on('broadcast event', function(payload) {
11
+ console.log(payload);
12
+ });
13
+
14
+ cli.on('nsp broadcast event', function(payload) {
15
+ console.log("BAD");
16
+ });
17
+
18
+ var cliNsp = ioc('ws://localhost:8125/nsp', {forceNew: true});
19
+
20
+ cliNsp.on('broadcast event', function(payload) {
21
+ console.log(payload);
22
+ });
23
+
24
+ cliNsp.on('nsp broadcast event', function(payload) {
25
+ console.log("GOOD");
26
+ });
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: socket.io-emitter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.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-14 00:00:00.000000000 Z
11
+ date: 2014-06-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  description:
70
84
  email:
71
85
  - nulltask@gmail.com
@@ -74,12 +88,20 @@ extensions: []
74
88
  extra_rdoc_files: []
75
89
  files:
76
90
  - ".gitignore"
91
+ - ".rspec"
92
+ - ".travis.yml"
77
93
  - Gemfile
78
94
  - Rakefile
79
95
  - Readme.md
96
+ - lib/socket.io-emitter.rb
80
97
  - lib/socket.io/emitter.rb
81
98
  - lib/socket.io/emitter/version.rb
82
99
  - socket.io-emitter.gemspec
100
+ - spec/package.json
101
+ - spec/redis.conf
102
+ - spec/socket.io/emitter_spec.rb
103
+ - spec/spec_helper.rb
104
+ - spec/testapp.js
83
105
  homepage: https://github.com/nulltask/socket.io-ruby-emitter
84
106
  licenses:
85
107
  - MIT
@@ -104,4 +126,9 @@ rubygems_version: 2.2.2
104
126
  signing_key:
105
127
  specification_version: 4
106
128
  summary: Ruby Socket.IO emitter implementation.
107
- test_files: []
129
+ test_files:
130
+ - spec/package.json
131
+ - spec/redis.conf
132
+ - spec/socket.io/emitter_spec.rb
133
+ - spec/spec_helper.rb
134
+ - spec/testapp.js