debug_helper 1.7.0 → 1.8.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.
Files changed (151) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +22 -22
  3. data/README.md +848 -218
  4. data/lib/debug_helper.rb +79 -160
  5. data/lib/debug_helper/array_handler.rb +12 -0
  6. data/lib/debug_helper/dir_handler.rb +19 -0
  7. data/lib/debug_helper/each_pair_handler.rb +13 -0
  8. data/lib/debug_helper/each_with_index_handler.rb +11 -0
  9. data/lib/debug_helper/exception_handler.rb +14 -0
  10. data/lib/debug_helper/file_handler.rb +29 -0
  11. data/lib/debug_helper/generic_handler.rb +12 -0
  12. data/lib/debug_helper/handler.rb +102 -0
  13. data/lib/debug_helper/hash_handler.rb +19 -0
  14. data/lib/debug_helper/io_handler.rb +15 -0
  15. data/lib/debug_helper/match_data_handler.rb +17 -0
  16. data/lib/debug_helper/object_handler.rb +13 -0
  17. data/lib/debug_helper/open_struct_handler.rb +16 -0
  18. data/lib/debug_helper/range_handler.rb +14 -0
  19. data/lib/debug_helper/regexp_handler.rb +16 -0
  20. data/lib/debug_helper/set_handler.rb +12 -0
  21. data/lib/debug_helper/string_handler.rb +17 -0
  22. data/lib/debug_helper/struct_handler.rb +18 -0
  23. data/lib/debug_helper/symbol_handler.rb +15 -0
  24. data/lib/debug_helper/version.rb +3 -3
  25. data/markdown/readme/Rakefile +36 -6
  26. data/markdown/readme/class_inclusions.md +10 -3
  27. data/markdown/readme/class_links.md +10 -3
  28. data/markdown/readme/classes/array/circular/show.md +4 -2
  29. data/markdown/readme/classes/array/circular/show.yaml +4 -2
  30. data/markdown/readme/classes/array/mixed/show.md +6 -3
  31. data/markdown/readme/classes/array/mixed/show.yaml +6 -3
  32. data/markdown/readme/classes/array/nested/show.md +6 -3
  33. data/markdown/readme/classes/array/nested/show.yaml +6 -3
  34. data/markdown/readme/classes/array/simple/show.md +2 -1
  35. data/markdown/readme/classes/array/simple/show.yaml +2 -1
  36. data/markdown/readme/classes/dir/simple/show.md +28 -0
  37. data/markdown/readme/classes/dir/simple/show.rb +4 -0
  38. data/markdown/readme/classes/dir/simple/show.yaml +11 -0
  39. data/markdown/readme/classes/dir/simple/template.md +9 -0
  40. data/markdown/readme/classes/dir/template.md +3 -0
  41. data/markdown/readme/classes/exception/simple/show.md +44 -0
  42. data/markdown/readme/classes/exception/simple/show.rb +22 -0
  43. data/markdown/readme/classes/exception/simple/show.yaml +9 -0
  44. data/markdown/readme/classes/exception/simple/template.md +9 -0
  45. data/markdown/readme/classes/exception/template.md +3 -0
  46. data/markdown/readme/classes/file/simple/show.md +3 -3
  47. data/markdown/readme/classes/file/simple/show.yaml +3 -3
  48. data/markdown/readme/classes/hash/circular/show.md +12 -4
  49. data/markdown/readme/classes/hash/circular/show.yaml +12 -4
  50. data/markdown/readme/classes/hash/mixed/show.md +14 -6
  51. data/markdown/readme/classes/hash/mixed/show.yaml +14 -6
  52. data/markdown/readme/classes/hash/nested/show.md +24 -9
  53. data/markdown/readme/classes/hash/nested/show.yaml +24 -9
  54. data/markdown/readme/classes/hash/simple/show.md +10 -4
  55. data/markdown/readme/classes/hash/simple/show.yaml +10 -4
  56. data/markdown/readme/classes/io/simple/show.md +23 -0
  57. data/markdown/readme/classes/io/simple/show.rb +4 -0
  58. data/markdown/readme/classes/io/simple/show.yaml +6 -0
  59. data/markdown/readme/classes/io/simple/template.md +9 -0
  60. data/markdown/readme/classes/io/template.md +3 -0
  61. data/markdown/readme/classes/match_data/multiple_captures/show.md +33 -0
  62. data/markdown/readme/classes/match_data/multiple_captures/show.rb +4 -0
  63. data/markdown/readme/classes/match_data/multiple_captures/show.yaml +16 -0
  64. data/markdown/readme/classes/match_data/multiple_captures/template.md +9 -0
  65. data/markdown/readme/classes/match_data/named_captures/show.md +31 -0
  66. data/markdown/readme/classes/match_data/named_captures/show.rb +4 -0
  67. data/markdown/readme/classes/match_data/named_captures/show.yaml +14 -0
  68. data/markdown/readme/classes/match_data/named_captures/template.md +9 -0
  69. data/markdown/readme/classes/match_data/simple/show.md +25 -0
  70. data/markdown/readme/classes/match_data/simple/show.rb +4 -0
  71. data/markdown/readme/classes/match_data/simple/show.yaml +8 -0
  72. data/markdown/readme/classes/match_data/simple/template.md +9 -0
  73. data/markdown/readme/classes/match_data/template.md +7 -0
  74. data/markdown/readme/classes/object/object/show.md +23 -0
  75. data/markdown/readme/classes/object/object/show.rb +8 -0
  76. data/markdown/readme/classes/object/object/show.yaml +2 -0
  77. data/markdown/readme/classes/object/object/template.md +9 -0
  78. data/markdown/readme/classes/object/template.md +1 -7
  79. data/markdown/readme/classes/open_struct/circular/show.md +40 -0
  80. data/markdown/readme/classes/open_struct/circular/show.rb +8 -0
  81. data/markdown/readme/classes/open_struct/circular/show.yaml +17 -0
  82. data/markdown/readme/classes/open_struct/circular/template.md +11 -0
  83. data/markdown/readme/classes/open_struct/mixed/show.md +51 -0
  84. data/markdown/readme/classes/open_struct/mixed/show.rb +5 -0
  85. data/markdown/readme/classes/open_struct/mixed/show.yaml +33 -0
  86. data/markdown/readme/classes/open_struct/mixed/template.md +9 -0
  87. data/markdown/readme/classes/open_struct/nested/show.md +73 -0
  88. data/markdown/readme/classes/open_struct/nested/show.rb +14 -0
  89. data/markdown/readme/classes/open_struct/nested/show.yaml +46 -0
  90. data/markdown/readme/classes/open_struct/nested/template.md +9 -0
  91. data/markdown/readme/classes/open_struct/simple/show.md +41 -0
  92. data/markdown/readme/classes/open_struct/simple/show.rb +5 -0
  93. data/markdown/readme/classes/open_struct/simple/show.yaml +23 -0
  94. data/markdown/readme/classes/open_struct/simple/template.md +9 -0
  95. data/markdown/readme/classes/open_struct/template.md +9 -0
  96. data/markdown/readme/classes/range/exclude_end/show.md +22 -0
  97. data/markdown/readme/classes/range/exclude_end/show.rb +4 -0
  98. data/markdown/readme/classes/range/exclude_end/show.yaml +5 -0
  99. data/markdown/readme/classes/range/exclude_end/template.md +9 -0
  100. data/markdown/readme/classes/range/include_end/show.md +22 -0
  101. data/markdown/readme/classes/range/include_end/show.rb +4 -0
  102. data/markdown/readme/classes/range/include_end/show.yaml +5 -0
  103. data/markdown/readme/classes/range/include_end/template.md +9 -0
  104. data/markdown/readme/classes/range/template.md +5 -0
  105. data/markdown/readme/classes/regexp/named_captures/show.md +28 -0
  106. data/markdown/readme/classes/regexp/named_captures/show.rb +4 -0
  107. data/markdown/readme/classes/regexp/named_captures/show.yaml +11 -0
  108. data/markdown/readme/classes/regexp/named_captures/template.md +9 -0
  109. data/markdown/readme/classes/regexp/simple/show.md +24 -0
  110. data/markdown/readme/classes/regexp/simple/show.rb +4 -0
  111. data/markdown/readme/classes/regexp/simple/show.yaml +7 -0
  112. data/markdown/readme/classes/regexp/simple/template.md +9 -0
  113. data/markdown/readme/classes/regexp/template.md +5 -0
  114. data/markdown/readme/classes/set/circular/show.md +4 -2
  115. data/markdown/readme/classes/set/circular/show.yaml +4 -2
  116. data/markdown/readme/classes/set/mixed/show.md +6 -3
  117. data/markdown/readme/classes/set/mixed/show.yaml +6 -3
  118. data/markdown/readme/classes/set/nested/show.md +6 -3
  119. data/markdown/readme/classes/set/nested/show.yaml +6 -3
  120. data/markdown/readme/classes/set/simple/show.md +2 -1
  121. data/markdown/readme/classes/set/simple/show.yaml +2 -1
  122. data/markdown/readme/classes/string/multiline/show.md +2 -1
  123. data/markdown/readme/classes/string/multiline/show.yaml +2 -1
  124. data/markdown/readme/classes/string/simple/show.md +2 -1
  125. data/markdown/readme/classes/string/simple/show.yaml +2 -1
  126. data/markdown/readme/classes/struct/circular/show.md +34 -8
  127. data/markdown/readme/classes/struct/circular/show.yaml +34 -8
  128. data/markdown/readme/classes/struct/mixed/show.md +21 -6
  129. data/markdown/readme/classes/struct/mixed/show.yaml +21 -6
  130. data/markdown/readme/classes/struct/nested/show.md +36 -9
  131. data/markdown/readme/classes/struct/nested/show.yaml +36 -9
  132. data/markdown/readme/classes/struct/simple/show.md +17 -4
  133. data/markdown/readme/classes/struct/simple/show.yaml +17 -4
  134. data/markdown/readme/classes/symbol/simple/show.md +2 -1
  135. data/markdown/readme/classes/symbol/simple/show.yaml +2 -1
  136. data/markdown/readme/options/depth/show.md +30 -15
  137. data/markdown/readme/options/depth/show.yaml +30 -15
  138. data/markdown/readme/template.md +8 -8
  139. metadata +88 -14
  140. data/markdown/readme/classes/object/datetime/show.md +0 -18
  141. data/markdown/readme/classes/object/datetime/show.rb +0 -4
  142. data/markdown/readme/classes/object/datetime/show.yaml +0 -1
  143. data/markdown/readme/classes/object/datetime/template.md +0 -9
  144. data/markdown/readme/classes/object/range/show.md +0 -19
  145. data/markdown/readme/classes/object/range/show.rb +0 -4
  146. data/markdown/readme/classes/object/range/show.yaml +0 -2
  147. data/markdown/readme/classes/object/range/template.md +0 -9
  148. data/markdown/readme/classes/object/regexp/show.md +0 -19
  149. data/markdown/readme/classes/object/regexp/show.rb +0 -4
  150. data/markdown/readme/classes/object/regexp/show.yaml +0 -2
  151. data/markdown/readme/classes/object/regexp/template.md +0 -9
data/lib/debug_helper.rb CHANGED
@@ -1,7 +1,31 @@
1
+ require 'ostruct'
1
2
  require 'set'
2
3
  require 'yaml'
3
4
 
4
- require 'debug_helper/version'
5
+ require_relative 'debug_helper/version'
6
+
7
+ require_relative 'debug_helper/handler'
8
+
9
+ require_relative 'debug_helper/each_with_index_handler'
10
+ require_relative 'debug_helper/array_handler'
11
+ require_relative 'debug_helper/set_handler'
12
+
13
+ require_relative 'debug_helper/each_pair_handler'
14
+ require_relative 'debug_helper/hash_handler'
15
+ require_relative 'debug_helper/struct_handler'
16
+
17
+ require_relative 'debug_helper/dir_handler'
18
+ require_relative 'debug_helper/exception_handler'
19
+ require_relative 'debug_helper/file_handler'
20
+ require_relative 'debug_helper/generic_handler'
21
+ require_relative 'debug_helper/io_handler'
22
+ require_relative 'debug_helper/match_data_handler'
23
+ require_relative 'debug_helper/object_handler'
24
+ require_relative 'debug_helper/open_struct_handler'
25
+ require_relative 'debug_helper/regexp_handler'
26
+ require_relative 'debug_helper/string_handler'
27
+ require_relative 'debug_helper/symbol_handler'
28
+ require_relative 'debug_helper/range_handler'
5
29
 
6
30
  class DebugHelper
7
31
 
@@ -21,12 +45,10 @@ class DebugHelper
21
45
 
22
46
  def self.show(obj, message = obj.class, options = {})
23
47
  debug_helper = DebugHelper.new(obj, message, options)
24
- x = debug_helper.send(:_show, obj, message, info = {})
25
- puts x.to_yaml
48
+ s = debug_helper.show(obj, message, info = {})
49
+ puts s.to_yaml
26
50
  end
27
51
 
28
- private
29
-
30
52
  def initialize(obj, message, options)
31
53
  self.obj = obj
32
54
  self.message = message
@@ -34,170 +56,67 @@ class DebugHelper
34
56
  self.object_ids = []
35
57
  end
36
58
 
37
- def _show(obj, message, info)
38
- if object_ids.include?(obj.object_id)
39
- s = show_object(obj, message, info)
40
- elsif depth == object_ids.size
41
- s = show_object(obj, message, info)
42
- else
43
- object_ids.push(obj.object_id)
44
- s = case
45
- when obj.kind_of?(Array)
46
- show_array(obj, message, info)
47
- when obj.kind_of?(Hash)
48
- show_hash(obj, message, info)
49
- when obj.kind_of?(Set)
50
- show_array(obj, message, info)
51
- when obj.kind_of?(Struct)
52
- show_struct(obj, message, info)
53
- # when obj.kind_of?(Range)
54
- else
55
- show_object(obj, message, info)
56
- end
57
- object_ids.pop
58
- end
59
- s
60
- end
61
-
62
- def show_array(obj, message, info)
63
- content = {}
64
- obj.each_with_index do |item, i|
65
- content.store("Element #{i}", _show(item, nil, {}))
66
- end
67
- attrs = {
68
- :message => message,
69
- :size => obj.size,
70
- }
71
- _show_item(obj.class.name, content, attrs, info)
59
+ def object_seen?(obj)
60
+ object_ids.include?(obj.object_id)
72
61
  end
73
62
 
74
- def show_hash(obj, message, info)
75
- content = {}
76
- obj.each_with_index do |pair, i|
77
- key, value = *pair
78
- pair = {'Key' => _show(key, nil, {}), 'Value' => _show(value, nil, {})}
79
- content.store("Pair #{i}", pair)
80
- end
81
- attrs = {
82
- :size => obj.size,
83
- :default => obj.default,
84
- :default_proc => obj.default_proc,
85
- :message => message,
86
- }
87
- _show_item(obj.class.name, content, attrs, info)
63
+ def depth_reached?
64
+ depth == object_ids.size
88
65
  end
89
66
 
90
- def show_object(obj, message, info)
91
- methods = methods_for_object(obj)
92
- if methods.nil?
93
- message_info = message.nil? ? '' : " (message='#{message}')"
94
- "#{obj.class.name}#{message_info} #{obj.inspect}"
67
+ def show(obj, message, info)
68
+ handler = nil
69
+ if object_seen?(obj) || depth_reached?
70
+ handler = GenericHandler.new(self, obj, message, info)
71
+ s = handler.show
95
72
  else
96
- content = {}
97
- attrs = {:message => message}
98
- methods[:instance].each do |instance_method|
99
- value = obj.send(instance_method)
100
- if instance_method == :size
101
- attrs.store(:size, value)
102
- else
103
- content.store(instance_method.to_s, value)
73
+ object_ids.push(obj.object_id)
74
+ begin
75
+ # If there's a handler for the class, use it.
76
+ # Note that the class may be a custom class, not defined here,
77
+ # but instead defined outside this project.
78
+ # So if the user of this library has defined DebugHelper::FooHandler
79
+ # and the object is a Foo, that handler will be selected and called.
80
+ handler_class_name = "DebugHelper::#{obj.class.name}Handler"
81
+ handler_class = Object.const_get(handler_class_name)
82
+ handler = handler_class.new(method(__method__), obj, message, info)
83
+ rescue
84
+ # If there's not a handler for the class, try using :kind_of?.
85
+ [
86
+ Array,
87
+ Dir,
88
+ Exception,
89
+ File,
90
+ IO,
91
+ Hash,
92
+ OpenStruct,
93
+ Range,
94
+ Set,
95
+ String,
96
+ Struct,
97
+ # There's no method Symbol.new, so cannot instantiate a subclass.
98
+ # Symbol,
99
+ ].each do |klass|
100
+ if obj.kind_of?(klass)
101
+ handler_class_name = "DebugHelper::#{klass.name}Handler"
102
+ handler_class = Object.const_get(handler_class_name)
103
+ handler = handler_class.new(method(__method__), obj, message, info)
104
+ break
105
+ end
104
106
  end
105
107
  end
106
- methods[:class].each do |pair|
107
- class_method, arguments = *pair
108
- value = Object.const_get(obj.class.to_s).send(class_method, *arguments)
109
- content.store(class_method.to_s, value)
108
+ if handler.nil?
109
+ if obj.instance_of?(Object)
110
+ handler_class= ObjectHandler
111
+ else
112
+ handler_class = GenericHandler
113
+ end
114
+ handler = handler_class.new(self, obj, message, info)
110
115
  end
111
- _show_item(obj.class.name, content, attrs, info)
112
- end
113
- end
114
-
115
- def show_struct(obj, message, info)
116
- content = {}
117
- i = 0
118
- obj.each_pair do |member|
119
- member_name, value = *member
120
- pair = {'Name' => member_name, 'Value' => _show(value, nil, {})}
121
- content.store("Member #{i}", pair)
122
- i += 1
123
- end
124
- attrs = {
125
- :message => message,
126
- :size => obj.size,
127
- }
128
- _show_item(obj.class.name, content, attrs, info)
129
- end
130
-
131
- def _show_item(class_name, content, attrs, info)
132
- message = attrs[:message]
133
- unless message.nil?
134
- attrs[:message] = "'#{message}'"
135
- end
136
- label = label(class_name, attrs)
137
- info.store(label, content)
138
- info
139
- end
140
-
141
- def label(class_name, attrs)
142
- a = []
143
- attrs.each_pair do |key, value|
144
- a.push("#{key}=#{value}") unless value.nil?
116
+ s = handler.show
117
+ object_ids.pop
145
118
  end
146
- return class_name if a.empty?
147
- attrs_s = a.join(' ')
148
- "#{class_name} (#{attrs_s})"
149
- end
150
-
151
- def methods_for_object(obj)
152
- methods = case
153
- when obj.kind_of?(File)
154
- {
155
- # The instance forms of some of these require the file to be open.
156
- :class => {
157
- :absolute_path => [obj.path],
158
- :atime => [obj.path],
159
- :ctime => [obj.path],
160
- :executable? => [obj.path],
161
- :exist? => [obj.path],
162
- :ftype => [obj.path],
163
- :mtime => [obj.path],
164
- :path => [obj.path],
165
- :pipe? => [obj.path],
166
- :readable? => [obj.path],
167
- :realpath => [obj.path],
168
- :setgid? => [obj.path],
169
- :setuid? => [obj.path],
170
- :size => [obj.path],
171
- :socket? => [obj.path],
172
- :symlink? => [obj.path],
173
- :writable? => [obj.path],
174
- },
175
- :instance => [],
176
- }
177
- when obj.kind_of?(String)
178
- {
179
- :class => {},
180
- :instance => [
181
- :to_s,
182
- :size,
183
- :encoding,
184
- :ascii_only?,
185
- :bytesize,
186
- ]
187
- }
188
- when obj.kind_of?(Symbol)
189
- {
190
- :class => {},
191
- :instance => [
192
- :to_s,
193
- :size,
194
- :encoding,
195
- ]
196
- }
197
- else
198
- nil
199
- end
200
- methods
119
+ s
201
120
  end
202
121
 
203
122
  end
@@ -0,0 +1,12 @@
1
+ class DebugHelper
2
+
3
+ class ArrayHandler < EachWithIndexHandler
4
+
5
+ def calls_for_instance
6
+ [
7
+ [:size],
8
+ ]
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,19 @@
1
+ class DebugHelper
2
+
3
+ class DirHandler < Handler
4
+
5
+ def calls_for_instance
6
+ [
7
+ [:path],
8
+ ]
9
+ end
10
+
11
+ def calls_for_class
12
+ [
13
+ [:entries, obj.path],
14
+ [:exist?, obj.path],
15
+ ]
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,13 @@
1
+ class DebugHelper
2
+
3
+ class EachPairHandler < Handler
4
+
5
+ attr_accessor :pair_names
6
+
7
+ def each_pair?
8
+ true
9
+ end
10
+
11
+ end
12
+
13
+ end
@@ -0,0 +1,11 @@
1
+ class DebugHelper
2
+
3
+ class EachWithIndexHandler < Handler
4
+
5
+ def each_with_index?
6
+ true
7
+ end
8
+
9
+ end
10
+
11
+ end
@@ -0,0 +1,14 @@
1
+ class DebugHelper
2
+
3
+ class ExceptionHandler < Handler
4
+
5
+ def calls_for_instance
6
+ [
7
+ [:message],
8
+ [:cause],
9
+ [:backtrace],
10
+ ]
11
+ end
12
+ end
13
+
14
+ end
@@ -0,0 +1,29 @@
1
+ class DebugHelper
2
+
3
+ class FileHandler < Handler
4
+
5
+ def calls_for_class
6
+ path = obj.path
7
+ [
8
+ [:absolute_path, path],
9
+ [:atime, path],
10
+ [:ctime, path],
11
+ [:executable?, path],
12
+ [:exist?, path],
13
+ [:ftype, path],
14
+ [:mtime, path],
15
+ [:path, path],
16
+ [:pipe?, path],
17
+ [:readable?, path],
18
+ [:realpath, path],
19
+ [:setgid?, path],
20
+ [:setuid?, path],
21
+ [:size, path],
22
+ [:socket?, path],
23
+ [:symlink?, path],
24
+ [:writable?, path],
25
+ ]
26
+ end
27
+ end
28
+
29
+ end
@@ -0,0 +1,12 @@
1
+ class DebugHelper
2
+
3
+ class GenericHandler < Handler
4
+
5
+ def show
6
+ message_info = message.nil? ? '' : " (message='#{message}')"
7
+ "#{obj.class.name}#{message_info} #{obj.inspect}"
8
+ end
9
+
10
+ end
11
+
12
+ end
@@ -0,0 +1,102 @@
1
+ class DebugHelper
2
+
3
+ class Handler
4
+
5
+ attr_accessor :show_method, :obj, :message, :info, :attrs, :content
6
+
7
+ def initialize(show_method, obj, message, info)
8
+ self.show_method = show_method
9
+ self.obj = obj
10
+ self.message = message
11
+ self.info = info
12
+ self.attrs = {}
13
+ self.content = {}
14
+ show
15
+ end
16
+
17
+ def show
18
+ gather
19
+ finish
20
+ end
21
+
22
+ def gather
23
+ calls_for_instance.each do |call_info|
24
+ method = call_info.shift
25
+ unless obj.respond_to?(method)
26
+ message = "Instance of #{obj.class} does not respond to method #{method}"
27
+ raise NoMethodError.new(message, method)
28
+ end
29
+ args = call_info
30
+ if args.empty?
31
+ value = obj.send(method)
32
+ else
33
+ value = obj.send(method, *args)
34
+ end
35
+ content.store(method.to_s, value)
36
+ end
37
+ calls_for_class.each do |call_info|
38
+ klass = Object.const_get(obj.class.name)
39
+ method = call_info.shift
40
+ unless klass.respond_to?(method)
41
+ message = "#{obj.class} does not respond to method #{method}"
42
+ raise NoMethodError.new(message, method)
43
+ end
44
+ args = call_info
45
+ if args.empty?
46
+ value = klass.send(method)
47
+ else
48
+ value = klass.send(method, *args)
49
+ end
50
+ content.store(method.to_s, value)
51
+ end
52
+ if each_with_index?
53
+ obj.each_with_index do |item, i|
54
+ self.content.store("Element #{i}", show_method.call(item, nil, {}))
55
+ end
56
+ end
57
+ if each_pair?
58
+ pair_name, key_name, value_name = *pair_names
59
+ i = 0
60
+ obj.each_pair do |key, value|
61
+ pair = {key_name => show_method.call(key, nil, {}), value_name => show_method.call(value, nil, {})}
62
+ self.content.store("#{pair_name} #{i}", pair)
63
+ i += 1
64
+ end
65
+ end
66
+ end
67
+
68
+ def finish
69
+ attrs[:message] = "'#{message}'" unless message.nil?
70
+ self.info.store(label, content)
71
+ info
72
+ end
73
+
74
+ def label
75
+ a = []
76
+ attrs.each_pair do |key, value|
77
+ a.push("#{key}=#{value}") unless value.nil?
78
+ end
79
+ return self.obj.class.name if a.empty?
80
+ attrs_s = a.join(' ')
81
+ "#{self.obj.class.name} (#{attrs_s})"
82
+ end
83
+
84
+ def calls_for_instance
85
+ []
86
+ end
87
+
88
+ def calls_for_class
89
+ []
90
+ end
91
+
92
+ def each_with_index?
93
+ false
94
+ end
95
+
96
+ def each_pair?
97
+ false
98
+ end
99
+
100
+ end
101
+
102
+ end