zeevex_proxy 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 +2 -2
- data/lib/zeevex_proxy/base.rb +20 -5
- data/lib/zeevex_proxy/version.rb +1 -1
- data/spec/proxy_base_spec.rb +32 -1
- data/spec/spec_helper.rb +1 -1
- metadata +22 -15
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.3
|
15
|
+
%w{1.8.7 1.9.3}.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,4 @@ namespace :spec do
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
task :default => 'spec
|
32
|
+
task :default => 'spec'
|
data/lib/zeevex_proxy/base.rb
CHANGED
@@ -13,7 +13,7 @@ module ZeevexProxy
|
|
13
13
|
end
|
14
14
|
else
|
15
15
|
class BasicObject
|
16
|
-
KEEP_METHODS = %w"__id__ __send__ method_missing"
|
16
|
+
KEEP_METHODS = %w"__id__ __send__ method_missing __getobj__"
|
17
17
|
|
18
18
|
def self.remove_methods!
|
19
19
|
m = (instance_methods) - KEEP_METHODS
|
@@ -29,13 +29,28 @@ module ZeevexProxy
|
|
29
29
|
end
|
30
30
|
|
31
31
|
class Base < BasicObject
|
32
|
-
def initialize(target, options = {})
|
33
|
-
super
|
34
|
-
@obj = target
|
32
|
+
def initialize(target, options = {}, &block)
|
33
|
+
super()
|
34
|
+
@obj = @__proxy_object__ = target
|
35
|
+
if block
|
36
|
+
eigenclass = class << self; self; end
|
37
|
+
eigenclass.__send__(:define_method, :method_missing, &block)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def __getobj__
|
42
|
+
@__proxy_object__
|
43
|
+
end
|
44
|
+
|
45
|
+
def __substitute_self__(candidate, pself)
|
46
|
+
candidate.__id__ == pself.__id__ ? self : candidate
|
35
47
|
end
|
36
48
|
|
49
|
+
# if chainable method or returns "self" for some other reason,
|
50
|
+
# return this proxy instead
|
37
51
|
def method_missing(name, *args, &block)
|
38
|
-
|
52
|
+
obj = __getobj__
|
53
|
+
__substitute_self__(obj.__send__(name, *args, &block), obj)
|
39
54
|
end
|
40
55
|
|
41
56
|
end
|
data/lib/zeevex_proxy/version.rb
CHANGED
data/spec/proxy_base_spec.rb
CHANGED
@@ -66,13 +66,15 @@ describe ZeevexProxy::Base do
|
|
66
66
|
it "has the same object_id as the proxy target" do
|
67
67
|
proxy.object_id.should == object.object_id
|
68
68
|
end
|
69
|
+
it "returns target to __getobj__" do
|
70
|
+
proxy.__getobj__.should == object
|
71
|
+
end
|
69
72
|
it "should return methods" do
|
70
73
|
proxy.method(:responder_method).should == object.method(:responder_method)
|
71
74
|
end
|
72
75
|
end
|
73
76
|
|
74
77
|
context "proxying to object" do
|
75
|
-
subject { object }
|
76
78
|
it "should receive stub messages with arguments called on the proxy" do
|
77
79
|
object.should_receive(:foo).with(5).and_return(100)
|
78
80
|
proxy.foo(5).should == 100
|
@@ -97,6 +99,35 @@ describe ZeevexProxy::Base do
|
|
97
99
|
it "should pass along blocks to proxy methods" do
|
98
100
|
proxy.called_with_block? { nil }.should == true
|
99
101
|
end
|
102
|
+
|
103
|
+
it "should return its own ptr if proxied method returns self" do
|
104
|
+
object.should_receive(:chainable).and_return(object)
|
105
|
+
proxy.chainable.__id__.should == proxy.__id__
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
context "method_missing provided as block" do
|
110
|
+
subject {
|
111
|
+
ZeevexProxy::Base.new({}) do |meth, *args, &block|
|
112
|
+
res = [meth, *args]
|
113
|
+
if block
|
114
|
+
yield res
|
115
|
+
else
|
116
|
+
res
|
117
|
+
end
|
118
|
+
end
|
119
|
+
}
|
120
|
+
it "should receive stub messages with arguments called on the proxy" do
|
121
|
+
subject.foo(5).should == [:foo, 5]
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should receive messages called with :send on the proxy" do
|
125
|
+
subject.__send__(:foo).should == [:foo]
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should receive messages called with :send on the proxy" do
|
129
|
+
subject.send(:foo).should == [:send, :foo]
|
130
|
+
end
|
100
131
|
end
|
101
132
|
|
102
133
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zeevex_proxy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 63
|
5
|
+
prerelease:
|
5
6
|
segments:
|
6
7
|
- 0
|
7
8
|
- 9
|
8
|
-
-
|
9
|
-
version: 0.9.
|
9
|
+
- 2
|
10
|
+
version: 0.9.2
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Robert Sanders
|
@@ -14,35 +15,38 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date:
|
18
|
-
default_executable:
|
18
|
+
date: 2013-01-03 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
|
-
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
21
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
22
|
+
none: false
|
24
23
|
requirements:
|
25
24
|
- - ~>
|
26
25
|
- !ruby/object:Gem::Version
|
26
|
+
hash: 43
|
27
27
|
segments:
|
28
28
|
- 2
|
29
29
|
- 9
|
30
30
|
- 0
|
31
31
|
version: 2.9.0
|
32
|
+
prerelease: false
|
32
33
|
type: :development
|
33
|
-
|
34
|
+
name: rspec
|
35
|
+
requirement: *id001
|
34
36
|
- !ruby/object:Gem::Dependency
|
35
|
-
|
36
|
-
|
37
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
37
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
38
39
|
requirements:
|
39
40
|
- - ">="
|
40
41
|
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
41
43
|
segments:
|
42
44
|
- 0
|
43
45
|
version: "0"
|
46
|
+
prerelease: false
|
44
47
|
type: :development
|
45
|
-
|
48
|
+
name: rake
|
49
|
+
requirement: *id002
|
46
50
|
description: This is a Proxy object; there are many others like it, but this one is ours.
|
47
51
|
email:
|
48
52
|
- robert@zeevex.com
|
@@ -63,7 +67,6 @@ files:
|
|
63
67
|
- spec/proxy_base_spec.rb
|
64
68
|
- spec/spec_helper.rb
|
65
69
|
- zeevex_proxy.gemspec
|
66
|
-
has_rdoc: true
|
67
70
|
homepage: ""
|
68
71
|
licenses: []
|
69
72
|
|
@@ -73,23 +76,27 @@ rdoc_options: []
|
|
73
76
|
require_paths:
|
74
77
|
- lib
|
75
78
|
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
+
none: false
|
76
80
|
requirements:
|
77
81
|
- - ">="
|
78
82
|
- !ruby/object:Gem::Version
|
83
|
+
hash: 3
|
79
84
|
segments:
|
80
85
|
- 0
|
81
86
|
version: "0"
|
82
87
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
83
89
|
requirements:
|
84
90
|
- - ">="
|
85
91
|
- !ruby/object:Gem::Version
|
92
|
+
hash: 3
|
86
93
|
segments:
|
87
94
|
- 0
|
88
95
|
version: "0"
|
89
96
|
requirements: []
|
90
97
|
|
91
98
|
rubyforge_project: zeevex_proxy
|
92
|
-
rubygems_version: 1.
|
99
|
+
rubygems_version: 1.8.24
|
93
100
|
signing_key:
|
94
101
|
specification_version: 3
|
95
102
|
summary: Our homegrown version of a Proxy object
|