diff --git a/lib/twingly/http.rb b/lib/twingly/http.rb index 19f72ed..dc4d5f5 100644 --- a/lib/twingly/http.rb +++ b/lib/twingly/http.rb @@ -42,11 +42,12 @@ class Client # rubocop:disable Metrics/ClassLength attr_writer :follow_redirects attr_accessor :follow_redirects_limit + attr_accessor :logger attr_accessor :retryable_exceptions - def initialize(logger:, base_user_agent:) - @logger = logger + def initialize(base_user_agent:, logger: default_logger) @base_user_agent = base_user_agent + @logger = logger initialize_defaults end @@ -61,6 +62,10 @@ def post(url, body:, headers: {}) private + def default_logger + Logger.new(File::NULL) + end + def initialize_defaults @request_id = nil @http_timeout = DEFAULT_HTTP_TIMEOUT diff --git a/spec/lib/twingly/http_spec.rb b/spec/lib/twingly/http_spec.rb index 7b209be..765efad 100644 --- a/spec/lib/twingly/http_spec.rb +++ b/spec/lib/twingly/http_spec.rb @@ -3,13 +3,13 @@ class CustomError < StandardError; end RSpec.describe Twingly::HTTP::Client do - let(:logger) { NullLogger.new } + let(:logger) { Logger.new(File::NULL) } let(:url) { "http://example.org/" } let(:base_user_agent) { "Twingly::HTTP/1.0" } let(:client) do client = - described_class.new(logger: logger, base_user_agent: base_user_agent) + described_class.new(base_user_agent: base_user_agent, logger: logger) client.request_id = request_id if defined?(request_id) @@ -468,6 +468,23 @@ class CustomError < StandardError; end end end + describe "#initialize" do + context "when no logger is given" do + subject(:default_logger) do + client = described_class.new(base_user_agent: base_user_agent) + + client.logger + end + + it { is_expected.to be_a(Logger) } + + it "suppresses all output" do + expect { default_logger.info("foo") } + .to_not output(/foo/).to_stdout + end + end + end + describe "#post", vcr: Fixture.post_example_org do include_examples "common HTTP behaviour for", :post diff --git a/spec/spec_help/null_logger.rb b/spec/spec_help/null_logger.rb deleted file mode 100644 index ed2b77f..0000000 --- a/spec/spec_help/null_logger.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -class NullLogger - # rubocop:disable Style/MethodMissingSuper - def method_missing(method_name, *_args, &_block) - raise NoMethodError unless respond_to_missing?(method_name) - end - # rubocop:enable all - - def respond_to_missing?(method_name, _include_all = false) - ::Logger.instance_methods.include?(method_name) - end -end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 2dcd8ee..01eb8ce 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -14,7 +14,6 @@ require_relative "spec_help/env_helper" require_relative "spec_help/fixture" -require_relative "spec_help/null_logger" require_relative "spec_help/test_logger" require_relative "spec_help/toxiproxy_config"