zeevex_proxy 0.9.0 → 0.9.2

Sign up to get free protection for your applications and to get access to all the features.
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 ree}.each do |version|
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:platforms'
32
+ task :default => 'spec'
@@ -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
- @obj.__send__(name, *args, &block)
52
+ obj = __getobj__
53
+ __substitute_self__(obj.__send__(name, *args, &block), obj)
39
54
  end
40
55
 
41
56
  end
@@ -1,3 +1,3 @@
1
1
  module ZeevexProxy
2
- VERSION = "0.9.0"
2
+ VERSION = "0.9.2"
3
3
  end
@@ -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
@@ -1,5 +1,5 @@
1
1
 
2
- $: << File.expand_path(File.dirname(__FILE__) + '../lib')
2
+ $:.unshift File.expand_path(File.dirname(__FILE__) + '../lib')
3
3
 
4
4
  require 'rspec'
5
5
  require 'zeevex_proxy'
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
- prerelease: false
4
+ hash: 63
5
+ prerelease:
5
6
  segments:
6
7
  - 0
7
8
  - 9
8
- - 0
9
- version: 0.9.0
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: 2012-05-02 00:00:00 -04:00
18
- default_executable:
18
+ date: 2013-01-03 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- name: rspec
22
- prerelease: false
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
- version_requirements: *id001
34
+ name: rspec
35
+ requirement: *id001
34
36
  - !ruby/object:Gem::Dependency
35
- name: rake
36
- prerelease: false
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
- version_requirements: *id002
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.3.6
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