debug_me 1.0.1 → 1.0.2
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.
- data/lib/debug_me.rb +21 -9
- data/lib/debug_me/version.rb +1 -1
- data/tests/debug_me_test.rb +229 -0
- data/tests/world_view.rb +31 -0
- metadata +4 -2
data/lib/debug_me.rb
CHANGED
@@ -4,20 +4,25 @@ require_relative 'debug_me/version'
|
|
4
4
|
module DebugMe
|
5
5
|
def debug_me(options = {}, &block)
|
6
6
|
default_options = {
|
7
|
-
tag: 'DEBUG:',
|
7
|
+
tag: 'DEBUG:', # A tag to prepend to each output line
|
8
8
|
time: true, # Include a time-stamp in front of the tag
|
9
|
-
header: true,
|
9
|
+
header: true, # Print a header string before printing the variables
|
10
|
+
lvar: true, # Include local variables
|
10
11
|
ivar: true, # Include instance variables in the output
|
11
12
|
cvar: true, # Include class variables in the output
|
13
|
+
cconst: true, # Include class constants
|
12
14
|
file: $stdout # The output file
|
13
15
|
}
|
14
16
|
|
17
|
+
|
15
18
|
if 'Hash' == options.class.to_s
|
16
19
|
options = default_options.merge(options)
|
17
20
|
else
|
18
21
|
options = default_options.merge(tag: options)
|
19
22
|
end
|
20
23
|
|
24
|
+
out_string = ''
|
25
|
+
|
21
26
|
f = options[:file]
|
22
27
|
s = ''
|
23
28
|
s += "#{sprintf('%010.6f', Time.now.to_f)} " if options[:time]
|
@@ -25,29 +30,36 @@ module DebugMe
|
|
25
30
|
wf = caller # where_from under 1.8.6 its a stack trace array under 1.8.7 is a string
|
26
31
|
wf = wf[0] if 'Array' == wf.class.to_s
|
27
32
|
|
28
|
-
|
33
|
+
out_string = sprintf("%s Source: %s\n",s,wf) if options[:header]
|
29
34
|
|
30
35
|
if block_given?
|
31
36
|
|
32
37
|
block_value = [block.call].flatten.compact
|
33
38
|
|
34
39
|
if block_value.empty?
|
35
|
-
block_value =
|
40
|
+
block_value = []
|
41
|
+
block_value += [eval('local_variables', block.binding)] if options[:lvar]
|
36
42
|
block_value += [eval('instance_variables', block.binding)] if options[:ivar]
|
37
43
|
block_value += [self.class.send('class_variables')] if options[:cvar]
|
44
|
+
block_value += [self.class.constants] if options[:cconst]
|
38
45
|
block_value = block_value.flatten.compact
|
39
|
-
else
|
40
|
-
block_value.map!(&:to_s)
|
41
46
|
end
|
42
47
|
|
48
|
+
block_value.map!(&:to_s)
|
49
|
+
|
43
50
|
block_value.each do |v|
|
44
|
-
ev = eval(v, block.binding)
|
45
|
-
|
51
|
+
ev = eval("defined?(#{v})",block.binding).nil? ? '<undefined>' : eval(v, block.binding)
|
52
|
+
out_string += sprintf( "%s %s -=> %s", s,v,ev.pretty_inspect)
|
46
53
|
end
|
47
54
|
|
48
55
|
end ## if block_given?
|
49
56
|
|
50
|
-
f.
|
57
|
+
unless f.nil?
|
58
|
+
f.puts out_string
|
59
|
+
f.flush
|
60
|
+
end
|
61
|
+
|
62
|
+
return out_string
|
51
63
|
end ## def debug_me( options={}, &block )
|
52
64
|
|
53
65
|
# def log_me(msg, opts={})
|
data/lib/debug_me/version.rb
CHANGED
@@ -0,0 +1,229 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require_relative '../lib/debug_me'
|
4
|
+
include DebugMe
|
5
|
+
|
6
|
+
require_relative './world_view'
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
require 'minitest/autorun'
|
11
|
+
|
12
|
+
describe DebugMe do
|
13
|
+
|
14
|
+
describe "source header included" do
|
15
|
+
|
16
|
+
before do
|
17
|
+
@line = __LINE__
|
18
|
+
@file = __FILE__
|
19
|
+
@out_string = debug_me(file:nil)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "has the keywords DEBUG and Source" do
|
23
|
+
assert @out_string.include? "DEBUG"
|
24
|
+
assert @out_string.include? "Source"
|
25
|
+
end
|
26
|
+
|
27
|
+
it "includes the filename" do
|
28
|
+
assert @out_string.include? __FILE__
|
29
|
+
end
|
30
|
+
|
31
|
+
it "includes the line number" do
|
32
|
+
assert @out_string.include? ".rb:#{@line+2}:"
|
33
|
+
end
|
34
|
+
|
35
|
+
end # describe "source header included" do
|
36
|
+
|
37
|
+
describe "source header excluded" do
|
38
|
+
|
39
|
+
before do
|
40
|
+
@out_string = debug_me(file:nil,header:false)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "is empty" do
|
44
|
+
assert @out_string.empty?
|
45
|
+
end
|
46
|
+
|
47
|
+
end # describe "source header excluded" do
|
48
|
+
|
49
|
+
describe "works with local variable" do
|
50
|
+
|
51
|
+
it "supports a single variable" do
|
52
|
+
a,b,c = 1,2,3
|
53
|
+
out_string = debug_me(file:nil,header:false){:a}
|
54
|
+
assert out_string.include? "a -=> #{a}"
|
55
|
+
out_string.split("\n").size.must_equal 1
|
56
|
+
end
|
57
|
+
|
58
|
+
it "supports multible variables" do
|
59
|
+
a,b,c = 1,2,3
|
60
|
+
out_string = debug_me(file:nil,header:false){[:a, :b, :c]}
|
61
|
+
assert out_string.include? "a -=> #{a}"
|
62
|
+
assert out_string.include? "b -=> #{b}"
|
63
|
+
assert out_string.include? "c -=> #{c}"
|
64
|
+
out_string.split("\n").size.must_equal 3
|
65
|
+
end
|
66
|
+
|
67
|
+
it "shows all local variables" do
|
68
|
+
a,b,c = 1,2,3
|
69
|
+
out_string = debug_me(
|
70
|
+
file:nil,
|
71
|
+
header:false,
|
72
|
+
lvar: true,
|
73
|
+
ivar: false,
|
74
|
+
cvar: false,
|
75
|
+
cconst: false
|
76
|
+
){}
|
77
|
+
assert out_string.include? "a -=> #{a}"
|
78
|
+
assert out_string.include? "b -=> #{b}"
|
79
|
+
assert out_string.include? "c -=> #{c}"
|
80
|
+
assert out_string.include? "out_string -=> "
|
81
|
+
|
82
|
+
out_string.split("\n").size.must_equal 4
|
83
|
+
end
|
84
|
+
|
85
|
+
end # describe "works with local variable" do
|
86
|
+
|
87
|
+
describe "works with instance variable" do
|
88
|
+
|
89
|
+
it "supports a single variable" do
|
90
|
+
@a,@b,@c = 1,2,3
|
91
|
+
out_string = debug_me(file:nil,header:false){:@a}
|
92
|
+
assert out_string.include? "@a -=> #{@a}"
|
93
|
+
out_string.split("\n").size.must_equal 1
|
94
|
+
end
|
95
|
+
|
96
|
+
it "supports multible variables" do
|
97
|
+
@a,@b,@c = 1,2,3
|
98
|
+
out_string = debug_me(file:nil,header:false){[:@a, :@b, :@c]}
|
99
|
+
assert out_string.include? "@a -=> #{@a}"
|
100
|
+
assert out_string.include? "@b -=> #{@b}"
|
101
|
+
assert out_string.include? "@c -=> #{@c}"
|
102
|
+
out_string.split("\n").size.must_equal 3
|
103
|
+
end
|
104
|
+
|
105
|
+
it "shows all instance variables" do
|
106
|
+
@a,@b,@c = 1,2,3
|
107
|
+
out_string = debug_me(
|
108
|
+
file:nil,
|
109
|
+
header:false,
|
110
|
+
lvar: false,
|
111
|
+
ivar: true,
|
112
|
+
cvar: false,
|
113
|
+
cconst: false
|
114
|
+
){}
|
115
|
+
assert out_string.include? "@a -=> #{@a}"
|
116
|
+
assert out_string.include? "@b -=> #{@b}"
|
117
|
+
assert out_string.include? "@c -=> #{@c}"
|
118
|
+
|
119
|
+
out_string.include?("out_string -=> ").must_equal false
|
120
|
+
out_string.split("\n").size.must_equal instance_variables.size
|
121
|
+
end
|
122
|
+
|
123
|
+
end # describe "works with instance variable" do
|
124
|
+
|
125
|
+
|
126
|
+
describe "works with class variable" do
|
127
|
+
|
128
|
+
it "supports a single variable" do
|
129
|
+
@@a,@@b,@@c = 1,2,3
|
130
|
+
out_string = debug_me(file:nil,header:false){:@@a}
|
131
|
+
assert out_string.include? "@@a -=> #{@@a}"
|
132
|
+
out_string.split("\n").size.must_equal 1
|
133
|
+
end
|
134
|
+
|
135
|
+
it "supports multible variables" do
|
136
|
+
@@a,@@b,@@c = 1,2,3
|
137
|
+
out_string = debug_me(file:nil,header:false){[:@@a, :@@b, :@@c]}
|
138
|
+
assert out_string.include? "@@a -=> #{@@a}"
|
139
|
+
assert out_string.include? "@@b -=> #{@@b}"
|
140
|
+
assert out_string.include? "@@c -=> #{@@c}"
|
141
|
+
out_string.split("\n").size.must_equal 3
|
142
|
+
end
|
143
|
+
|
144
|
+
it "shows all class variables" do
|
145
|
+
@@a,@@b,@@c = 1,2,3
|
146
|
+
@d = 4
|
147
|
+
out_string = debug_me(
|
148
|
+
file:nil,
|
149
|
+
header:false,
|
150
|
+
lvar: false,
|
151
|
+
ivar: false,
|
152
|
+
cvar: true,
|
153
|
+
cconst: false
|
154
|
+
){}
|
155
|
+
|
156
|
+
assert out_string.include? "@@a -=> #{@@a}"
|
157
|
+
assert out_string.include? "@@b -=> #{@@b}"
|
158
|
+
assert out_string.include? "@@c -=> #{@@c}"
|
159
|
+
|
160
|
+
out_string.include?("out_string -=> ").must_equal false
|
161
|
+
out_string.include?("@d -=> ").must_equal false
|
162
|
+
|
163
|
+
out_string.split("\n").size.must_equal self.class.class_variables.size
|
164
|
+
end
|
165
|
+
|
166
|
+
end # describe "works with class variable" do
|
167
|
+
|
168
|
+
|
169
|
+
describe "works with CONSTANTS" do
|
170
|
+
|
171
|
+
it "supports a single CONSTANT" do
|
172
|
+
A,B,C = 1,2,3
|
173
|
+
out_string = debug_me(file:nil,header:false){:A}
|
174
|
+
assert out_string.include? "A -=> #{A}"
|
175
|
+
out_string.split("\n").size.must_equal 1
|
176
|
+
end
|
177
|
+
|
178
|
+
it "supports multible CONSTANTS" do
|
179
|
+
A,B,C = 1,2,3
|
180
|
+
out_string = debug_me(file:nil,header:false){[:A, :B, :C]}
|
181
|
+
assert out_string.include? "A -=> #{A}"
|
182
|
+
assert out_string.include? "B -=> #{B}"
|
183
|
+
assert out_string.include? "C -=> #{C}"
|
184
|
+
out_string.split("\n").size.must_equal 3
|
185
|
+
end
|
186
|
+
|
187
|
+
end # describe "works with CONSTANTS" do
|
188
|
+
|
189
|
+
|
190
|
+
describe "works with class CONSTANTS" do
|
191
|
+
|
192
|
+
before do
|
193
|
+
@my_world_view = WorldView.new
|
194
|
+
end
|
195
|
+
|
196
|
+
it "supports a single class CONSTANT" do
|
197
|
+
out_string = debug_me(file:nil,header:false){'WorldView::A'}
|
198
|
+
assert out_string.include? "WorldView::A -=> #{WorldView::A}"
|
199
|
+
out_string.split("\n").size.must_equal 1
|
200
|
+
end
|
201
|
+
|
202
|
+
it "supports multible class CONSTANTS" do
|
203
|
+
out_string = debug_me(file:nil,header:false){[
|
204
|
+
'WorldView::A', 'WorldView::B', 'WorldView::C']}
|
205
|
+
assert out_string.include? "WorldView::A -=> #{WorldView::A}"
|
206
|
+
assert out_string.include? "WorldView::B -=> #{WorldView::B}"
|
207
|
+
assert out_string.include? "WorldView::C -=> #{WorldView::C}"
|
208
|
+
out_string.split("\n").size.must_equal 3
|
209
|
+
end
|
210
|
+
|
211
|
+
it "shows all class CONSTANTS" do
|
212
|
+
out_string = @my_world_view.my_constants
|
213
|
+
|
214
|
+
assert out_string.include? "A -=> #{WorldView::A}"
|
215
|
+
assert out_string.include? "B -=> #{WorldView::B}"
|
216
|
+
assert out_string.include? "C -=> #{WorldView::C}"
|
217
|
+
assert out_string.include? 'MY_CONSTANT -=> "Jesus"'
|
218
|
+
|
219
|
+
out_string.include?("out_string -=> ").must_equal false
|
220
|
+
out_string.include?("@d -=> ").must_equal false
|
221
|
+
|
222
|
+
out_string.split("\n").size.must_equal WorldView.constants.size
|
223
|
+
end
|
224
|
+
|
225
|
+
end # describe "works with class CONSTANTS" do
|
226
|
+
|
227
|
+
|
228
|
+
|
229
|
+
end # describe DebugMe do
|
data/tests/world_view.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
class WorldView
|
2
|
+
MY_CONSTANT = 'Jesus'
|
3
|
+
A = 1
|
4
|
+
B = 2
|
5
|
+
C = 3
|
6
|
+
def initialize
|
7
|
+
@a,@b,@c = 1,2,3
|
8
|
+
@@d, @@e, @@f = 4,5,6
|
9
|
+
end
|
10
|
+
def everything
|
11
|
+
debug_me(
|
12
|
+
file:nil,
|
13
|
+
header:true,
|
14
|
+
lvar: true,
|
15
|
+
ivar: true,
|
16
|
+
cvar: true,
|
17
|
+
cconst: true
|
18
|
+
){}
|
19
|
+
end
|
20
|
+
def my_constants
|
21
|
+
debug_me(
|
22
|
+
file:nil,
|
23
|
+
header:false,
|
24
|
+
lvar: false,
|
25
|
+
ivar: false,
|
26
|
+
cvar: false,
|
27
|
+
cconst: true
|
28
|
+
){}
|
29
|
+
|
30
|
+
end
|
31
|
+
end # class WorldView
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: debug_me
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-01-
|
12
|
+
date: 2015-01-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -66,6 +66,8 @@ files:
|
|
66
66
|
- lib/debug_me.rb
|
67
67
|
- lib/debug_me/version.rb
|
68
68
|
- rubygems.yml.asc
|
69
|
+
- tests/debug_me_test.rb
|
70
|
+
- tests/world_view.rb
|
69
71
|
homepage: http://github.com/MadBomber/debug_me
|
70
72
|
licenses:
|
71
73
|
- You want it, its yours
|