toffee 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +19 -10
- data/lib/toffee/d.rb +0 -1
- data/lib/toffee/toffee.rb +33 -4
- data/spec/spec_helper.rb +11 -0
- data/spec/test-apps/STDOUT_app.rb +10 -0
- data/spec/test-apps/all_defaults_app.rb +10 -0
- data/spec/test-apps/stdout_symbol_app.rb +10 -0
- data/spec/toffee_spec.rb +96 -2
- metadata +10 -4
data/README.rdoc
CHANGED
@@ -1,18 +1,23 @@
|
|
1
|
-
=
|
1
|
+
= Toffee
|
2
|
+
|
3
|
+
Candy for your "puts"-debugging!
|
2
4
|
|
3
5
|
= Usage
|
4
6
|
|
5
|
-
Put
|
7
|
+
Put the method call: "d" (almost) anywhere in your code to print out debug
|
8
|
+
information:
|
6
9
|
|
7
10
|
['a', 'b', 'c'].d.first.d.upcase.d
|
8
11
|
|
9
12
|
will print out:
|
10
13
|
|
11
|
-
["a", "b", "c"]
|
12
|
-
"a"
|
13
|
-
"A"
|
14
|
+
["a", "b", "c"]
|
15
|
+
"a"
|
16
|
+
"A"
|
17
|
+
|
18
|
+
"d" always returns self, so it will not interfere or do any harm.
|
14
19
|
|
15
|
-
|
20
|
+
== Configure the output (optional)
|
16
21
|
|
17
22
|
Write to standard output (default):
|
18
23
|
|
@@ -23,19 +28,19 @@ or
|
|
23
28
|
Toffee.configure(:stdout)
|
24
29
|
|
25
30
|
|
26
|
-
Write to any object that implements
|
31
|
+
Write to any object that implements ":puts":
|
27
32
|
|
28
33
|
Toffee.configure(IO.new(2, 'w'))
|
29
34
|
|
30
35
|
|
31
|
-
Write to any object that implements
|
36
|
+
Write to any object that implements ":debug":
|
32
37
|
|
33
38
|
Toffee.configure(Rails.logger)
|
34
39
|
|
35
40
|
|
36
41
|
Write to any object that implements the second parameter:
|
37
42
|
|
38
|
-
Toffee.configure(Rails.logger, :info)
|
43
|
+
Toffee.configure(Rails.logger, :info)
|
39
44
|
|
40
45
|
|
41
46
|
Write to file using the shell command:
|
@@ -44,10 +49,14 @@ Write to file using the shell command:
|
|
44
49
|
|
45
50
|
Toffee.configure('/tmp/foo.log')
|
46
51
|
|
52
|
+
== Options
|
53
|
+
|
54
|
+
:timestamp Turn on timestamps with true, turn if off with nil or false; to use
|
55
|
+
a custom timestamp format, pass a string with a Time.strftime kind of format
|
47
56
|
|
48
57
|
== Copyright
|
49
58
|
|
50
59
|
Copyright (c) 2010 Christoph Petschnig. See LICENSE for details.
|
51
60
|
|
52
|
-
Inspiration and
|
61
|
+
Inspiration and parts of the code taken from
|
53
62
|
Jan Lelis (http://github.com/janlelis/zucker)
|
data/lib/toffee/d.rb
CHANGED
data/lib/toffee/toffee.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
module Toffee
|
2
2
|
|
3
|
+
DEFAULT_TIMESTAMP_FORMAT = '%Y-%m-%d %H:%M:%S '
|
4
|
+
|
3
5
|
# There are several ways, where debugging output can be directed to:
|
4
6
|
# STDOUT, :stdout Standard out is the default destination
|
5
7
|
# Any other Object that responds to :puts
|
@@ -31,6 +33,14 @@ module Toffee
|
|
31
33
|
# Toffee.configure('/tmp/foo.log') write to file using the shell command:
|
32
34
|
# $ echo "my output here" > /tmp/foo.log
|
33
35
|
#
|
36
|
+
# Hash with options:
|
37
|
+
#
|
38
|
+
# :timestamp prepend a timestamp on each log message
|
39
|
+
# use true to turn logging on; turn it off
|
40
|
+
# by passing nil or false; pass a string
|
41
|
+
# value to supply a custom format (like
|
42
|
+
# with Time.strftime); default is true
|
43
|
+
#
|
34
44
|
def configure(*args)
|
35
45
|
raise ArgumentError if args.empty?
|
36
46
|
|
@@ -41,7 +51,7 @@ module Toffee
|
|
41
51
|
raise TypeError.new("Argument two should be kind'a Symbol.") if method && !method.kind_of?(Symbol)
|
42
52
|
end
|
43
53
|
|
44
|
-
options = args.last
|
54
|
+
options = args.last || {}
|
45
55
|
|
46
56
|
init_configuration
|
47
57
|
|
@@ -58,7 +68,7 @@ module Toffee
|
|
58
68
|
if target.respond_to?(method)
|
59
69
|
[:logger, target, method]
|
60
70
|
else
|
61
|
-
raise
|
71
|
+
raise ArgumentError.new("Target object does not respond to method :#{method}.")
|
62
72
|
end
|
63
73
|
else # no method was given
|
64
74
|
if target.respond_to?(:debug)
|
@@ -71,10 +81,20 @@ module Toffee
|
|
71
81
|
|
72
82
|
# TODO: implement much, much more features
|
73
83
|
|
74
|
-
# option :
|
84
|
+
# option :timestamp
|
85
|
+
if options.key?(:timestamp)
|
86
|
+
timestamp = options.delete(:timestamp)
|
87
|
+
@@configuration[:timestamp] = timestamp
|
88
|
+
@@configuration[:timestamp_format] = timestamp if timestamp.kind_of?(String)
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
# option :with_file_position
|
75
93
|
|
76
|
-
# option :
|
94
|
+
# option :stacktrace
|
77
95
|
|
96
|
+
# option :prefix, :suffix
|
97
|
+
|
78
98
|
self
|
79
99
|
end
|
80
100
|
|
@@ -88,12 +108,21 @@ module Toffee
|
|
88
108
|
# write to STDOUT, or to the destination that was configured
|
89
109
|
def output(string)
|
90
110
|
init_configuration
|
111
|
+
|
112
|
+
string = prepend_timestamp(string) if @@configuration[:timestamp]
|
113
|
+
|
91
114
|
case @@configuration[:target_type]
|
92
115
|
when :io then @@configuration[:target].puts(string)
|
93
116
|
when :file then %x{echo "#{string.gsub('"', '\\"')}" >> #{@@configuration[:target]}}
|
94
117
|
when :logger then @@configuration[:target].send(@@configuration[:method], string)
|
95
118
|
end
|
96
119
|
end
|
120
|
+
|
121
|
+
private
|
122
|
+
|
123
|
+
def prepend_timestamp(string)
|
124
|
+
Time.new.strftime(@@configuration[:timestamp_format] || DEFAULT_TIMESTAMP_FORMAT) << string
|
125
|
+
end
|
97
126
|
|
98
127
|
end
|
99
128
|
|
data/spec/spec_helper.rb
CHANGED
data/spec/toffee_spec.rb
CHANGED
@@ -1,7 +1,101 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
2
|
|
3
|
+
require 'logger'
|
4
|
+
|
3
5
|
describe "Toffee" do
|
4
|
-
|
5
|
-
|
6
|
+
|
7
|
+
before :all do
|
8
|
+
@log_obj = Logger.new(STDOUT)
|
9
|
+
@spec_logger = SpecLogger.new
|
6
10
|
end
|
11
|
+
|
12
|
+
it "configure does some checks on its arguments" do
|
13
|
+
# check argument must be given
|
14
|
+
lambda {Toffee.configure}.should raise_exception ArgumentError
|
15
|
+
|
16
|
+
# second argument must be a Symbol or Hash
|
17
|
+
lambda {Toffee.configure(:foo, Time)}.should raise_exception TypeError
|
18
|
+
lambda {Toffee.configure(@log_obj, :error)}.should_not raise_exception
|
19
|
+
# will result in logging to :debug
|
20
|
+
lambda {Toffee.configure(@log_obj, :a => 1)}.should_not raise_exception
|
21
|
+
|
22
|
+
# try to log to write protected file
|
23
|
+
lambda {Toffee.configure('/etc/oh-no-this-must-not-work.log')}.should raise_exception IOError
|
24
|
+
|
25
|
+
# method must be valid
|
26
|
+
lambda {Toffee.configure(@log_obj, :foo)}.should raise_exception ArgumentError
|
27
|
+
|
28
|
+
# test for default :debug method
|
29
|
+
lambda {Toffee.configure(Time)}.should raise_exception TypeError
|
30
|
+
end
|
31
|
+
|
32
|
+
it "writes to STDOUT, when no configuration was made" do
|
33
|
+
%x{#{File.join(File.dirname(__FILE__), 'test-apps/all_defaults_app.rb')}}.should == %{"x"\n3\n"xxx"\n}
|
34
|
+
end
|
35
|
+
|
36
|
+
it "accepts various configurations for STDOUT" do
|
37
|
+
%x{#{File.join(File.dirname(__FILE__), 'test-apps/all_defaults_app.rb')}}.should == %{"x"\n3\n"xxx"\n}
|
38
|
+
%x{#{File.join(File.dirname(__FILE__), 'test-apps/STDOUT_app.rb')}}.should == %{"x"\n3\n"xxx"\n}
|
39
|
+
%x{#{File.join(File.dirname(__FILE__), 'test-apps/stdout_symbol_app.rb')}}.should == %{"x"\n3\n"xxx"\n}
|
40
|
+
end
|
41
|
+
|
42
|
+
it "works with any object that implements a 'puts' method" do
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
it "writes to a file when configured with a string value" do
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
it "writes to an object with an arbitrary method name" do
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
it "writes to any object with a 'debug' method" do
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
it "truncates a file to zero length with the 'clear' method" do
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
it "writes timestamps when configured to do so" do
|
63
|
+
# turn off timestamping by passing nil
|
64
|
+
Toffee.configure @spec_logger, :test_log, :timestamp => nil
|
65
|
+
'foo'.d
|
66
|
+
@spec_logger.output.last.should == '"foo"'
|
67
|
+
|
68
|
+
# turn on timestamp and use the default format
|
69
|
+
Toffee.configure :timestamp => true
|
70
|
+
'foo'.d
|
71
|
+
time_result = Time.utc(*@spec_logger.output.last[0..(Toffee::DEFAULT_TIMESTAMP_FORMAT.size)].gsub(/[: ]/, '-').split('-'))
|
72
|
+
# there should not be more than half a second in between
|
73
|
+
(Time.new - time_result).should < 0.5
|
74
|
+
|
75
|
+
|
76
|
+
# turn off timestamping passing false
|
77
|
+
Toffee.configure :timestamp => false
|
78
|
+
'foo'.d
|
79
|
+
@spec_logger.output.last.should == '"foo"'
|
80
|
+
|
81
|
+
|
82
|
+
# turn on timestamp and use the default format
|
83
|
+
Toffee.configure :timestamp => '[%Y|%m|%d|%H|%M|%S] '
|
84
|
+
'foo'.d
|
85
|
+
time_result = Time.utc(*@spec_logger.output.last[1..20].split('|'))
|
86
|
+
# there should not be more than half a second in between
|
87
|
+
(Time.new - time_result).should < 0.5
|
88
|
+
|
89
|
+
Toffee.configure :timestamp => false
|
90
|
+
@spec_logger.clear_log
|
91
|
+
end
|
92
|
+
|
93
|
+
it "can compute multiple calls to 'configure'" do
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
it "gives correct file position and call stack output" do
|
98
|
+
|
99
|
+
end
|
100
|
+
|
7
101
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: toffee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Christoph Petschnig
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-08-
|
18
|
+
date: 2010-08-16 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -50,6 +50,9 @@ files:
|
|
50
50
|
- LICENSE
|
51
51
|
- README.rdoc
|
52
52
|
- spec/spec_helper.rb
|
53
|
+
- spec/test-apps/all_defaults_app.rb
|
54
|
+
- spec/test-apps/STDOUT_app.rb
|
55
|
+
- spec/test-apps/stdout_symbol_app.rb
|
53
56
|
- spec/toffee_spec.rb
|
54
57
|
has_rdoc: true
|
55
58
|
homepage: http://github.com/cpetschnig/toffee
|
@@ -87,4 +90,7 @@ specification_version: 3
|
|
87
90
|
summary: Give "puts"-debugging some candy
|
88
91
|
test_files:
|
89
92
|
- spec/spec_helper.rb
|
93
|
+
- spec/test-apps/all_defaults_app.rb
|
94
|
+
- spec/test-apps/STDOUT_app.rb
|
95
|
+
- spec/test-apps/stdout_symbol_app.rb
|
90
96
|
- spec/toffee_spec.rb
|