em_alldone 0.0.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.
@@ -0,0 +1,3 @@
1
+ .DS_Store
2
+ html
3
+ pkg
@@ -0,0 +1,3 @@
1
+ === 0.0.1 / 2014-07-31
2
+
3
+ * Initial commit
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ group :test do
4
+ gem 'rspec'
5
+ gem 'em-spec', :require => 'em/spec'
6
+ end
@@ -0,0 +1,27 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ bacon (1.1.0)
5
+ diff-lcs (1.1.3)
6
+ em-spec (0.2.6)
7
+ bacon
8
+ eventmachine
9
+ rspec (> 2.6.0)
10
+ test-unit
11
+ eventmachine (1.0.3)
12
+ rspec (2.8.0)
13
+ rspec-core (~> 2.8.0)
14
+ rspec-expectations (~> 2.8.0)
15
+ rspec-mocks (~> 2.8.0)
16
+ rspec-core (2.8.0)
17
+ rspec-expectations (2.8.0)
18
+ diff-lcs (~> 1.1.2)
19
+ rspec-mocks (2.8.0)
20
+ test-unit (2.4.7)
21
+
22
+ PLATFORMS
23
+ ruby
24
+
25
+ DEPENDENCIES
26
+ em-spec
27
+ rspec
@@ -0,0 +1,70 @@
1
+ = EmAlldone
2
+
3
+ http://github.com/thoughtless/em_alldone
4
+
5
+ == DESCRIPTION:
6
+
7
+ Not a genuine Deferrable in that it doesn't include EM::Deferrable. Callbacks
8
+ set will be run when all the passed in deferrables have completed with either
9
+ success or failure. Doesn't support errbacks.
10
+
11
+ == SYNOPSIS:
12
+
13
+ A quick example:
14
+
15
+ require 'em_alldone'
16
+
17
+ d1 = EM::DefaultDeferrable.new
18
+ d2 = EM::DefaultDeferrable.new
19
+ EmAlldone.new(d1, d2) do
20
+ puts "All done"
21
+ end
22
+ d1.succeed # Nothing happens
23
+ d2.succeed # Prints out "All done"
24
+
25
+
26
+ == REQUIREMENTS:
27
+
28
+ Although there are no strict requirements, this gem is written to work with
29
+ Ruby EventMachine and will likely be of little value if you don't have that
30
+ gem installed and required.
31
+
32
+
33
+ == INSTALL:
34
+
35
+ TODO
36
+
37
+
38
+ == RUNNING THE SPECS:
39
+
40
+ bundle exec rspec spec
41
+
42
+
43
+ == TODO:
44
+
45
+
46
+
47
+ == LICENSE:
48
+
49
+ (The MIT License)
50
+
51
+ Copyright (c) 2012 Poll Everywhere, Paul Cortens
52
+
53
+ Permission is hereby granted, free of charge, to any person obtaining
54
+ a copy of this software and associated documentation files (the
55
+ 'Software'), to deal in the Software without restriction, including
56
+ without limitation the rights to use, copy, modify, merge, publish,
57
+ distribute, sublicense, and/or sell copies of the Software, and to
58
+ permit persons to whom the Software is furnished to do so, subject to
59
+ the following conditions:
60
+
61
+ The above copyright notice and this permission notice shall be
62
+ included in all copies or substantial portions of the Software.
63
+
64
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
65
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
66
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
67
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
68
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
69
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
70
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
3
+ require "em_alldone" # To dynamically load the version string
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "em_alldone"
7
+ s.version = EmAlldone::Version::STRING
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Paul Cortens"]
10
+ s.email = "paul@thoughtless.ca"
11
+ s.homepage = "http://github.com/thoughtless/em_alldone"
12
+ s.summary = "em_alldone#{EmAlldone::Version::STRING}"
13
+ s.description = "Provides a way to execute a callback when all of a set of deferrables complete."
14
+ s.license = 'MIT'
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.extra_rdoc_files = [ 'README.rdoc', 'CHANGELOG.rdoc']
20
+ s.rdoc_options = ["--charset=UTF-8"]
21
+ s.require_path = "lib"
22
+ end
@@ -0,0 +1,37 @@
1
+ # Not a genuine Deferrable in that it doesn't include EM::Deferrable. Callbacks
2
+ # set will be run when all the passed in deferrables have completed with either
3
+ # success or failure. Doesn't support errbacks.
4
+ class EmAlldone
5
+ module Version # :nodoc:
6
+ STRING = '0.0.1'
7
+ end
8
+
9
+ def initialize(*deferrables, &block)
10
+ deferrables = deferrables.flatten
11
+ raise ArgumentError, "Must provide at least one argument" unless deferrables.size > 0
12
+ deferrables.each do |d|
13
+ raise ArgumentError, "All arguments must be deferrables, but #{d.inspect} doesn't." unless d.respond_to?(:callback) && d.respond_to?(:errback)
14
+ end
15
+
16
+ @deferrable = deferrables[-1]
17
+
18
+ if deferrables.size > 1
19
+ @recurse = EmAlldone.new deferrables[0...-1]
20
+ end
21
+
22
+ self.callback &block if block
23
+ end
24
+
25
+ def callback &block
26
+ current_proc = Proc.new do
27
+ @deferrable.callback &block
28
+ @deferrable.errback &block
29
+ end
30
+
31
+ if @recurse
32
+ @recurse.callback &current_proc
33
+ else
34
+ current_proc.call
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+ require 'em_alldone'
3
+
4
+ describe EmAlldone do
5
+ describe '.new' do
6
+ it 'raises an error if no deferrables are passed as arguments' do
7
+ lambda {
8
+ EmAlldone.new
9
+ }.should raise_error ArgumentError, /at least one/
10
+ end
11
+
12
+ it "raises an error if the argument isn't a deferrables" do
13
+ lambda {
14
+ EmAlldone.new 1, 2, 3
15
+ }.should raise_error ArgumentError, /must be deferrables/
16
+ end
17
+
18
+ it 'accepts a callback' do
19
+ EmAlldone.new(
20
+ EM::DefaultDeferrable.new.tap {|d| d.succeed }
21
+ ) { @it_ran = true }
22
+ @it_ran.should be_true
23
+ end
24
+ end
25
+
26
+ context "all the deferrables pass" do
27
+ let(:d1) { EM::DefaultDeferrable.new.tap {|d| d.succeed } }
28
+ let(:d2) { EM::DefaultDeferrable.new.tap {|d| d.succeed } }
29
+ subject { EmAlldone.new(d1, d2) }
30
+ it "runs the call back" do
31
+ subject.callback { @it_ran = true }
32
+ @it_ran.should be_true
33
+ end
34
+ end
35
+
36
+ context "a deferrable doesn't finish" do
37
+ let(:d1) { EM::DefaultDeferrable.new.tap {|d| d.succeed } }
38
+ let(:d2) { EM::DefaultDeferrable.new }
39
+ subject { EmAlldone.new(d1, d2) }
40
+ it "does not run the call back" do
41
+ subject.callback { @it_ran = true }
42
+ @it_ran.should be_nil
43
+ end
44
+ end
45
+
46
+ context "all the deferrables fail" do
47
+ let(:d1) { EM::DefaultDeferrable.new.tap {|d| d.fail } }
48
+ let(:d2) { EM::DefaultDeferrable.new.tap {|d| d.fail } }
49
+ subject { EmAlldone.new(d1, d2) }
50
+ it "runs the call back" do
51
+ subject.callback { @it_ran = true }
52
+ @it_ran.should be_true
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,7 @@
1
+ require 'bundler/setup'
2
+ require 'em_alldone'
3
+ require 'em-spec/rspec'
4
+
5
+ # Requires supporting ruby files with custom matchers and macros, etc,
6
+ # # in spec/support/ and its subdirectories.
7
+ Dir[File.join(File.expand_path("..", __FILE__), "support/**/*.rb")].each {|f| require f}
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: em_alldone
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Paul Cortens
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-07-31 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Provides a way to execute a callback when all of a set of deferrables
15
+ complete.
16
+ email: paul@thoughtless.ca
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files:
20
+ - README.rdoc
21
+ - CHANGELOG.rdoc
22
+ files:
23
+ - .gitignore
24
+ - CHANGELOG.rdoc
25
+ - Gemfile
26
+ - Gemfile.lock
27
+ - README.rdoc
28
+ - em_alldone.gemspec
29
+ - lib/em_alldone.rb
30
+ - spec/em_alldone_spec.rb
31
+ - spec/spec_helper.rb
32
+ homepage: http://github.com/thoughtless/em_alldone
33
+ licenses:
34
+ - MIT
35
+ post_install_message:
36
+ rdoc_options:
37
+ - --charset=UTF-8
38
+ require_paths:
39
+ - lib
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ required_rubygems_version: !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ! '>='
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ requirements: []
53
+ rubyforge_project:
54
+ rubygems_version: 1.8.28
55
+ signing_key:
56
+ specification_version: 3
57
+ summary: em_alldone0.0.1
58
+ test_files:
59
+ - spec/em_alldone_spec.rb
60
+ - spec/spec_helper.rb