as_deprecation_tracker 1.3.0 → 1.4.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.
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