farcall 0.3.0 → 0.3.1
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 +4 -4
- data/lib/farcall/endpoint.rb +28 -7
- data/lib/farcall/version.rb +1 -1
- data/spec/endpoint_spec.rb +18 -2
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 963744c3ea9c75aceaed2bd2add46e9d6a39e88d
|
4
|
+
data.tar.gz: 1debec27b99b58d68314425b47999c12499e1e39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ddc0f4b278c77c6671ab8f612355729de473b309389dc208ff1d51753907d0abac92aa3f7bda719cff39975134018123d032c7700c231e4be464d0e4218e0a0
|
7
|
+
data.tar.gz: 6fdf6349dbd2644641d8ccc3aed7bb0716bf2b7f40545cf02dc7b3a4384dead4f197dd03e55fa8c6ee8e0b466d6987591f565b28a208dfcf8c2a346ae4bd9215
|
data/lib/farcall/endpoint.rb
CHANGED
@@ -30,10 +30,11 @@ module Farcall
|
|
30
30
|
abort :format_error, $!
|
31
31
|
end
|
32
32
|
}
|
33
|
-
@send_lock = Mutex.new
|
34
|
-
@receive_lock = Mutex.new
|
35
33
|
|
36
|
-
@
|
34
|
+
@send_lock = Mutex.new
|
35
|
+
@receive_lock = Mutex.new
|
36
|
+
@handlers = {}
|
37
|
+
@waiting = {}
|
37
38
|
end
|
38
39
|
|
39
40
|
# The provided block will be called if endpoint functioning will be aborted.
|
@@ -123,14 +124,32 @@ module Farcall
|
|
123
124
|
result
|
124
125
|
end
|
125
126
|
|
126
|
-
# Process remote commands.
|
127
|
-
#
|
128
|
-
#
|
129
|
-
#
|
127
|
+
# Process remote commands. Provided block will be executed on every remote command
|
128
|
+
# taking parameters |name, args, kwargs|. Whatever block returns will be passed to a calling
|
129
|
+
# party. The same any exception that the block might raise would be send back to caller.
|
130
|
+
#
|
131
|
+
# this block will be called onlly of there wes no `provider` specified and no #on handler set
|
132
|
+
# for the command being executed.
|
133
|
+
#
|
130
134
|
def on_remote_call &block
|
131
135
|
@on_remote_call = block
|
132
136
|
end
|
133
137
|
|
138
|
+
alias on_command on_remote_call
|
139
|
+
|
140
|
+
# Set handler to perform the named command. Block will be called when the remote party calls
|
141
|
+
# with parameters passed from the remote. The block returned value will be passed back to
|
142
|
+
# the caller.
|
143
|
+
#
|
144
|
+
# The provider if set is calling instead.
|
145
|
+
#
|
146
|
+
# If the block raises the exception it will be reported to the caller as an error (depending
|
147
|
+
# on it's platofrm, will raise exception on its end or report error)
|
148
|
+
def on(name, &block)
|
149
|
+
@handlers[name.to_s] = block
|
150
|
+
end
|
151
|
+
|
152
|
+
|
134
153
|
# Get the Farcall::RemoteInterface connnected to this endpoint. Any subsequent calls with
|
135
154
|
# return the same instance.
|
136
155
|
def remote
|
@@ -175,6 +194,8 @@ module Farcall
|
|
175
194
|
args << fixed
|
176
195
|
end
|
177
196
|
@provider.send :remote_call, cmd.to_sym, args
|
197
|
+
elsif (h = @handlers[cmd.to_s])
|
198
|
+
h.call args, kwargs
|
178
199
|
elsif @on_remote_call
|
179
200
|
@on_remote_call.call cmd, args, kwargs
|
180
201
|
end
|
data/lib/farcall/version.rb
CHANGED
data/spec/endpoint_spec.rb
CHANGED
@@ -17,7 +17,7 @@ class TestProvider < Farcall::Provider
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def get_hash
|
20
|
-
{ 'foo' => 'bar', 'bardd' => 'buzz', 'last' => 'item', 'bar' => 'test'}
|
20
|
+
{ 'foo' => 'bar', 'bardd' => 'buzz', 'last' => 'item', 'bar' => 'test' }
|
21
21
|
end
|
22
22
|
|
23
23
|
private
|
@@ -33,7 +33,7 @@ class StringProvider < Farcall::Provider
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def provide_hash
|
36
|
-
{ 'bar' => 'test', 'foo' => 'bar'}
|
36
|
+
{ 'bar' => 'test', 'foo' => 'bar' }
|
37
37
|
end
|
38
38
|
|
39
39
|
def value
|
@@ -44,6 +44,21 @@ end
|
|
44
44
|
describe 'endpoint' do
|
45
45
|
include Farcall
|
46
46
|
|
47
|
+
it 'runs on commands' do
|
48
|
+
tc = Farcall::LocalConnection.new
|
49
|
+
|
50
|
+
ea = Farcall::Endpoint.new tc.a
|
51
|
+
eb = Farcall::Endpoint.new tc.b
|
52
|
+
|
53
|
+
ea.on('command_one') { |args, kwargs|
|
54
|
+
{ 'return_one': [args, kwargs] }
|
55
|
+
}
|
56
|
+
rs = eb.remote.command_one("uno", 'due', tre: 3)
|
57
|
+
rs.return_one[0].should == ['uno', 'due']
|
58
|
+
rs.return_one[1].should == { 'tre' => 3}
|
59
|
+
|
60
|
+
end
|
61
|
+
|
47
62
|
it 'should do RPC call with provider/interface' do
|
48
63
|
tc = Farcall::LocalConnection.new
|
49
64
|
|
@@ -72,6 +87,7 @@ describe 'endpoint' do
|
|
72
87
|
expect(-> { i.abort() }).to raise_error Farcall::RemoteError, /NoMethodError/
|
73
88
|
expect(-> { i.doncallpublic() }).to raise_error Farcall::RemoteError, /NoMethodError/
|
74
89
|
expect(-> { i.initialize(1) }).to raise_error Farcall::RemoteError, /NoMethodError/
|
90
|
+
expect(-> { i.endpoint.call(:class, 1) }).to raise_error Farcall::RemoteError, /NoMethodError/
|
75
91
|
end
|
76
92
|
|
77
93
|
def check_protocol format
|