em_remote_call 0.0.5 → 0.0.6

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.
@@ -33,8 +33,17 @@ module EM::RemoteCall::Server
33
33
  def json_parsed(hash)
34
34
  remote_call = EM::RemoteCall::Call.new hash[:instance], hash[:method].to_sym, hash[:argument]
35
35
 
36
- remote_call.call do |blk_value|
37
- send_data({:deferrable_id => hash[:deferrable_id], :success => blk_value})
36
+ ret = remote_call.call do |result|
37
+ send_data({:deferrable_id => hash[:deferrable_id], :success => result})
38
+ end
39
+
40
+ if ret.is_a? EM::Deferrable
41
+ ret.callback do |result|
42
+ send_data({:deferrable_id => hash[:deferrable_id], :success => result})
43
+ end
44
+ ret.errback do |result|
45
+ send_data({:deferrable_id => hash[:deferrable_id], :error => result})
46
+ end
38
47
  end
39
48
 
40
49
  rescue => e
@@ -1,3 +1,3 @@
1
1
  module EmRemoteCall
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -30,6 +30,12 @@ class ServerTrack < Track
30
30
  def raise_hell
31
31
  raise 'foobar'
32
32
  end
33
+ def with_deferrable(outcome = 'succeed') # does not take a block
34
+ d = EventMachine::DefaultDeferrable.new
35
+ d.send outcome
36
+ return d
37
+ end
38
+
33
39
  def self.some_class_meth
34
40
  yield
35
41
  end
@@ -40,6 +46,7 @@ class ClientTrack < Track
40
46
  remote_method :init_track_on_server, :class_name => 'ServerTrack', :calls => :new
41
47
  remote_method :play, :class_name => 'ServerTrack', :find_by => :id
42
48
  remote_method :raise_hell, :class_name => 'ServerTrack', :find_by => :id
49
+ remote_method :with_deferrable, :class_name => 'ServerTrack', :find_by => :id
43
50
 
44
51
  class << self
45
52
  extend EM::RemoteCall
@@ -111,4 +118,43 @@ describe EM::RemoteCall do
111
118
  end
112
119
  end
113
120
  end
121
+ describe "with a deferrable" do
122
+ describe "on success" do
123
+ describe "with a block" do
124
+ it "should use the block as callback" do
125
+ test_on_client do
126
+ callb = mock(:callb)
127
+ callb.should_receive(:foo).with()
128
+ c = ClientTrack.new
129
+ c.init_track_on_server({})
130
+ c.with_deferrable(:succeed){ callb.foo }
131
+ end
132
+ end
133
+ end
134
+ describe "with callback" do
135
+ it "should use callback" do
136
+ test_on_client do
137
+ callb = mock(:callb)
138
+ callb.should_receive(:foo).with()
139
+ c = ClientTrack.new
140
+ c.init_track_on_server({})
141
+ play_call = c.with_deferrable(:succeed)
142
+ play_call.callback{ callb.foo }
143
+ end
144
+ end
145
+ end
146
+ end
147
+ describe "on error" do
148
+ it "should use errback" do
149
+ test_on_client do
150
+ callb = mock(:callb)
151
+ callb.should_receive(:foo).with()
152
+ c = ClientTrack.new
153
+ c.init_track_on_server({})
154
+ play_call = c.with_deferrable(:fail)
155
+ play_call.errback{ callb.foo }
156
+ end
157
+ end
158
+ end
159
+ end
114
160
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 5
9
- version: 0.0.5
8
+ - 6
9
+ version: 0.0.6
10
10
  platform: ruby
11
11
  authors:
12
12
  - Niko Dittmann
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-12-22 00:00:00 +01:00
17
+ date: 2010-12-23 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency