dumb_delegator 0.5.1 → 0.6.0
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 +7 -0
- data/.travis.yml +3 -1
- data/README.md +4 -5
- data/dumb_delegator.gemspec +6 -6
- data/lib/dumb_delegator.rb +3 -7
- data/lib/dumb_delegator/version.rb +1 -1
- data/spec/dumb_delegator_spec.rb +51 -43
- metadata +22 -34
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 92d88fb2dc6ea85760c5b7d646349b40bca6dbfe
|
4
|
+
data.tar.gz: e457fa632733529197f767f6fc798e35d57db3fe
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6ca10a81f035210ac1b7b45b579e765af3baa14c2c9fa349814fac4aea22bc1a008d888145bef02f53048fbe9bdf43da4b8eb5db9d8f9c002e4d5705c3eba976
|
7
|
+
data.tar.gz: a641af0af00a6999fa5d3f5484a742db80d23c47e7b31475673ec66080219f4d0b127158fdbd434f4e16b042f7ff848528358c470e760c93543ef7830ef111a2
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
# DumbDelegator
|
2
2
|
|
3
|
-
[](http://travis-ci.org/stevenharman/dumb_delegator)
|
4
|
+
[](https://gemnasium.com/stevenharman/dumb_delegator)
|
5
5
|
|
6
|
-
Ruby provides the `delegate` standard library. However, we found that it is
|
7
|
-
|
8
|
-
proxied.
|
6
|
+
Ruby provides the `delegate` standard library. However, we found that it is not
|
7
|
+
appropriate for many use cases that require nearly every call to be proxied.
|
9
8
|
|
10
9
|
For instance, Rails uses `#class` and `#instance_of?` to introspect on model
|
11
10
|
classes when generating forms and URL helpers. These methods are not forwarded
|
data/dumb_delegator.gemspec
CHANGED
@@ -2,22 +2,22 @@
|
|
2
2
|
require File.expand_path('../lib/dumb_delegator/version', __FILE__)
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
|
-
gem.authors = [
|
6
|
-
gem.email = [
|
5
|
+
gem.authors = ['Andy Lindeman', 'Steven Harman']
|
6
|
+
gem.email = ['alindeman@gmail.com', 'steveharman@gmail.com']
|
7
7
|
gem.description = %q{Delegator class that delegates ALL the things}
|
8
8
|
gem.summary = <<-EOD
|
9
9
|
Delegator and SimpleDelegator in Ruby's stdlib are somewhat useful, but they pull in most of Kernel. This is not appropriate for many uses; for instance, delegation to Rails models.
|
10
10
|
EOD
|
11
|
-
gem.homepage =
|
11
|
+
gem.homepage = 'https://github.com/stevenharman/dumb_delegator'
|
12
12
|
|
13
13
|
gem.files = `git ls-files`.split($\)
|
14
14
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
15
15
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
16
|
-
gem.name =
|
17
|
-
gem.require_paths = [
|
16
|
+
gem.name = 'dumb_delegator'
|
17
|
+
gem.require_paths = ['lib']
|
18
18
|
gem.version = DumbDelegator::VERSION
|
19
19
|
|
20
|
-
gem.add_development_dependency 'rspec', '~>2.
|
20
|
+
gem.add_development_dependency 'rspec', '~>2.14'
|
21
21
|
gem.add_development_dependency 'pry'
|
22
22
|
gem.add_development_dependency 'rake'
|
23
23
|
end
|
data/lib/dumb_delegator.rb
CHANGED
@@ -7,21 +7,17 @@ class DumbDelegator < ::BasicObject
|
|
7
7
|
end
|
8
8
|
|
9
9
|
kernel = ::Kernel.dup
|
10
|
-
(kernel.instance_methods - [:dup, :clone]).each do |method|
|
10
|
+
(kernel.instance_methods - [:dup, :clone, :respond_to?]).each do |method|
|
11
11
|
kernel.__send__ :undef_method, method
|
12
12
|
end
|
13
13
|
include kernel
|
14
14
|
|
15
|
-
NON_DELEGATED_METHODS = ::Set.new([:equal?, :__id__, :__send__, :dup, :clone, :__getobj__,
|
16
|
-
:__setobj__, :marshal_dump, :marshal_load,
|
17
|
-
:respond_to?]).freeze
|
18
|
-
|
19
15
|
def initialize(target)
|
20
16
|
__setobj__(target)
|
21
17
|
end
|
22
18
|
|
23
|
-
def respond_to?(method)
|
24
|
-
__getobj__.respond_to?(method) ||
|
19
|
+
def respond_to?(method, include_all=false)
|
20
|
+
__getobj__.respond_to?(method) || super
|
25
21
|
end
|
26
22
|
|
27
23
|
def method_missing(method, *args, &block)
|
data/spec/dumb_delegator_spec.rb
CHANGED
@@ -1,103 +1,103 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe DumbDelegator do
|
4
|
+
subject(:dummy) { described_class.new(target) }
|
4
5
|
let(:target) { double }
|
5
|
-
subject { described_class.new(target) }
|
6
6
|
|
7
7
|
it "delegates to the target object" do
|
8
|
-
target.
|
9
|
-
|
8
|
+
expect(target).to receive(:foo)
|
9
|
+
dummy.foo
|
10
10
|
end
|
11
11
|
|
12
12
|
it "delegates to the target object with arguments" do
|
13
|
-
target.
|
13
|
+
expect(target).to receive(:foo).with(:bar)
|
14
14
|
|
15
|
-
|
15
|
+
dummy.foo(:bar)
|
16
16
|
end
|
17
17
|
|
18
18
|
it "delegates to the target object with a block" do
|
19
19
|
bar_block = proc { "bar" }
|
20
|
-
target.
|
20
|
+
expect(target).to receive(:foo) { |&block| expect(block).to eq(bar_block) }
|
21
21
|
|
22
|
-
|
22
|
+
dummy.foo(&bar_block)
|
23
23
|
end
|
24
24
|
|
25
25
|
it "does not delegate if the target does not respond_to? the message" do
|
26
|
-
target.
|
27
|
-
target.
|
26
|
+
allow(target).to receive(:foo)
|
27
|
+
allow(target).to receive(:respond_to?).with(:foo).and_return(false)
|
28
28
|
|
29
29
|
expect {
|
30
|
-
|
30
|
+
dummy.foo
|
31
31
|
}.to raise_error(NoMethodError)
|
32
32
|
end
|
33
33
|
|
34
34
|
it "responds to methods defined by child classes that add behavior" do
|
35
|
-
target.
|
36
|
-
def
|
35
|
+
expect(target).to receive(:foo).never
|
36
|
+
def dummy.foo
|
37
37
|
"bar"
|
38
38
|
end
|
39
39
|
|
40
|
-
|
40
|
+
dummy.foo
|
41
41
|
end
|
42
42
|
|
43
43
|
it "delegates methods defined on Object" do
|
44
|
-
target.
|
45
|
-
|
44
|
+
expect(target).to receive(:class)
|
45
|
+
dummy.class
|
46
46
|
end
|
47
47
|
|
48
48
|
it "delegates is_a?" do
|
49
|
-
target.
|
50
|
-
|
49
|
+
expect(target).to receive(:is_a?)
|
50
|
+
dummy.is_a?
|
51
51
|
end
|
52
52
|
|
53
53
|
it "delegates methods defined on Kernel" do
|
54
|
-
target.
|
55
|
-
|
54
|
+
expect(target).to receive(:print)
|
55
|
+
dummy.print
|
56
56
|
end
|
57
57
|
|
58
58
|
it "delegates !" do
|
59
|
-
target.
|
60
|
-
!
|
59
|
+
expect(target).to receive(:!)
|
60
|
+
!dummy
|
61
61
|
end
|
62
62
|
|
63
63
|
it "delegates !=" do
|
64
|
-
target.
|
65
|
-
|
64
|
+
expect(target).to receive(:!=)
|
65
|
+
dummy != 1
|
66
66
|
end
|
67
67
|
|
68
68
|
it "delegates ==" do
|
69
|
-
target.
|
70
|
-
|
69
|
+
expect(target).to receive(:==)
|
70
|
+
dummy == 1
|
71
71
|
end
|
72
72
|
|
73
73
|
it "delegates ==" do
|
74
|
-
target.
|
75
|
-
|
74
|
+
expect(target).to receive(:==)
|
75
|
+
dummy == 1
|
76
76
|
end
|
77
77
|
|
78
78
|
it "delegates instance_eval" do
|
79
|
-
target.
|
80
|
-
|
79
|
+
expect(target).to receive(:instance_eval)
|
80
|
+
dummy.instance_eval { true }
|
81
81
|
end
|
82
82
|
|
83
83
|
it "delegates instance_exec" do
|
84
|
-
target.
|
85
|
-
|
84
|
+
expect(target).to receive(:instance_exec)
|
85
|
+
dummy.instance_exec { true }
|
86
86
|
end
|
87
87
|
|
88
88
|
describe "#dup" do
|
89
89
|
it "returns a shallow of itself, the delegator (not the underlying object)", :objectspace => true do
|
90
|
-
dupped =
|
90
|
+
dupped = dummy.dup
|
91
91
|
|
92
|
-
ObjectSpace.each_object(DumbDelegator).map(&:__id__).
|
92
|
+
expect(ObjectSpace.each_object(DumbDelegator).map(&:__id__)).to include dupped.__id__
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
96
|
describe "#clone" do
|
97
97
|
it "returns a shallow of itself, the delegator (not the underlying object)", :objectspace => true do
|
98
|
-
cloned =
|
98
|
+
cloned = dummy.clone
|
99
99
|
|
100
|
-
ObjectSpace.each_object(DumbDelegator).map(&:__id__).
|
100
|
+
expect(ObjectSpace.each_object(DumbDelegator).map(&:__id__)).to include cloned.__id__
|
101
101
|
end
|
102
102
|
end
|
103
103
|
|
@@ -105,36 +105,44 @@ describe DumbDelegator do
|
|
105
105
|
let(:target) { Object.new }
|
106
106
|
|
107
107
|
it "marshals and unmarshals itself, the delegator (not the underlying object)", :objectspace => true do
|
108
|
-
marshaled = Marshal.dump(
|
108
|
+
marshaled = Marshal.dump(dummy)
|
109
109
|
unmarshaled = Marshal.load(marshaled)
|
110
110
|
|
111
|
-
ObjectSpace.each_object(DumbDelegator).map(&:__id__).
|
111
|
+
expect(ObjectSpace.each_object(DumbDelegator).map(&:__id__)).to include unmarshaled.__id__
|
112
112
|
end
|
113
113
|
end
|
114
114
|
|
115
115
|
describe "#respond_to?" do
|
116
116
|
[:equal?, :__id__, :__send__, :dup, :clone, :__getobj__, :__setobj__, :marshal_dump, :marshal_load, :respond_to?].each do |method|
|
117
117
|
it "responds to #{method}" do
|
118
|
-
|
118
|
+
expect(dummy.respond_to?(method)).to be_true
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
context "subclasses of DumbDelegator" do
|
123
|
+
subject(:dummy) { Class.new(DumbDelegator) { def foobar; end }.new([]) }
|
124
|
+
|
125
|
+
it "respond to methods defined on the subclass" do
|
126
|
+
expect(dummy.respond_to?(:foobar)).to be_true
|
119
127
|
end
|
120
128
|
end
|
121
129
|
end
|
122
130
|
|
123
131
|
describe "#__getobj__" do
|
124
132
|
it "returns the target object" do
|
125
|
-
|
133
|
+
expect(dummy.__getobj__).to equal target
|
126
134
|
end
|
127
135
|
end
|
128
136
|
|
129
137
|
describe "#__setobj__" do
|
130
138
|
it "resets the target object to a different object" do
|
131
|
-
target.
|
139
|
+
expect(target).to receive(:foo).never
|
132
140
|
|
133
141
|
new_target = double
|
134
|
-
new_target.
|
142
|
+
expect(new_target).to receive(:foo)
|
135
143
|
|
136
|
-
|
137
|
-
|
144
|
+
dummy.__setobj__(new_target)
|
145
|
+
dummy.foo
|
138
146
|
end
|
139
147
|
end
|
140
148
|
end
|
metadata
CHANGED
@@ -1,74 +1,69 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dumb_delegator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.6.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Andy Lindeman
|
8
|
+
- Steven Harman
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-03-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
17
|
requirements:
|
19
|
-
- - ~>
|
18
|
+
- - "~>"
|
20
19
|
- !ruby/object:Gem::Version
|
21
|
-
version: 2.
|
20
|
+
version: '2.14'
|
22
21
|
type: :development
|
23
22
|
prerelease: false
|
24
23
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
24
|
requirements:
|
27
|
-
- - ~>
|
25
|
+
- - "~>"
|
28
26
|
- !ruby/object:Gem::Version
|
29
|
-
version: 2.
|
27
|
+
version: '2.14'
|
30
28
|
- !ruby/object:Gem::Dependency
|
31
29
|
name: pry
|
32
30
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
31
|
requirements:
|
35
|
-
- -
|
32
|
+
- - ">="
|
36
33
|
- !ruby/object:Gem::Version
|
37
34
|
version: '0'
|
38
35
|
type: :development
|
39
36
|
prerelease: false
|
40
37
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
38
|
requirements:
|
43
|
-
- -
|
39
|
+
- - ">="
|
44
40
|
- !ruby/object:Gem::Version
|
45
41
|
version: '0'
|
46
42
|
- !ruby/object:Gem::Dependency
|
47
43
|
name: rake
|
48
44
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
45
|
requirements:
|
51
|
-
- -
|
46
|
+
- - ">="
|
52
47
|
- !ruby/object:Gem::Version
|
53
48
|
version: '0'
|
54
49
|
type: :development
|
55
50
|
prerelease: false
|
56
51
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
52
|
requirements:
|
59
|
-
- -
|
53
|
+
- - ">="
|
60
54
|
- !ruby/object:Gem::Version
|
61
55
|
version: '0'
|
62
56
|
description: Delegator class that delegates ALL the things
|
63
57
|
email:
|
64
|
-
-
|
58
|
+
- alindeman@gmail.com
|
59
|
+
- steveharman@gmail.com
|
65
60
|
executables: []
|
66
61
|
extensions: []
|
67
62
|
extra_rdoc_files: []
|
68
63
|
files:
|
69
|
-
- .gitignore
|
70
|
-
- .rspec
|
71
|
-
- .travis.yml
|
64
|
+
- ".gitignore"
|
65
|
+
- ".rspec"
|
66
|
+
- ".travis.yml"
|
72
67
|
- Gemfile
|
73
68
|
- LICENSE
|
74
69
|
- README.md
|
@@ -78,35 +73,28 @@ files:
|
|
78
73
|
- lib/dumb_delegator/version.rb
|
79
74
|
- spec/dumb_delegator_spec.rb
|
80
75
|
- spec/spec_helper.rb
|
81
|
-
homepage: https://github.com/
|
76
|
+
homepage: https://github.com/stevenharman/dumb_delegator
|
82
77
|
licenses: []
|
78
|
+
metadata: {}
|
83
79
|
post_install_message:
|
84
80
|
rdoc_options: []
|
85
81
|
require_paths:
|
86
82
|
- lib
|
87
83
|
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
-
none: false
|
89
84
|
requirements:
|
90
|
-
- -
|
85
|
+
- - ">="
|
91
86
|
- !ruby/object:Gem::Version
|
92
87
|
version: '0'
|
93
|
-
segments:
|
94
|
-
- 0
|
95
|
-
hash: 2175975043620941750
|
96
88
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
89
|
requirements:
|
99
|
-
- -
|
90
|
+
- - ">="
|
100
91
|
- !ruby/object:Gem::Version
|
101
92
|
version: '0'
|
102
|
-
segments:
|
103
|
-
- 0
|
104
|
-
hash: 2175975043620941750
|
105
93
|
requirements: []
|
106
94
|
rubyforge_project:
|
107
|
-
rubygems_version:
|
95
|
+
rubygems_version: 2.2.2
|
108
96
|
signing_key:
|
109
|
-
specification_version:
|
97
|
+
specification_version: 4
|
110
98
|
summary: Delegator and SimpleDelegator in Ruby's stdlib are somewhat useful, but they
|
111
99
|
pull in most of Kernel. This is not appropriate for many uses; for instance, delegation
|
112
100
|
to Rails models.
|