jstp 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/jstp.gemspec +2 -1
- data/lib/jstp.rb +8 -5
- data/lib/jstp/api.rb +7 -4
- data/lib/jstp/connector.rb +4 -22
- data/lib/jstp/tcp.rb +5 -0
- data/lib/jstp/version.rb +2 -2
- data/lib/jstp/web_socket.rb +30 -0
- data/lib/reader/jstp/connector.rb +26 -0
- data/lib/writer/jstp/connector.rb +27 -0
- data/spec/jstp/api_spec.rb +87 -31
- data/spec/jstp/connector_spec.rb +4 -77
- data/spec/jstp/tcp_spec.rb +7 -0
- data/spec/jstp/web_socket_spec.rb +73 -0
- data/spec/reader/jstp/connector_spec.rb +32 -0
- data/spec/writer/jstp/connector_spec.rb +71 -0
- metadata +29 -13
- data/lib/jstp/event/on_message.rb +0 -8
- data/lib/jstp/event_machine.rb +0 -6
- data/lib/jstp/registry.rb +0 -14
- data/lib/jstp/server.rb +0 -6
- data/spec/jstp/event/on_message_spec.rb +0 -21
- data/spec/jstp/event_machine_spec.rb +0 -10
- data/spec/jstp/registry_spec.rb +0 -24
- data/spec/jstp/server_spec.rb +0 -14
data/jstp.gemspec
CHANGED
@@ -10,6 +10,7 @@ Gem::Specification.new do |gem|
|
|
10
10
|
|
11
11
|
gem.add_dependency 'em-websocket'
|
12
12
|
gem.add_dependency 'em-websocket-client'
|
13
|
+
gem.add_dependency 'discoverer'
|
13
14
|
|
14
15
|
gem.add_development_dependency 'rspec'
|
15
16
|
|
@@ -18,5 +19,5 @@ Gem::Specification.new do |gem|
|
|
18
19
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
20
|
gem.name = "jstp"
|
20
21
|
gem.require_paths = ["lib"]
|
21
|
-
gem.version =
|
22
|
+
gem.version = JSTP::VERSION
|
22
23
|
end
|
data/lib/jstp.rb
CHANGED
@@ -3,13 +3,16 @@ require 'singleton'
|
|
3
3
|
require 'em-websocket'
|
4
4
|
require 'em-websocket-client'
|
5
5
|
require 'json'
|
6
|
+
require 'discoverer'
|
7
|
+
|
8
|
+
require 'jstp/web_socket'
|
9
|
+
require 'jstp/tcp'
|
6
10
|
|
7
|
-
require 'jstp/event/on_message'
|
8
|
-
require 'jstp/connector'
|
9
11
|
require 'jstp/api'
|
10
|
-
require 'jstp/
|
11
|
-
|
12
|
-
require 'jstp/
|
12
|
+
require 'jstp/connector'
|
13
|
+
|
14
|
+
require 'writer/jstp/connector'
|
15
|
+
require 'reader/jstp/connector'
|
13
16
|
|
14
17
|
class << self
|
15
18
|
include JSTP::API
|
data/lib/jstp/api.rb
CHANGED
@@ -3,16 +3,19 @@ module JSTP
|
|
3
3
|
module API
|
4
4
|
def dispatch *args, &block
|
5
5
|
if args.empty? and block
|
6
|
-
|
7
|
-
|
8
|
-
::EventMachine.run &JSTP::EventMachine
|
6
|
+
Connector.instance.block = block
|
7
|
+
Connector.instance.from.send Connector.instance.strategy
|
9
8
|
else
|
10
|
-
Connector.instance.
|
9
|
+
Connector.instance.to.send Connector.instance.strategy, args.first
|
11
10
|
end
|
12
11
|
end
|
13
12
|
|
14
13
|
def port number
|
15
14
|
Connector.instance.port = number
|
16
15
|
end
|
16
|
+
|
17
|
+
def strategy symbol
|
18
|
+
Connector.instance.strategy = symbol
|
19
|
+
end
|
17
20
|
end
|
18
21
|
end
|
data/lib/jstp/connector.rb
CHANGED
@@ -4,32 +4,14 @@ module JSTP
|
|
4
4
|
# Handles the connection functionality for this JSTP reference implementation
|
5
5
|
class Connector
|
6
6
|
include Singleton
|
7
|
+
include Discoverer::Writer
|
8
|
+
include Discoverer::Reader
|
7
9
|
|
8
|
-
attr_accessor :port
|
10
|
+
attr_accessor :port, :strategy, :block
|
9
11
|
|
10
12
|
def initialize
|
11
13
|
@port = 33333
|
12
|
-
|
13
|
-
|
14
|
-
# Discovers the server and sends the message
|
15
|
-
# @param [Hash/Array] message
|
16
|
-
def dispatch message
|
17
|
-
this_client = client(message["resource"])
|
18
|
-
this_client.callback do
|
19
|
-
this_client.send_msg message.to_json
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
# Access to the client pool
|
24
|
-
# @param [Array] the resource data
|
25
|
-
# @return [EventMachine::WebSocketClient] the client for the address
|
26
|
-
def client resource
|
27
|
-
::EventMachine::WebSocketClient.connect "ws://#{resource.first}:33333/#{resource[1..-1].join('/')}"
|
28
|
-
end
|
29
|
-
|
30
|
-
# Sets up the server to be executed within an EventMachine reactor
|
31
|
-
def server
|
32
|
-
::EventMachine::WebSocket.start host: "0.0.0.0", port: @port, &JSTP::Server
|
14
|
+
@strategy = :tcp
|
33
15
|
end
|
34
16
|
end
|
35
17
|
end
|
data/lib/jstp/tcp.rb
ADDED
data/lib/jstp/version.rb
CHANGED
@@ -0,0 +1,30 @@
|
|
1
|
+
module JSTP
|
2
|
+
class WebSocket
|
3
|
+
include Singleton
|
4
|
+
|
5
|
+
def server_setup
|
6
|
+
@server_setup ||= proc { |server|
|
7
|
+
server.onmessage &WebSocket.instance.event_on_message
|
8
|
+
}
|
9
|
+
end
|
10
|
+
|
11
|
+
def event_machine
|
12
|
+
@event_machine ||= proc {
|
13
|
+
::EM::WebSocket.start host: "0.0.0.0",
|
14
|
+
port: Connector.instance.port,
|
15
|
+
&WebSocket.instance.server_setup
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
def event_on_message
|
20
|
+
@event_on_message ||= proc { |message|
|
21
|
+
Connector.instance.block.call JSON.parse message
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
def client resource
|
26
|
+
::EM::WebSocketClient
|
27
|
+
.connect "ws://#{resource.first}:33333/#{resource[1..-1].join('/')}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Reader
|
2
|
+
module JSTP
|
3
|
+
class Connector
|
4
|
+
attr_accessor :source
|
5
|
+
|
6
|
+
def initialize the_source
|
7
|
+
@source = the_source
|
8
|
+
end
|
9
|
+
|
10
|
+
# Start the server with the websocket strategy
|
11
|
+
def websocket
|
12
|
+
::EventMachine.run &::JSTP::WebSocket.instance.event_machine
|
13
|
+
end
|
14
|
+
|
15
|
+
# Start the server with the TCP strategy
|
16
|
+
def tcp
|
17
|
+
@server = TCPServer.open @source.port
|
18
|
+
loop {
|
19
|
+
Thread.start(@server.accept) { |client|
|
20
|
+
@source.block.call JSON.parse client.gets
|
21
|
+
}
|
22
|
+
}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Writer
|
2
|
+
module JSTP
|
3
|
+
class Connector
|
4
|
+
attr_accessor :source
|
5
|
+
|
6
|
+
def initialize source
|
7
|
+
@source = source
|
8
|
+
end
|
9
|
+
|
10
|
+
# Dispatch this applying the websocket strategy
|
11
|
+
def websocket message
|
12
|
+
this_client = ::JSTP::WebSocket.instance
|
13
|
+
.client message["resource"]
|
14
|
+
json = message.to_json
|
15
|
+
this_client.callback do
|
16
|
+
this_client.send_msg json
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Dispatch thid applying the TCP strategy
|
21
|
+
def tcp message
|
22
|
+
client = TCPSocket.open message["resource"].first, @source.port
|
23
|
+
client.puts message.to_json
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/spec/jstp/api_spec.rb
CHANGED
@@ -2,42 +2,103 @@
|
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
describe JSTP::API do
|
5
|
+
describe '#strategy' do
|
6
|
+
it 'should set the strategy' do
|
7
|
+
o = Object.new
|
8
|
+
o.extend JSTP::API
|
9
|
+
|
10
|
+
o.strategy :websocket
|
11
|
+
|
12
|
+
JSTP::Connector.instance.strategy.should == :websocket
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
5
16
|
describe '#dispatch' do
|
6
|
-
context '
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
JSTP::
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
17
|
+
context 'websocket strategy' do
|
18
|
+
before do
|
19
|
+
JSTP::Connector.instance.strategy = :websocket
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'a block is passed' do
|
23
|
+
it 'should register the block and send JSTP::Server to the EventMachine reactor' do
|
24
|
+
block = proc { "lalal" }
|
25
|
+
reader = stub 'reader'
|
26
|
+
|
27
|
+
JSTP::Connector.instance.should_receive(:block=)
|
28
|
+
.with block
|
29
|
+
|
30
|
+
JSTP::Connector.instance.should_receive(:from)
|
31
|
+
.and_return reader
|
32
|
+
reader.should_receive :websocket
|
33
|
+
|
34
|
+
o = Object.new
|
35
|
+
o.extend JSTP::API
|
36
|
+
o.dispatch &block
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'an argument is passed' do
|
41
|
+
it 'should dispatch the message via the Connector' do
|
42
|
+
message = stub 'message'
|
43
|
+
writer = stub 'writer'
|
44
|
+
|
45
|
+
JSTP::Connector.instance.should_receive(:to)
|
46
|
+
.and_return writer
|
47
|
+
|
48
|
+
writer.should_receive(:websocket)
|
49
|
+
.with message
|
50
|
+
|
51
|
+
o = Object.new
|
52
|
+
o.extend JSTP::API
|
53
|
+
o.dispatch message
|
54
|
+
end
|
22
55
|
end
|
23
56
|
end
|
24
57
|
|
25
|
-
context '
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
58
|
+
context 'tcp strategy' do
|
59
|
+
before do
|
60
|
+
JSTP::Connector.instance.strategy = :tcp
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'a block is passed' do
|
64
|
+
it 'should register the block and send JSTP::Server to the EventMachine reactor' do
|
65
|
+
block = proc { "lalal" }
|
66
|
+
reader = stub 'reader'
|
67
|
+
|
68
|
+
JSTP::Connector.instance.should_receive(:block=)
|
69
|
+
.with block
|
70
|
+
|
71
|
+
JSTP::Connector.instance.should_receive(:from)
|
72
|
+
.and_return reader
|
73
|
+
reader.should_receive :tcp
|
30
74
|
|
31
|
-
|
32
|
-
|
33
|
-
|
75
|
+
o = Object.new
|
76
|
+
o.extend JSTP::API
|
77
|
+
o.dispatch &block
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
context 'an argument is passed' do
|
82
|
+
it 'should dispatch the message via the Connector' do
|
83
|
+
message = stub 'message'
|
84
|
+
writer = stub 'writer'
|
85
|
+
|
86
|
+
JSTP::Connector.instance.should_receive(:to)
|
87
|
+
.and_return writer
|
88
|
+
|
89
|
+
writer.should_receive(:tcp)
|
90
|
+
.with message
|
91
|
+
|
92
|
+
o = Object.new
|
93
|
+
o.extend JSTP::API
|
94
|
+
o.dispatch message
|
95
|
+
end
|
34
96
|
end
|
35
97
|
end
|
36
98
|
end
|
37
99
|
|
38
100
|
describe '#port' do
|
39
101
|
it 'should configure the port number' do
|
40
|
-
pending "This is working, but it's untesteable because of Reactor pattern"
|
41
102
|
message = {
|
42
103
|
"resource" => ["localhost"]
|
43
104
|
}
|
@@ -45,12 +106,7 @@ describe JSTP::API do
|
|
45
106
|
o.extend JSTP::API
|
46
107
|
o.port 3000
|
47
108
|
|
48
|
-
::
|
49
|
-
.with(host: "0.0.0.0", port: 3000)
|
50
|
-
|
51
|
-
o.dispatch do
|
52
|
-
"lala"
|
53
|
-
end
|
109
|
+
JSTP::Connector.instance.port.should == 3000
|
54
110
|
end
|
55
111
|
end
|
56
112
|
end
|
data/spec/jstp/connector_spec.rb
CHANGED
@@ -6,84 +6,11 @@ describe JSTP::Connector do
|
|
6
6
|
JSTP::Connector.ancestors.should include Singleton
|
7
7
|
end
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
@message = {
|
12
|
-
"protocol" => ["JSTP", "0.1"],
|
13
|
-
"method" => "POST",
|
14
|
-
"resource" => [
|
15
|
-
"session.manager",
|
16
|
-
"User"
|
17
|
-
],
|
18
|
-
"timestamp" => 1357334118,
|
19
|
-
"token" => 3523902859084057289594,
|
20
|
-
"referer" => [
|
21
|
-
"browser",
|
22
|
-
"Registerer"
|
23
|
-
],
|
24
|
-
"body" => {
|
25
|
-
"login" => "xavier",
|
26
|
-
"email" => "xavier@fetcher.com",
|
27
|
-
"password" => "secret"
|
28
|
-
}
|
29
|
-
}
|
30
|
-
|
31
|
-
@web_socket_client = stub 'web socket client'
|
32
|
-
@message_json = stub 'message json'
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'should open a websocket to the correct resource in the standard port 33333 and set the callback' do
|
36
|
-
pending "I'm unable to test this properly since providing a Proc will make me lose scope for the client"
|
37
|
-
JSTP::Connector.instance.should_receive(:client)
|
38
|
-
.with(@message["resource"])
|
39
|
-
.and_return @web_socket_client
|
40
|
-
|
41
|
-
@web_socket_client.should_receive(:callback)
|
42
|
-
|
43
|
-
@web_socket_client.should_receive(:send_msg)
|
44
|
-
.with(@message_json)
|
45
|
-
@message.should_receive(:to_json).and_return @message_json
|
46
|
-
|
47
|
-
JSTP::Connector.instance.dispatch @message
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'should attach the callback to the client so the message is actually delivered!'
|
9
|
+
it 'should include a discoverer for Writer' do
|
10
|
+
JSTP::Connector.ancestors.should include Discoverer::Writer
|
51
11
|
end
|
52
12
|
|
53
|
-
|
54
|
-
|
55
|
-
before do
|
56
|
-
@web_socket_client = stub 'web socket client'
|
57
|
-
@resource = ["localhost", "hola", "quetal"]
|
58
|
-
end
|
59
|
-
|
60
|
-
it 'should initialize the websocket client' do
|
61
|
-
EventMachine::WebSocketClient.should_receive(:connect)
|
62
|
-
.with("ws://#{@resource.first}:33333/#{@resource[1..-1].join('/')}")
|
63
|
-
.and_return @web_socket_client
|
64
|
-
|
65
|
-
JSTP::Connector.instance
|
66
|
-
.client(@resource)
|
67
|
-
.should == @web_socket_client
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
describe '#server' do
|
73
|
-
before do
|
74
|
-
JSTP::Connector.instance.port = 33333
|
75
|
-
end
|
76
|
-
|
77
|
-
it 'should start a websocket server in 33333' do
|
78
|
-
JSTP::Server.should_receive :call
|
79
|
-
EventMachine::WebSocket.should_receive(:start)
|
80
|
-
.with({ host: '0.0.0.0', port: 33333 }, &JSTP::Server)
|
81
|
-
|
82
|
-
JSTP::Connector.instance.server
|
83
|
-
end
|
84
|
-
|
85
|
-
it 'should pass the proc JSTP::Server' do
|
86
|
-
pending "Warning, this isn't actually testing the JSTP::Server, I don't know why"
|
87
|
-
end
|
13
|
+
it 'should include a discoverer for Reader' do
|
14
|
+
JSTP::Connector.ancestors.should include Discoverer::Reader
|
88
15
|
end
|
89
16
|
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe JSTP::WebSocket do
|
4
|
+
it 'should be a singleton' do
|
5
|
+
JSTP::WebSocket.ancestors.should include Singleton
|
6
|
+
end
|
7
|
+
|
8
|
+
describe '#event_machine' do
|
9
|
+
before do
|
10
|
+
JSTP::Connector.instance.port = 33333
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should start a websocket server in 33333' do
|
14
|
+
JSTP::WebSocket.instance.server_setup
|
15
|
+
.should_receive :call
|
16
|
+
|
17
|
+
EventMachine::WebSocket.should_receive(:start)
|
18
|
+
.with({ host: '0.0.0.0', port: 33333 }, &JSTP::WebSocket.instance.server_setup)
|
19
|
+
|
20
|
+
JSTP::WebSocket.instance.event_machine.call
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#server_setup' do
|
25
|
+
it 'should set #event_on_message to onmessage' do
|
26
|
+
server = stub 'server'
|
27
|
+
JSTP::WebSocket.instance.event_on_message.should_receive :call
|
28
|
+
|
29
|
+
server.should_receive(:onmessage)
|
30
|
+
.with &JSTP::WebSocket.instance.event_on_message
|
31
|
+
|
32
|
+
JSTP::WebSocket.instance.server_setup.call server
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#event_on_message' do
|
37
|
+
it 'should call the registered block with the parsed message' do
|
38
|
+
@the_proc = stub 'the proc'
|
39
|
+
@message = stub 'message'
|
40
|
+
@parsed_message = stub 'parsed message'
|
41
|
+
|
42
|
+
JSON.should_receive(:parse).with(@message)
|
43
|
+
.and_return @parsed_message
|
44
|
+
|
45
|
+
JSTP::Connector.instance.should_receive(:block)
|
46
|
+
.and_return @the_proc
|
47
|
+
|
48
|
+
@the_proc.should_receive(:call)
|
49
|
+
.with @parsed_message
|
50
|
+
|
51
|
+
JSTP::WebSocket.instance.event_on_message.call @message
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe '#client' do
|
56
|
+
context 'there is no connection for that address' do
|
57
|
+
before do
|
58
|
+
@web_socket_client = stub 'web socket client'
|
59
|
+
@resource = ["localhost", "hola", "quetal"]
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'should initialize the websocket client' do
|
63
|
+
EventMachine::WebSocketClient.should_receive(:connect)
|
64
|
+
.with("ws://#{@resource.first}:33333/#{@resource[1..-1].join('/')}")
|
65
|
+
.and_return @web_socket_client
|
66
|
+
|
67
|
+
JSTP::WebSocket.instance
|
68
|
+
.client(@resource)
|
69
|
+
.should == @web_socket_client
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Reader::JSTP::Connector do
|
4
|
+
describe '#websocket' do
|
5
|
+
it 'should run EventMachine with the JSTP::EventMachine proc' do
|
6
|
+
JSTP::WebSocket.instance.event_machine.should_receive :call
|
7
|
+
|
8
|
+
EventMachine.should_receive(:run)
|
9
|
+
.with &JSTP::WebSocket.instance.event_machine
|
10
|
+
|
11
|
+
reader = Reader::JSTP::Connector.new stub 'connector'
|
12
|
+
reader.websocket
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#tcp' do
|
17
|
+
it 'should create the server and start it' do
|
18
|
+
pending 'I still can test infinite loops'
|
19
|
+
|
20
|
+
tcp_server = stub 'tcp server'
|
21
|
+
|
22
|
+
TCPServer.should_receive(:open)
|
23
|
+
.with(JSTP::Connector.instance.port)
|
24
|
+
.and_return tcp_server
|
25
|
+
|
26
|
+
tcp_server.should_receive(:accept)
|
27
|
+
|
28
|
+
reader = Reader::JSTP::Connector.new stub 'connector'
|
29
|
+
reader.tcp
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Writer::JSTP::Connector do
|
4
|
+
describe '#websocket' do
|
5
|
+
before do
|
6
|
+
@connector = stub 'connector'
|
7
|
+
@message = { "resource" => ["lala"] }
|
8
|
+
@message_json = stub 'message_json'
|
9
|
+
@web_socket_client = stub 'web socket client'
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'should get the client from the pool and set the callback' do
|
13
|
+
@writer = Writer::JSTP::Connector.new @connector
|
14
|
+
|
15
|
+
JSTP::WebSocket.instance.should_receive(:client)
|
16
|
+
.with(@message["resource"])
|
17
|
+
.and_return @web_socket_client
|
18
|
+
|
19
|
+
@web_socket_client.should_receive(:callback)
|
20
|
+
|
21
|
+
@message.should_receive(:to_json).and_return @message_json
|
22
|
+
|
23
|
+
@writer.websocket @message
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should send the message from the callback' do
|
27
|
+
pending "I'm unable to test this properly since providing a Proc will make me lose scope for the client"
|
28
|
+
@writer = Writer::JSTP::Connector.new @connector
|
29
|
+
|
30
|
+
JSTP::WebSocket.should_receive(:client)
|
31
|
+
.with(@message["resource"])
|
32
|
+
.and_return @web_socket_client
|
33
|
+
|
34
|
+
@web_socket_client.should_receive(:callback)
|
35
|
+
|
36
|
+
@message.should_receive(:to_json).and_return @message_json
|
37
|
+
@web_socket_client.should_receive(:send_msg)
|
38
|
+
.with(@message_json)
|
39
|
+
|
40
|
+
@writer.websocket @message
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe '#tcp' do
|
45
|
+
it 'should get the resource and use it as host, then send the dispatch in JSON' do
|
46
|
+
message = stub 'message'
|
47
|
+
message_json = stub 'message json'
|
48
|
+
resource = stub 'resource'
|
49
|
+
hostname = stub 'hostname'
|
50
|
+
socket = stub 'socket'
|
51
|
+
|
52
|
+
message.should_receive(:[]).with("resource")
|
53
|
+
.and_return resource
|
54
|
+
|
55
|
+
resource.should_receive(:first).and_return hostname
|
56
|
+
|
57
|
+
JSTP::Connector.instance.should_receive(:port).
|
58
|
+
and_return 4444
|
59
|
+
|
60
|
+
TCPSocket.should_receive(:open).with(hostname, 4444)
|
61
|
+
.and_return socket
|
62
|
+
|
63
|
+
message.should_receive(:to_json).and_return message_json
|
64
|
+
|
65
|
+
socket.should_receive(:puts).with message_json
|
66
|
+
|
67
|
+
writer = Writer::JSTP::Connector.new ::JSTP::Connector.instance
|
68
|
+
writer.tcp message
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jstp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -45,6 +45,22 @@ dependencies:
|
|
45
45
|
- - ! '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: discoverer
|
50
|
+
requirement: !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
type: :runtime
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ! '>='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
48
64
|
- !ruby/object:Gem::Dependency
|
49
65
|
name: rspec
|
50
66
|
requirement: !ruby/object:Gem::Requirement
|
@@ -78,18 +94,18 @@ files:
|
|
78
94
|
- lib/jstp.rb
|
79
95
|
- lib/jstp/api.rb
|
80
96
|
- lib/jstp/connector.rb
|
81
|
-
- lib/jstp/
|
82
|
-
- lib/jstp/event_machine.rb
|
83
|
-
- lib/jstp/registry.rb
|
84
|
-
- lib/jstp/server.rb
|
97
|
+
- lib/jstp/tcp.rb
|
85
98
|
- lib/jstp/version.rb
|
99
|
+
- lib/jstp/web_socket.rb
|
100
|
+
- lib/reader/jstp/connector.rb
|
101
|
+
- lib/writer/jstp/connector.rb
|
86
102
|
- spec/jstp/api_spec.rb
|
87
103
|
- spec/jstp/connector_spec.rb
|
88
|
-
- spec/jstp/
|
89
|
-
- spec/jstp/
|
90
|
-
- spec/jstp/
|
91
|
-
- spec/jstp/server_spec.rb
|
104
|
+
- spec/jstp/tcp_spec.rb
|
105
|
+
- spec/jstp/web_socket_spec.rb
|
106
|
+
- spec/reader/jstp/connector_spec.rb
|
92
107
|
- spec/spec_helper.rb
|
108
|
+
- spec/writer/jstp/connector_spec.rb
|
93
109
|
homepage: https://github.com/Fetcher/jstp
|
94
110
|
licenses: []
|
95
111
|
post_install_message:
|
@@ -117,9 +133,9 @@ summary: Reference implementation for the sketch protocol JSTP
|
|
117
133
|
test_files:
|
118
134
|
- spec/jstp/api_spec.rb
|
119
135
|
- spec/jstp/connector_spec.rb
|
120
|
-
- spec/jstp/
|
121
|
-
- spec/jstp/
|
122
|
-
- spec/jstp/
|
123
|
-
- spec/jstp/server_spec.rb
|
136
|
+
- spec/jstp/tcp_spec.rb
|
137
|
+
- spec/jstp/web_socket_spec.rb
|
138
|
+
- spec/reader/jstp/connector_spec.rb
|
124
139
|
- spec/spec_helper.rb
|
140
|
+
- spec/writer/jstp/connector_spec.rb
|
125
141
|
has_rdoc:
|
data/lib/jstp/event_machine.rb
DELETED
data/lib/jstp/registry.rb
DELETED
data/lib/jstp/server.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
describe 'JSTP::Event::OnMessage' do
|
5
|
-
it 'should call the registered block with the parsed message' do
|
6
|
-
@the_proc = stub 'the proc'
|
7
|
-
@message = stub 'message'
|
8
|
-
@parsed_message = stub 'parsed message'
|
9
|
-
|
10
|
-
JSON.should_receive(:parse).with(@message)
|
11
|
-
.and_return @parsed_message
|
12
|
-
|
13
|
-
JSTP::Registry.instance.should_receive(:get)
|
14
|
-
.and_return @the_proc
|
15
|
-
|
16
|
-
@the_proc.should_receive(:call)
|
17
|
-
.with @parsed_message
|
18
|
-
|
19
|
-
JSTP::Event::OnMessage.call @message
|
20
|
-
end
|
21
|
-
end
|
data/spec/jstp/registry_spec.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
describe JSTP::Registry do
|
5
|
-
it 'should be a Singleton' do
|
6
|
-
JSTP::Registry.ancestors.should include Singleton
|
7
|
-
end
|
8
|
-
|
9
|
-
describe '#get' do
|
10
|
-
it 'should return the registered block' do
|
11
|
-
@data = stub 'data'
|
12
|
-
JSTP::Registry.instance.set @data
|
13
|
-
JSTP::Registry.instance.get.should == @data
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
describe '#set' do
|
18
|
-
it 'should set the block in the registry' do
|
19
|
-
@data = stub 'data'
|
20
|
-
JSTP::Registry.instance.set @data
|
21
|
-
JSTP::Registry.instance.get.should == @data
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
data/spec/jstp/server_spec.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
describe 'JSTP::Server' do
|
5
|
-
it 'should set JSTP::Event::OnMessage to onmessage' do
|
6
|
-
server = stub 'server'
|
7
|
-
JSTP::Event::OnMessage.stub :call
|
8
|
-
|
9
|
-
server.should_receive(:onmessage)
|
10
|
-
.with(&JSTP::Event::OnMessage)
|
11
|
-
|
12
|
-
JSTP::Server.call server
|
13
|
-
end
|
14
|
-
end
|