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 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