silencer 1.0.0.rc1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 63363db7eb9e93e891e6910a11e53919acfaab80e63a280544e9b7c1b3eed686
4
+ data.tar.gz: 347c68c4cf21b860ab12497a684b5b037f980ef1649ae9bdc03fda713870703e
5
+ SHA512:
6
+ metadata.gz: b631a27a0bb92c343ff55f5976416b44d23cbe9f520d412890c98ba1c7d2489a283404d8b0d70a2ac2ee0278d5578f52affcc37d7b891809e8907aaac96a85de
7
+ data.tar.gz: 4435eb5f9254a7fd2266947dcef3b4776b41e8e1579edab6adb2a550d6bd2c6f5b5903e596dfa741a9bbdda21b76c68dbe30ec40bf8e13c7bae557b8ab90d731
data/README.md CHANGED
@@ -1,44 +1,104 @@
1
- # Silencer [![Build Status](https://secure.travis-ci.org/spagalloco/silencer.png?branch=master)][travis] [![Dependency Status](https://gemnasium.com/spagalloco/silencer.png?travis)][gemnasium]
1
+ # Silencer
2
2
 
3
- [travis]: http://travis-ci.org/spagalloco/silencer
4
- [gemnasium]: https://gemnasium.com/spagalloco/silencer
3
+ [![Gem Version](http://img.shields.io/gem/v/silencer.svg)][gem]
4
+ ![Tests](https://github.com/stve/silencer/actions/workflows/ci.yml/badge.svg)
5
+
6
+ [gem]: https://rubygems.org/gems/silencer
5
7
 
6
8
  Silencer is a simple rack-middleware for Rails that can selectively disable logging on per-action basis. It's based on a [blog post](http://dennisreimann.de/blog/silencing-the-rails-log-on-a-per-action-basis/) by Dennis Reimann.
7
9
 
8
- __Note__: Silencer is not thread safe.
10
+ __Note__: Silencer is only threadsafe in Rails version 4.2.6 and later.
9
11
 
10
12
  ## Installation
11
13
 
12
14
  Just add silencer to your Gemfile:
13
15
 
14
- gem 'silencer'
16
+ ```ruby
17
+ gem 'silencer', require: false
18
+ ```
15
19
 
16
- ## Usage
20
+ ### Upgrading to version 2.0
17
21
 
18
- In your production environment (presumably):
22
+ __Note:__ 1.x versions of silencer detected the presence of Rails when it was required. This made it easy to use silencer for most applications, but made assumptions on usage.
19
23
 
24
+ In version 2.0, you'll need to require the correct logger within your application. See the Usage documentation for more details.
20
25
 
21
- require 'silencer/logger'
26
+ ## Usage
22
27
 
23
- config.middleware.swap Rails::Rack::Logger, Silencer::Logger, :silence => ["/noisy/action.json"]
28
+ ### Rails
24
29
 
25
- Or if you'd prefer, you can pass it regular expressions:
30
+ Create an initializer (like `config/initializers/silencer.rb`) with the contents:
26
31
 
32
+ ```ruby
33
+ require 'silencer/rails/logger'
27
34
 
28
- config.middleware.swap Rails::Rack::Logger, Silencer::Logger, :silence => [%r{^/assets/}]
35
+ Rails.application.configure do
36
+ config.middleware.swap(
37
+ Rails::Rack::Logger,
38
+ Silencer::Logger,
39
+ config.log_tags,
40
+ silence: ["/noisy/action.json"]
41
+ )
42
+ end
43
+ ```
29
44
 
30
- Silencer's logger will serve as a drop-in replacement for Rails' default logger. It will not suppress any logging by default, simply pass it an array of urls via the options hash. You can also send it a 'X-SILENCE-LOGGER' header (with any value) with your request and that will also produce the same behavior.
45
+ ### Rack
31
46
 
32
- ### Rails 2.3
47
+ ```ruby
48
+ require 'silencer/rack/logger'
33
49
 
34
- Rails 2.3.x introduced a tagged logging feature. If you are using tagged logging with Rails 2.3 you can also pass taggers via the middleware:
50
+ use Silencer::Logger, silence: ["/noisy/action.json"]
51
+ ```
52
+
53
+ ## Configuration
54
+
55
+ Or if you'd prefer, you can pass it regular expressions:
35
56
 
36
- config.middleware.swap Rails::Rack::Logger, Silencer::Logger, config.log_tags, :silence => [%r{^/assets/}]
57
+ ```ruby
58
+ config.middleware.swap(
59
+ Rails::Rack::Logger,
60
+ Silencer::Logger,
61
+ config.log_tags,
62
+ silence: [%r{^/assets/}]
63
+ )
64
+ ```
65
+
66
+ Or you can silence specific request methods only:
67
+
68
+ ```ruby
69
+ config.middleware.swap(
70
+ Rails::Rack::Logger,
71
+ Silencer::Logger,
72
+ config.log_tags,
73
+ get: [%r{^/assets/}],
74
+ post: [%r{^/some_path}]
75
+ )
76
+ ```
77
+
78
+ Silencer's logger will serve as a drop-in replacement for Rails' default logger. It will not suppress any logging by default, simply pass it an array of URLs via the options hash. You can also send an `X-SILENCE-LOGGER` header (with any value) with your request and that will also produce the same behavior.
79
+
80
+ ### All options
81
+
82
+ Silencer supports the following configuration options.
83
+
84
+ | Configuration | Description | Default |
85
+ |---------------|-------------|---------|
86
+ | `silence` | Silences matching requests regardless of request method | None |
87
+ | `get` | Silences matching GET requests | None |
88
+ | `head` | Silences matching HEAD requests | None |
89
+ | `post` | Silences matching POST requests | None |
90
+ | `put` | Silences matching PUT requests | None |
91
+ | `delete` | Silences matching DELETE requests | None |
92
+ | `patch` | Silences matching PATCH requests | None |
93
+ | `trace` | Silences matching TRACE requests | None |
94
+ | `connect` | Silences matching CONNECT requests | None |
95
+ | `options` | Silences matching OPTIONS requests | None |
96
+ | `enable_header` | Enable/disable X-SILENCE-LOGGER header support | `true` |
37
97
 
38
98
  ## Note on Patches/Pull Requests
39
99
 
40
100
  * Fork the project.
41
- * Make your feature addition or bug fix.
101
+ * Make your feature addition or bugfix.
42
102
  * Add tests for it. This is important so I don't break it in a
43
103
  future version unintentionally.
44
104
  * Commit, do not mess with rakefile, version, or history.
@@ -47,4 +107,4 @@ Rails 2.3.x introduced a tagged logging feature. If you are using tagged loggin
47
107
 
48
108
  ## Copyright
49
109
 
50
- Copyright (c) 2012 Steve Agalloco. See [LICENSE](https://github.com/spagalloco/silencer/blob/master/LICENSE.md) for details.
110
+ Copyright (c) 2012 Steve Agalloco. See [LICENSE](https://github.com/spagalloco/silencer/blob/main/LICENSE.md) for details.
data/Rakefile CHANGED
@@ -1,21 +1,16 @@
1
- #!/usr/bin/env rake
2
- require "bundler/gem_tasks"
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
3
 
4
4
  require 'rspec/core/rake_task'
5
5
  RSpec::Core::RakeTask.new(:spec)
6
6
 
7
7
  task :default => :spec
8
- task :test => :spec
8
+ task test: :spec
9
9
 
10
- namespace :doc do
11
- require 'yard'
12
- YARD::Rake::YardocTask.new do |task|
13
- task.files = ['lib/**/*.rb']
14
- task.options = [
15
- '--protected',
16
- '--output-dir', 'doc/yard',
17
- '--markup', 'markdown',
18
- '--readme', 'README.md'
19
- ]
20
- end
21
- end
10
+ require 'rubocop/rake_task'
11
+ RuboCop::RakeTask.new
12
+
13
+ require 'yard'
14
+ YARD::Rake::YardocTask.new
15
+
16
+ task default: [:spec, :rubocop]
data/lib/silencer/hush.rb CHANGED
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Silencer
2
4
  module Hush
3
-
4
5
  private
5
6
 
6
- def silence_request?(env)
7
- (silent_header?(env) || silent_path?(env))
7
+ def silence_request?(env, enable_header: true)
8
+ ((enable_header && silent_header?(env)) || silent_path?(env))
8
9
  end
9
10
 
10
11
  def silent_header?(env)
@@ -12,8 +13,16 @@ module Silencer
12
13
  end
13
14
 
14
15
  def silent_path?(env)
15
- @silence.any? { |s| s === env['PATH_INFO'] }
16
+ (@routes[env['REQUEST_METHOD']] || @silence).any? do |rule|
17
+ case rule
18
+ when String, Integer
19
+ rule.to_s == env['PATH_INFO']
20
+ when Regexp
21
+ rule =~ env['PATH_INFO']
22
+ else
23
+ false
24
+ end
25
+ end
16
26
  end
17
-
18
27
  end
19
28
  end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Silencer
4
+ module Methods
5
+ METHODS = %i[options get head post put delete trace connect patch]
6
+
7
+ def define_routes(silence_paths, opts)
8
+ METHODS.each_with_object({}) do |method, routes|
9
+ routes[method.to_s.upcase] = wrap(opts.delete(method)) + silence_paths
10
+ routes
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,27 +1,51 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rack/logger'
2
- require 'silencer/util'
3
4
  require 'silencer/hush'
5
+ require 'silencer/methods'
6
+ require 'silencer/util'
4
7
 
5
8
  module Silencer
6
9
  module Rack
7
10
  class Logger < ::Rack::Logger
8
- include Silencer::Util
9
11
  include Silencer::Hush
12
+ include Silencer::Methods
13
+ include Silencer::Util
10
14
 
11
15
  def initialize(app, *args)
12
16
  opts = extract_options!(args)
13
17
  @silence = wrap(opts.delete(:silence))
18
+ @routes = define_routes(@silence, opts)
14
19
 
15
- super app, *args
20
+ @enable_header = opts.delete(:enable_header) { true }
21
+
22
+ super(app, *args)
16
23
  end
17
24
 
18
25
  def call(env)
19
- logger = ::Logger.new(env['rack.errors'])
20
- logger.level = (silence_request?(env) ? ::Logger::ERROR : @level)
26
+ if silence_request?(env, enable_header: @enable_header)
27
+ quiet(env) do
28
+ super
29
+ end
30
+ else
31
+ super
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ def quiet(env)
38
+ old_logger = env['rack.logger']
39
+ logger = ::Logger.new(env['rack.errors'])
40
+ logger.level = ::Logger::ERROR
21
41
 
22
42
  env['rack.logger'] = logger
23
- @app.call(env)
43
+ yield
44
+ ensure
45
+ env['rack.logger'] = old_logger
24
46
  end
25
47
  end
26
48
  end
49
+
50
+ Logger = Silencer::Rack::Logger
27
51
  end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Silencer
4
+ module Environment
5
+ RAILS_4 = /^4/
6
+ RAILS_5 = /^5/
7
+
8
+ module_function
9
+
10
+ def rails?
11
+ defined?(::Rails)
12
+ end
13
+
14
+ def rails_version
15
+ return unless rails?
16
+
17
+ ::Rails::VERSION::STRING
18
+ end
19
+
20
+ def rails4?
21
+ rails_version =~ RAILS_4
22
+ end
23
+
24
+ def rails5?
25
+ rails_version =~ RAILS_5
26
+ end
27
+
28
+ def tagged_logger?
29
+ rails4? || rails5?
30
+ end
31
+ end
32
+ end
@@ -1,22 +1,27 @@
1
- module Silencer
2
- RailsLogger = if Silencer::Environment.rails2?
3
- require 'rails/rack/log_tailer'
4
- ::Rails::Rack::LogTailer
5
- else
6
- require 'rails/rack/logger'
7
- ::Rails::Rack::Logger
8
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails/rack/logger'
4
+ require 'silencer/hush'
5
+ require 'silencer/methods'
6
+ require 'silencer/util'
7
+ require 'silencer/rails/environment'
9
8
 
9
+ module Silencer
10
10
  module Rails
11
- class Logger < RailsLogger
12
- include Silencer::Util
11
+ class Logger < ::Rails::Rack::Logger
13
12
  include Silencer::Hush
13
+ include Silencer::Methods
14
+ include Silencer::Util
14
15
 
15
16
  def initialize(app, *args)
16
17
  opts = extract_options!(args)
17
18
  @silence = wrap(opts.delete(:silence))
19
+ @routes = define_routes(@silence, opts)
18
20
 
19
- if normalized_args = normalize(args.flatten)
21
+ @enable_header = opts.delete(:enable_header) { true }
22
+
23
+ normalized_args = normalize(args)
24
+ if normalized_args
20
25
  super(app, normalized_args)
21
26
  else
22
27
  super(app)
@@ -24,19 +29,43 @@ module Silencer
24
29
  end
25
30
 
26
31
  def call(env)
32
+ if silence_request?(env, enable_header: @enable_header)
33
+ quiet do
34
+ super
35
+ end
36
+ else
37
+ super
38
+ end
39
+ end
40
+
41
+ private
42
+
43
+ def quiet(&block)
44
+ if ::Rails.logger.respond_to?(:silence) && ::Rails.logger.method(:silence).owner != ::Kernel
45
+ quiet_with_silence(&block)
46
+ else
47
+ quiet_with_log_level(&block)
48
+ end
49
+ end
50
+
51
+ # This is threadsafe in Rails 4.2.6+
52
+ def quiet_with_silence(&block)
53
+ ::Rails.logger.silence(&block)
54
+ end
55
+
56
+ # This is not threadsafe
57
+ def quiet_with_log_level
27
58
  old_logger_level = ::Rails.logger.level
28
- ::Rails.logger.level = ::Logger::ERROR if silence_request?(env)
59
+ ::Rails.logger.level = ::Logger::ERROR
29
60
 
30
- super
61
+ yield
31
62
  ensure
32
63
  # Return back to previous logging level
33
64
  ::Rails.logger.level = old_logger_level
34
65
  end
35
66
 
36
- private
37
-
38
67
  def normalize(args)
39
- args = case args.size
68
+ case args.size
40
69
  when 0 then nil
41
70
  when 1 then args.shift
42
71
  else args
@@ -44,4 +73,6 @@ module Silencer
44
73
  end
45
74
  end
46
75
  end
76
+
77
+ Logger = Silencer::Rails::Logger
47
78
  end
data/lib/silencer/util.rb CHANGED
@@ -1,6 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Silencer
2
4
  module Util
3
-
4
5
  def wrap(object)
5
6
  if object.nil?
6
7
  []
@@ -20,6 +21,5 @@ module Silencer
20
21
  end
21
22
 
22
23
  module_function :wrap, :extract_options!
23
-
24
24
  end
25
25
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Silencer
2
- VERSION = "1.0.0.rc1"
4
+ VERSION = '2.0.0'
3
5
  end
data/lib/silencer.rb CHANGED
@@ -1 +1 @@
1
- require 'silencer/logger'
1
+ # frozen_string_literal: true
data/silencer.gemspec CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |gem|
14
14
 
15
15
  gem.files = %w(.yardopts LICENSE.md README.md Rakefile silencer.gemspec)
16
16
  gem.files += Dir.glob("lib/**/*.rb")
17
- gem.files += Dir.glob("spec/**/*")
17
+
18
18
  gem.test_files = Dir.glob("spec/**/*")
19
19
 
20
20
  gem.require_paths = ["lib"]
@@ -1,33 +1,63 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
4
+ require 'silencer/rack/logger'
2
5
 
3
6
  describe Silencer::Rack::Logger do
4
- let(:app) { lambda { |env| [200, {}, ''] } }
7
+ let(:app) do
8
+ lambda { |env|
9
+ log = env['rack.logger']
10
+ log.info('ohai')
5
11
 
6
- it 'quiets the log when configured with a silenced path' do
7
- expect_any_instance_of(::Logger).to receive(:level=).with(::Logger::ERROR)
12
+ [200, {'Content-Type' => 'text/plain'}, ['Hello, World!']]
13
+ }
14
+ end
8
15
 
9
- Silencer::Rack::Logger.new(app, :silence => ['/']).
10
- call(Rack::MockRequest.env_for("/"))
16
+ let(:errors) do
17
+ StringIO.new
18
+ end
19
+
20
+ it 'quiets the log when configured with a silenced path' do
21
+ a = Rack::Lint.new(Silencer::Rack::Logger.new(app, silence: ['/']))
22
+ Rack::MockRequest.new(a).get('/', 'rack.errors' => errors)
23
+ expect(errors).not_to match('ohai')
11
24
  end
12
25
 
13
26
  it 'quiets the log when configured with a regex' do
14
- expect_any_instance_of(::Logger).to receive(:level=).with(::Logger::ERROR)
27
+ a = Rack::Lint.new(Silencer::Rack::Logger.new(app, silence: [/assets/]))
28
+ Rack::MockRequest.new(a).get('/assets/application.css', 'rack.errors' => errors)
29
+ expect(errors).not_to match('ohai')
30
+ end
15
31
 
16
- Silencer::Rack::Logger.new(app, :silence => [/assets/]).
17
- call(Rack::MockRequest.env_for("/assets/application.css"))
32
+ %w[OPTIONS GET POST PUT DELETE PATCH].each do |method|
33
+ it "quiets the log when configured with a silenced path for #{method} requests" do
34
+ a = Rack::Lint.new(Silencer::Rack::Logger.new(app, method.downcase.to_sym => ['/']))
35
+ Rack::MockRequest.new(a).send(method.downcase.to_sym, '/', 'rack.errors' => errors)
36
+ expect(errors).not_to match('ohai')
37
+ end
38
+
39
+ it "quiets the log when configured with a regex for #{method} requests" do
40
+ a = Rack::Lint.new(Silencer::Rack::Logger.new(app, method.downcase.to_sym => [/assets/]))
41
+ Rack::MockRequest.new(a).send(method.downcase.to_sym, '/assets/application.css', 'rack.errors' => errors)
42
+ expect(errors).not_to match('ohai')
43
+ end
18
44
  end
19
45
 
20
- it 'quiets the log when passed a custom header "X-SILENCE-LOGGER"' do
21
- expect_any_instance_of(::Logger).to receive(:level=).with(::Logger::ERROR)
46
+ it 'quiets the log when configured with a regex for non-standard requests' do
47
+ a = Rack::Lint.new(Silencer::Rack::Logger.new(app, silence: [/assets/]))
48
+ Rack::MockRequest.new(a).get('/', 'rack.errors' => errors)
49
+ expect(errors).not_to match('ohai')
50
+ end
22
51
 
23
- Silencer::Rack::Logger.new(app).
24
- call(Rack::MockRequest.env_for("/", 'HTTP_X_SILENCE_LOGGER' => 'true'))
52
+ it 'quiets the log when passed a custom header "X-SILENCE-LOGGER"' do
53
+ a = Rack::Lint.new(Silencer::Rack::Logger.new(app))
54
+ Rack::MockRequest.new(a).get('/', 'rack.errors' => errors, 'HTTP_X_SILENCE_LOGGER' => 'true')
55
+ expect(errors).not_to match('ohai')
25
56
  end
26
57
 
27
58
  it 'does not tamper with the response' do
28
- response = Silencer::Rack::Logger.new(app).
29
- call(Rack::MockRequest.env_for("/", 'HTTP_X_SILENCE_LOGGER' => 'true'))
30
-
31
- expect(response[0]).to eq(200)
59
+ a = Rack::Lint.new(Silencer::Rack::Logger.new(app))
60
+ response = Rack::MockRequest.new(a).get('/', 'rack.errors' => errors, 'HTTP_X_SILENCE_LOGGER' => 'true')
61
+ expect(response.status).to eq(200)
32
62
  end
33
63
  end
@@ -1,54 +1,111 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
4
+ require 'syslogger'
5
+ require 'silencer/rails/logger'
2
6
 
3
7
  describe Silencer::Rails::Logger do
4
- let(:app) { lambda { |env| [200, {}, ''] } }
5
- let(:log_tags) { [:uuid, :queue] }
8
+ let(:app) { ->(_env) { [200, {}, ''] } }
9
+ let(:log_tags) { %i[uuid queue] }
6
10
 
7
- it 'quiets the log when configured with a silenced path' do
8
- expect(::Rails.logger).to receive(:level=).
9
- with(::Logger::ERROR).at_least(:once)
11
+ context 'quieted' do
12
+ before do
13
+ expect_any_instance_of(Silencer::Rails::Logger).to receive(:quiet).at_least(:once).and_call_original
14
+ end
10
15
 
11
- Silencer::Rails::Logger.new(app, :silence => ['/']).
12
- call(Rack::MockRequest.env_for("/"))
13
- end
16
+ it 'quiets the log when configured with a silenced path' do
17
+ Silencer::Rails::Logger.new(app, silence: ['/'])
18
+ .call(Rack::MockRequest.env_for('/'))
19
+ end
14
20
 
15
- it 'quiets the log when configured with a regex' do
16
- expect(::Rails.logger).to receive(:level=).
17
- with(::Logger::ERROR).at_least(:once)
21
+ it 'quiets the log when configured with a regex' do
22
+ Silencer::Rails::Logger.new(app, silence: [/assets/])
23
+ .call(Rack::MockRequest.env_for('/assets/application.css'))
24
+ end
18
25
 
19
- Silencer::Rails::Logger.new(app, :silence => [/assets/]).
20
- call(Rack::MockRequest.env_for("/assets/application.css"))
21
- end
26
+ %w[OPTIONS GET HEAD POST PUT DELETE TRACE CONNECT PATCH].each do |method|
27
+ it "quiets the log when configured with a silenced path for #{method} requests" do
28
+ Silencer::Rails::Logger.new(app, method.downcase.to_sym => ['/'])
29
+ .call(Rack::MockRequest.env_for('/', method: method))
30
+ end
31
+
32
+ it "quiets the log when configured with a regex for #{method} requests" do
33
+ Silencer::Rails::Logger.new(app, method.downcase.to_sym => [/assets/])
34
+ .call(Rack::MockRequest.env_for('/assets/application.css', method: method))
35
+ end
36
+ end
37
+
38
+ it 'quiets the log when configured with a silenced path for non-standard requests' do
39
+ Silencer::Rails::Logger.new(app, silence: ['/'])
40
+ .call(Rack::MockRequest.env_for('/', method: 'UPDATE'))
41
+ end
42
+
43
+ it 'quiets the log when configured with a regex for non-standard requests' do
44
+ Silencer::Rails::Logger.new(app, silence: [/assets/])
45
+ .call(Rack::MockRequest.env_for('/assets/application.css', method: 'UPDATE'))
46
+ end
47
+
48
+ it 'quiets the log when passed a custom header "X-SILENCE-LOGGER"' do
49
+ Silencer::Rails::Logger.new(app)
50
+ .call(Rack::MockRequest.env_for('/', 'HTTP_X_SILENCE_LOGGER' => 'true'))
51
+ end
22
52
 
23
- it 'quiets the log when passed a custom header "X-SILENCE-LOGGER"' do
24
- expect(::Rails.logger).to receive(:level=).
25
- with(::Logger::ERROR).at_least(:once)
53
+ it 'does not tamper with the response' do
54
+ response = Silencer::Rails::Logger.new(app)
55
+ .call(Rack::MockRequest.env_for('/', 'HTTP_X_SILENCE_LOGGER' => 'true'))
26
56
 
27
- Silencer::Rails::Logger.new(app).
28
- call(Rack::MockRequest.env_for("/", 'HTTP_X_SILENCE_LOGGER' => 'true'))
57
+ expect(response[0]).to eq(200)
58
+ end
59
+
60
+ if Silencer::Environment.tagged_logger?
61
+ it 'instantiates with an optional taggers array' do
62
+ Silencer::Rails::Logger.new(app, log_tags, silence: ['/'])
63
+ .call(Rack::MockRequest.env_for('/'))
64
+ end
65
+
66
+ it 'instantiates with an optional taggers array passed as args' do
67
+ Silencer::Rails::Logger.new(app, :uuid, :queue, silence: ['/'])
68
+ .call(Rack::MockRequest.env_for('/'))
69
+ end
70
+ end
29
71
  end
30
72
 
31
- it 'does not tamper with the response' do
32
- response = Silencer::Rails::Logger.new(app).
33
- call(Rack::MockRequest.env_for("/", 'HTTP_X_SILENCE_LOGGER' => 'true'))
73
+ describe 'enable_header option' do
74
+ it 'does not quiet the log when passed a custom header "X-SILENCE-LOGGER" when enable_header option is false' do
75
+ expect_any_instance_of(Silencer::Rails::Logger).to_not receive(:quiet)
76
+
77
+ Silencer::Rails::Logger.new(app, enable_header: false)
78
+ .call(Rack::MockRequest.env_for('/', 'HTTP_X_SILENCE_LOGGER' => 'true'))
79
+ end
34
80
 
35
- expect(response[0]).to eq(200)
81
+ it 'quiets the log when passed a custom header "X-SILENCE-LOGGER" when enable_header option is true' do
82
+ expect_any_instance_of(Silencer::Rails::Logger).to receive(:quiet).once.and_call_original
83
+
84
+ Silencer::Rails::Logger.new(app, enable_header: true)
85
+ .call(Rack::MockRequest.env_for('/', 'HTTP_X_SILENCE_LOGGER' => 'true'))
86
+ end
36
87
  end
37
88
 
38
- it 'instantiates with an optional taggers array' do
39
- expect(::Rails.logger).to receive(:level=).
40
- with(::Logger::ERROR).at_least(:once)
89
+ it 'silences' do
90
+ logger = Silencer::Rails::Logger.new(app, silence: ['/'])
41
91
 
42
- Silencer::Rails::Logger.new(app, log_tags, :silence => ['/']).
43
- call(Rack::MockRequest.env_for("/"))
44
- end if Silencer::Environment.tagged_logger?
92
+ if ::Rails.logger.respond_to?(:silence)
93
+ expect(::Rails.logger).to receive(:silence).at_least(:once)
94
+ else
95
+ expect(::Rails.logger).to receive(:level=)
96
+ .with(::Logger::ERROR).at_least(:once)
97
+ end
45
98
 
46
- it 'instantiates with an optional taggers array passed as args' do
47
- expect(::Rails.logger).to receive(:level=).
48
- with(::Logger::ERROR).at_least(:once)
99
+ logger.call(Rack::MockRequest.env_for('/'))
100
+ end
49
101
 
50
- Silencer::Rails::Logger.new(app, :uuid, :queue, :silence => ['/']).
51
- call(Rack::MockRequest.env_for("/"))
52
- end if Silencer::Environment.tagged_logger?
102
+ context 'when logger is Syslogger' do
103
+ it 'does not throw error' do
104
+ mock_rails_logger = Syslogger.new
105
+ allow(::Rails).to receive(:logger) { mock_rails_logger }
53
106
 
107
+ logger = Silencer::Rails::Logger.new(app, silence: ['/'])
108
+ expect { logger.call(Rack::MockRequest.env_for('/')) }.not_to raise_error
109
+ end
110
+ end
54
111
  end
data/spec/spec_helper.rb CHANGED
@@ -1,13 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  unless ENV['CI']
2
4
  require 'simplecov'
3
5
  SimpleCov.start do
4
- add_filter '.bundle'
5
6
  add_group 'Silencer', 'lib/silencer'
6
7
  add_group 'Specs', 'spec'
7
8
  end
8
9
  end
9
10
 
10
11
  require 'rack'
12
+ require 'rack/lint'
11
13
  require 'rspec'
12
14
 
13
15
  require 'logger'
@@ -17,7 +19,11 @@ io = StringIO.new
17
19
 
18
20
  begin
19
21
  require 'rails'
20
- ::Rails.logger = ::Logger.new(io)
22
+ ::Rails.logger = if Rails::VERSION::MAJOR >= 4
23
+ ::ActiveSupport::Logger.new(io)
24
+ else
25
+ ::Logger.new(io)
26
+ end
21
27
  rescue LoadError
22
28
  require 'activesupport'
23
29
  RAILS_ENV = 'test'
@@ -36,5 +42,4 @@ RSpec.configure do |config|
36
42
  config.before(:each) do
37
43
  allow(::Rails.logger).to receive(:level=).with(anything)
38
44
  end
39
-
40
45
  end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: silencer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.rc1
5
- prerelease: 6
4
+ version: 2.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Steve Agalloco
9
- autorequire:
8
+ autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-10-20 00:00:00.000000000 Z
11
+ date: 2022-04-24 00:00:00.000000000 Z
13
12
  dependencies: []
14
13
  description: Selectively quiet your Rails/Rack logger on a per-route basis
15
14
  email:
@@ -18,53 +17,47 @@ executables: []
18
17
  extensions: []
19
18
  extra_rdoc_files: []
20
19
  files:
21
- - .yardopts
20
+ - ".yardopts"
22
21
  - LICENSE.md
23
22
  - README.md
24
23
  - Rakefile
25
- - silencer.gemspec
26
- - lib/silencer/environment.rb
24
+ - lib/silencer.rb
27
25
  - lib/silencer/hush.rb
28
- - lib/silencer/logger.rb
26
+ - lib/silencer/methods.rb
29
27
  - lib/silencer/rack/logger.rb
28
+ - lib/silencer/rails/environment.rb
30
29
  - lib/silencer/rails/logger.rb
31
30
  - lib/silencer/util.rb
32
31
  - lib/silencer/version.rb
33
- - lib/silencer.rb
32
+ - silencer.gemspec
34
33
  - spec/log/test.log
35
34
  - spec/silencer/rack/logger_spec.rb
36
35
  - spec/silencer/rails/logger_spec.rb
37
36
  - spec/spec_helper.rb
38
37
  homepage: http://github.com/spagalloco/silencer
39
38
  licenses: []
40
- post_install_message:
39
+ metadata: {}
40
+ post_install_message:
41
41
  rdoc_options: []
42
42
  require_paths:
43
43
  - lib
44
44
  required_ruby_version: !ruby/object:Gem::Requirement
45
- none: false
46
45
  requirements:
47
- - - ! '>='
46
+ - - ">="
48
47
  - !ruby/object:Gem::Version
49
48
  version: '0'
50
- segments:
51
- - 0
52
- hash: 3624886497730780016
53
49
  required_rubygems_version: !ruby/object:Gem::Requirement
54
- none: false
55
50
  requirements:
56
- - - ! '>'
51
+ - - ">="
57
52
  - !ruby/object:Gem::Version
58
- version: 1.3.1
53
+ version: '0'
59
54
  requirements: []
60
- rubyforge_project:
61
- rubygems_version: 1.8.23
62
- signing_key:
63
- specification_version: 3
55
+ rubygems_version: 3.3.7
56
+ signing_key:
57
+ specification_version: 4
64
58
  summary: Selectively quiet your Rails/Rack logger on a per-route basis
65
59
  test_files:
66
60
  - spec/log/test.log
67
61
  - spec/silencer/rack/logger_spec.rb
68
62
  - spec/silencer/rails/logger_spec.rb
69
63
  - spec/spec_helper.rb
70
- has_rdoc:
@@ -1,37 +0,0 @@
1
- module Silencer
2
- module Environment
3
-
4
- RAILS_2_3 = %r{^2.3}
5
- RAILS_3_2 = %r{^3.2}
6
- RAILS_4 = %r{^4}
7
-
8
- def rails?
9
- defined?(::Rails)
10
- end
11
-
12
- def rails_version
13
- return unless rails?
14
- ::Rails::VERSION::STRING
15
- end
16
-
17
- def rails2?
18
- rails_version =~ RAILS_2_3
19
- end
20
-
21
- def rails3_2?
22
- rails_version =~ RAILS_3_2
23
- end
24
-
25
- def rails4?
26
- rails_version =~ RAILS_4
27
- end
28
-
29
- def tagged_logger?
30
- rails3_2? || rails4?
31
- end
32
-
33
- module_function :rails?, :rails2?, :rails_version, :rails3_2?
34
- module_function :rails4?, :tagged_logger?
35
-
36
- end
37
- end
@@ -1,11 +0,0 @@
1
- require 'silencer/environment'
2
- require 'silencer/rack/logger'
3
- require 'silencer/rails/logger' if Silencer::Environment.rails?
4
-
5
- module Silencer
6
- Logger = if Silencer::Environment.rails?
7
- Silencer::Rails::Logger
8
- else
9
- Silencer::Rack::Logger
10
- end
11
- end