blox 1.0.0 → 1.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/blox.gemspec +2 -2
- data/blox.rb +37 -11
- metadata +2 -2
data/blox.gemspec
CHANGED
@@ -5,10 +5,10 @@ Gem::Specification.new do |gem|
|
|
5
5
|
gem.authors = ["Kim Burgestrand"]
|
6
6
|
gem.email = ["kim@burgestrand.se"]
|
7
7
|
gem.summary = "Blox helps you write Ruby methods that accept multiple blocks"
|
8
|
-
gem.homepage = "
|
8
|
+
gem.homepage = "https://github.com/Burgestrand/blox"
|
9
9
|
|
10
10
|
gem.files = `git ls-files`.split($\)
|
11
11
|
gem.test_files = 'blox.rb'
|
12
12
|
gem.require_paths = ["."]
|
13
|
-
gem.version = "1.
|
13
|
+
gem.version = "1.1.0"
|
14
14
|
end
|
data/blox.rb
CHANGED
@@ -1,17 +1,43 @@
|
|
1
|
+
# Call a callable with the Blox object and return the result.
|
2
|
+
#
|
3
|
+
# @param (see Blox.object)
|
4
|
+
# @return the result of the blox object
|
5
|
+
def Blox(block, name, *args, &extra)
|
6
|
+
Blox.object(block, name, *args, &extra).__result__
|
7
|
+
end
|
8
|
+
|
9
|
+
# Call a callable and return the result, raising if the result is undefined.
|
10
|
+
#
|
11
|
+
# @raise [LocalJumpError] if none of the blocks was invoked
|
12
|
+
# @param (see Blox.object)
|
13
|
+
# @return the result of the blox object
|
14
|
+
def Blox!(block, name, *args, &extra)
|
15
|
+
Blox.object(block, name, *args, &extra).__result__!
|
16
|
+
end
|
17
|
+
|
1
18
|
module Blox
|
2
|
-
|
3
|
-
|
19
|
+
# @param (see Blox)
|
20
|
+
# @return (see Blox)
|
21
|
+
def yield_to(*args, &extra)
|
22
|
+
Blox(self, *args, &extra)
|
4
23
|
end
|
5
24
|
|
6
|
-
|
7
|
-
|
25
|
+
# @param (see Blox!)
|
26
|
+
# @return (see Blox!)
|
27
|
+
def yield_to!(*args, &extra)
|
28
|
+
Blox!(self, *args, &extra)
|
8
29
|
end
|
9
30
|
|
10
|
-
|
31
|
+
# Construct a Blox object with the given proc, and call it with the given arguments.
|
32
|
+
#
|
33
|
+
# @param [#call] block
|
34
|
+
# @param [#to_s] name
|
35
|
+
# @param *args any additional args to the multi-block
|
36
|
+
# @return a blox object that responds to __result__ and __result__!
|
37
|
+
def self.object(block, name, *args, &extra)
|
38
|
+
blox_object = BasicObject.new
|
11
39
|
|
12
|
-
|
13
|
-
blox_block = BasicObject.new
|
14
|
-
(class << blox_block; self; end).instance_eval do
|
40
|
+
(class << blox_object; self; end).instance_eval do
|
15
41
|
define_method(:__result__) do
|
16
42
|
@result
|
17
43
|
end
|
@@ -30,13 +56,13 @@ module Blox
|
|
30
56
|
|
31
57
|
define_method(:method_missing) do |method_name = :method_missing, &handler|
|
32
58
|
if name == method_name
|
33
|
-
@result = handler.call(*args, &
|
59
|
+
@result = handler.call(*args, &extra)
|
34
60
|
end
|
35
61
|
end
|
36
62
|
end
|
37
63
|
|
38
|
-
call(
|
39
|
-
|
64
|
+
block.call(blox_object)
|
65
|
+
blox_object
|
40
66
|
end
|
41
67
|
end
|
42
68
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: blox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -25,7 +25,7 @@ files:
|
|
25
25
|
- Rakefile
|
26
26
|
- blox.gemspec
|
27
27
|
- blox.rb
|
28
|
-
homepage:
|
28
|
+
homepage: https://github.com/Burgestrand/blox
|
29
29
|
licenses: []
|
30
30
|
post_install_message:
|
31
31
|
rdoc_options: []
|