as_deprecation_tracker 1.3.0 → 1.4.0

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: 319c016e3c0d157afe5bf366597bbe08c3f7b8a1
4
- data.tar.gz: c497cffa7fb8a20754ec0bcf0c041735f1a7e8b6
3
+ metadata.gz: 2d01e6823baf38e699a6de7c4d27391d9f8f6a00
4
+ data.tar.gz: f95996a72dd62db5cd33f8cc8a9f0ee5e7686454
5
5
  SHA512:
6
- metadata.gz: ac1bba14823514e09b4b5421d3fca0a265b0b26edb9fddfcd72eb2994bc148ef7107f1f7058fcbe771bb2d21ae9eb22c43591a0876085645d672d021a5fd34c6
7
- data.tar.gz: 0c807d54d2e662c98a7988ae5e9df30fa262cbebbe54788d4401d67281a5b8a9f52b51d9b52abc7d5dac5c4cd9943727b98f6482be071381f1eace9da4ec0380
6
+ metadata.gz: 7b649d6be7f3273fe8400ff28dc6162402b4cc744b47136b355b5648e9a1a27494f2d21c2d7e4c92b0aec10c7009b94882ce21e8cffc522ee8e2eb4f06b7d386
7
+ data.tar.gz: 80fdb221aa9b693793740b511190a090a895881dec79d0b78ebd1d8c70ce9b18f80aaf49ef0a97a7ecc3135a4a8d82043799f4cd7f106562e23f9b05fa77fe71
data/README.md CHANGED
@@ -119,6 +119,16 @@ Supported options:
119
119
  * `whitelist_file` to customise the location of the whitelist YAML file
120
120
  (defaults to `config/as_deprecation_whitelist.yaml`)
121
121
 
122
+ ### Pause/resume
123
+
124
+ The processing of deprecation warnings can be suspended and resumed via the
125
+ `ASDeprecationTracker.pause!` and `ASDeprecationTracker.resume!` methods.
126
+
127
+ This is useful when programmatically building whitelist entries during Rails
128
+ initialisation, as deprecation processing can be disabled until the whitelist
129
+ is fully formed. ASDT will queue events while paused and processes them when
130
+ `resume!` is called.
131
+
122
132
  ## License
123
133
 
124
134
  Copyright (c) 2016-2017 Dominic Cleal. Distributed under the MIT license.
@@ -14,6 +14,23 @@ module ASDeprecationTracker
14
14
  @config ||= Configuration.new
15
15
  end
16
16
 
17
+ def self.pause!
18
+ @running = false
19
+ end
20
+
21
+ def self.receiver
22
+ @receiver ||= Receiver.new
23
+ end
24
+
25
+ def self.resume!
26
+ @running = true
27
+ @receiver.try!(:process_queue)
28
+ end
29
+
30
+ def self.running?
31
+ @running.nil? || @running
32
+ end
33
+
17
34
  def self.whitelist
18
35
  @whitelist ||= Whitelist.new
19
36
  end
@@ -5,7 +5,7 @@ module ASDeprecationTracker
5
5
  # Railtie to register for deprecation notifications
6
6
  class Railtie < ::Rails::Railtie
7
7
  initializer 'as_deprecation_tracker.deprecation_notifications', after: :load_environment_config, if: -> { ASDeprecationTracker.active? } do
8
- Receiver.attach_to :rails
8
+ Receiver.attach_to :rails, ASDeprecationTracker.receiver
9
9
  ActiveSupport::Deprecation.behavior = :notify if ASDeprecationTracker.config.register_behavior?
10
10
 
11
11
  whitelist = ASDeprecationTracker.config.whitelist_file
@@ -5,7 +5,21 @@ require 'as_deprecation_tracker/writer'
5
5
  module ASDeprecationTracker
6
6
  # Receives deprecation.rails events via ActiveSupport::Notifications
7
7
  class Receiver < ::ActiveSupport::Subscriber
8
+ def initialize
9
+ super
10
+ @event_queue = []
11
+ end
12
+
8
13
  def deprecation(event)
14
+ @event_queue << event
15
+ process_queue if ASDeprecationTracker.running?
16
+ end
17
+
18
+ def process_queue
19
+ process_event(@event_queue.pop) until @event_queue.empty?
20
+ end
21
+
22
+ def process_event(event)
9
23
  return if ASDeprecationTracker.whitelist.matches?(event.payload)
10
24
 
11
25
  message = event.payload[:message]
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module ASDeprecationTracker
3
- VERSION = '1.3.0'.freeze
3
+ VERSION = '1.4.0'.freeze
4
4
  end
@@ -75,7 +75,7 @@ module ASDeprecationTracker
75
75
  def engine_root(engine_name)
76
76
  ::Rails::Engine.descendants.each do |engine|
77
77
  begin
78
- return engine.root.to_s if engine_name == engine.engine_name
78
+ return engine.root.to_s if engine_name.to_s == engine.engine_name.to_s
79
79
  rescue NoMethodError, RuntimeError # rubocop:disable Lint/HandleExceptions
80
80
  # Ignore failures with singleton engine subclasses etc.
81
81
  end
@@ -21,6 +21,34 @@ class ASDeprecationTrackerTest < ASDeprecationTracker::TestCase
21
21
  assert_equal config, ASDeprecationTracker.config
22
22
  end
23
23
 
24
+ def test_pause!
25
+ ASDeprecationTracker.pause!
26
+ refute ASDeprecationTracker.running?
27
+ ensure
28
+ ASDeprecationTracker.resume!
29
+ end
30
+
31
+ def test_receiver
32
+ assert_kind_of ASDeprecationTracker::Receiver, ASDeprecationTracker.receiver
33
+ assert_kind_of ActiveSupport::Subscriber, ASDeprecationTracker.receiver
34
+ end
35
+
36
+ def test_receiver_returns_same_receiver
37
+ receiver = ASDeprecationTracker.receiver
38
+ assert_equal receiver, ASDeprecationTracker.receiver
39
+ end
40
+
41
+ def test_resume!
42
+ ASDeprecationTracker.pause!
43
+ ASDeprecationTracker.receiver.expects(:process_queue)
44
+ ASDeprecationTracker.resume!
45
+ assert ASDeprecationTracker.running?
46
+ end
47
+
48
+ def test_running
49
+ assert_equal true, ASDeprecationTracker.running?
50
+ end
51
+
24
52
  def test_whitelist
25
53
  assert_kind_of ASDeprecationTracker::Whitelist, ASDeprecationTracker.whitelist
26
54
  end
@@ -2,27 +2,43 @@
2
2
  require 'test_helper'
3
3
 
4
4
  class ReceiverTest < ASDeprecationTracker::TestCase
5
- def test_deprecation_whitelisted
5
+ def test_deprecation_when_running
6
+ ASDeprecationTracker.expects(:running?).returns(true)
7
+ receiver = ASDeprecationTracker::Receiver.new
8
+ event = mock('event')
9
+ receiver.expects(:process_event).with(event)
10
+ receiver.deprecation(event)
11
+ end
12
+
13
+ def test_deprecation_when_not_running
14
+ ASDeprecationTracker.expects(:running?).returns(false)
15
+ receiver = ASDeprecationTracker::Receiver.new
16
+ event = mock('event')
17
+ receiver.expects(:process_event).never
18
+ receiver.deprecation(event)
19
+ end
20
+
21
+ def test_process_event_whitelisted
6
22
  whitelist = ASDeprecationTracker::Whitelist.new
7
23
  ASDeprecationTracker.expects(:whitelist).returns(whitelist)
8
24
  stack = caller
9
25
  whitelist.expects(:matches?).with(message: 'deprecated call', callstack: stack).returns(true)
10
- ASDeprecationTracker::Receiver.new.deprecation(event(message: 'deprecated call', callstack: stack))
26
+ ASDeprecationTracker::Receiver.new.process_event(event(message: 'deprecated call', callstack: stack))
11
27
  end
12
28
 
13
- def test_deprecation_unknown
29
+ def test_process_event_unknown
14
30
  whitelist = ASDeprecationTracker::Whitelist.new
15
31
  ASDeprecationTracker.expects(:whitelist).returns(whitelist)
16
32
  stack = caller
17
33
  whitelist.expects(:matches?).with(message: 'deprecated call', callstack: stack).returns(false)
18
34
  e = assert_raises(ActiveSupport::DeprecationException) do
19
- ASDeprecationTracker::Receiver.new.deprecation(event(message: 'deprecated call', callstack: stack))
35
+ ASDeprecationTracker::Receiver.new.process_event(event(message: 'deprecated call', callstack: stack))
20
36
  end
21
37
  assert_equal 'deprecated call', e.message
22
38
  assert_equal stack, e.backtrace
23
39
  end
24
40
 
25
- def test_deprecation_unknown_record
41
+ def test_process_event_unknown_record
26
42
  whitelist = ASDeprecationTracker::Whitelist.new
27
43
  ASDeprecationTracker.expects(:whitelist).twice.returns(whitelist)
28
44
  stack = caller
@@ -31,10 +47,19 @@ class ReceiverTest < ASDeprecationTracker::TestCase
31
47
  ASDeprecationTracker::Writer.any_instance.expects(:add).with('deprecated call', stack).returns(message: 'deprecated call', callstack: stack.first)
32
48
  ASDeprecationTracker::Writer.any_instance.expects(:write_file)
33
49
  with_env(AS_DEPRECATION_RECORD: 'true') do
34
- ASDeprecationTracker::Receiver.new.deprecation(event(message: 'deprecated call', callstack: stack))
50
+ ASDeprecationTracker::Receiver.new.process_event(event(message: 'deprecated call', callstack: stack))
35
51
  end
36
52
  end
37
53
 
54
+ def test_process_queue
55
+ ASDeprecationTracker.expects(:running?).returns(false)
56
+ receiver = ASDeprecationTracker::Receiver.new
57
+ event = mock('event')
58
+ receiver.deprecation(event)
59
+ receiver.expects(:process_event).with(event)
60
+ receiver.process_queue
61
+ end
62
+
38
63
  def test_subscription
39
64
  ASDeprecationTracker::Receiver.any_instance.expects(:deprecation)
40
65
  ActiveSupport::Notifications.instrument('deprecation.rails', message: 'test')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: as_deprecation_tracker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dominic Cleal
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-23 00:00:00.000000000 Z
11
+ date: 2017-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport