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 CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tick (0.0.1)
4
+ tick (0.1.0)
5
5
  rainbow
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -4,7 +4,7 @@ Tick
4
4
  About
5
5
  ------
6
6
 
7
- Tick benchmark your method and print benchmark in color
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
@@ -1,3 +1,3 @@
1
1
  module Tick
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
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
- _log_benchmark(method_name, sec)
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(method_name, sec)
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
- @klass = Class.new
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(:default, numeric)
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(:default, 0.1)
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(:default, 0.1)
190
+ @instance._log_benchmark(desc, time)
159
191
  end
160
192
  end
161
193
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tick
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - allenwei