tick 0.1.0 → 0.1.1

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/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