lazy_object 0.2.0 → 0.3.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 +4 -4
- data/.ruby-version +1 -1
- data/lib/lazy_object.rb +8 -2
- data/spec/lazy_object_spec.rb +33 -0
- metadata +3 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 57372e95000adc88240ed053ffda5d549d6a6690ebfffdcd18f6a9e186e3324e
|
|
4
|
+
data.tar.gz: ca35f570057dcc8a13a3baa0be00ba190377912a43b1089c872afb2cb5750e3e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d06539c156a2834ac22b928af95d7466191b653c7eaf29e5f64ed440fc72cb093652ad07f942335dc1ec9cc3c94e08e008729b53c65a865f2c8739ca650d4d02
|
|
7
|
+
data.tar.gz: f7aa972479fa3204cc6437ec37bbf93c42dd86a49c5d12290d92b08e5ff14410a93e7d7d4a0555cb6d2a3e18707f4186a6430fddb436c2fa7373d99a9681ab79
|
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.
|
|
1
|
+
3.3
|
data/lib/lazy_object.rb
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# lazy.get_expensive_results(foo, bar) # Initializes VeryExpensiveObject and calls 'get_expensive_results' on it, passing in foo and bar
|
|
11
11
|
class LazyObject < BasicObject
|
|
12
12
|
def self.version
|
|
13
|
-
'0.
|
|
13
|
+
'0.3.0'
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
def initialize(&callable)
|
|
@@ -38,8 +38,14 @@ class LazyObject < BasicObject
|
|
|
38
38
|
end
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
+
def respond_to_missing?(method_name, include_private = false)
|
|
42
|
+
__target_object__.respond_to?(method_name, include_private)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
alias respond_to? respond_to_missing?
|
|
46
|
+
|
|
41
47
|
# Forwards all method calls to the target object.
|
|
42
48
|
def method_missing(method_name, ...)
|
|
43
|
-
|
|
49
|
+
__target_object__.public_send(method_name, ...)
|
|
44
50
|
end
|
|
45
51
|
end
|
data/spec/lazy_object_spec.rb
CHANGED
|
@@ -20,6 +20,10 @@ RSpec.describe LazyObject do
|
|
|
20
20
|
def method_with_kwargs_and_yield(**kwargs)
|
|
21
21
|
yield **kwargs
|
|
22
22
|
end
|
|
23
|
+
|
|
24
|
+
private def private_method_one_pos_arg(foo)
|
|
25
|
+
foo
|
|
26
|
+
end
|
|
23
27
|
end
|
|
24
28
|
|
|
25
29
|
let(:lazy_object) {
|
|
@@ -89,6 +93,35 @@ RSpec.describe LazyObject do
|
|
|
89
93
|
end
|
|
90
94
|
end
|
|
91
95
|
|
|
96
|
+
context "respond_to?" do
|
|
97
|
+
let(:lazy_object) { LazyObject.new { TargetObject.new } }
|
|
98
|
+
|
|
99
|
+
it "responds to methods defined on the target object" do
|
|
100
|
+
expect(lazy_object.respond_to?(:value)).to eq(true)
|
|
101
|
+
expect(lazy_object.respond_to?(:method_with_yield)).to eq(true)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
it "does not respond to methods not defined on the target object" do
|
|
105
|
+
expect(lazy_object.respond_to?(:nonexistent_method)).to eq(false)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it "does not respond to private methods by default" do
|
|
109
|
+
expect(lazy_object.respond_to?(:private_method_one_pos_arg)).to eq(false)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
it "responds to private methods when include_private is true" do
|
|
113
|
+
expect(lazy_object.respond_to?(:private_method_one_pos_arg, true)).to eq(true)
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
context "private methods on the target object" do
|
|
118
|
+
let(:lazy_object) { LazyObject.new { TargetObject.new } }
|
|
119
|
+
|
|
120
|
+
it "raises NoMethodError when calling a private method" do
|
|
121
|
+
expect { lazy_object.private_method_one_pos_arg(:bar) }.to raise_error(::NoMethodError)
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
92
125
|
context "equality operators" do
|
|
93
126
|
it "should return correct value when comparing" do
|
|
94
127
|
one = LazyObject.new { 1 }
|
metadata
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: lazy_object
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Arthur Shagall
|
|
8
8
|
- Sergey Potapov
|
|
9
|
-
autorequire:
|
|
10
9
|
bindir: bin
|
|
11
10
|
cert_chain: []
|
|
12
|
-
date:
|
|
11
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
14
|
name: bundler
|
|
@@ -77,7 +76,6 @@ homepage: ''
|
|
|
77
76
|
licenses:
|
|
78
77
|
- MIT
|
|
79
78
|
metadata: {}
|
|
80
|
-
post_install_message:
|
|
81
79
|
rdoc_options: []
|
|
82
80
|
require_paths:
|
|
83
81
|
- lib
|
|
@@ -92,8 +90,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
92
90
|
- !ruby/object:Gem::Version
|
|
93
91
|
version: '0'
|
|
94
92
|
requirements: []
|
|
95
|
-
rubygems_version: 3.2
|
|
96
|
-
signing_key:
|
|
93
|
+
rubygems_version: 3.7.2
|
|
97
94
|
specification_version: 4
|
|
98
95
|
summary: Lazily initialized object wrapper.
|
|
99
96
|
test_files:
|