tick 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/README.md +6 -1
- data/lib/tick/version.rb +1 -1
- data/lib/tick.rb +14 -7
- data/spec/tick_spec.rb +37 -5
- metadata +3 -3
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -4,7 +4,7 @@ Tick
|
|
4
4
|
About
|
5
5
|
------
|
6
6
|
|
7
|
-
Tick benchmark your method and print
|
7
|
+
Tick benchmark your method and print it in color
|
8
8
|
|
9
9
|
|
10
10
|
Installation
|
@@ -19,6 +19,9 @@ Usge
|
|
19
19
|
def foo
|
20
20
|
end
|
21
21
|
tick :foo
|
22
|
+
tick :foo, :message => "benchmark for foo"
|
23
|
+
tick :foo, :message => lambda {|class_name, method_name| " #{class_name}-#{method_name}"}
|
24
|
+
|
22
25
|
|
23
26
|
|
24
27
|
Configuration
|
@@ -51,6 +54,7 @@ Customize messages:
|
|
51
54
|
Tick.time_message = lambda { |sec| "COST (#{sec})" }
|
52
55
|
|
53
56
|
Default:
|
57
|
+
|
54
58
|
* desc_message: "TICK: method '#{method_name.to_s}' in class '#{self.class.name}'"
|
55
59
|
* time_message: "(#{sec.to_s} ms)"
|
56
60
|
|
@@ -61,6 +65,7 @@ Set 256 color:
|
|
61
65
|
Tick.time_color = "#FFC482"
|
62
66
|
|
63
67
|
Default:
|
68
|
+
|
64
69
|
* desc_color: yellow
|
65
70
|
* time_color: cyan
|
66
71
|
|
data/lib/tick/version.rb
CHANGED
data/lib/tick.rb
CHANGED
@@ -40,7 +40,7 @@ module Tick
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def self.desc_message
|
43
|
-
@desc_message
|
43
|
+
@desc_message ||= lambda {|class_name, method_name| "TICK: method '#{method_name}' in class '#{class_name}'"}
|
44
44
|
end
|
45
45
|
|
46
46
|
def self.desc_message=(block)
|
@@ -58,7 +58,7 @@ module Tick
|
|
58
58
|
end
|
59
59
|
|
60
60
|
def self.time_message
|
61
|
-
@time_message
|
61
|
+
@time_message ||= lambda { |sec| "(#{sec.to_s} s)" }
|
62
62
|
end
|
63
63
|
|
64
64
|
def self.time_message=(block)
|
@@ -86,13 +86,22 @@ module Tick
|
|
86
86
|
|
87
87
|
|
88
88
|
module ClassMethods
|
89
|
-
def tick(method_name)
|
89
|
+
def tick(method_name, options = {})
|
90
90
|
alias_method "#{method_name}_without_tick", method_name
|
91
91
|
define_method method_name do
|
92
92
|
result = nil
|
93
93
|
if Tick.enabled
|
94
94
|
sec = Benchmark.realtime { result = self.send("#{method_name}_without_tick") }
|
95
|
-
|
95
|
+
|
96
|
+
desc = nil
|
97
|
+
if options[:message].kind_of?(Proc)
|
98
|
+
desc = options[:message].call(self.class.name, method_name)
|
99
|
+
else
|
100
|
+
desc = options[:message] || Tick.desc_message.call(self.class.name, method_name)
|
101
|
+
end
|
102
|
+
|
103
|
+
time = Tick.time_message.call(sec)
|
104
|
+
_log_benchmark(desc, time)
|
96
105
|
else
|
97
106
|
result = self.send("#{method_name}_without_tick")
|
98
107
|
end
|
@@ -102,9 +111,7 @@ module Tick
|
|
102
111
|
end
|
103
112
|
|
104
113
|
module InstanceMethods
|
105
|
-
def _log_benchmark(
|
106
|
-
desc = Tick.desc_message.nil? ? "TICK: method '#{method_name.to_s}' in class '#{self.class.name}'" : Tick.desc_message.call(self.class.name, method_name)
|
107
|
-
time = Tick.time_message.nil? ? "(#{sec.to_s} ms)" : Tick.time_message.call(sec)
|
114
|
+
def _log_benchmark(desc, time)
|
108
115
|
message = self._colorize_desc(desc)
|
109
116
|
message << " "
|
110
117
|
message << self._colorize_time(time)
|
data/spec/tick_spec.rb
CHANGED
@@ -78,11 +78,16 @@ describe Tick do
|
|
78
78
|
end
|
79
79
|
|
80
80
|
describe "A class include Tick" do
|
81
|
-
before do
|
82
|
-
|
81
|
+
before(:each) do
|
82
|
+
class TestClass;end
|
83
|
+
@klass = TestClass
|
83
84
|
@klass.send(:include, Tick)
|
84
85
|
end
|
85
86
|
|
87
|
+
after(:each) do
|
88
|
+
Object.send(:remove_const, :TestClass)
|
89
|
+
end
|
90
|
+
|
86
91
|
it "should have class method tick" do
|
87
92
|
@klass.should respond_to :tick
|
88
93
|
end
|
@@ -96,6 +101,32 @@ describe "A class include Tick" do
|
|
96
101
|
lambda {@klass.send(:tick, :xxx)}.should raise_error
|
97
102
|
end
|
98
103
|
|
104
|
+
describe "tick with options" do
|
105
|
+
before(:each) do
|
106
|
+
@klass.class_eval do
|
107
|
+
def default
|
108
|
+
sleep 0.5
|
109
|
+
end
|
110
|
+
end
|
111
|
+
@instance = @klass.new
|
112
|
+
@instance.should respond_to :default
|
113
|
+
end
|
114
|
+
|
115
|
+
it "support customize message for each method" do
|
116
|
+
message = "method default"
|
117
|
+
@klass.send(:tick, :default, :message => message)
|
118
|
+
mock(@instance)._log_benchmark(message, anything)
|
119
|
+
@instance.default
|
120
|
+
end
|
121
|
+
|
122
|
+
it "support customize lambda message for each method" do
|
123
|
+
message = "method default"
|
124
|
+
@klass.send(:tick, :default, :message => lambda {|class_name, method_name| "m:#{method_name}" })
|
125
|
+
mock(@instance)._log_benchmark("m:default", anything)
|
126
|
+
@instance.default
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
99
130
|
describe "tick on :default method" do
|
100
131
|
before do
|
101
132
|
@klass.class_eval do
|
@@ -110,7 +141,7 @@ describe "A class include Tick" do
|
|
110
141
|
end
|
111
142
|
|
112
143
|
it "should log time when default method be called" do
|
113
|
-
mock(@instance)._log_benchmark(
|
144
|
+
mock(@instance)._log_benchmark(Tick.desc_message.call("TestClass","default"), anything)
|
114
145
|
@instance.default
|
115
146
|
end
|
116
147
|
|
@@ -121,6 +152,7 @@ describe "A class include Tick" do
|
|
121
152
|
@instance.default
|
122
153
|
Tick.enabled = old_value
|
123
154
|
end
|
155
|
+
|
124
156
|
end
|
125
157
|
|
126
158
|
describe "#_log_benchmark" do
|
@@ -142,7 +174,7 @@ describe "A class include Tick" do
|
|
142
174
|
message << " "
|
143
175
|
message << time
|
144
176
|
mock(Tick.logger).debug(message)
|
145
|
-
@instance._log_benchmark(
|
177
|
+
@instance._log_benchmark(desc, time)
|
146
178
|
end
|
147
179
|
|
148
180
|
it "should print custom message if set custom message" do
|
@@ -155,7 +187,7 @@ describe "A class include Tick" do
|
|
155
187
|
message << " "
|
156
188
|
message << time
|
157
189
|
mock(Tick.logger).debug(message)
|
158
|
-
@instance._log_benchmark(
|
190
|
+
@instance._log_benchmark(desc, time)
|
159
191
|
end
|
160
192
|
end
|
161
193
|
|
metadata
CHANGED