casting 0.6.3 → 0.6.4
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.
- checksums.yaml +4 -4
- data/lib/casting/prepared_delegation.rb +13 -3
- data/lib/casting/version.rb +1 -1
- data/test/casting_19_test.rb +11 -5
- data/test/casting_20_test.rb +5 -5
- data/test/test_helper.rb +15 -0
- metadata +3 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 36b6f16e582747ee905c40b1880686d5507f6477
|
4
|
+
data.tar.gz: b6744f050563f49a8249d9f24c2e5ed44bc2721f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 21d2c3c82fd8a0ae01c458ae0f03cdd26a14248cf04e9f87796f8f7e184b27587ce71d793e2ef7b8548848dd820b806f2de0ca8a9dc462e6c6c7d35ece0abd26
|
7
|
+
data.tar.gz: 246369ff76c6c5a3c03c5ac78a7c60ef3187354a3df01f1d614218ec22444a587409c73d1c357f686f4e05f0249c1468682624979595047f258fef09974fa06e
|
@@ -1,4 +1,14 @@
|
|
1
|
-
|
1
|
+
# Some features are only available in versions of Ruby
|
2
|
+
# where this method is true
|
3
|
+
def module_method_rebinding?
|
4
|
+
return @__module_method_rebinding__ if defined?(@__module_method_rebinding__)
|
5
|
+
sample_method = Enumerable.instance_method(:to_a)
|
6
|
+
@__module_method_rebinding__ = begin
|
7
|
+
!!sample_method.bind(Object.new)
|
8
|
+
rescue TypeError
|
9
|
+
false
|
10
|
+
end
|
11
|
+
end
|
2
12
|
|
3
13
|
module Casting
|
4
14
|
|
@@ -28,7 +38,7 @@ module Casting
|
|
28
38
|
begin
|
29
39
|
check_valid_type
|
30
40
|
rescue TypeError
|
31
|
-
raise unless
|
41
|
+
raise unless module_method_rebinding?
|
32
42
|
@attendant = method_module || raise
|
33
43
|
end
|
34
44
|
self
|
@@ -62,7 +72,7 @@ module Casting
|
|
62
72
|
|
63
73
|
def method_carrier(object_or_module)
|
64
74
|
if Module === object_or_module
|
65
|
-
if
|
75
|
+
if module_method_rebinding?
|
66
76
|
object_or_module
|
67
77
|
else
|
68
78
|
client.clone.extend(object_or_module)
|
data/lib/casting/version.rb
CHANGED
data/test/casting_19_test.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
unless RedCard.check '2.0'
|
4
|
-
|
5
3
|
describe Casting, '.delegating' do
|
6
4
|
it 'delegates missing methods to object delegates' do
|
5
|
+
skip 'extending objects not used in this version of Ruby' if test_rebinding_methods?
|
6
|
+
|
7
7
|
client = test_person
|
8
8
|
client.extend(Casting::Client)
|
9
9
|
client.delegate_missing_methods
|
@@ -26,6 +26,8 @@ end
|
|
26
26
|
describe Casting::Delegation do
|
27
27
|
|
28
28
|
it 'calls a method defined on another object of the same type' do
|
29
|
+
skip 'extending objects not used in this version of Ruby' if test_rebinding_methods?
|
30
|
+
|
29
31
|
client = test_person
|
30
32
|
attendant = test_person
|
31
33
|
attendant.extend(TestPerson::Greeter)
|
@@ -34,6 +36,8 @@ describe Casting::Delegation do
|
|
34
36
|
end
|
35
37
|
|
36
38
|
it 'passes arguments to a delegated method' do
|
39
|
+
skip 'extending objects not used in this version of Ruby' if test_rebinding_methods?
|
40
|
+
|
37
41
|
client = test_person
|
38
42
|
attendant = test_person
|
39
43
|
attendant.extend(TestPerson::Verbose)
|
@@ -42,17 +46,19 @@ describe Casting::Delegation do
|
|
42
46
|
end
|
43
47
|
|
44
48
|
it 'delegates when given a module' do
|
49
|
+
skip 'extending objects not used in this version of Ruby' if test_rebinding_methods?
|
50
|
+
|
45
51
|
client = test_person
|
46
52
|
delegation = Casting::Delegation.new('greet', client).to(TestPerson::Greeter)
|
47
53
|
assert_equal 'hello', delegation.call
|
48
54
|
end
|
49
55
|
|
50
56
|
it 'does not delegate when given a class' do
|
57
|
+
skip 'extending objects not used in this version of Ruby' if test_rebinding_methods?
|
58
|
+
|
51
59
|
client = test_person
|
52
60
|
assert_raises(TypeError){
|
53
61
|
Casting::Delegation.new('class_defined', client).to(Unrelated)
|
54
62
|
}
|
55
63
|
end
|
56
|
-
end
|
57
|
-
|
58
|
-
end # RedCard
|
64
|
+
end
|
data/test/casting_20_test.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
if RedCard.check '2.0'
|
4
|
-
|
5
3
|
describe Casting::Delegation do
|
6
4
|
|
7
5
|
it 'finds the module defining a method and uses it to delegate' do
|
6
|
+
skip 'not able to bind module methods in this version of Ruby' unless test_rebinding_methods?
|
7
|
+
|
8
8
|
client = test_person
|
9
9
|
attendant = Unrelated.new
|
10
10
|
delegation = Casting::Delegation.new('unrelated', client).to(attendant)
|
@@ -12,12 +12,12 @@ describe Casting::Delegation do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'does not delegate to methods defined in classes' do
|
15
|
+
skip 'not able to bind module methods in this version of Ruby' unless test_rebinding_methods?
|
16
|
+
|
15
17
|
client = test_person
|
16
18
|
attendant = Unrelated.new
|
17
19
|
assert_raises(TypeError){
|
18
20
|
Casting::Delegation.new('class_defined', client).to(attendant)
|
19
21
|
}
|
20
22
|
end
|
21
|
-
end
|
22
|
-
|
23
|
-
end # RedCard
|
23
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -81,3 +81,18 @@ end
|
|
81
81
|
def test_person
|
82
82
|
TestPerson.new
|
83
83
|
end
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
# This is a different implementation of module_method_rebinding?
|
88
|
+
# created in order to check that the behavior of the code is correct.
|
89
|
+
#
|
90
|
+
# This method is used in tests and module_method_rebinding? is used
|
91
|
+
# in the library code.
|
92
|
+
def test_rebinding_methods?
|
93
|
+
unbound = Enumerable.instance_method(:count)
|
94
|
+
unbound.bind(Object.new)
|
95
|
+
true
|
96
|
+
rescue TypeError
|
97
|
+
false
|
98
|
+
end
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: casting
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jim Gay
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
12
|
-
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: redcard
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ~>
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 1.1.0
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ~>
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 1.1.0
|
11
|
+
date: 2013-11-14 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
27
13
|
description: |-
|
28
14
|
Casting assists in method delegation which preserves the binding of 'self' to the object receiving a message.
|
29
15
|
|
@@ -85,4 +71,3 @@ test_files:
|
|
85
71
|
- test/delegation_test.rb
|
86
72
|
- test/method_consolidator_test.rb
|
87
73
|
- test/missing_method_client_test.rb
|
88
|
-
has_rdoc:
|