peekaboo 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -0
- data/Rakefile +20 -0
- data/lib/peekaboo/version.rb +1 -1
- data/peekaboo.gemspec +21 -0
- data/spec/peekaboo/configuration_spec.rb +36 -0
- data/spec/peekaboo_spec.rb +106 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +42 -0
- metadata +16 -6
data/.gitignore
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'spec/rake/spectask'
|
4
|
+
require 'rcov/rcovtask'
|
5
|
+
require 'yard'
|
6
|
+
|
7
|
+
Spec::Rake::SpecTask.new(:spec) do |t|
|
8
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
9
|
+
t.warning = true
|
10
|
+
t.verbose = true
|
11
|
+
end
|
12
|
+
|
13
|
+
Rcov::RcovTask.new(:rcov) do |t|
|
14
|
+
t.test_files = FileList['spec/**/*_spec.rb']
|
15
|
+
t.verbose = true
|
16
|
+
end
|
17
|
+
|
18
|
+
YARD::Rake::YardocTask.new(:yard) do |t|
|
19
|
+
t.files = ["lib/**/*.rb", "-", "CHANGELOG.md"]
|
20
|
+
end
|
data/lib/peekaboo/version.rb
CHANGED
data/peekaboo.gemspec
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
lib = File.expand_path('../lib', __FILE__)
|
2
|
+
$:.unshift lib unless $:.include? lib
|
3
|
+
|
4
|
+
require 'peekaboo/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "peekaboo"
|
8
|
+
gem.version = Peekaboo::Version::STRING
|
9
|
+
gem.summary = %{Beautiful "mixin" magic for tracing Ruby method calls.}
|
10
|
+
gem.description = "Allows you to log method call information ( input arguments, class/method name, and return value ) without being overly intrusive."
|
11
|
+
gem.email = "sonny.ruben@gmail.com"
|
12
|
+
gem.homepage = "http://github.com/sgarcia/peekaboo"
|
13
|
+
gem.authors = ["Sonny Ruben Garcia"]
|
14
|
+
|
15
|
+
gem.add_development_dependency "rspec", "1.3.0"
|
16
|
+
gem.add_development_dependency "rcov", "0.9.9"
|
17
|
+
gem.add_development_dependency "yard", "0.6.1"
|
18
|
+
|
19
|
+
gem.files = `git ls-files`.split("\n")
|
20
|
+
gem.test_files = `git ls-files -- spec/*`.split("\n")
|
21
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.expand_path('../../spec_helper', __FILE__)
|
2
|
+
|
3
|
+
describe Peekaboo::Configuration do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@config = Peekaboo::Configuration.new
|
7
|
+
end
|
8
|
+
|
9
|
+
context "#tracer (default)" do
|
10
|
+
it "should initialize tracing" do
|
11
|
+
@config.tracer.should_not be_nil
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should adhere to the standard 'Logger' interface" do
|
15
|
+
[ :debug, :info, :warn, :error, :fatal, :unknown ].each { |logger_msg|
|
16
|
+
@config.tracer.should respond_to(logger_msg)
|
17
|
+
}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context "#trace_with" do
|
22
|
+
it "should set a new tracer for use" do
|
23
|
+
new_tracer = Logger.new STDOUT
|
24
|
+
|
25
|
+
@config.trace_with new_tracer
|
26
|
+
@config.tracer.should == new_tracer
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should enforce that new tracer adheres to the standard 'Logger' interface" do
|
30
|
+
lambda {
|
31
|
+
@config.trace_with 'garbage value'
|
32
|
+
}.should raise_exception('Tracer must respond to debug(), info(), warn(), error(), fatal(), and unknown()')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require File.expand_path('../spec_helper', __FILE__)
|
2
|
+
|
3
|
+
describe Peekaboo do
|
4
|
+
|
5
|
+
context ".configuration" do
|
6
|
+
it "should hold a reference to the current configuration" do
|
7
|
+
Peekaboo.configuration.should be_an_instance_of(Peekaboo::Configuration)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
context ".configure" do
|
12
|
+
it "should yield the current configuration" do
|
13
|
+
yielded_object = nil
|
14
|
+
Peekaboo.configure { |x| yielded_object = x }
|
15
|
+
Peekaboo.configuration.should == yielded_object
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context ".enable_tracing_on" do
|
20
|
+
before(:each) do
|
21
|
+
@test_class = new_test_class
|
22
|
+
@test_class.instance_eval { include Peekaboo }
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should be a singleton method added to any including class" do
|
26
|
+
@test_class.should respond_to(:enable_tracing_on)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should store a list of methods to trace on any including class" do
|
30
|
+
methods_to_trace = [:method_no_args, :method_one_arg]
|
31
|
+
@test_class.enable_tracing_on *methods_to_trace
|
32
|
+
@test_class::PEEKABOO_METHOD_LIST.should == methods_to_trace
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should raise an exception when trying to add a method that is already being traced" do
|
36
|
+
@test_class.enable_tracing_on :some_method
|
37
|
+
lambda {
|
38
|
+
@test_class.enable_tracing_on :some_method
|
39
|
+
}.should raise_exception("Already tracing `some_method'")
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context "instance method tracing" do
|
44
|
+
before(:all) do
|
45
|
+
@test_class = new_test_class
|
46
|
+
@test_class.instance_eval do
|
47
|
+
include Peekaboo
|
48
|
+
enable_tracing_on :method_no_args, :method_one_arg, :method_two_args, :method_optional_args, :method_variable_args, :method_raises
|
49
|
+
end
|
50
|
+
|
51
|
+
@test_instance = @test_class.new
|
52
|
+
@tracer = Peekaboo.configuration.tracer
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should not take place on unlisted methods" do
|
56
|
+
@tracer.should_not_receive(:info)
|
57
|
+
@test_instance.method_no_tracing
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should show listed methods with no arguments" do
|
61
|
+
@tracer.should_receive(:info).with trace_message "Invoking: #{@test_class}#method_no_args with [] ==> Returning: nil"
|
62
|
+
@test_instance.method_no_args
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should show listed methods with standard arguments" do
|
66
|
+
@tracer.should_receive(:info).
|
67
|
+
with trace_message %{Invoking: #{@test_class}#method_one_arg with ["one"] ==> Returning: nil}
|
68
|
+
@test_instance.method_one_arg 'one'
|
69
|
+
|
70
|
+
@tracer.should_receive(:info).
|
71
|
+
with trace_message %{Invoking: #{@test_class}#method_two_args with ["one", "two"] ==> Returning: nil}
|
72
|
+
@test_instance.method_two_args 'one', 'two'
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should show methods with optional arguments" do
|
76
|
+
@tracer.should_receive(:info).
|
77
|
+
with trace_message %{Invoking: #{@test_class}#method_optional_args with [] ==> Returning: nil}
|
78
|
+
@test_instance.method_optional_args
|
79
|
+
|
80
|
+
@tracer.should_receive(:info).
|
81
|
+
with trace_message %{Invoking: #{@test_class}#method_optional_args with ["override"] ==> Returning: nil}
|
82
|
+
@test_instance.method_optional_args 'override'
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should show methods with variable arguments" do
|
86
|
+
@tracer.should_receive(:info).
|
87
|
+
with trace_message %{Invoking: #{@test_class}#method_variable_args with [] ==> Returning: nil}
|
88
|
+
@test_instance.method_variable_args
|
89
|
+
|
90
|
+
@tracer.should_receive(:info).
|
91
|
+
with trace_message %{Invoking: #{@test_class}#method_variable_args with ["one"] ==> Returning: nil}
|
92
|
+
@test_instance.method_variable_args 'one'
|
93
|
+
|
94
|
+
@tracer.should_receive(:info).
|
95
|
+
with trace_message %{Invoking: #{@test_class}#method_variable_args with ["one", "two"] ==> Returning: nil}
|
96
|
+
@test_instance.method_variable_args 'one', 'two'
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should show methods that raise an exception" do
|
100
|
+
@tracer.should_receive(:info).
|
101
|
+
with trace_message %{Invoking: #{@test_class}#method_raises with [] !!! Raising: "something went wrong"}
|
102
|
+
lambda { @test_instance.method_raises }.should raise_exception
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
$:.unshift File.expand_path('../../lib', __FILE__)
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'peekaboo'
|
5
|
+
require 'ruby-debug'
|
6
|
+
require 'spec'
|
7
|
+
require 'spec/autorun'
|
8
|
+
|
9
|
+
Spec::Runner.configure do |config|
|
10
|
+
def new_test_class
|
11
|
+
Class.new do
|
12
|
+
def method_no_tracing
|
13
|
+
end
|
14
|
+
|
15
|
+
def method_no_args
|
16
|
+
end
|
17
|
+
|
18
|
+
def method_one_arg arg1
|
19
|
+
end
|
20
|
+
|
21
|
+
def method_two_args arg1, arg2
|
22
|
+
end
|
23
|
+
|
24
|
+
def method_optional_args optional = 'default'
|
25
|
+
end
|
26
|
+
|
27
|
+
def method_variable_args *args
|
28
|
+
end
|
29
|
+
|
30
|
+
def method_raises
|
31
|
+
raise 'something went wrong'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def trace_message contents, offset = 1
|
37
|
+
file_and_line = caller(1)[0]
|
38
|
+
file, line = file_and_line.split(':')
|
39
|
+
line = line.to_i + offset
|
40
|
+
"#{file}:#{line}\n\t( #{contents} )"
|
41
|
+
end
|
42
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: peekaboo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 2
|
10
|
+
version: 0.1.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Sonny Ruben Garcia
|
@@ -75,11 +75,18 @@ extensions: []
|
|
75
75
|
extra_rdoc_files: []
|
76
76
|
|
77
77
|
files:
|
78
|
-
-
|
78
|
+
- .gitignore
|
79
79
|
- CHANGELOG.md
|
80
|
+
- README.md
|
81
|
+
- Rakefile
|
80
82
|
- lib/peekaboo.rb
|
81
83
|
- lib/peekaboo/configuration.rb
|
82
84
|
- lib/peekaboo/version.rb
|
85
|
+
- peekaboo.gemspec
|
86
|
+
- spec/peekaboo/configuration_spec.rb
|
87
|
+
- spec/peekaboo_spec.rb
|
88
|
+
- spec/spec.opts
|
89
|
+
- spec/spec_helper.rb
|
83
90
|
has_rdoc: true
|
84
91
|
homepage: http://github.com/sgarcia/peekaboo
|
85
92
|
licenses: []
|
@@ -114,5 +121,8 @@ rubygems_version: 1.3.7
|
|
114
121
|
signing_key:
|
115
122
|
specification_version: 3
|
116
123
|
summary: Beautiful "mixin" magic for tracing Ruby method calls.
|
117
|
-
test_files:
|
118
|
-
|
124
|
+
test_files:
|
125
|
+
- spec/peekaboo/configuration_spec.rb
|
126
|
+
- spec/peekaboo_spec.rb
|
127
|
+
- spec/spec.opts
|
128
|
+
- spec/spec_helper.rb
|