zeevex_delayed 0.9.0 → 0.9.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.
- data/Rakefile +8 -2
- data/lib/zeevex_delayed.rb +1 -1
- data/lib/zeevex_delayed/promise.rb +15 -7
- data/lib/zeevex_delayed/thread_promise.rb +15 -7
- data/lib/zeevex_delayed/version.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- metadata +69 -68
data/Rakefile
CHANGED
@@ -12,7 +12,7 @@ namespace :spec do
|
|
12
12
|
current = %x{rvm-prompt v}
|
13
13
|
|
14
14
|
fail = false
|
15
|
-
%w{1.8.7 1.9.
|
15
|
+
%w{1.8.7 1.9.2}.each do |version|
|
16
16
|
puts "Switching to #{version}"
|
17
17
|
Bundler.with_clean_env do
|
18
18
|
system %{bash -c 'source ~/.rvm/scripts/rvm && rvm #{version} && bundle exec rake spec'}
|
@@ -29,4 +29,10 @@ namespace :spec do
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
|
32
|
+
|
33
|
+
task :repl do
|
34
|
+
sh %q{ bundle exec irb -Ilib -rzeevex_delayed }
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
task :default => 'spec'
|
data/lib/zeevex_delayed.rb
CHANGED
@@ -1,18 +1,26 @@
|
|
1
1
|
require 'zeevex_proxy'
|
2
2
|
|
3
3
|
module ZeevexDelayed
|
4
|
-
|
4
|
+
def self.Promise(*args, &block)
|
5
|
+
ZeevexDelayed::Promise.new(*args, &block)
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.promise(*args, &block)
|
9
|
+
ZeevexDelayed::Promise.new(*args, &block)
|
10
|
+
end
|
11
|
+
|
12
|
+
class Promise < ZeevexProxy::BasicObject
|
5
13
|
|
6
|
-
def initialize(
|
7
|
-
|
14
|
+
def initialize(&block)
|
15
|
+
raise ::ArgumentError, "Must supply a block!" unless block
|
16
|
+
super()
|
8
17
|
@__promise_block = block
|
9
|
-
raise ArgumentError, "Must supply a block!" unless block
|
10
18
|
end
|
11
|
-
|
19
|
+
|
12
20
|
def method_missing(name, *args, &block)
|
13
21
|
__force__.__send__(name, *args, &block)
|
14
22
|
end
|
15
|
-
|
23
|
+
|
16
24
|
def __force__
|
17
25
|
unless @__promise_forced
|
18
26
|
@obj = @__promise_block.call
|
@@ -27,7 +35,7 @@ module Kernel
|
|
27
35
|
def force_promise(promise)
|
28
36
|
promise.__force__
|
29
37
|
end
|
30
|
-
|
38
|
+
|
31
39
|
def promise(&block)
|
32
40
|
ZeevexDelayed::Promise.new &block
|
33
41
|
end
|
@@ -16,11 +16,19 @@ module ZeevexDelayed
|
|
16
16
|
# go, don't use this.
|
17
17
|
#
|
18
18
|
|
19
|
-
|
19
|
+
def self.ThreadPromise(*args, &block)
|
20
|
+
ZeevexDelayed::ThreadPromise.new(*args, &block)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.thread_promise(*args, &block)
|
24
|
+
ZeevexDelayed::ThreadPromise.new(*args, &block)
|
25
|
+
end
|
26
|
+
|
27
|
+
class ThreadPromise < ZeevexProxy::BasicObject
|
20
28
|
|
21
|
-
def initialize(
|
22
|
-
raise ArgumentError, "Must supply a block!" unless block_given?
|
23
|
-
super
|
29
|
+
def initialize(&block)
|
30
|
+
raise ::ArgumentError, "Must supply a block!" unless ::Kernel.block_given?
|
31
|
+
super()
|
24
32
|
@__promise_thread_map = {}
|
25
33
|
@__promise_block = block
|
26
34
|
end
|
@@ -30,10 +38,10 @@ module ZeevexDelayed
|
|
30
38
|
end
|
31
39
|
|
32
40
|
def __force__
|
33
|
-
unless @__promise_thread_map.has_key?(Thread.current.object_id)
|
34
|
-
@__promise_thread_map[Thread.current.object_id] = @__promise_block.call
|
41
|
+
unless @__promise_thread_map.has_key?(::Thread.current.object_id)
|
42
|
+
@__promise_thread_map[::Thread.current.object_id] = @__promise_block.call
|
35
43
|
end
|
36
|
-
@__promise_thread_map[Thread.current.object_id]
|
44
|
+
@__promise_thread_map[::Thread.current.object_id]
|
37
45
|
end
|
38
46
|
end
|
39
47
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -61,7 +61,7 @@ shared_examples_for "basic promise" do
|
|
61
61
|
context "when forcing computation" do
|
62
62
|
it "should respond to __force__" do
|
63
63
|
# check here because respond_to? invoked on a promise would delegate
|
64
|
-
promise_class.instance_methods.should include("__force__")
|
64
|
+
promise_class.instance_methods.map(&:to_s).should include("__force__")
|
65
65
|
end
|
66
66
|
|
67
67
|
it "should be computed when Kernel#force_promise is called" do
|
metadata
CHANGED
@@ -1,70 +1,71 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: zeevex_delayed
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 9
|
8
|
-
- 0
|
9
|
-
version: 0.9.0
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.2
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Robert Sanders
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
dependencies:
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2013-06-28 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: zeevex_proxy
|
22
|
-
|
23
|
-
|
24
|
-
requirements:
|
25
|
-
- -
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
|
28
|
-
- 0
|
29
|
-
version: "0"
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
30
22
|
type: :runtime
|
31
|
-
version_requirements: *id001
|
32
|
-
- !ruby/object:Gem::Dependency
|
33
|
-
name: rspec
|
34
23
|
prerelease: false
|
35
|
-
|
36
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rspec
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
37
35
|
- - ~>
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
segments:
|
40
|
-
- 2
|
41
|
-
- 9
|
42
|
-
- 0
|
36
|
+
- !ruby/object:Gem::Version
|
43
37
|
version: 2.9.0
|
44
38
|
type: :development
|
45
|
-
version_requirements: *id002
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: rake
|
48
39
|
prerelease: false
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 2.9.0
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rake
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
56
54
|
type: :development
|
57
|
-
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
58
62
|
description: This gem provides a couple of classes useful for deferred computation.
|
59
|
-
email:
|
63
|
+
email:
|
60
64
|
- robert@zeevex.com
|
61
65
|
executables: []
|
62
|
-
|
63
66
|
extensions: []
|
64
|
-
|
65
67
|
extra_rdoc_files: []
|
66
|
-
|
67
|
-
files:
|
68
|
+
files:
|
68
69
|
- .gitignore
|
69
70
|
- Gemfile
|
70
71
|
- Rakefile
|
@@ -76,37 +77,37 @@ files:
|
|
76
77
|
- spec/spec_helper.rb
|
77
78
|
- spec/thread_promise_spec.rb
|
78
79
|
- zeevex_delayed.gemspec
|
79
|
-
|
80
|
-
homepage: ""
|
80
|
+
homepage: ''
|
81
81
|
licenses: []
|
82
|
-
|
83
82
|
post_install_message:
|
84
83
|
rdoc_options: []
|
85
|
-
|
86
|
-
require_paths:
|
84
|
+
require_paths:
|
87
85
|
- lib
|
88
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
86
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
88
|
+
requirements:
|
89
|
+
- - ! '>='
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
segments:
|
93
93
|
- 0
|
94
|
-
|
95
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
94
|
+
hash: -1736097360657964090
|
95
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
97
|
+
requirements:
|
98
|
+
- - ! '>='
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0'
|
101
|
+
segments:
|
100
102
|
- 0
|
101
|
-
|
103
|
+
hash: -1736097360657964090
|
102
104
|
requirements: []
|
103
|
-
|
104
105
|
rubyforge_project: zeevex_delayed
|
105
|
-
rubygems_version: 1.
|
106
|
+
rubygems_version: 1.8.25
|
106
107
|
signing_key:
|
107
108
|
specification_version: 3
|
108
109
|
summary: Basic and per-thread promise classes.
|
109
|
-
test_files:
|
110
|
+
test_files:
|
110
111
|
- spec/promise_spec.rb
|
111
112
|
- spec/spec_helper.rb
|
112
113
|
- spec/thread_promise_spec.rb
|