rspec_timer 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +10 -2
- data/lib/rspec_timer/version.rb +1 -1
- data/lib/rspec_timer.rb +27 -11
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2cd7e2230eeb45822d0a390f9c72491fb23fdb61
|
4
|
+
data.tar.gz: 6a0836aae47e4f725f65726cac9830cd6ed65e11
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 65887c9f52dfe0d65dea9639d186d6d11ee6c848914f0821f7b0161d73944a81d6b42a4b879404bbbce46f808aa5e28c4d73ca008f56727eb9d74ac1ef5a1e9d
|
7
|
+
data.tar.gz: 8fb357c2fcef9270bdf710e1b311f29eacbbc113ba33ef9ed9d329381e9d07f955ab70ad627c7c782e3f4d97efd3dfbfd06b64a4245467b4ca3694a02d43376c
|
data/README.md
CHANGED
@@ -27,12 +27,20 @@ In your spec_helper.rb file, set up your "around" and "after" hooks like so:
|
|
27
27
|
|
28
28
|
RSpec.configure do |config|
|
29
29
|
|
30
|
+
config.before(:suite) do
|
31
|
+
# Completely wipes any metrics from the log (optional)
|
32
|
+
RspecTimer.reset_metrics_log_file('rspec_metrics.yml')
|
33
|
+
end
|
34
|
+
|
30
35
|
config.around(:each) do |example|
|
31
|
-
|
36
|
+
RspecTimer.run_and_measure(example)
|
32
37
|
end
|
33
38
|
|
34
39
|
config.after(:suite) do
|
35
|
-
|
40
|
+
# Stores any metrics from this test run into the YAML log file
|
41
|
+
# Adds/updates metrics according to unique signatures which are generated
|
42
|
+
# using each individual test's line number and source code.
|
43
|
+
RspecTimer.update_metrics_log_file('rspec_metrics.yml')
|
36
44
|
end
|
37
45
|
|
38
46
|
end
|
data/lib/rspec_timer/version.rb
CHANGED
data/lib/rspec_timer.rb
CHANGED
@@ -7,9 +7,11 @@ class RspecTimer
|
|
7
7
|
include Singleton
|
8
8
|
extend SingleForwardable
|
9
9
|
|
10
|
-
def_delegators :instance, :reset_metrics, :start_measurement, :end_measurement, :metrics,
|
10
|
+
def_delegators :instance, :reset_metrics, :log_file, :start_measurement, :end_measurement, :metrics,
|
11
|
+
:run_and_measure, :reset_metrics_log_file, :update_metrics_log_file, :signature_for
|
11
12
|
|
12
13
|
attr_reader :metrics
|
14
|
+
attr_accessor :log_file
|
13
15
|
|
14
16
|
def initialize
|
15
17
|
reset_metrics
|
@@ -21,7 +23,7 @@ class RspecTimer
|
|
21
23
|
|
22
24
|
def start_measurement(example)
|
23
25
|
current_metrics = metrics_for(example)
|
24
|
-
current_metrics[:
|
26
|
+
current_metrics[:path] = example_path(example)
|
25
27
|
current_metrics[:start_time] = Time.now
|
26
28
|
example
|
27
29
|
end
|
@@ -39,25 +41,39 @@ class RspecTimer
|
|
39
41
|
end_measurement(example)
|
40
42
|
end
|
41
43
|
|
42
|
-
def
|
43
|
-
File.write(file_name, YAML.dump(
|
44
|
+
def reset_metrics_log_file(file_name = default_metrics_file_name)
|
45
|
+
File.write(file_name, YAML.dump({}))
|
46
|
+
end
|
47
|
+
|
48
|
+
def update_metrics_log_file(file_name = default_metrics_file_name)
|
49
|
+
updated_metrics = {}
|
50
|
+
# Load any existing metrics
|
51
|
+
updated_metrics = YAML.load_file(file_name) if File.exists? (file_name)
|
52
|
+
# Merge in the new metrics, updating any existing ones
|
53
|
+
@metrics.keys.each { |key| updated_metrics[key] = @metrics[key] }
|
54
|
+
# Save metrics to the YAML log file
|
55
|
+
File.write(file_name, YAML.dump(updated_metrics))
|
56
|
+
end
|
57
|
+
|
58
|
+
def signature_for(example)
|
59
|
+
Digest::MD5.hexdigest("#{example_path(example)}:#{example.example.instance_variable_get(:@example_block).source.to_s}")
|
44
60
|
end
|
45
61
|
|
46
62
|
private
|
47
63
|
|
64
|
+
def default_metrics_file_name
|
65
|
+
'rspec_metrics.yml'
|
66
|
+
end
|
67
|
+
|
48
68
|
def metrics_for(example)
|
49
|
-
@metrics[
|
69
|
+
@metrics[signature_for(example)] ||= {
|
70
|
+
path: nil,
|
50
71
|
start_time: nil,
|
51
72
|
end_time: nil,
|
52
|
-
total_time: nil
|
53
|
-
signature: nil
|
73
|
+
total_time: nil
|
54
74
|
}
|
55
75
|
end
|
56
76
|
|
57
|
-
def signature_for(example)
|
58
|
-
Digest::MD5.hexdigest(example.example.instance_variable_get(:@example_block).source.to_s)
|
59
|
-
end
|
60
|
-
|
61
77
|
def example_path(example)
|
62
78
|
"#{example.metadata[:file_path]}:#{example.metadata[:line_number]}"
|
63
79
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec_timer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Chapin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: method_source
|