Skip to content

Commit 8ad69f6

Browse files
Add #freeze override
1 parent 9f80c7f commit 8ad69f6

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

lib/recursive_open_struct.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,14 @@ def method_missing(mid, *args)
132132
end
133133
end
134134

135+
def freeze
136+
@table.each_key do |key|
137+
new_ostruct_member!(key)
138+
end
139+
140+
super
141+
end
142+
135143
# TODO: Rename to new_ostruct_member! once we care less about Rubies before
136144
# 2.4.0.
137145
def new_ostruct_member(name)

spec/recursive_open_struct/open_struct_behavior_spec.rb

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@
116116
ros.freeze
117117
end
118118

119-
it "can read existing keys", pending: 'Awaiting fix' do
119+
it "can read existing keys" do
120120
expect(ros.asdf).to eq 'John Smith'
121121
end
122122

@@ -127,6 +127,22 @@
127127
it "cannot write existing keys" do
128128
expect { ros.asdf = 'new_value' }.to raise_error FrozenError
129129
end
130+
131+
context "with recursive structure" do
132+
let(:hash) { { :key => { :subkey => 42 } } }
133+
134+
it "can read existing sub-elements" do
135+
expect(ros.key.subkey).to eq 42
136+
end
137+
138+
it "can write new sub-elements" do
139+
expect { ros.key.new_subkey = 43 }.not_to raise_error
140+
end
141+
142+
it "can write existing sub-elements" do
143+
expect { ros.key.subkey = 43 }.not_to raise_error
144+
end
145+
end
130146
end
131147
end # describe behavior it inherits from OpenStruct
132148
end

0 commit comments

Comments
 (0)