em_alldone 0.0.1 → 0.0.2

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.
@@ -1,3 +1,7 @@
1
+ === 0.0.2 / 2014-07-31
2
+
3
+ * Add EmAlldone.with for setting the arguments passed to the callback.
4
+
1
5
  === 0.0.1 / 2014-07-31
2
6
 
3
7
  * Initial commit
@@ -12,15 +12,28 @@ success or failure. Doesn't support errbacks.
12
12
 
13
13
  A quick example:
14
14
 
15
+ require 'eventmachine'
15
16
  require 'em_alldone'
16
17
 
17
18
  d1 = EM::DefaultDeferrable.new
18
19
  d2 = EM::DefaultDeferrable.new
19
- EmAlldone.new(d1, d2) do
20
- puts "All done"
20
+ EmAlldone.new(d1, d2) do |arg|
21
+ puts "All done #{arg}"
21
22
  end
22
- d1.succeed # Nothing happens
23
- d2.succeed # Prints out "All done"
23
+ d2.succeed 2 # Nothing happens
24
+ d1.succeed 1 # Prints out "All done 2"
25
+
26
+ d1 = EM::DefaultDeferrable.new
27
+ d2 = EM::DefaultDeferrable.new
28
+ str = "Hello"
29
+ d1.callback do
30
+ str.upcase!
31
+ end
32
+ EmAlldone.with([d1, d2], str) do |arg|
33
+ puts "All done #{arg}"
34
+ end
35
+ d2.succeed 2 # Nothing happens
36
+ d1.succeed 1 # Prints out "All done HELLO"
24
37
 
25
38
 
26
39
  == REQUIREMENTS:
@@ -32,8 +45,7 @@ gem installed and required.
32
45
 
33
46
  == INSTALL:
34
47
 
35
- TODO
36
-
48
+ gem install em_alldone
37
49
 
38
50
  == RUNNING THE SPECS:
39
51
 
@@ -3,7 +3,47 @@
3
3
  # success or failure. Doesn't support errbacks.
4
4
  class EmAlldone
5
5
  module Version # :nodoc:
6
- STRING = '0.0.1'
6
+ STRING = '0.0.2'
7
+ end
8
+
9
+ # This is a super simple implementation of EM::DefaultDeferrable.
10
+ # This is used so we don't need to explicitly depend upon the EventMachine gem.
11
+ # This is not meant for external use.
12
+ class BasicDeferrable # :nodoc:
13
+ # Does nothing
14
+ def errback; end
15
+ def fail(*args); end
16
+
17
+ # If the callback arguments are set (i.e. `succeed` has been called),
18
+ # then the given callback will be run immediately.
19
+ def callback &block
20
+ @callback = block
21
+ if @callback_args
22
+ @callback.call *@callback_args
23
+ end
24
+ self
25
+ end
26
+
27
+ # If the callback is set, then it will be run.
28
+ # Otherwise we save the arguments for later.
29
+ def succeed(*args)
30
+ if @callback
31
+ @callback.call(*args)
32
+ else
33
+ @callback_args = args
34
+ end
35
+ end
36
+ end
37
+
38
+
39
+
40
+ # Returns an instance. However, it ensures that when the callback is called
41
+ # it is called with the specified arguments.
42
+ def self.with(deferrables, *args, &block)
43
+ deferrables = deferrables.flatten
44
+ deferrables << BasicDeferrable.new
45
+ deferrables[-1].succeed *args
46
+ new(deferrables, &block)
7
47
  end
8
48
 
9
49
  def initialize(*deferrables, &block)
@@ -52,4 +52,41 @@ describe EmAlldone do
52
52
  @it_ran.should be_true
53
53
  end
54
54
  end
55
+
56
+ context "the arguments to the callback" do
57
+ let(:d1) { EM::DefaultDeferrable.new }
58
+ let(:d2) { EM::DefaultDeferrable.new }
59
+ before do
60
+ EmAlldone.new(d1, d2) do |*args|
61
+ @it_ran = args
62
+ end
63
+ end
64
+
65
+ context "implicitly set" do
66
+ it "is the arguments of the last deferrable's succeed" do
67
+ d2.succeed 2, "two"
68
+ d1.succeed 1
69
+ @it_ran.should == [2, "two"]
70
+ end
71
+
72
+ it "is the arguments of the last deferrable's fail" do
73
+ d1.fail 1, "one"
74
+ d2.fail 2
75
+ @it_ran.should == [2]
76
+ end
77
+ end
78
+
79
+ context "explicitly set" do
80
+ it "is the explicitly set argements" do
81
+ EmAlldone.with([d1, d2], "explicitly", :set) do |*args|
82
+ @it_ran = args
83
+ end
84
+
85
+ d1.succeed 1
86
+ d2.fail 2, "two"
87
+
88
+ @it_ran.should == ["explicitly", :set]
89
+ end
90
+ end
91
+ end
55
92
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: em_alldone
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-07-31 00:00:00.000000000 Z
12
+ date: 2014-08-01 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Provides a way to execute a callback when all of a set of deferrables
15
15
  complete.
@@ -54,7 +54,7 @@ rubyforge_project:
54
54
  rubygems_version: 1.8.28
55
55
  signing_key:
56
56
  specification_version: 3
57
- summary: em_alldone0.0.1
57
+ summary: em_alldone0.0.2
58
58
  test_files:
59
59
  - spec/em_alldone_spec.rb
60
60
  - spec/spec_helper.rb