lazy_object 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3b3f3a27effb74769735f2bda4d82dc2c4c0a1d83d7ec045fa5271fa6159d73d
4
- data.tar.gz: cc398a8b47a1a0dad641f49ce396e16a7004b4f2c08d87c9d6fb85d14ed2ba1e
3
+ metadata.gz: da5663885eb9cd9651c97f3433ffe9b0b69f2f305bbf8d2d4c2a3fa29364cfbb
4
+ data.tar.gz: 5dcd597961dfd4e68160f831e2730099ffd7e9969414d6eebb6aa95470bfa91a
5
5
  SHA512:
6
- metadata.gz: 71ca10f6211c502a834a49b3bab1d599bf9c253174f3b33d83f33f566204e4e638c89fed4148b04eafef3223d52d389005bdc186f96fccc861d24eb61a728f32
7
- data.tar.gz: '0299ef027da70df518d9cdb2ab4d7bae52d806b78ea4dd6edb7158513a291e62ce1c3ac6084f0991254d43dbfd1f97b7240eb435333d9f809ffc7f3775cc07b5'
6
+ metadata.gz: 6fab73e859d5c5a19dc4588e519864762e16a5548b8454d0b758240f482493136d3527b9e3f04af4914f127a2bf23de582164801221dfe7f16ee8ec673a11a41
7
+ data.tar.gz: 57f3aa04c035ba86bb4431864a33e706af8fa225c13b564cbb60fe4e564107b5af8c838ff6448ead2ba0d10c3af27069d0e2dae1125a6805844aa58948f63478
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.1.0'
13
+ '0.2.0'
14
14
  end
15
15
 
16
16
  def initialize(&callable)
@@ -31,7 +31,11 @@ class LazyObject < BasicObject
31
31
 
32
32
  # Cached target object.
33
33
  def __target_object__
34
- @__target_object__ ||= @__callable__.call
34
+ if defined?(@__target_object__)
35
+ @__target_object__
36
+ else
37
+ @__target_object__ = @__callable__.call
38
+ end
35
39
  end
36
40
 
37
41
  # Forwards all method calls to the target object.
@@ -71,6 +71,24 @@ RSpec.describe LazyObject do
71
71
  end
72
72
  end
73
73
 
74
+ context "when target object evaluates to a falsy value" do
75
+ let(:lazy_object) { LazyObject.new { TargetObject.new } }
76
+
77
+ it "evaluates the block exactly once for false" do
78
+ TargetObject.should_receive(:new).once.and_return(false)
79
+ 3.times do
80
+ expect(lazy_object).to eq(false)
81
+ end
82
+ end
83
+
84
+ it "evaluates the block exactly once for nil" do
85
+ TargetObject.should_receive(:new).once.and_return(nil)
86
+ 3.times do
87
+ expect(lazy_object).to eq(nil)
88
+ end
89
+ end
90
+ end
91
+
74
92
  context "equality operators" do
75
93
  it "should return correct value when comparing" do
76
94
  one = LazyObject.new { 1 }
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lazy_object
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arthur Shagall
8
8
  - Sergey Potapov
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-12-16 00:00:00.000000000 Z
12
+ date: 2023-08-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -77,7 +77,7 @@ homepage: ''
77
77
  licenses:
78
78
  - MIT
79
79
  metadata: {}
80
- post_install_message:
80
+ post_install_message:
81
81
  rdoc_options: []
82
82
  require_paths:
83
83
  - lib
@@ -92,8 +92,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
92
  - !ruby/object:Gem::Version
93
93
  version: '0'
94
94
  requirements: []
95
- rubygems_version: 3.2.3
96
- signing_key:
95
+ rubygems_version: 3.2.33
96
+ signing_key:
97
97
  specification_version: 4
98
98
  summary: Lazily initialized object wrapper.
99
99
  test_files: