airbrake-ruby 5.0.0.rc.2-java → 5.0.1-java
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 +4 -4
- data/lib/airbrake-ruby/backtrace.rb +6 -5
- data/lib/airbrake-ruby/config.rb +8 -36
- data/lib/airbrake-ruby/config/processor.rb +7 -3
- data/lib/airbrake-ruby/config/validator.rb +2 -0
- data/lib/airbrake-ruby/file_cache.rb +1 -1
- data/lib/airbrake-ruby/filter_chain.rb +1 -0
- data/lib/airbrake-ruby/filters/dependency_filter.rb +1 -0
- data/lib/airbrake-ruby/filters/gem_root_filter.rb +1 -0
- data/lib/airbrake-ruby/filters/git_last_checkout_filter.rb +1 -2
- data/lib/airbrake-ruby/filters/git_repository_filter.rb +3 -0
- data/lib/airbrake-ruby/filters/git_revision_filter.rb +2 -0
- data/lib/airbrake-ruby/filters/keys_filter.rb +21 -13
- data/lib/airbrake-ruby/filters/root_directory_filter.rb +1 -0
- data/lib/airbrake-ruby/filters/sql_filter.rb +4 -4
- data/lib/airbrake-ruby/filters/system_exit_filter.rb +1 -0
- data/lib/airbrake-ruby/filters/thread_filter.rb +2 -0
- data/lib/airbrake-ruby/ignorable.rb +1 -0
- data/lib/airbrake-ruby/notice_notifier.rb +1 -0
- data/lib/airbrake-ruby/performance_breakdown.rb +1 -6
- data/lib/airbrake-ruby/performance_notifier.rb +1 -14
- data/lib/airbrake-ruby/promise.rb +1 -0
- data/lib/airbrake-ruby/query.rb +1 -6
- data/lib/airbrake-ruby/queue.rb +1 -8
- data/lib/airbrake-ruby/remote_settings.rb +7 -5
- data/lib/airbrake-ruby/remote_settings/settings_data.rb +15 -10
- data/lib/airbrake-ruby/request.rb +1 -8
- data/lib/airbrake-ruby/stat.rb +1 -12
- data/lib/airbrake-ruby/sync_sender.rb +1 -0
- data/lib/airbrake-ruby/tdigest.rb +2 -0
- data/lib/airbrake-ruby/thread_pool.rb +1 -0
- data/lib/airbrake-ruby/truncator.rb +8 -2
- data/lib/airbrake-ruby/version.rb +2 -2
- data/spec/backtrace_spec.rb +26 -26
- data/spec/code_hunk_spec.rb +2 -2
- data/spec/config/processor_spec.rb +5 -19
- data/spec/config_spec.rb +4 -29
- data/spec/filters/gem_root_filter_spec.rb +4 -4
- data/spec/filters/keys_allowlist_spec.rb +1 -0
- data/spec/filters/keys_blocklist_spec.rb +10 -0
- data/spec/filters/root_directory_filter_spec.rb +4 -4
- data/spec/filters/sql_filter_spec.rb +2 -2
- data/spec/notice_notifier/options_spec.rb +2 -2
- data/spec/notice_notifier_spec.rb +2 -2
- data/spec/notice_spec.rb +1 -1
- data/spec/performance_breakdown_spec.rb +0 -12
- data/spec/performance_notifier_spec.rb +0 -25
- data/spec/query_spec.rb +1 -11
- data/spec/queue_spec.rb +1 -13
- data/spec/remote_settings/settings_data_spec.rb +64 -13
- data/spec/remote_settings_spec.rb +14 -14
- data/spec/request_spec.rb +1 -13
- data/spec/spec_helper.rb +4 -4
- data/spec/stat_spec.rb +0 -9
- metadata +5 -5
    
        data/spec/code_hunk_spec.rb
    CHANGED
    
    | @@ -34,9 +34,9 @@ RSpec.describe Airbrake::CodeHunk do | |
| 34 34 | 
             
                      eq(
         | 
| 35 35 | 
             
                        1 => 'module Airbrake',
         | 
| 36 36 | 
             
                        2 => '  ##',
         | 
| 37 | 
            -
                        # rubocop:disable  | 
| 37 | 
            +
                        # rubocop:disable Layout/LineLength
         | 
| 38 38 | 
             
                        3 => '  # Represents a chunk of information that is meant to be either sent to',
         | 
| 39 | 
            -
                        # rubocop:enable  | 
| 39 | 
            +
                        # rubocop:enable Layout/LineLength
         | 
| 40 40 | 
             
                      ),
         | 
| 41 41 | 
             
                    )
         | 
| 42 42 | 
             
                  end
         | 
| @@ -54,26 +54,13 @@ RSpec.describe Airbrake::Config::Processor do | |
| 54 54 | 
             
                end
         | 
| 55 55 |  | 
| 56 56 | 
             
                context "when the config defines a project_id" do
         | 
| 57 | 
            -
                   | 
| 58 | 
            -
                     | 
| 59 | 
            -
                      Airbrake::Config.new(project_id: 123, __remote_configuration: false)
         | 
| 60 | 
            -
                    end
         | 
| 61 | 
            -
             | 
| 62 | 
            -
                    it "doesn't set remote settings" do
         | 
| 63 | 
            -
                      expect(Airbrake::RemoteSettings).not_to receive(:poll)
         | 
| 64 | 
            -
                      described_class.new(config).process_remote_configuration
         | 
| 65 | 
            -
                    end
         | 
| 57 | 
            +
                  let(:config) do
         | 
| 58 | 
            +
                    Airbrake::Config.new(project_id: 123)
         | 
| 66 59 | 
             
                  end
         | 
| 67 60 |  | 
| 68 | 
            -
                   | 
| 69 | 
            -
                     | 
| 70 | 
            -
             | 
| 71 | 
            -
                    end
         | 
| 72 | 
            -
             | 
| 73 | 
            -
                    it "sets remote settings" do
         | 
| 74 | 
            -
                      expect(Airbrake::RemoteSettings).to receive(:poll)
         | 
| 75 | 
            -
                      described_class.new(config).process_remote_configuration
         | 
| 76 | 
            -
                    end
         | 
| 61 | 
            +
                  it "sets remote settings" do
         | 
| 62 | 
            +
                    expect(Airbrake::RemoteSettings).to receive(:poll)
         | 
| 63 | 
            +
                    described_class.new(config).process_remote_configuration
         | 
| 77 64 | 
             
                  end
         | 
| 78 65 | 
             
                end
         | 
| 79 66 | 
             
              end
         | 
| @@ -142,7 +129,6 @@ RSpec.describe Airbrake::Config::Processor do | |
| 142 129 | 
             
                let(:config) do
         | 
| 143 130 | 
             
                  Airbrake::Config.new(
         | 
| 144 131 | 
             
                    project_id: 123,
         | 
| 145 | 
            -
                    __remote_configuration: true,
         | 
| 146 132 | 
             
                    logger: logger,
         | 
| 147 133 | 
             
                  )
         | 
| 148 134 | 
             
                end
         | 
    
        data/spec/config_spec.rb
    CHANGED
    
    | @@ -26,7 +26,10 @@ RSpec.describe Airbrake::Config do | |
| 26 26 | 
             
              its(:query_stats) { is_expected.to eq(true) }
         | 
| 27 27 | 
             
              its(:job_stats) { is_expected.to eq(true) }
         | 
| 28 28 | 
             
              its(:error_notifications) { is_expected.to eq(true) }
         | 
| 29 | 
            -
             | 
| 29 | 
            +
             | 
| 30 | 
            +
              its(:remote_config_host) do
         | 
| 31 | 
            +
                is_expected.to eq('https://v1-production-notifier-configs.s3.amazonaws.com')
         | 
| 32 | 
            +
              end
         | 
| 30 33 |  | 
| 31 34 | 
             
              describe "#new" do
         | 
| 32 35 | 
             
                context "when user config is passed" do
         | 
| @@ -173,32 +176,4 @@ RSpec.describe Airbrake::Config do | |
| 173 176 | 
             
                  expect(subject.logger.level).to eq(Logger::WARN)
         | 
| 174 177 | 
             
                end
         | 
| 175 178 | 
             
              end
         | 
| 176 | 
            -
             | 
| 177 | 
            -
              describe "#blacklist_keys=" do
         | 
| 178 | 
            -
                before { allow(Kernel).to receive(:warn) }
         | 
| 179 | 
            -
             | 
| 180 | 
            -
                it "sets blocklist_keys instead" do
         | 
| 181 | 
            -
                  subject.blacklist_keys = [1, 2, 3]
         | 
| 182 | 
            -
                  expect(subject.blocklist_keys).to eq([1, 2, 3])
         | 
| 183 | 
            -
                end
         | 
| 184 | 
            -
             | 
| 185 | 
            -
                it "prints a warning" do
         | 
| 186 | 
            -
                  expect(Kernel).to receive(:warn).with(/use blocklist_keys= instead/)
         | 
| 187 | 
            -
                  subject.blacklist_keys = [1, 2, 3]
         | 
| 188 | 
            -
                end
         | 
| 189 | 
            -
              end
         | 
| 190 | 
            -
             | 
| 191 | 
            -
              describe "#whitelist_keys=" do
         | 
| 192 | 
            -
                before { allow(Kernel).to receive(:warn) }
         | 
| 193 | 
            -
             | 
| 194 | 
            -
                it "sets allowlist_keys instead" do
         | 
| 195 | 
            -
                  subject.whitelist_keys = [1, 2, 3]
         | 
| 196 | 
            -
                  expect(subject.allowlist_keys).to eq([1, 2, 3])
         | 
| 197 | 
            -
                end
         | 
| 198 | 
            -
             | 
| 199 | 
            -
                it "prints a warning" do
         | 
| 200 | 
            -
                  expect(Kernel).to receive(:warn).with(/use allowlist_keys= instead/)
         | 
| 201 | 
            -
                  subject.whitelist_keys = [1, 2, 3]
         | 
| 202 | 
            -
                end
         | 
| 203 | 
            -
              end
         | 
| 204 179 | 
             
            end
         | 
| @@ -7,18 +7,18 @@ RSpec.describe Airbrake::Filters::GemRootFilter do | |
| 7 7 | 
             
              after { 2.times { Gem.path.pop } }
         | 
| 8 8 |  | 
| 9 9 | 
             
              it "replaces gem root in the backtrace with a label" do
         | 
| 10 | 
            -
                # rubocop:disable  | 
| 10 | 
            +
                # rubocop:disable Layout/LineLength
         | 
| 11 11 | 
             
                notice[:errors].first[:backtrace] = [
         | 
| 12 12 | 
             
                  { file: "/home/kyrylo/code/airbrake/ruby/spec/spec_helper.rb" },
         | 
| 13 13 | 
             
                  { file: "#{root1}/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb" },
         | 
| 14 14 | 
             
                  { file: "/opt/rubies/ruby-2.2.2/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb" },
         | 
| 15 15 | 
             
                  { file: "#{root2}/gems/rspec-core-3.3.2/exe/rspec" },
         | 
| 16 16 | 
             
                ]
         | 
| 17 | 
            -
                # rubocop:enable  | 
| 17 | 
            +
                # rubocop:enable Layout/LineLength
         | 
| 18 18 |  | 
| 19 19 | 
             
                subject.call(notice)
         | 
| 20 20 |  | 
| 21 | 
            -
                # rubocop:disable  | 
| 21 | 
            +
                # rubocop:disable Layout/LineLength
         | 
| 22 22 | 
             
                expect(notice[:errors].first[:backtrace]).to(
         | 
| 23 23 | 
             
                  eq(
         | 
| 24 24 | 
             
                    [
         | 
| @@ -29,7 +29,7 @@ RSpec.describe Airbrake::Filters::GemRootFilter do | |
| 29 29 | 
             
                    ],
         | 
| 30 30 | 
             
                  ),
         | 
| 31 31 | 
             
                )
         | 
| 32 | 
            -
                # rubocop:enable  | 
| 32 | 
            +
                # rubocop:enable Layout/LineLength
         | 
| 33 33 | 
             
              end
         | 
| 34 34 |  | 
| 35 35 | 
             
              it "does not filter file when it is nil" do
         | 
| @@ -151,6 +151,7 @@ RSpec.describe Airbrake::Filters::KeysAllowlist do | |
| 151 151 | 
             
                      # thing. One is a Java exception, the other is a Ruby exception.
         | 
| 152 152 | 
             
                      # Likely a bug: https://github.com/jruby/jruby/issues/1903
         | 
| 153 153 | 
             
                      raise ex unless RUBY_ENGINE == 'jruby'
         | 
| 154 | 
            +
             | 
| 154 155 | 
             
                      expect { subject.call(notice) }.to raise_error(java.lang.StackOverflowError)
         | 
| 155 156 | 
             
                    end
         | 
| 156 157 | 
             
                  end
         | 
| @@ -150,6 +150,16 @@ RSpec.describe Airbrake::Filters::KeysBlocklist do | |
| 150 150 | 
             
                      { bongo: { bish: '[Filtered]' } },
         | 
| 151 151 | 
             
                    ],
         | 
| 152 152 | 
             
                  )
         | 
| 153 | 
            +
             | 
| 154 | 
            +
                  it "doesn't mutate the original hash" do
         | 
| 155 | 
            +
                    params = { bongo: { bish: 'bash' } }
         | 
| 156 | 
            +
                    notice[:params] = params
         | 
| 157 | 
            +
             | 
| 158 | 
            +
                    blocklist = described_class.new([:bish])
         | 
| 159 | 
            +
                    blocklist.call(notice)
         | 
| 160 | 
            +
             | 
| 161 | 
            +
                    expect(params[:bongo][:bish]).to eq('bash')
         | 
| 162 | 
            +
                  end
         | 
| 153 163 | 
             
                end
         | 
| 154 164 |  | 
| 155 165 | 
             
                context "and it is recursive" do
         | 
| @@ -5,18 +5,18 @@ RSpec.describe Airbrake::Filters::RootDirectoryFilter do | |
| 5 5 | 
             
              let(:notice) { Airbrake::Notice.new(AirbrakeTestError.new) }
         | 
| 6 6 |  | 
| 7 7 | 
             
              it "replaces root directory in the backtrace with a label" do
         | 
| 8 | 
            -
                # rubocop:disable  | 
| 8 | 
            +
                # rubocop:disable Layout/LineLength
         | 
| 9 9 | 
             
                notice[:errors].first[:backtrace] = [
         | 
| 10 10 | 
             
                  { file: "/home/kyrylo/code/airbrake/ruby/spec/spec_helper.rb" },
         | 
| 11 11 | 
             
                  { file: "#{root_directory}/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb " },
         | 
| 12 12 | 
             
                  { file: "/opt/rubies/ruby-2.2.2/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb" },
         | 
| 13 13 | 
             
                  { file: "#{root_directory}/gems/rspec-core-3.3.2/exe/rspec" },
         | 
| 14 14 | 
             
                ]
         | 
| 15 | 
            -
                # rubocop:enable  | 
| 15 | 
            +
                # rubocop:enable Layout/LineLength
         | 
| 16 16 |  | 
| 17 17 | 
             
                subject.call(notice)
         | 
| 18 18 |  | 
| 19 | 
            -
                # rubocop:disable  | 
| 19 | 
            +
                # rubocop:disable Layout/LineLength
         | 
| 20 20 | 
             
                expect(notice[:errors].first[:backtrace]).to(
         | 
| 21 21 | 
             
                  eq(
         | 
| 22 22 | 
             
                    [
         | 
| @@ -27,7 +27,7 @@ RSpec.describe Airbrake::Filters::RootDirectoryFilter do | |
| 27 27 | 
             
                    ],
         | 
| 28 28 | 
             
                  ),
         | 
| 29 29 | 
             
                )
         | 
| 30 | 
            -
                # rubocop:enable  | 
| 30 | 
            +
                # rubocop:enable Layout/LineLength
         | 
| 31 31 | 
             
              end
         | 
| 32 32 |  | 
| 33 33 | 
             
              it "does not filter file when it is nil" do
         | 
| @@ -22,7 +22,7 @@ RSpec.describe Airbrake::Filters::SqlFilter do | |
| 22 22 |  | 
| 23 23 | 
             
              ALL_DIALECTS = %i[mysql postgres sqlite cassandra oracle].freeze
         | 
| 24 24 |  | 
| 25 | 
            -
              # rubocop:disable  | 
| 25 | 
            +
              # rubocop:disable Layout/LineLength
         | 
| 26 26 | 
             
              [
         | 
| 27 27 | 
             
                {
         | 
| 28 28 | 
             
                  input: 'SELECT * FROM things;',
         | 
| @@ -229,7 +229,7 @@ RSpec.describe Airbrake::Filters::SqlFilter do | |
| 229 229 | 
             
              ].each do |test|
         | 
| 230 230 | 
             
                include_examples 'query filtering', test
         | 
| 231 231 | 
             
              end
         | 
| 232 | 
            -
              # rubocop:enable  | 
| 232 | 
            +
              # rubocop:enable Layout/LineLength
         | 
| 233 233 |  | 
| 234 234 | 
             
              [
         | 
| 235 235 | 
             
                'COMMIT',
         | 
| @@ -149,10 +149,10 @@ RSpec.describe Airbrake::NoticeNotifier do | |
| 149 149 | 
             
                    expect(proxied_request.header['proxy-authorization'].first)
         | 
| 150 150 | 
             
                      .to eq('Basic dXNlcjpwYXNzd29yZA==')
         | 
| 151 151 |  | 
| 152 | 
            -
                    # rubocop:disable  | 
| 152 | 
            +
                    # rubocop:disable Layout/LineLength
         | 
| 153 153 | 
             
                    expect(proxied_request.request_line)
         | 
| 154 154 | 
             
                      .to eq("POST http://localhost:#{proxy.config[:Port]}/api/v3/projects/105138/notices HTTP/1.1\r\n")
         | 
| 155 | 
            -
                    # rubocop:enable  | 
| 155 | 
            +
                    # rubocop:enable Layout/LineLength
         | 
| 156 156 | 
             
                  end
         | 
| 157 157 | 
             
                end
         | 
| 158 158 |  | 
| @@ -309,7 +309,7 @@ RSpec.describe Airbrake::NoticeNotifier do | |
| 309 309 |  | 
| 310 310 | 
             
                    notice = subject.build_notice(Exception.new)
         | 
| 311 311 |  | 
| 312 | 
            -
                    # rubocop:disable  | 
| 312 | 
            +
                    # rubocop:disable Layout/LineLength
         | 
| 313 313 | 
             
                    expect(notice[:errors].first[:backtrace]).to eq(
         | 
| 314 314 | 
             
                      [
         | 
| 315 315 | 
             
                        { file: 'org/jruby/RubyKernel.java', line: 998, function: 'eval' },
         | 
| @@ -317,7 +317,7 @@ RSpec.describe Airbrake::NoticeNotifier do | |
| 317 317 | 
             
                        { file: '/ruby/stdlib/irb.rb:489', line: 489, function: 'block in eval_input' },
         | 
| 318 318 | 
             
                      ],
         | 
| 319 319 | 
             
                    )
         | 
| 320 | 
            -
                    # rubocop:enable  | 
| 320 | 
            +
                    # rubocop:enable Layout/LineLength
         | 
| 321 321 | 
             
                  end
         | 
| 322 322 | 
             
                end
         | 
| 323 323 |  | 
    
        data/spec/notice_spec.rb
    CHANGED
    
    | @@ -268,7 +268,7 @@ RSpec.describe Airbrake::Notice do | |
| 268 268 | 
             
                it "sets a payload value" do
         | 
| 269 269 | 
             
                  hash = { bingo: 'bango' }
         | 
| 270 270 | 
             
                  notice[:params] = hash
         | 
| 271 | 
            -
                  expect(notice[:params]).to  | 
| 271 | 
            +
                  expect(notice[:params]).to eq(hash)
         | 
| 272 272 | 
             
                end
         | 
| 273 273 |  | 
| 274 274 | 
             
                it "raises error if notice is ignored" do
         | 
| @@ -3,21 +3,9 @@ RSpec.describe Airbrake::PerformanceBreakdown do | |
| 3 3 | 
             
                subject do
         | 
| 4 4 | 
             
                  described_class.new(
         | 
| 5 5 | 
             
                    method: 'GET', route: '/', response_type: '', groups: {},
         | 
| 6 | 
            -
                    start_time: Time.now
         | 
| 7 6 | 
             
                  )
         | 
| 8 7 | 
             
                end
         | 
| 9 8 |  | 
| 10 9 | 
             
                it { is_expected.to respond_to(:stash) }
         | 
| 11 10 | 
             
              end
         | 
| 12 | 
            -
             | 
| 13 | 
            -
              describe "#end_time" do
         | 
| 14 | 
            -
                it "is always equal to start_time + 1 second by default" do
         | 
| 15 | 
            -
                  time = Time.now
         | 
| 16 | 
            -
                  performance_breakdown = described_class.new(
         | 
| 17 | 
            -
                    method: 'GET', route: '/', response_type: '', groups: {},
         | 
| 18 | 
            -
                    start_time: time
         | 
| 19 | 
            -
                  )
         | 
| 20 | 
            -
                  expect(performance_breakdown.end_time).to eq(time + 1)
         | 
| 21 | 
            -
                end
         | 
| 22 | 
            -
              end
         | 
| 23 11 | 
             
            end
         | 
| @@ -541,31 +541,6 @@ RSpec.describe Airbrake::PerformanceNotifier do | |
| 541 541 | 
             
                  end
         | 
| 542 542 | 
             
                end
         | 
| 543 543 |  | 
| 544 | 
            -
                context "when :start_time is specified (deprecated)" do
         | 
| 545 | 
            -
                  before do
         | 
| 546 | 
            -
                    allow(Kernel).to receive(:warn)
         | 
| 547 | 
            -
                  end
         | 
| 548 | 
            -
             | 
| 549 | 
            -
                  it "uses the value of :start_time to update stat" do
         | 
| 550 | 
            -
                    subject.notify(
         | 
| 551 | 
            -
                      Airbrake::Query.new(
         | 
| 552 | 
            -
                        method: 'POST',
         | 
| 553 | 
            -
                        route: '/foo',
         | 
| 554 | 
            -
                        query: 'SELECT * FROM things',
         | 
| 555 | 
            -
                        start_time: Time.new(2018, 1, 1, 0, 49, 0, 0),
         | 
| 556 | 
            -
                        end_time: Time.new(2018, 1, 1, 0, 50, 0, 0),
         | 
| 557 | 
            -
                      ),
         | 
| 558 | 
            -
                    )
         | 
| 559 | 
            -
                    subject.close
         | 
| 560 | 
            -
             | 
| 561 | 
            -
                    expect(
         | 
| 562 | 
            -
                      a_request(:put, queries).with(
         | 
| 563 | 
            -
                        body: /"count":1,"sum":60000.0,"sumsq":3600000000.0/,
         | 
| 564 | 
            -
                      ),
         | 
| 565 | 
            -
                    ).to have_been_made
         | 
| 566 | 
            -
                  end
         | 
| 567 | 
            -
                end
         | 
| 568 | 
            -
             | 
| 569 544 | 
             
                context "when provided :timing is zero" do
         | 
| 570 545 | 
             
                  it "doesn't notify" do
         | 
| 571 546 | 
             
                    queue = Airbrake::Queue.new(queue: 'bananas', error_count: 0, timing: 0)
         | 
    
        data/spec/query_spec.rb
    CHANGED
    
    | @@ -2,20 +2,10 @@ RSpec.describe Airbrake::Query do | |
| 2 2 | 
             
              describe "#stash" do
         | 
| 3 3 | 
             
                subject do
         | 
| 4 4 | 
             
                  described_class.new(
         | 
| 5 | 
            -
                    method: 'GET', route: '/', query: '', | 
| 5 | 
            +
                    method: 'GET', route: '/', query: '',
         | 
| 6 6 | 
             
                  )
         | 
| 7 7 | 
             
                end
         | 
| 8 8 |  | 
| 9 9 | 
             
                it { is_expected.to respond_to(:stash) }
         | 
| 10 10 | 
             
              end
         | 
| 11 | 
            -
             | 
| 12 | 
            -
              describe "#end_time" do
         | 
| 13 | 
            -
                it "is always equal to start_time + 1 second by default" do
         | 
| 14 | 
            -
                  time = Time.now
         | 
| 15 | 
            -
                  query = described_class.new(
         | 
| 16 | 
            -
                    method: 'GET', route: '/', query: '', start_time: time,
         | 
| 17 | 
            -
                  )
         | 
| 18 | 
            -
                  expect(query.end_time).to eq(time + 1)
         | 
| 19 | 
            -
                end
         | 
| 20 | 
            -
              end
         | 
| 21 11 | 
             
            end
         | 
    
        data/spec/queue_spec.rb
    CHANGED
    
    | @@ -9,21 +9,9 @@ RSpec.describe Airbrake::Queue do | |
| 9 9 | 
             
                it { is_expected.to respond_to(:stash) }
         | 
| 10 10 | 
             
              end
         | 
| 11 11 |  | 
| 12 | 
            -
              describe "#end_time" do
         | 
| 13 | 
            -
                it "is always equal to start_time + 1 second by default" do
         | 
| 14 | 
            -
                  time = Time.now
         | 
| 15 | 
            -
                  queue = described_class.new(
         | 
| 16 | 
            -
                    queue: 'bananas', error_count: 0, start_time: time,
         | 
| 17 | 
            -
                  )
         | 
| 18 | 
            -
                  expect(queue.end_time).to eq(time + 1)
         | 
| 19 | 
            -
                end
         | 
| 20 | 
            -
              end
         | 
| 21 | 
            -
             | 
| 22 12 | 
             
              describe "#route" do
         | 
| 23 13 | 
             
                it "always returns an empty route" do
         | 
| 24 | 
            -
                  queue = described_class.new(
         | 
| 25 | 
            -
                    queue: 'a', error_count: 0, start_time: Time.now,
         | 
| 26 | 
            -
                  )
         | 
| 14 | 
            +
                  queue = described_class.new(queue: 'a', error_count: 0)
         | 
| 27 15 | 
             
                  expect(queue.route).to be_empty
         | 
| 28 16 | 
             
                end
         | 
| 29 17 | 
             
              end
         | 
| @@ -9,12 +9,11 @@ RSpec.describe Airbrake::RemoteSettings::SettingsData do | |
| 9 9 |  | 
| 10 10 | 
             
                it "merges the given hash with the data" do
         | 
| 11 11 | 
             
                  settings_data = described_class.new(project_id, {})
         | 
| 12 | 
            -
                  # rubocop:disable Performance/RedundantMerge
         | 
| 13 12 | 
             
                  settings_data.merge!('poll_sec' => 123, 'config_route' => 'abc')
         | 
| 14 | 
            -
                  # rubocop:enable Performance/RedundantMerge
         | 
| 15 13 |  | 
| 16 14 | 
             
                  expect(settings_data.interval).to eq(123)
         | 
| 17 | 
            -
                  expect(settings_data.config_route | 
| 15 | 
            +
                  expect(settings_data.config_route(''))
         | 
| 16 | 
            +
                    .to eq('abc/2020-06-18/config/123/config.json')
         | 
| 18 17 | 
             
                end
         | 
| 19 18 | 
             
              end
         | 
| 20 19 |  | 
| @@ -61,25 +60,77 @@ RSpec.describe Airbrake::RemoteSettings::SettingsData do | |
| 61 60 | 
             
              end
         | 
| 62 61 |  | 
| 63 62 | 
             
              describe "#config_route" do
         | 
| 64 | 
            -
                 | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 63 | 
            +
                let(:host) { 'https://v1-production-notifier-configs.s3.amazonaws.com' }
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                context "when given a remote host through the remote config" do
         | 
| 66 | 
            +
                  context "and when the remote host ends with a slash" do
         | 
| 67 | 
            +
                    let(:data) do
         | 
| 68 | 
            +
                      { 'config_route' => 'http://example.com/' }
         | 
| 69 | 
            +
                    end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                    it "returns the route with the host" do
         | 
| 72 | 
            +
                      expect(described_class.new(project_id, data).config_route(host)).to eq(
         | 
| 73 | 
            +
                        "http://example.com/2020-06-18/config/#{project_id}/config.json",
         | 
| 74 | 
            +
                      )
         | 
| 75 | 
            +
                    end
         | 
| 67 76 | 
             
                  end
         | 
| 68 77 |  | 
| 69 | 
            -
                   | 
| 70 | 
            -
                     | 
| 71 | 
            -
                       | 
| 78 | 
            +
                  context "and when the remote host doesn't with a slash" do
         | 
| 79 | 
            +
                    let(:data) do
         | 
| 80 | 
            +
                      { 'config_route' => 'http://example.com' }
         | 
| 81 | 
            +
                    end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                    it "returns the route with the host" do
         | 
| 84 | 
            +
                      expect(described_class.new(project_id, data).config_route(host)).to eq(
         | 
| 85 | 
            +
                        "http://example.com/2020-06-18/config/#{project_id}/config.json",
         | 
| 86 | 
            +
                      )
         | 
| 87 | 
            +
                    end
         | 
| 72 88 | 
             
                  end
         | 
| 73 89 | 
             
                end
         | 
| 74 90 |  | 
| 75 | 
            -
                context "when  | 
| 91 | 
            +
                context "when given a remote host through local configuration" do
         | 
| 92 | 
            +
                  context "and when the remote host ends with a slash" do
         | 
| 93 | 
            +
                    let(:host) { 'http://example.com/' }
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                    it "returns the route with the host" do
         | 
| 96 | 
            +
                      expect(described_class.new(project_id, {}).config_route(host)).to eq(
         | 
| 97 | 
            +
                        "http://example.com/2020-06-18/config/#{project_id}/config.json",
         | 
| 98 | 
            +
                      )
         | 
| 99 | 
            +
                    end
         | 
| 100 | 
            +
                  end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                  context "and when the remote host doesn't with a slash" do
         | 
| 103 | 
            +
                    let(:host) { 'http://example.com' }
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                    it "returns the route with the given host" do
         | 
| 106 | 
            +
                      expect(described_class.new(project_id, {}).config_route(host)).to eq(
         | 
| 107 | 
            +
                        "http://example.com/2020-06-18/config/#{project_id}/config.json",
         | 
| 108 | 
            +
                      )
         | 
| 109 | 
            +
                    end
         | 
| 110 | 
            +
                  end
         | 
| 111 | 
            +
                end
         | 
| 112 | 
            +
             | 
| 113 | 
            +
                context "when the given remote host in the remote config is nil" do
         | 
| 76 114 | 
             
                  let(:data) do
         | 
| 77 115 | 
             
                    { 'config_route' => nil }
         | 
| 78 116 | 
             
                  end
         | 
| 79 117 |  | 
| 80 | 
            -
                  it "returns the  | 
| 81 | 
            -
                    expect(described_class.new(project_id, data).config_route).to eq(
         | 
| 82 | 
            -
                      'https://v1- | 
| 118 | 
            +
                  it "returns the route with the given host instead" do
         | 
| 119 | 
            +
                    expect(described_class.new(project_id, data).config_route(host)).to eq(
         | 
| 120 | 
            +
                      'https://v1-production-notifier-configs.s3.amazonaws.com/' \
         | 
| 121 | 
            +
                      "2020-06-18/config/#{project_id}/config.json",
         | 
| 122 | 
            +
                    )
         | 
| 123 | 
            +
                  end
         | 
| 124 | 
            +
                end
         | 
| 125 | 
            +
             | 
| 126 | 
            +
                context "when the given remote host in the remote config is an empty string" do
         | 
| 127 | 
            +
                  let(:data) do
         | 
| 128 | 
            +
                    { 'config_route' => '' }
         | 
| 129 | 
            +
                  end
         | 
| 130 | 
            +
             | 
| 131 | 
            +
                  it "returns the route with the default instead" do
         | 
| 132 | 
            +
                    expect(described_class.new(project_id, data).config_route(host)).to eq(
         | 
| 133 | 
            +
                      'https://v1-production-notifier-configs.s3.amazonaws.com/' \
         | 
| 83 134 | 
             
                      "2020-06-18/config/#{project_id}/config.json",
         | 
| 84 135 | 
             
                    )
         | 
| 85 136 | 
             
                  end
         |