mixit 0.5.1 → 0.5.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/README.md +10 -6
- data/lib/mixit.rb +10 -29
- data/lib/mixit/version.rb +1 -1
- data/test/test_mixit.rb +26 -14
- metadata +8 -8
data/README.md
CHANGED
@@ -41,9 +41,11 @@ __1.__
|
|
41
41
|
|
42
42
|
Temporarily mix 'SomeModule' onto 'self' (non-thread safe).
|
43
43
|
|
44
|
-
Mixit.
|
45
|
-
|
46
|
-
|
44
|
+
Mixit.new :modules => [SomeModule], :scope => self do |mix|
|
45
|
+
mix.temporarily do
|
46
|
+
p self.class # => Object
|
47
|
+
p respond_to?(:some_mixed_method) # => true
|
48
|
+
end
|
47
49
|
end
|
48
50
|
|
49
51
|
p self.class # => Object
|
@@ -60,9 +62,11 @@ to the original scope.
|
|
60
62
|
|
61
63
|
You should be careful, as always.
|
62
64
|
|
63
|
-
Mixit.
|
64
|
-
|
65
|
-
|
65
|
+
Mixit.new :modules => [SomeModule], :scope => self do |mix|
|
66
|
+
mix.temporarily do |extended|
|
67
|
+
p extended.class # => Object
|
68
|
+
p extended.respond_to?(:some_mixed_method) # => true
|
69
|
+
end
|
66
70
|
end
|
67
71
|
|
68
72
|
|
data/lib/mixit.rb
CHANGED
@@ -1,35 +1,10 @@
|
|
1
1
|
require "mixit/version"
|
2
2
|
|
3
3
|
class Mixit
|
4
|
-
|
5
|
-
class << self
|
6
|
-
#
|
7
|
-
# Temporarily extends a scope with instance methods from module(s).
|
8
|
-
#
|
9
|
-
# @param opts
|
10
|
-
# (see Mixit#initialize)
|
11
|
-
#
|
12
|
-
# @option opts
|
13
|
-
# (see Mixit#initialize)
|
14
|
-
#
|
15
|
-
# @param block
|
16
|
-
# (see Mixit#temporarily)
|
17
|
-
#
|
18
|
-
# @yieldparam object
|
19
|
-
# (see Mixit#temporarily)
|
20
|
-
#
|
21
|
-
# @return
|
22
|
-
# (see Mixit#temporarily)
|
23
|
-
#
|
24
|
-
def temporarily opts, &block
|
25
|
-
mixit = new(opts)
|
26
|
-
mixit.temporarily(&block)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
4
|
+
|
30
5
|
#
|
31
6
|
# @return [Array<Module>]
|
32
|
-
#
|
7
|
+
# A list of modules to extend a scope with.
|
33
8
|
#
|
34
9
|
attr_reader :modules
|
35
10
|
|
@@ -41,13 +16,15 @@ class Mixit
|
|
41
16
|
|
42
17
|
#
|
43
18
|
# @param [Hash] opts
|
44
|
-
# A
|
19
|
+
# A key -> value pair of options.
|
45
20
|
#
|
46
21
|
# @option opts [Object] :scope
|
47
22
|
# The scope to extend.
|
48
23
|
#
|
49
24
|
# @option opts [Module] :modules
|
50
|
-
#
|
25
|
+
# A list of modules to extend the scope with.
|
26
|
+
#
|
27
|
+
# @yieldparam [Mixit] _self
|
51
28
|
#
|
52
29
|
def initialize opts
|
53
30
|
@clones = []
|
@@ -61,6 +38,10 @@ class Mixit
|
|
61
38
|
else
|
62
39
|
@scope = opts[:scope]
|
63
40
|
end
|
41
|
+
|
42
|
+
if block_given?
|
43
|
+
yield(self)
|
44
|
+
end
|
64
45
|
end
|
65
46
|
|
66
47
|
#
|
data/lib/mixit/version.rb
CHANGED
data/test/test_mixit.rb
CHANGED
@@ -13,8 +13,10 @@ context Mixit do
|
|
13
13
|
it 'must provide access to mixed-in methods' do
|
14
14
|
block = proc { }
|
15
15
|
|
16
|
-
Mixit.
|
17
|
-
|
16
|
+
Mixit.new :modules => [@module], :scope => block do |mix|
|
17
|
+
mix.temporarily do
|
18
|
+
callme.must_equal(:ok)
|
19
|
+
end
|
18
20
|
end
|
19
21
|
end
|
20
22
|
|
@@ -22,8 +24,10 @@ context Mixit do
|
|
22
24
|
block = proc { }
|
23
25
|
local = :ok
|
24
26
|
|
25
|
-
Mixit.
|
26
|
-
|
27
|
+
Mixit.new :modules => [@module], :scope => block do |mix|
|
28
|
+
mix.temporarily do
|
29
|
+
local.must_equal(:ok)
|
30
|
+
end
|
27
31
|
end
|
28
32
|
end
|
29
33
|
|
@@ -31,8 +35,10 @@ context Mixit do
|
|
31
35
|
def callme_() :ok end
|
32
36
|
block = proc { }
|
33
37
|
|
34
|
-
Mixit.
|
35
|
-
|
38
|
+
Mixit.new :modules => [@module], :scope => block do |mix|
|
39
|
+
mix.temporarily do
|
40
|
+
callme_.must_equal(:ok)
|
41
|
+
end
|
36
42
|
end
|
37
43
|
end
|
38
44
|
|
@@ -45,8 +51,10 @@ context Mixit do
|
|
45
51
|
end
|
46
52
|
end
|
47
53
|
|
48
|
-
Mixit.
|
49
|
-
|
54
|
+
Mixit.new :modules => [@module], :scope => block do |mix|
|
55
|
+
mix.temporarily do
|
56
|
+
@ok = :no
|
57
|
+
end
|
50
58
|
end
|
51
59
|
|
52
60
|
instance_variable_defined?(:@ok).must_equal(false)
|
@@ -55,8 +63,8 @@ context Mixit do
|
|
55
63
|
it 'must remove methods added by mixed-in modules.' do
|
56
64
|
block = proc {}
|
57
65
|
|
58
|
-
Mixit.
|
59
|
-
nil
|
66
|
+
Mixit.new :modules => [@module], :scope => block do |mix|
|
67
|
+
mix.temporarily { nil }
|
60
68
|
end
|
61
69
|
|
62
70
|
respond_to?(:callme).must_equal(false)
|
@@ -67,16 +75,20 @@ context Mixit do
|
|
67
75
|
it 'must provide access to mixed-in methods.' do
|
68
76
|
block = proc {}
|
69
77
|
|
70
|
-
Mixit.
|
71
|
-
|
78
|
+
Mixit.new :modules => [@module], :scope => block do |mix|
|
79
|
+
mix.temporarily do |extended|
|
80
|
+
extended.callme.must_equal(:ok)
|
81
|
+
end
|
72
82
|
end
|
73
83
|
end
|
74
84
|
|
75
85
|
it 'must not extend the original receiver with mixed-in methods.' do
|
76
86
|
block = proc {}
|
77
87
|
|
78
|
-
Mixit.
|
79
|
-
|
88
|
+
Mixit.new :modules => [@module], :scope => block do |mix|
|
89
|
+
mix.temporarily do |extended|
|
90
|
+
respond_to?(:callme).must_equal(false)
|
91
|
+
end
|
80
92
|
end
|
81
93
|
end
|
82
94
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mixit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-12-
|
12
|
+
date: 2011-12-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &70148116454580 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.9.2
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70148116454580
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: minitest
|
27
|
-
requirement: &
|
27
|
+
requirement: &70148116454080 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: '2.5'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70148116454080
|
36
36
|
description: Temporarily extend the calling scope of a block with instance methods
|
37
37
|
from a module.
|
38
38
|
email:
|
@@ -67,7 +67,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
67
67
|
version: '0'
|
68
68
|
segments:
|
69
69
|
- 0
|
70
|
-
hash:
|
70
|
+
hash: -362045613105573615
|
71
71
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
@@ -76,7 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
76
76
|
version: '0'
|
77
77
|
segments:
|
78
78
|
- 0
|
79
|
-
hash:
|
79
|
+
hash: -362045613105573615
|
80
80
|
requirements: []
|
81
81
|
rubyforge_project: mixit
|
82
82
|
rubygems_version: 1.8.11
|