when 0.1.0

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.
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,18 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ when (0.1.0)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+ minitest (2.12.1)
10
+ rake (0.9.2.2)
11
+
12
+ PLATFORMS
13
+ ruby
14
+
15
+ DEPENDENCIES
16
+ minitest (~> 2.0)
17
+ rake (~> 0.9)
18
+ when!
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "rake/testtask"
2
+ require "bundler/gem_tasks"
3
+
4
+ Rake::TestTask.new("test") do |test|
5
+ test.libs << "test"
6
+ test.pattern = "test/**/*_test.rb"
7
+ test.verbose = true
8
+ end
9
+
10
+ task :default => :test
data/Readme.md ADDED
@@ -0,0 +1,119 @@
1
+ # When.rb
2
+
3
+ This library is a Ruby port of the wonderful JavaScript promise library
4
+ [when.js](https://github.com/cujojs/when). The API is kept as close to the
5
+ original as possible. In cases where there's a trade-off between 1:1 API
6
+ compatibility and "being Ruby-like", the latter is preferred. An example is
7
+ `When.defer`, which yields the newly created deferred to a block in Ruby.
8
+
9
+ This is currently a minimal implementation and the port is being built on a
10
+ what-I-need basis.
11
+
12
+ ## API
13
+
14
+ ### `When(value_or_promise)`
15
+
16
+ Returns a promise. If the value is already a promise, it is returned. Otherwise,
17
+ a new promise is created and immediately resolved with the provided value.
18
+
19
+ ### `When.defer`
20
+
21
+ Create a deferred, equivalent to `When::Deferred.new`. The deferred can be
22
+ "split" in its resolver and promise parts for better encapsulation:
23
+
24
+ ```ruby
25
+ require "when"
26
+ require "eventmachine"
27
+
28
+ def async
29
+ deferred = When.defer
30
+ EventMachine.defer { deferred.resolver.resolve(42) }
31
+ deferred.promise
32
+ end
33
+
34
+ EventMachine.run do
35
+ async.then do |num
36
+ puts "Got number #{num}"
37
+ EventMachine.stop
38
+ end
39
+ end
40
+ ```
41
+
42
+ In this example, the returned promise can only register success and failure
43
+ callbacks, it can not be used to resolve the deferred.
44
+
45
+ ### `When.resolve(value)`
46
+
47
+ Creates a deferred and immediately resolves it with `value`, then returns the
48
+ promise.
49
+
50
+ ### `When.reject(value)`
51
+
52
+ Creates a deferred and immediately rejects it with `value`, then returns the
53
+ promise.
54
+
55
+ ### `When.all(promises)`
56
+
57
+ Takes an array of promises/deferreds and returns a promise that will either
58
+ reject when the first promise rejects, or resolve when all promises have
59
+ resolved.
60
+
61
+ ## Why?
62
+
63
+ Working with EventMachine, I found that I didn't care to much for its deferrable
64
+ implementation. My main objections was:
65
+
66
+ 1. The way it encourages you to extend deferrable types with custom logic to
67
+ create deferrable business objects.
68
+ 2. (More importantly) How it allows deferrables to be resolved multiple times.
69
+
70
+
71
+ ## Installing
72
+
73
+ `when` ships as a gem:
74
+
75
+ $ gem install when
76
+
77
+ Or in your Gemfile:
78
+
79
+ gem "when", "~> 0"
80
+
81
+ ## Contributing
82
+
83
+ Contributions are welcome. To get started:
84
+
85
+ $ git clone git://gitorious.org/gitorious/when.git
86
+ $ cd when
87
+ $ bundle install
88
+ $ rake
89
+
90
+ When you have fixed a bug/added a feature/done your thing, create a
91
+ [clone on Gitorious](http://gitorious.org/gitorious/when-rb) or a
92
+ [fork on GitHub](http://github.com/cjohansen/when-rb) and send a
93
+ merge request/pull request, whichever you prefer.
94
+
95
+ Please add tests when adding/altering code, and always make sure all the tests
96
+ pass before submitting your contribution.
97
+
98
+ ## License
99
+
100
+ ### The MIT License (MIT)
101
+
102
+ **Copyright (C) 2012 Gitorious AS**
103
+
104
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
105
+ this software and associated documentation files (the "Software"), to deal in
106
+ the Software without restriction, including without limitation the rights to
107
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
108
+ the Software, and to permit persons to whom the Software is furnished to do so,
109
+ subject to the following conditions:
110
+
111
+ The above copyright notice and this permission notice shall be included in all
112
+ copies or substantial portions of the Software.
113
+
114
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
115
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
116
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
117
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
118
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
119
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/lib/when.rb ADDED
@@ -0,0 +1,135 @@
1
+ # encoding: utf-8
2
+ # --
3
+ # The MIT License (MIT)
4
+ #
5
+ # Copyright (C) 2012 Gitorious AS
6
+ #
7
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ # of this software and associated documentation files (the "Software"), to deal
9
+ # in the Software without restriction, including without limitation the rights
10
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ # copies of the Software, and to permit persons to whom the Software is
12
+ # furnished to do so, subject to the following conditions:
13
+ #
14
+ # The above copyright notice and this permission notice shall be included in all
15
+ # copies or substantial portions of the Software.
16
+ #
17
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ # SOFTWARE.
24
+ #++
25
+
26
+ module When
27
+ class Promise
28
+ def initialize(deferred); @deferred = deferred; end
29
+ def then(&block); @deferred.then(&block); end
30
+ def callback(&block); @deferred.callback(&block); end
31
+ def errback(&block); @deferred.errback(&block); end
32
+ end
33
+
34
+ class Resolver
35
+ def initialize(deferred); @deferred = deferred; end
36
+ def resolve(*args); @deferred.resolve(*args); end
37
+ def reject(*args); @deferred.reject(*args); end
38
+ def resolved?; @deferred.resolved; end
39
+ end
40
+
41
+ class Deferred
42
+ attr_reader :resolver, :promise
43
+
44
+ def initialize
45
+ @resolution = nil
46
+ @callbacks = { :resolved => [], :rejected => [] }
47
+ @resolver = Resolver.new(self)
48
+ @promise = Promise.new(self)
49
+ end
50
+
51
+ def resolve(*args); mark_resolved(:resolved, args); end
52
+ def reject(*args); mark_resolved(:rejected, args); end
53
+ def callback(&block); add_callback(:resolved, block); end
54
+ def then(&block); add_callback(:resolved, block); end
55
+ def errback(&block); add_callback(:rejected, block); end
56
+ def resolved?; !@resolution.nil?; end
57
+
58
+ private
59
+ def add_callback(type, block)
60
+ return notify_callbacks({ type => [block] }) if resolved?
61
+ @callbacks[type] << block
62
+ end
63
+
64
+ def mark_resolved(state, args)
65
+ raise AlreadyResolvedError.new("Already resolved") if resolved?
66
+ @resolution = [state, args]
67
+ notify_callbacks(@callbacks)
68
+ end
69
+
70
+ def notify_callbacks(callbacks)
71
+ blocks = callbacks[@resolution.first] || []
72
+ blocks.each { |cb| cb.call(*@resolution.last) }
73
+ end
74
+ end
75
+
76
+ def self.defer
77
+ deferred = Deferred.new
78
+ yield deferred if block_given?
79
+ deferred
80
+ end
81
+
82
+ def self.resolve(val)
83
+ deferred = Deferred.new
84
+ deferred.resolve(val)
85
+ deferred.promise
86
+ end
87
+
88
+ def self.reject(val)
89
+ deferred = Deferred.new
90
+ deferred.reject(val)
91
+ deferred.promise
92
+ end
93
+
94
+ def self.all(promises)
95
+ raise(ArgumentError, "expected enumerable promises") if !promises.is_a?(Enumerable)
96
+ resolved = 0
97
+ results = []
98
+ d = Deferred.new
99
+
100
+ attempt_resolution = lambda do |err, res|
101
+ break if d.resolved?
102
+ if err.nil?
103
+ d.resolve(res) if promises.length == resolved
104
+ else
105
+ d.reject(err)
106
+ end
107
+ end
108
+
109
+ wait_for_all(promises) do |err, result, index|
110
+ resolved += 1
111
+ results[index] = result
112
+ attempt_resolution.call(err, results)
113
+ end
114
+
115
+ attempt_resolution.call(nil, results) if promises.length == 0
116
+ d.promise
117
+ end
118
+
119
+ private
120
+ def self.wait_for_all(promises, &block)
121
+ promises.each_with_index do |p, i|
122
+ p.callback do |result|
123
+ block.call(nil, result, i)
124
+ end
125
+ p.errback { |e| block.call(e, nil, i) }
126
+ end
127
+ end
128
+
129
+ class AlreadyResolvedError < Exception; end
130
+ end
131
+
132
+ def When(val)
133
+ return val if val.respond_to?(:callback) && val.respond_to?(:errback)
134
+ When.resolve(val)
135
+ end
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+ # --
3
+ # The MIT License (MIT)
4
+ #
5
+ # Copyright (C) 2012 Gitorious AS
6
+ #
7
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ # of this software and associated documentation files (the "Software"), to deal
9
+ # in the Software without restriction, including without limitation the rights
10
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ # copies of the Software, and to permit persons to whom the Software is
12
+ # furnished to do so, subject to the following conditions:
13
+ #
14
+ # The above copyright notice and this permission notice shall be included in all
15
+ # copies or substantial portions of the Software.
16
+ #
17
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ # SOFTWARE.
24
+ #++
25
+
26
+ module When
27
+ VERSION = "0.1.0"
28
+ end
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+ # --
3
+ # The MIT License (MIT)
4
+ #
5
+ # Copyright (C) 2012 Gitorious AS
6
+ #
7
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ # of this software and associated documentation files (the "Software"), to deal
9
+ # in the Software without restriction, including without limitation the rights
10
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ # copies of the Software, and to permit persons to whom the Software is
12
+ # furnished to do so, subject to the following conditions:
13
+ #
14
+ # The above copyright notice and this permission notice shall be included in all
15
+ # copies or substantial portions of the Software.
16
+ #
17
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ # SOFTWARE.
24
+ #++
25
+ require "bundler/setup"
26
+ require "minitest/autorun"
27
+
28
+ Bundler.require(:default, :test)
data/test/when_test.rb ADDED
@@ -0,0 +1,249 @@
1
+ # encoding: utf-8
2
+ # --
3
+ # The MIT License (MIT)
4
+ #
5
+ # Copyright (C) 2012 Gitorious AS
6
+ #
7
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ # of this software and associated documentation files (the "Software"), to deal
9
+ # in the Software without restriction, including without limitation the rights
10
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ # copies of the Software, and to permit persons to whom the Software is
12
+ # furnished to do so, subject to the following conditions:
13
+ #
14
+ # The above copyright notice and this permission notice shall be included in all
15
+ # copies or substantial portions of the Software.
16
+ #
17
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ # SOFTWARE.
24
+ #++
25
+ require "test_helper"
26
+ require "when"
27
+
28
+ describe When do
29
+ describe "When" do
30
+ it "returns promise" do
31
+ promise = When(42)
32
+ assert promise.respond_to?(:callback)
33
+ assert promise.respond_to?(:errback)
34
+ end
35
+
36
+ it "resolves promise with value" do
37
+ promise = When(42)
38
+ called_back = false
39
+ promise.callback do |value|
40
+ assert_equal 42, value
41
+ called_back = true
42
+ end
43
+
44
+ assert called_back
45
+ end
46
+ end
47
+
48
+ describe "resolve" do
49
+ it "returns resolved promise" do
50
+ called_back = false
51
+ When.resolve(42).callback do |num|
52
+ assert_equal 42, num
53
+ called_back = true
54
+ end
55
+
56
+ assert called_back
57
+ end
58
+ end
59
+
60
+ describe "reject" do
61
+ it "returns rejected promise" do
62
+ called_back = false
63
+ When.reject(42).errback do |num|
64
+ assert_equal 42, num
65
+ called_back = true
66
+ end
67
+
68
+ assert called_back
69
+ end
70
+ end
71
+
72
+ describe "defer" do
73
+ it "creates deferred" do
74
+ deferred = When.defer
75
+ assert deferred.respond_to?(:callback)
76
+ assert deferred.respond_to?(:errback)
77
+ assert deferred.respond_to?(:resolve)
78
+ assert deferred.respond_to?(:reject)
79
+ end
80
+
81
+ it "resolves promise through resolver" do
82
+ deferred = When.defer
83
+ called_back = false
84
+ deferred.promise.callback { called_back = true }
85
+ assert !called_back
86
+ deferred.resolver.resolve
87
+ assert called_back
88
+ end
89
+
90
+ it "aliases then to callback" do
91
+ deferred = When.defer
92
+ called_back = false
93
+ deferred.promise.then { called_back = true }
94
+ deferred.resolver.resolve
95
+ assert called_back
96
+ end
97
+
98
+ it "resolves promise through deferred" do
99
+ deferred = When.defer
100
+ called_back = false
101
+ deferred.promise.callback { called_back = true }
102
+ assert !called_back
103
+ deferred.resolve
104
+ assert called_back
105
+ end
106
+
107
+ it "resolves deferred through deferred" do
108
+ deferred = When.defer
109
+ called_back = false
110
+ deferred.callback { called_back = true }
111
+ assert !called_back
112
+ deferred.resolve
113
+ assert called_back
114
+ end
115
+
116
+ it "raises if already resolved" do
117
+ deferred = When.defer
118
+ deferred.resolve
119
+ assert_raises(When::AlreadyResolvedError) do
120
+ deferred.resolve
121
+ end
122
+ end
123
+
124
+ it "rejects promise through reject" do
125
+ deferred = When.defer
126
+ called_back = false
127
+ deferred.promise.errback { called_back = true }
128
+ assert !called_back
129
+ deferred.resolver.reject
130
+ assert called_back
131
+ end
132
+
133
+ it "rejects promise through deferred" do
134
+ deferred = When.defer
135
+ called_back = false
136
+ deferred.promise.errback { called_back = true }
137
+ assert !called_back
138
+ deferred.reject
139
+ assert called_back
140
+ end
141
+
142
+ it "rejects deferred through deferred" do
143
+ deferred = When.defer
144
+ called_back = false
145
+ deferred.errback { called_back = true }
146
+ assert !called_back
147
+ deferred.reject
148
+ assert called_back
149
+ end
150
+
151
+ it "raises if already rejectd" do
152
+ deferred = When.defer
153
+ deferred.reject
154
+ assert_raises(When::AlreadyResolvedError) do
155
+ deferred.reject
156
+ end
157
+ end
158
+ end
159
+
160
+ describe ".all" do
161
+ it "returns deferrable" do
162
+ d = When.all([When(42)])
163
+ assert d.respond_to?(:callback)
164
+ assert d.respond_to?(:errback)
165
+ end
166
+
167
+ it "resolves immediately if no promises" do
168
+ d = When.all([])
169
+ called_back = false
170
+ d.callback do |results|
171
+ assert_equal [], results
172
+ called_back = true
173
+ end
174
+ assert called_back
175
+ end
176
+
177
+ it "resolves when single deferrable resolves" do
178
+ deferred = When::Deferred.new
179
+ d = When.all([deferred.promise])
180
+ resolved = false
181
+ d.callback { |results| resolved = true }
182
+
183
+ assert !resolved
184
+ deferred.resolve(42)
185
+ assert resolved
186
+ end
187
+
188
+ it "resolves when all deferrables are resolved" do
189
+ deferreds = [When::Deferred.new, When::Deferred.new, When::Deferred.new]
190
+ d = When.all(deferreds.map(&:promise))
191
+ resolved = false
192
+ d.callback { |results| resolved = true }
193
+
194
+ assert !resolved
195
+ deferreds[0].resolve(42)
196
+ assert !resolved
197
+ deferreds[1].resolve(13)
198
+ assert !resolved
199
+ deferreds[2].resolve(3)
200
+ assert resolved
201
+ end
202
+
203
+ it "rejects when single deferrable rejects" do
204
+ deferred = When::Deferred.new
205
+ d = When.all([deferred.promise])
206
+ rejected = false
207
+ d.errback { |results| rejected = true }
208
+
209
+ assert !rejected
210
+ deferred.reject(StandardError.new)
211
+ assert rejected
212
+ end
213
+
214
+ it "rejects on first rejection" do
215
+ deferreds = [When::Deferred.new, When::Deferred.new, When::Deferred.new]
216
+ d = When.all(deferreds.map(&:promise))
217
+ rejected = false
218
+ d.errback { |results| rejected = true }
219
+
220
+ deferreds[0].resolve(42)
221
+ deferreds[2].reject(StandardError.new)
222
+ deferreds[1].resolve(13)
223
+
224
+ assert rejected
225
+ end
226
+
227
+ it "proxies resolution vaule in array" do
228
+ deferred = When::Deferred.new
229
+ d = When.all([deferred.promise])
230
+ results = nil
231
+ d.callback { |res| results = res }
232
+
233
+ deferred.resolve(42)
234
+ assert_equal [42], results
235
+ end
236
+
237
+ it "orders results like input" do
238
+ deferred1 = When::Deferred.new
239
+ deferred2 = When::Deferred.new
240
+ d = When.all([deferred1.promise, deferred2.promise])
241
+ results = nil
242
+ d.callback { |res| results = res }
243
+
244
+ deferred2.resolve(42)
245
+ deferred1.resolve(13)
246
+ assert_equal [13, 42], results
247
+ end
248
+ end
249
+ end
data/when.gemspec ADDED
@@ -0,0 +1,46 @@
1
+ # encoding: utf-8
2
+ # --
3
+ # The MIT License (MIT)
4
+ #
5
+ # Copyright (C) 2012 Gitorious AS
6
+ #
7
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ # of this software and associated documentation files (the "Software"), to deal
9
+ # in the Software without restriction, including without limitation the rights
10
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ # copies of the Software, and to permit persons to whom the Software is
12
+ # furnished to do so, subject to the following conditions:
13
+ #
14
+ # The above copyright notice and this permission notice shall be included in all
15
+ # copies or substantial portions of the Software.
16
+ #
17
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ # SOFTWARE.
24
+ #++
25
+ dir = File.expand_path(File.dirname(__FILE__))
26
+ require File.join(dir, "lib/when/version")
27
+
28
+ Gem::Specification.new do |s|
29
+ s.name = "when"
30
+ s.version = When::VERSION
31
+ s.authors = ["Christian Johansen"]
32
+ s.email = ["christian@gitorious.org"]
33
+ s.homepage = "http://gitorious.org/gitorious/seuss"
34
+ s.summary = %q{A Ruby implementation of the wonderful when.js promise library}
35
+ s.description = %q{Currently very incomplete}
36
+
37
+ s.rubyforge_project = "when"
38
+
39
+ s.add_development_dependency "minitest", "~> 2.0"
40
+ s.add_development_dependency "rake", "~> 0.9"
41
+
42
+ s.files = `git ls-files`.split("\n")
43
+ s.test_files = `git ls-files -- {test}/*`.split("\n")
44
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
45
+ s.require_paths = ["lib"]
46
+ end
metadata ADDED
@@ -0,0 +1,105 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: when
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Christian Johansen
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-10-08 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: minitest
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 2
32
+ - 0
33
+ version: "2.0"
34
+ type: :development
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: rake
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ hash: 25
45
+ segments:
46
+ - 0
47
+ - 9
48
+ version: "0.9"
49
+ type: :development
50
+ version_requirements: *id002
51
+ description: Currently very incomplete
52
+ email:
53
+ - christian@gitorious.org
54
+ executables: []
55
+
56
+ extensions: []
57
+
58
+ extra_rdoc_files: []
59
+
60
+ files:
61
+ - Gemfile
62
+ - Gemfile.lock
63
+ - Rakefile
64
+ - Readme.md
65
+ - lib/when.rb
66
+ - lib/when/version.rb
67
+ - test/test_helper.rb
68
+ - test/when_test.rb
69
+ - when.gemspec
70
+ has_rdoc: true
71
+ homepage: http://gitorious.org/gitorious/seuss
72
+ licenses: []
73
+
74
+ post_install_message:
75
+ rdoc_options: []
76
+
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ hash: 3
85
+ segments:
86
+ - 0
87
+ version: "0"
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ hash: 3
94
+ segments:
95
+ - 0
96
+ version: "0"
97
+ requirements: []
98
+
99
+ rubyforge_project: when
100
+ rubygems_version: 1.4.2
101
+ signing_key:
102
+ specification_version: 3
103
+ summary: A Ruby implementation of the wonderful when.js promise library
104
+ test_files: []
105
+