test-prof 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2b61bd0dd4011eb8d77c50a343ba8e582393bd68
4
- data.tar.gz: 3a233a89a57d261382dc253cb87156655a7356c6
3
+ metadata.gz: 5e482ddcaca18180a0606f53fd51871ba132e4a5
4
+ data.tar.gz: cb321462168846d649df3237117451926a18398a
5
5
  SHA512:
6
- metadata.gz: 335d1151f7fcf286f9bf0ba01fcadcbe09c042e9712d069c4c85a3acc5e28f548add3580292fbed6ec8d89da796330b81ac66809fd55ab952fef5a20caf4e200
7
- data.tar.gz: b2fb7e978bb9247c9d53e082682bb5fae34d0f7179784295457077100abff1365481b564fa4bb62e1bb24f4a3edf9d8fff0ef6be199ddf188ee99813ee369573
6
+ metadata.gz: a0d9c32fb4241f02f5d6fa3234543fca96abffbc5f968a7e67f9e23da8f41dea1990992e82c8e54cc46feb2af2c0ceac1d1a2ef7055a6784359bef67d97c485d
7
+ data.tar.gz: ad8a9004ee118da1fc8c9d2d32b290e8632ce0db0ac26803d2372fddf9efc898b28dd432f77ba89043a335724f2cddc9598742bca228486eb85e8ccea835437e
data/CHANGELOG.md CHANGED
@@ -2,6 +2,15 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## 0.2.2
6
+
7
+ - Fix time calculation when Time class is monkey-patched. ([@palkan][])
8
+
9
+ Add `TestProf.now` method which is just a copy of original `Time.now` and
10
+ use it everywhere.
11
+
12
+ Fixes [#10](https://github.com/palkan/test-prof/issues/10).
13
+
5
14
  ## 0.2.1
6
15
 
7
16
  - Detect `RSpec` by checking the presence of `RSpec::Core`. ([@palkan][])
data/lib/test_prof.rb CHANGED
@@ -33,6 +33,17 @@ module TestProf
33
33
  yield config
34
34
  end
35
35
 
36
+ # Avoid issues with wrong time due to monkey-patches (e.g. timecop)
37
+ # See https://github.com/rspec/rspec-core/blob/v3.6.0/lib/rspec/core.rb#L147
38
+ #
39
+ # We also want to handle Timecop specificaly
40
+ # See https://github.com/travisjeffery/timecop/blob/master/lib/timecop/time_extensions.rb#L11
41
+ if Time.respond_to?(:now_without_mock_time)
42
+ define_method(:now, &::Time.method(:now_without_mock_time))
43
+ else
44
+ define_method(:now, &::Time.method(:now))
45
+ end
46
+
36
47
  # Require gem and shows a custom
37
48
  # message if it fails to load
38
49
  def require(gem_name, msg)
@@ -79,7 +90,7 @@ module TestProf
79
90
 
80
91
  def with_timestamps(path)
81
92
  return path unless config.timestamps?
82
- timestamps = "-#{Time.now.to_i}"
93
+ timestamps = "-#{now.to_i}"
83
94
  "#{path.sub(/\.\w+$/, '')}#{timestamps}#{::File.extname(path)}"
84
95
  end
85
96
  end
@@ -82,14 +82,14 @@ module TestProf
82
82
  return yield if ignore? || !running? || (strategy != :create)
83
83
 
84
84
  begin
85
- ts = Time.now if @depth.zero?
85
+ ts = TestProf.now if @depth.zero?
86
86
  @depth += 1
87
87
  @count += 1
88
88
  yield
89
89
  ensure
90
90
  @depth -= 1
91
91
 
92
- @time += (Time.now - ts) if @depth.zero?
92
+ @time += (TestProf.now - ts) if @depth.zero?
93
93
  end
94
94
  end
95
95
 
@@ -88,8 +88,12 @@ module TestProf
88
88
 
89
89
  tags.each do |t|
90
90
  if t.is_a?(Hash)
91
- t.keys.each { |k| parsed.add_htag(k, t[k]) }
91
+ t.keys.each do |k|
92
+ parsed.remove_tag(k)
93
+ parsed.add_htag(k, t[k])
94
+ end
92
95
  else
96
+ parsed.remove_tag(t)
93
97
  parsed.add_tag(t)
94
98
  end
95
99
  end
@@ -22,6 +22,11 @@ module TestProf
22
22
  @htags ||= []
23
23
  @htags << [k, v]
24
24
  end
25
+
26
+ def remove_tag(tag)
27
+ @tags&.delete(tag)
28
+ @htags&.delete_if { |(k, _v)| k == tag }
29
+ end
25
30
  end
26
31
 
27
32
  class << self
@@ -21,7 +21,7 @@ module TestProf
21
21
  end
22
22
 
23
23
  def example_started(_notification)
24
- @ts = Time.now
24
+ @ts = TestProf.now
25
25
  end
26
26
 
27
27
  def example_finished(notification)
@@ -30,7 +30,7 @@ module TestProf
30
30
  tag = notification.example.metadata.fetch(@tag, :__unknown__)
31
31
 
32
32
  @tags[tag][:count] += 1
33
- @tags[tag][:time] += (Time.now - @ts)
33
+ @tags[tag][:time] += (TestProf.now - @ts)
34
34
  end
35
35
 
36
36
  def print
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TestProf
4
- VERSION = "0.2.1"
4
+ VERSION = "0.2.2"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: test-prof
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Dementyev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-19 00:00:00.000000000 Z
11
+ date: 2017-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,34 +66,6 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '5.9'
69
- - !ruby/object:Gem::Dependency
70
- name: activerecord
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '5.0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '5.0'
83
- - !ruby/object:Gem::Dependency
84
- name: factory_girl
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: 4.8.0
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: 4.8.0
97
69
  - !ruby/object:Gem::Dependency
98
70
  name: rubocop
99
71
  requirement: !ruby/object:Gem::Requirement
@@ -122,34 +94,6 @@ dependencies:
122
94
  - - ">="
123
95
  - !ruby/object:Gem::Version
124
96
  version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: sqlite3
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
- - !ruby/object:Gem::Dependency
140
- name: sidekiq
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: '4.0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !ruby/object:Gem::Version
152
- version: '4.0'
153
97
  description: "\n Ruby applications tests profiling tools.\n\n Contains tools
154
98
  to anylyze factories usage, integrate with Ruby profilers,\n profile your examples
155
99
  using ActiveSupport notifications (if any) and\n statically analyze your code