tick 0.1.0
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/.gitignore +4 -0
- data/.rvmrc +1 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +41 -0
- data/README.md +71 -0
- data/Rakefile +2 -0
- data/autotest/discover.rb +2 -0
- data/lib/tick/version.rb +3 -0
- data/lib/tick.rb +132 -0
- data/spec/spec_helper.rb +16 -0
- data/spec/tick_spec.rb +180 -0
- data/spec.opts +11 -0
- data/tick.gemspec +27 -0
- metadata +150 -0
data/.gitignore
ADDED
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm ree@tick
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
tick (0.0.1)
|
5
|
+
rainbow
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: http://rubygems.org/
|
9
|
+
specs:
|
10
|
+
ZenTest (4.4.2)
|
11
|
+
autotest (4.4.6)
|
12
|
+
ZenTest (>= 4.4.1)
|
13
|
+
columnize (0.3.2)
|
14
|
+
diff-lcs (1.1.2)
|
15
|
+
linecache (0.43)
|
16
|
+
rainbow (1.1)
|
17
|
+
rr (1.0.2)
|
18
|
+
rspec (2.3.0)
|
19
|
+
rspec-core (~> 2.3.0)
|
20
|
+
rspec-expectations (~> 2.3.0)
|
21
|
+
rspec-mocks (~> 2.3.0)
|
22
|
+
rspec-core (2.3.1)
|
23
|
+
rspec-expectations (2.3.0)
|
24
|
+
diff-lcs (~> 1.1.2)
|
25
|
+
rspec-mocks (2.3.0)
|
26
|
+
ruby-debug (0.10.4)
|
27
|
+
columnize (>= 0.1)
|
28
|
+
ruby-debug-base (~> 0.10.4.0)
|
29
|
+
ruby-debug-base (0.10.4)
|
30
|
+
linecache (>= 0.3)
|
31
|
+
|
32
|
+
PLATFORMS
|
33
|
+
ruby
|
34
|
+
|
35
|
+
DEPENDENCIES
|
36
|
+
autotest
|
37
|
+
rainbow
|
38
|
+
rr
|
39
|
+
rspec
|
40
|
+
ruby-debug
|
41
|
+
tick!
|
data/README.md
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
Tick
|
2
|
+
=====
|
3
|
+
|
4
|
+
About
|
5
|
+
------
|
6
|
+
|
7
|
+
Tick benchmark your method and print benchmark in color
|
8
|
+
|
9
|
+
|
10
|
+
Installation
|
11
|
+
-------
|
12
|
+
|
13
|
+
gem install tick
|
14
|
+
|
15
|
+
|
16
|
+
Usge
|
17
|
+
--------
|
18
|
+
|
19
|
+
def foo
|
20
|
+
end
|
21
|
+
tick :foo
|
22
|
+
|
23
|
+
|
24
|
+
Configuration
|
25
|
+
-------------
|
26
|
+
|
27
|
+
By default you don't need any configuration.
|
28
|
+
|
29
|
+
|
30
|
+
Enable tick:
|
31
|
+
|
32
|
+
Tick.enabled = true
|
33
|
+
|
34
|
+
default: true
|
35
|
+
|
36
|
+
Whether print benchmark in color
|
37
|
+
|
38
|
+
Tick.color = true
|
39
|
+
|
40
|
+
default: true
|
41
|
+
|
42
|
+
Logger:
|
43
|
+
|
44
|
+
Tick.logger = Logger.new(STDOUT)
|
45
|
+
|
46
|
+
default: Rails.logger if in Rails environment otherwise Logger.new(STDOUT)
|
47
|
+
|
48
|
+
Customize messages:
|
49
|
+
|
50
|
+
Tick.desc_message = lambda { |class_name, method_name| "TIME c:#{class_name} m:#{method_name}" }
|
51
|
+
Tick.time_message = lambda { |sec| "COST (#{sec})" }
|
52
|
+
|
53
|
+
Default:
|
54
|
+
* desc_message: "TICK: method '#{method_name.to_s}' in class '#{self.class.name}'"
|
55
|
+
* time_message: "(#{sec.to_s} ms)"
|
56
|
+
|
57
|
+
|
58
|
+
Set 256 color:
|
59
|
+
|
60
|
+
Tick.desc_color = "#FFC482"
|
61
|
+
Tick.time_color = "#FFC482"
|
62
|
+
|
63
|
+
Default:
|
64
|
+
* desc_color: yellow
|
65
|
+
* time_color: cyan
|
66
|
+
|
67
|
+
|
68
|
+
Special Thanks To
|
69
|
+
-----------------
|
70
|
+
|
71
|
+
* sickill's rainbow gem
|
data/Rakefile
ADDED
data/lib/tick/version.rb
ADDED
data/lib/tick.rb
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
require 'logger'
|
2
|
+
require 'benchmark'
|
3
|
+
require 'rainbow'
|
4
|
+
|
5
|
+
module Tick
|
6
|
+
|
7
|
+
Sickill::Rainbow.enabled = true
|
8
|
+
|
9
|
+
def self.included(base)
|
10
|
+
base.extend(ClassMethods)
|
11
|
+
base.send(:include, InstanceMethods)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.logger
|
15
|
+
return @logger if @logger
|
16
|
+
|
17
|
+
if defined?(Rails)
|
18
|
+
Rails.logger
|
19
|
+
else
|
20
|
+
Logger.new(STDOUT)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.logger=(logger)
|
25
|
+
@logger = logger
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.color=(is_turn_on)
|
29
|
+
return unless is_turn_on.kind_of?(TrueClass) || is_turn_on.kind_of?(FalseClass)
|
30
|
+
Sickill::Rainbow.enabled = is_turn_on
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.enabled
|
34
|
+
@enabled = true if @enabled.nil?
|
35
|
+
@enabled
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.enabled=(is_turn_on)
|
39
|
+
@enabled = is_turn_on
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.desc_message
|
43
|
+
@desc_message
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.desc_message=(block)
|
47
|
+
return @desc_message = nil if block.nil?
|
48
|
+
raise ArgumentError.new("wrong number of arguments (#{block.arity} for 2)") if block.arity != 2
|
49
|
+
@desc_message = block
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.desc_color
|
53
|
+
@desc_color
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.desc_color=(color)
|
57
|
+
@desc_color = color
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.time_message
|
61
|
+
@time_message
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.time_message=(block)
|
65
|
+
return @time_message = nil if block.nil?
|
66
|
+
raise ArgumentError.new("wrong number of arguments (#{block.arity} for 1)") if block.arity != 1
|
67
|
+
@time_message = block
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.time_color
|
71
|
+
@time_color
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.time_color=(color)
|
75
|
+
@time_color = color
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.reset
|
79
|
+
self.enabled = true
|
80
|
+
self.color = true
|
81
|
+
@desc_message = nil
|
82
|
+
@time_message = nil
|
83
|
+
@desc_color = nil
|
84
|
+
@time_color = nil
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
module ClassMethods
|
89
|
+
def tick(method_name)
|
90
|
+
alias_method "#{method_name}_without_tick", method_name
|
91
|
+
define_method method_name do
|
92
|
+
result = nil
|
93
|
+
if Tick.enabled
|
94
|
+
sec = Benchmark.realtime { result = self.send("#{method_name}_without_tick") }
|
95
|
+
_log_benchmark(method_name, sec)
|
96
|
+
else
|
97
|
+
result = self.send("#{method_name}_without_tick")
|
98
|
+
end
|
99
|
+
result
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
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)
|
108
|
+
message = self._colorize_desc(desc)
|
109
|
+
message << " "
|
110
|
+
message << self._colorize_time(time)
|
111
|
+
Tick.logger.debug(message)
|
112
|
+
end
|
113
|
+
|
114
|
+
def _colorize_desc(str)
|
115
|
+
if Tick.desc_color
|
116
|
+
str.color(Tick.desc_color)
|
117
|
+
else
|
118
|
+
str.bright.foreground(:yellow)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def _colorize_time(str)
|
123
|
+
if Tick.time_color
|
124
|
+
str.color(Tick.time_color)
|
125
|
+
else
|
126
|
+
str.underline.foreground(:cyan).bright
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'rspec'
|
4
|
+
|
5
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__),'..','lib'))
|
6
|
+
|
7
|
+
require 'tick'
|
8
|
+
|
9
|
+
RSpec.configure do |config|
|
10
|
+
config.mock_with :rr
|
11
|
+
config.after(:each) do
|
12
|
+
Tick.reset
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
|
data/spec/tick_spec.rb
ADDED
@@ -0,0 +1,180 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'logger'
|
3
|
+
|
4
|
+
describe Tick do
|
5
|
+
it "will use Rails logger if Rails defined" do
|
6
|
+
module Rails; end
|
7
|
+
default_logger = Logger.new(STDOUT)
|
8
|
+
mock(Rails).logger { default_logger }
|
9
|
+
Tick.logger.should == default_logger
|
10
|
+
Object.send(:remove_const, :Rails)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "will create new logger if no Rails defined" do
|
14
|
+
Tick.logger.should be_kind_of(Logger)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "can set logger" do
|
18
|
+
logger = Logger.new(STDOUT)
|
19
|
+
Tick.logger = logger
|
20
|
+
Tick.logger.should == logger
|
21
|
+
end
|
22
|
+
|
23
|
+
it "turn on color by default" do
|
24
|
+
Sickill::Rainbow.enabled.should be true
|
25
|
+
end
|
26
|
+
|
27
|
+
it "can turn off color" do
|
28
|
+
Tick.color = false
|
29
|
+
Sickill::Rainbow.enabled.should be false
|
30
|
+
end
|
31
|
+
|
32
|
+
it "can not set color to value which is not boolean" do
|
33
|
+
old_value = Sickill::Rainbow.enabled
|
34
|
+
Tick.color = "asdasdas"
|
35
|
+
Sickill::Rainbow.enabled.should be old_value
|
36
|
+
end
|
37
|
+
|
38
|
+
it "is turn on by default" do
|
39
|
+
Tick.enabled.should be true
|
40
|
+
end
|
41
|
+
|
42
|
+
it "can be turn off" do
|
43
|
+
Tick.enabled = false
|
44
|
+
Tick.enabled.should be false
|
45
|
+
end
|
46
|
+
|
47
|
+
it "can set custom desc color" do
|
48
|
+
Tick.desc_color = "#FFC482"
|
49
|
+
Tick.desc_color.should == "#FFC482"
|
50
|
+
end
|
51
|
+
|
52
|
+
it "can set custom time color" do
|
53
|
+
Tick.time_color = "#FFC482"
|
54
|
+
Tick.time_color.should == "#FFC482"
|
55
|
+
end
|
56
|
+
|
57
|
+
it "can set custom desc message" do
|
58
|
+
a_proc = lambda { |class_name, method_name| "TIME c:#{class_name} m:#{method_name}" }
|
59
|
+
Tick.desc_message = a_proc
|
60
|
+
Tick.desc_message.should be a_proc
|
61
|
+
end
|
62
|
+
|
63
|
+
it "will raise exception if desc_message lambda arg number dones't match" do
|
64
|
+
a_proc = lambda { |class_name| "TIME c:#{class_name}" }
|
65
|
+
lambda {Tick.desc_message = a_proc}.should raise_error(ArgumentError, "wrong number of arguments (1 for 2)")
|
66
|
+
end
|
67
|
+
|
68
|
+
it "will raise exception if desc_message lambda arg number dones't match" do
|
69
|
+
a_proc = lambda { |a, b|"COST (0.1)" }
|
70
|
+
lambda {Tick.time_message = a_proc}.should raise_error(ArgumentError, "wrong number of arguments (2 for 1)")
|
71
|
+
end
|
72
|
+
|
73
|
+
it "can set custom time message" do
|
74
|
+
a_proc = lambda { |sec| "COST (#{sec})" }
|
75
|
+
Tick.time_message = a_proc
|
76
|
+
Tick.time_message.should be a_proc
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "A class include Tick" do
|
81
|
+
before do
|
82
|
+
@klass = Class.new
|
83
|
+
@klass.send(:include, Tick)
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should have class method tick" do
|
87
|
+
@klass.should respond_to :tick
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should not have logger method" do
|
91
|
+
@klass.should_not respond_to :logger
|
92
|
+
@klass.new.should_not respond_to :logger
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should raise exception if passing wrong method name" do
|
96
|
+
lambda {@klass.send(:tick, :xxx)}.should raise_error
|
97
|
+
end
|
98
|
+
|
99
|
+
describe "tick on :default method" do
|
100
|
+
before do
|
101
|
+
@klass.class_eval do
|
102
|
+
def default
|
103
|
+
sleep 0.5
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
@klass.send(:tick, :default)
|
108
|
+
@instance = @klass.new
|
109
|
+
@instance.should respond_to :default
|
110
|
+
end
|
111
|
+
|
112
|
+
it "should log time when default method be called" do
|
113
|
+
mock(@instance)._log_benchmark(:default, numeric)
|
114
|
+
@instance.default
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should not do benchmark if Tick is turn off" do
|
118
|
+
dont_allow(Benchmark).realtime(anything)
|
119
|
+
old_value = Tick.enabled
|
120
|
+
Tick.enabled = false
|
121
|
+
@instance.default
|
122
|
+
Tick.enabled = old_value
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
describe "#_log_benchmark" do
|
127
|
+
before do
|
128
|
+
@instance = @klass.new
|
129
|
+
mock(@instance)._colorize_desc(anything) do |desc|
|
130
|
+
desc
|
131
|
+
end
|
132
|
+
mock(@instance)._colorize_time(anything) do |time|
|
133
|
+
time
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
it "log sec in color" do
|
138
|
+
desc = "TICK: method 'default' in class ''"
|
139
|
+
time = "(0.1 ms)"
|
140
|
+
message = ""
|
141
|
+
message << desc
|
142
|
+
message << " "
|
143
|
+
message << time
|
144
|
+
mock(Tick.logger).debug(message)
|
145
|
+
@instance._log_benchmark(:default, 0.1)
|
146
|
+
end
|
147
|
+
|
148
|
+
it "should print custom message if set custom message" do
|
149
|
+
Tick.desc_message = lambda {|class_name, method_name| "c:#{class_name} m:#{method_name}" }
|
150
|
+
Tick.time_message = lambda {|sec| "cost #{sec}" }
|
151
|
+
desc = "c: m:default"
|
152
|
+
time = "cost 0.1"
|
153
|
+
message = ""
|
154
|
+
message << desc
|
155
|
+
message << " "
|
156
|
+
message << time
|
157
|
+
mock(Tick.logger).debug(message)
|
158
|
+
@instance._log_benchmark(:default, 0.1)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
describe "#colorize" do
|
163
|
+
it "should set desc color if desc color is set" do
|
164
|
+
str = "a"
|
165
|
+
color = "#FFC482"
|
166
|
+
Tick.desc_color = color
|
167
|
+
@klass.new._colorize_desc(str).should == str.color(color)
|
168
|
+
end
|
169
|
+
|
170
|
+
it "should set time color if time color is set" do
|
171
|
+
str = "a"
|
172
|
+
color = "#FFC482"
|
173
|
+
Tick.time_color = color
|
174
|
+
@klass.new._colorize_time(str).should == str.color(color)
|
175
|
+
end
|
176
|
+
|
177
|
+
end
|
178
|
+
|
179
|
+
|
180
|
+
end
|
data/spec.opts
ADDED
data/tick.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "tick/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "tick"
|
7
|
+
s.version = Tick::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["allenwei"]
|
10
|
+
s.email = ["digruby@gmail.com"]
|
11
|
+
s.homepage = "http://rubygems.org/gems/tick"
|
12
|
+
s.summary = %q{Tick benchmark your method and print it in color}
|
13
|
+
|
14
|
+
s.rubyforge_project = "tick"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_dependency('rainbow')
|
22
|
+
|
23
|
+
s.add_development_dependency('rspec')
|
24
|
+
s.add_development_dependency('rr')
|
25
|
+
s.add_development_dependency('autotest')
|
26
|
+
s.add_development_dependency('ruby-debug')
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,150 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tick
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- allenwei
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-01-01 00:00:00 +08:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: rainbow
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: rspec
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
version: "0"
|
47
|
+
type: :development
|
48
|
+
version_requirements: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: rr
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
hash: 3
|
58
|
+
segments:
|
59
|
+
- 0
|
60
|
+
version: "0"
|
61
|
+
type: :development
|
62
|
+
version_requirements: *id003
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: autotest
|
65
|
+
prerelease: false
|
66
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
hash: 3
|
72
|
+
segments:
|
73
|
+
- 0
|
74
|
+
version: "0"
|
75
|
+
type: :development
|
76
|
+
version_requirements: *id004
|
77
|
+
- !ruby/object:Gem::Dependency
|
78
|
+
name: ruby-debug
|
79
|
+
prerelease: false
|
80
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ">="
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
hash: 3
|
86
|
+
segments:
|
87
|
+
- 0
|
88
|
+
version: "0"
|
89
|
+
type: :development
|
90
|
+
version_requirements: *id005
|
91
|
+
description:
|
92
|
+
email:
|
93
|
+
- digruby@gmail.com
|
94
|
+
executables: []
|
95
|
+
|
96
|
+
extensions: []
|
97
|
+
|
98
|
+
extra_rdoc_files: []
|
99
|
+
|
100
|
+
files:
|
101
|
+
- .gitignore
|
102
|
+
- .rvmrc
|
103
|
+
- Gemfile
|
104
|
+
- Gemfile.lock
|
105
|
+
- README.md
|
106
|
+
- Rakefile
|
107
|
+
- autotest/discover.rb
|
108
|
+
- lib/tick.rb
|
109
|
+
- lib/tick/version.rb
|
110
|
+
- spec.opts
|
111
|
+
- spec/spec_helper.rb
|
112
|
+
- spec/tick_spec.rb
|
113
|
+
- tick.gemspec
|
114
|
+
has_rdoc: true
|
115
|
+
homepage: http://rubygems.org/gems/tick
|
116
|
+
licenses: []
|
117
|
+
|
118
|
+
post_install_message:
|
119
|
+
rdoc_options: []
|
120
|
+
|
121
|
+
require_paths:
|
122
|
+
- lib
|
123
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
124
|
+
none: false
|
125
|
+
requirements:
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
hash: 3
|
129
|
+
segments:
|
130
|
+
- 0
|
131
|
+
version: "0"
|
132
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
133
|
+
none: false
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
hash: 3
|
138
|
+
segments:
|
139
|
+
- 0
|
140
|
+
version: "0"
|
141
|
+
requirements: []
|
142
|
+
|
143
|
+
rubyforge_project: tick
|
144
|
+
rubygems_version: 1.3.7
|
145
|
+
signing_key:
|
146
|
+
specification_version: 3
|
147
|
+
summary: Tick benchmark your method and print it in color
|
148
|
+
test_files:
|
149
|
+
- spec/spec_helper.rb
|
150
|
+
- spec/tick_spec.rb
|