Skip to content

Commit f2c8186

Browse files
authored
Merge pull request #29 from casperisfine/data-private-members
Data#pretty_print handle privated or removed members
2 parents f3bd0ab + fb19501 commit f2c8186

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

lib/pp.rb

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -451,13 +451,25 @@ def pretty_print(q) # :nodoc:
451451
class_name = PP.mcall(self, Kernel, :class).name
452452
class_name = " #{class_name}" if class_name
453453
q.group(1, "#<data#{class_name}", '>') {
454-
q.seplist(PP.mcall(self, Kernel, :class).members, lambda { q.text "," }) {|member|
454+
455+
members = PP.mcall(self, Kernel, :class).members
456+
values = []
457+
members.select! do |member|
458+
value = begin
459+
values << __send__(member)
460+
true
461+
rescue NoMethodError
462+
false
463+
end
464+
end
465+
466+
q.seplist(members.zip(values), lambda { q.text "," }) {|(member, value)|
455467
q.breakable
456468
q.text member.to_s
457469
q.text '='
458470
q.group(1) {
459471
q.breakable ''
460-
q.pp public_send(member)
472+
q.pp value
461473
}
462474
}
463475
}

test/test_pp.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,22 @@ def test_data
159159
b = Data.define(:a).new(42)
160160
assert_equal("#{b.inspect}\n", PP.pp(b, ''.dup))
161161
end
162+
163+
D2 = Data.define(:aaa, :bbb) do
164+
private :aaa
165+
end
166+
def test_data_private_member
167+
a = D2.new("aaa", "bbb")
168+
assert_equal("#<data PPTestModule::PPCycleTest::D2\n aaa=\"aaa\",\n bbb=\"bbb\">\n", PP.pp(a, ''.dup, 20))
169+
end
170+
171+
D3 = Data.define(:aaa, :bbb) do
172+
remove_method :aaa
173+
end
174+
def test_data_removed_member
175+
a = D3.new("aaa", "bbb")
176+
assert_equal("#<data PPTestModule::PPCycleTest::D3\n bbb=\"bbb\">\n", PP.pp(a, ''.dup, 20))
177+
end
162178
end
163179

164180
def test_object

0 commit comments

Comments
 (0)