debug_helper 1.7.0 → 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +22 -22
- data/README.md +848 -218
- data/lib/debug_helper.rb +79 -160
- data/lib/debug_helper/array_handler.rb +12 -0
- data/lib/debug_helper/dir_handler.rb +19 -0
- data/lib/debug_helper/each_pair_handler.rb +13 -0
- data/lib/debug_helper/each_with_index_handler.rb +11 -0
- data/lib/debug_helper/exception_handler.rb +14 -0
- data/lib/debug_helper/file_handler.rb +29 -0
- data/lib/debug_helper/generic_handler.rb +12 -0
- data/lib/debug_helper/handler.rb +102 -0
- data/lib/debug_helper/hash_handler.rb +19 -0
- data/lib/debug_helper/io_handler.rb +15 -0
- data/lib/debug_helper/match_data_handler.rb +17 -0
- data/lib/debug_helper/object_handler.rb +13 -0
- data/lib/debug_helper/open_struct_handler.rb +16 -0
- data/lib/debug_helper/range_handler.rb +14 -0
- data/lib/debug_helper/regexp_handler.rb +16 -0
- data/lib/debug_helper/set_handler.rb +12 -0
- data/lib/debug_helper/string_handler.rb +17 -0
- data/lib/debug_helper/struct_handler.rb +18 -0
- data/lib/debug_helper/symbol_handler.rb +15 -0
- data/lib/debug_helper/version.rb +3 -3
- data/markdown/readme/Rakefile +36 -6
- data/markdown/readme/class_inclusions.md +10 -3
- data/markdown/readme/class_links.md +10 -3
- data/markdown/readme/classes/array/circular/show.md +4 -2
- data/markdown/readme/classes/array/circular/show.yaml +4 -2
- data/markdown/readme/classes/array/mixed/show.md +6 -3
- data/markdown/readme/classes/array/mixed/show.yaml +6 -3
- data/markdown/readme/classes/array/nested/show.md +6 -3
- data/markdown/readme/classes/array/nested/show.yaml +6 -3
- data/markdown/readme/classes/array/simple/show.md +2 -1
- data/markdown/readme/classes/array/simple/show.yaml +2 -1
- data/markdown/readme/classes/dir/simple/show.md +28 -0
- data/markdown/readme/classes/dir/simple/show.rb +4 -0
- data/markdown/readme/classes/dir/simple/show.yaml +11 -0
- data/markdown/readme/classes/dir/simple/template.md +9 -0
- data/markdown/readme/classes/dir/template.md +3 -0
- data/markdown/readme/classes/exception/simple/show.md +44 -0
- data/markdown/readme/classes/exception/simple/show.rb +22 -0
- data/markdown/readme/classes/exception/simple/show.yaml +9 -0
- data/markdown/readme/classes/exception/simple/template.md +9 -0
- data/markdown/readme/classes/exception/template.md +3 -0
- data/markdown/readme/classes/file/simple/show.md +3 -3
- data/markdown/readme/classes/file/simple/show.yaml +3 -3
- data/markdown/readme/classes/hash/circular/show.md +12 -4
- data/markdown/readme/classes/hash/circular/show.yaml +12 -4
- data/markdown/readme/classes/hash/mixed/show.md +14 -6
- data/markdown/readme/classes/hash/mixed/show.yaml +14 -6
- data/markdown/readme/classes/hash/nested/show.md +24 -9
- data/markdown/readme/classes/hash/nested/show.yaml +24 -9
- data/markdown/readme/classes/hash/simple/show.md +10 -4
- data/markdown/readme/classes/hash/simple/show.yaml +10 -4
- data/markdown/readme/classes/io/simple/show.md +23 -0
- data/markdown/readme/classes/io/simple/show.rb +4 -0
- data/markdown/readme/classes/io/simple/show.yaml +6 -0
- data/markdown/readme/classes/io/simple/template.md +9 -0
- data/markdown/readme/classes/io/template.md +3 -0
- data/markdown/readme/classes/match_data/multiple_captures/show.md +33 -0
- data/markdown/readme/classes/match_data/multiple_captures/show.rb +4 -0
- data/markdown/readme/classes/match_data/multiple_captures/show.yaml +16 -0
- data/markdown/readme/classes/match_data/multiple_captures/template.md +9 -0
- data/markdown/readme/classes/match_data/named_captures/show.md +31 -0
- data/markdown/readme/classes/match_data/named_captures/show.rb +4 -0
- data/markdown/readme/classes/match_data/named_captures/show.yaml +14 -0
- data/markdown/readme/classes/match_data/named_captures/template.md +9 -0
- data/markdown/readme/classes/match_data/simple/show.md +25 -0
- data/markdown/readme/classes/match_data/simple/show.rb +4 -0
- data/markdown/readme/classes/match_data/simple/show.yaml +8 -0
- data/markdown/readme/classes/match_data/simple/template.md +9 -0
- data/markdown/readme/classes/match_data/template.md +7 -0
- data/markdown/readme/classes/object/object/show.md +23 -0
- data/markdown/readme/classes/object/object/show.rb +8 -0
- data/markdown/readme/classes/object/object/show.yaml +2 -0
- data/markdown/readme/classes/object/object/template.md +9 -0
- data/markdown/readme/classes/object/template.md +1 -7
- data/markdown/readme/classes/open_struct/circular/show.md +40 -0
- data/markdown/readme/classes/open_struct/circular/show.rb +8 -0
- data/markdown/readme/classes/open_struct/circular/show.yaml +17 -0
- data/markdown/readme/classes/open_struct/circular/template.md +11 -0
- data/markdown/readme/classes/open_struct/mixed/show.md +51 -0
- data/markdown/readme/classes/open_struct/mixed/show.rb +5 -0
- data/markdown/readme/classes/open_struct/mixed/show.yaml +33 -0
- data/markdown/readme/classes/open_struct/mixed/template.md +9 -0
- data/markdown/readme/classes/open_struct/nested/show.md +73 -0
- data/markdown/readme/classes/open_struct/nested/show.rb +14 -0
- data/markdown/readme/classes/open_struct/nested/show.yaml +46 -0
- data/markdown/readme/classes/open_struct/nested/template.md +9 -0
- data/markdown/readme/classes/open_struct/simple/show.md +41 -0
- data/markdown/readme/classes/open_struct/simple/show.rb +5 -0
- data/markdown/readme/classes/open_struct/simple/show.yaml +23 -0
- data/markdown/readme/classes/open_struct/simple/template.md +9 -0
- data/markdown/readme/classes/open_struct/template.md +9 -0
- data/markdown/readme/classes/range/exclude_end/show.md +22 -0
- data/markdown/readme/classes/range/exclude_end/show.rb +4 -0
- data/markdown/readme/classes/range/exclude_end/show.yaml +5 -0
- data/markdown/readme/classes/range/exclude_end/template.md +9 -0
- data/markdown/readme/classes/range/include_end/show.md +22 -0
- data/markdown/readme/classes/range/include_end/show.rb +4 -0
- data/markdown/readme/classes/range/include_end/show.yaml +5 -0
- data/markdown/readme/classes/range/include_end/template.md +9 -0
- data/markdown/readme/classes/range/template.md +5 -0
- data/markdown/readme/classes/regexp/named_captures/show.md +28 -0
- data/markdown/readme/classes/regexp/named_captures/show.rb +4 -0
- data/markdown/readme/classes/regexp/named_captures/show.yaml +11 -0
- data/markdown/readme/classes/regexp/named_captures/template.md +9 -0
- data/markdown/readme/classes/regexp/simple/show.md +24 -0
- data/markdown/readme/classes/regexp/simple/show.rb +4 -0
- data/markdown/readme/classes/regexp/simple/show.yaml +7 -0
- data/markdown/readme/classes/regexp/simple/template.md +9 -0
- data/markdown/readme/classes/regexp/template.md +5 -0
- data/markdown/readme/classes/set/circular/show.md +4 -2
- data/markdown/readme/classes/set/circular/show.yaml +4 -2
- data/markdown/readme/classes/set/mixed/show.md +6 -3
- data/markdown/readme/classes/set/mixed/show.yaml +6 -3
- data/markdown/readme/classes/set/nested/show.md +6 -3
- data/markdown/readme/classes/set/nested/show.yaml +6 -3
- data/markdown/readme/classes/set/simple/show.md +2 -1
- data/markdown/readme/classes/set/simple/show.yaml +2 -1
- data/markdown/readme/classes/string/multiline/show.md +2 -1
- data/markdown/readme/classes/string/multiline/show.yaml +2 -1
- data/markdown/readme/classes/string/simple/show.md +2 -1
- data/markdown/readme/classes/string/simple/show.yaml +2 -1
- data/markdown/readme/classes/struct/circular/show.md +34 -8
- data/markdown/readme/classes/struct/circular/show.yaml +34 -8
- data/markdown/readme/classes/struct/mixed/show.md +21 -6
- data/markdown/readme/classes/struct/mixed/show.yaml +21 -6
- data/markdown/readme/classes/struct/nested/show.md +36 -9
- data/markdown/readme/classes/struct/nested/show.yaml +36 -9
- data/markdown/readme/classes/struct/simple/show.md +17 -4
- data/markdown/readme/classes/struct/simple/show.yaml +17 -4
- data/markdown/readme/classes/symbol/simple/show.md +2 -1
- data/markdown/readme/classes/symbol/simple/show.yaml +2 -1
- data/markdown/readme/options/depth/show.md +30 -15
- data/markdown/readme/options/depth/show.yaml +30 -15
- data/markdown/readme/template.md +8 -8
- metadata +88 -14
- data/markdown/readme/classes/object/datetime/show.md +0 -18
- data/markdown/readme/classes/object/datetime/show.rb +0 -4
- data/markdown/readme/classes/object/datetime/show.yaml +0 -1
- data/markdown/readme/classes/object/datetime/template.md +0 -9
- data/markdown/readme/classes/object/range/show.md +0 -19
- data/markdown/readme/classes/object/range/show.rb +0 -4
- data/markdown/readme/classes/object/range/show.yaml +0 -2
- data/markdown/readme/classes/object/range/template.md +0 -9
- data/markdown/readme/classes/object/regexp/show.md +0 -19
- data/markdown/readme/classes/object/regexp/show.rb +0 -4
- data/markdown/readme/classes/object/regexp/show.yaml +0 -2
- 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
|
-
|
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
|
-
|
25
|
-
puts
|
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
|
38
|
-
|
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
|
75
|
-
|
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
|
91
|
-
|
92
|
-
if
|
93
|
-
|
94
|
-
|
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
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
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
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
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
|
-
|
112
|
-
|
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
|
-
|
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,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,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
|