From e2e034b910843c65f7fb0558ed1d81d889831bf6 Mon Sep 17 00:00:00 2001 From: Molly Struve Date: Tue, 28 Jul 2020 14:00:38 -0500 Subject: [PATCH] [deploy] Refactor:Remove No Longer Needed Timber Logging (#9555) --- Envfile | 5 - Gemfile | 2 - Gemfile.lock | 17 --- .../metrics/record_data_counts_worker.rb | 2 +- config/environments/production.rb | 8 -- config/initializers/timber.rb | 33 ----- .../metrics/record_data_counts_worker_spec.rb | 10 -- vendor/cache/timber-3.0.1.gem | Bin 32768 -> 0 bytes vendor/cache/timber-rack-1.0.1.gem | Bin 12800 -> 0 bytes .../.bundlecache | 0 .../timber-ruby-rails-250326b0926d/.gitignore | 14 --- .../timber-ruby-rails-250326b0926d/.rspec | 3 - .../.travis.yml | 68 ----------- .../timber-ruby-rails-250326b0926d/Gemfile | 3 - .../timber-ruby-rails-250326b0926d/LICENSE.md | 15 --- .../timber-ruby-rails-250326b0926d/README.md | 14 --- .../timber-ruby-rails-250326b0926d/Rakefile | 6 - .../bin/console | 14 --- .../timber-ruby-rails-250326b0926d/bin/setup | 8 -- .../gemfiles/rails-3.0.gemfile | 8 -- .../gemfiles/rails-3.1.gemfile | 8 -- .../gemfiles/rails-3.2.gemfile | 8 -- .../gemfiles/rails-4.0.gemfile | 12 -- .../gemfiles/rails-4.1.gemfile | 12 -- .../gemfiles/rails-4.2.gemfile | 12 -- .../gemfiles/rails-5.0.gemfile | 12 -- .../gemfiles/rails-5.1.gemfile | 12 -- .../gemfiles/rails-5.2.gemfile | 12 -- .../gemfiles/rails-6.0.gemfile | 12 -- .../gemfiles/rails-edge.gemfile | 10 -- .../lib/timber-rails.rb | 65 ---------- .../lib/timber-rails/action_controller.rb | 17 --- .../action_controller/log_subscriber.rb | 25 ---- .../log_subscriber/timber_log_subscriber.rb | 46 ------- .../lib/timber-rails/action_dispatch.rb | 20 ---- .../action_dispatch/debug_exceptions.rb | 51 -------- .../lib/timber-rails/action_view.rb | 17 --- .../action_view/log_subscriber.rb | 25 ---- .../log_subscriber/timber_log_subscriber.rb | 83 ------------- .../lib/timber-rails/active_record.rb | 17 --- .../active_record/log_subscriber.rb | 20 ---- .../log_subscriber/timber_log_subscriber.rb | 52 -------- .../active_support_log_subscriber.rb | 39 ------ .../lib/timber-rails/config.rb | 12 -- .../timber-rails/config/action_controller.rb | 29 ----- .../lib/timber-rails/config/action_view.rb | 29 ----- .../lib/timber-rails/config/active_record.rb | 29 ----- .../lib/timber-rails/error_event.rb | 61 ---------- .../lib/timber-rails/logger.rb | 20 ---- .../lib/timber-rails/overrides.rb | 12 -- .../active_support_3_tagged_logging.rb | 111 ----------------- .../active_support_buffered_logger.rb | 22 ---- .../active_support_tagged_logging.rb | 66 ---------- .../lib/timber-rails/overrides/lograge.rb | 18 --- .../overrides/rails_stdout_logging.rb | 21 ---- .../lib/timber-rails/rack_logger.rb | 58 --------- .../lib/timber-rails/railtie.rb | 27 ----- .../lib/timber-rails/session_context.rb | 37 ------ .../lib/timber-rails/version.rb | 7 -- .../spec/README.md | 19 --- .../spec/spec_helper.rb | 39 ------ .../spec/support/action_controller.rb | 2 - .../spec/support/active_record.rb | 26 ---- .../spec/support/rails.rb | 77 ------------ .../support/rails/templates/_partial.html | 1 - .../support/rails/templates/template.html | 1 - .../spec/support/socket_hostname.rb | 12 -- .../spec/support/timber.rb | 6 - .../spec/support/timecop.rb | 3 - .../spec/support/webmock.rb | 3 - .../action_controller/log_subscriber_spec.rb | 53 -------- .../action_dispatch/debug_exceptions_spec.rb | 52 -------- .../action_view/log_subscriber_spec.rb | 113 ------------------ .../active_record/log_subscriber_spec.rb | 44 ------- .../spec/timber-rails/config_spec.rb | 30 ----- .../spec/timber-rails/error_event_spec.rb | 62 ---------- .../spec/timber-rails/http_context_spec.rb | 58 --------- .../spec/timber-rails/http_events_spec.rb | 99 --------------- .../spec/timber-rails/logger_spec.rb | 16 --- .../spec/timber-rails/rack_logger_spec.rb | 56 --------- .../spec/timber-rails/session_context_spec.rb | 11 -- .../spec/timber-rails/tagged_logging_spec.rb | 29 ----- .../timber-rails.gemspec | 55 --------- 83 files changed, 1 insertion(+), 2242 deletions(-) delete mode 100644 config/initializers/timber.rb delete mode 100644 vendor/cache/timber-3.0.1.gem delete mode 100644 vendor/cache/timber-rack-1.0.1.gem delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/.bundlecache delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/.gitignore delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/.rspec delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/.travis.yml delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/Gemfile delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/LICENSE.md delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/README.md delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/Rakefile delete mode 100755 vendor/cache/timber-ruby-rails-250326b0926d/bin/console delete mode 100755 vendor/cache/timber-ruby-rails-250326b0926d/bin/setup delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-3.0.gemfile delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-3.1.gemfile delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-3.2.gemfile delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-4.0.gemfile delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-4.1.gemfile delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-4.2.gemfile delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-5.0.gemfile delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-5.1.gemfile delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-5.2.gemfile delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-6.0.gemfile delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-edge.gemfile delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_controller.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_controller/log_subscriber.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_controller/log_subscriber/timber_log_subscriber.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_dispatch.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_dispatch/debug_exceptions.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_view.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_view/log_subscriber.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_view/log_subscriber/timber_log_subscriber.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/active_record.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/active_record/log_subscriber.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/active_record/log_subscriber/timber_log_subscriber.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/active_support_log_subscriber.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/config.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/config/action_controller.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/config/action_view.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/config/active_record.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/error_event.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/logger.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides/active_support_3_tagged_logging.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides/active_support_buffered_logger.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides/active_support_tagged_logging.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides/lograge.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides/rails_stdout_logging.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/rack_logger.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/railtie.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/session_context.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/version.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/spec/README.md delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/spec/spec_helper.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/spec/support/action_controller.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/spec/support/active_record.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/spec/support/rails.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/spec/support/rails/templates/_partial.html delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/spec/support/rails/templates/template.html delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/spec/support/socket_hostname.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/spec/support/timber.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/spec/support/timecop.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/spec/support/webmock.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/action_controller/log_subscriber_spec.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/action_dispatch/debug_exceptions_spec.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/action_view/log_subscriber_spec.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/active_record/log_subscriber_spec.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/config_spec.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/error_event_spec.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/http_context_spec.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/http_events_spec.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/logger_spec.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/rack_logger_spec.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/session_context_spec.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/tagged_logging_spec.rb delete mode 100644 vendor/cache/timber-ruby-rails-250326b0926d/timber-rails.gemspec diff --git a/Envfile b/Envfile index 05c2a4945..92bc254cd 100644 --- a/Envfile +++ b/Envfile @@ -167,11 +167,6 @@ variable :STACK_EXCHANGE_APP_KEY, :String, default: "" group :production do variable :SECRET_KEY_BASE, :String - # Timber - # (https://docs.timber.io/) - variable :SEND_LOGS_TO_TIMBER, :String # Defaults to true in production, false in development - variable :TIMBER, :String # Only required if above is "true" or unset - # Sendgrid # (https://sendgrid.com/docs/API_Reference/api_v3.html) variable :SENDGRID_USERNAME_ACCEL, :String diff --git a/Gemfile b/Gemfile index 294b1ee8d..8c2c53f5a 100644 --- a/Gemfile +++ b/Gemfile @@ -100,8 +100,6 @@ gem "staccato", "~> 0.5" # Ruby Google Analytics Measurement gem "storext", "~> 3.1" # Add type-casting and other features on top of ActiveRecord::Store.store_accessor gem "stripe", "~> 5.22" # Ruby library for the Stripe API gem "strong_migrations", "~> 0.7" # Catch unsafe migrations -gem "timber", "~> 3.0" # Great Ruby logging made easy -gem "timber-rails", github: "timberio/timber-ruby-rails", branch: "master" # Timber integration for Rails gem "twilio-ruby", "~> 5.39" # The official library for communicating with the Twilio REST API gem "twitter", "~> 7.0" # A Ruby interface to the Twitter API gem "uglifier", "~> 4.2" # Uglifier minifies JavaScript files diff --git a/Gemfile.lock b/Gemfile.lock index 34815680c..9373c0df9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -6,16 +6,6 @@ GIT acts_as_follower (0.2.1) activerecord (>= 4.0) -GIT - remote: https://github.com/timberio/timber-ruby-rails.git - revision: 250326b0926d33207f0e1147a594dd8fe4487466 - branch: master - specs: - timber-rails (1.0.2) - rails (>= 3.0.0) - timber (~> 3.0) - timber-rack (~> 1.0) - GEM remote: https://rubygems.org/ specs: @@ -775,11 +765,6 @@ GEM thor (0.20.3) thread_safe (0.3.6) tilt (2.0.10) - timber (3.0.1) - msgpack (~> 1.0) - timber-rack (1.0.1) - rack (>= 1.2, < 3.0) - timber (~> 3.0) timecop (0.9.1) twilio-ruby (5.39.2) faraday (>= 0.9, < 2.0) @@ -990,8 +975,6 @@ DEPENDENCIES stripe-ruby-mock (~> 3.0) strong_migrations (~> 0.7) test-prof (~> 0.12) - timber (~> 3.0) - timber-rails! timecop (~> 0.9) twilio-ruby (~> 5.39) twitter (~> 7.0) diff --git a/app/workers/metrics/record_data_counts_worker.rb b/app/workers/metrics/record_data_counts_worker.rb index c442d4a6f..13f0a7e02 100644 --- a/app/workers/metrics/record_data_counts_worker.rb +++ b/app/workers/metrics/record_data_counts_worker.rb @@ -12,7 +12,7 @@ module Metrics model.estimated_count end - Rails.logger.info("db_table_size", table_info: { table_name: model.table_name, table_size: db_count }) + Rails.logger.info(message: "db_table_size", table_info: { table_name: model.table_name, table_size: db_count }) DatadogStatsClient.gauge("postgres.db_table_size", db_count, tags: ["table_name:#{model.table_name}"]) next unless model.const_defined?(:SEARCH_CLASS) diff --git a/config/environments/production.rb b/config/environments/production.rb index a7c3292fe..341709cd0 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -107,14 +107,6 @@ Rails.application.configure do config.logger = ActiveSupport::TaggedLogging.new(logger) end - if (ENV["SEND_LOGS_TO_TIMBER"] || "true") == "true" - # Timber.io logger - log_device = Timber::LogDevices::HTTP.new(ENV["TIMBER"]) - logger = Timber::Logger.new(log_device) - logger.level = config.log_level - config.logger = ActiveSupport::TaggedLogging.new(logger) - end - # Do not dump schema after migrations. config.active_record.dump_schema_after_migration = false diff --git a/config/initializers/timber.rb b/config/initializers/timber.rb deleted file mode 100644 index 98165ea79..000000000 --- a/config/initializers/timber.rb +++ /dev/null @@ -1,33 +0,0 @@ -# Timber.io Ruby Configuration - Simple Structured Logging -# -# ^ ^ ^ ^ ___I_ ^ ^ ^ ^ ^ ^ ^ -# /|\/|\/|\ /|\ /\-_--\ /|\/|\ /|\/|\/|\ /|\/|\ -# /|\/|\/|\ /|\ / \_-__\ /|\/|\ /|\/|\/|\ /|\/|\ -# /|\/|\/|\ /|\ |[]| [] | /|\/|\ /|\/|\/|\ /|\/|\ -# ------------------------------------------------------------------- -# Website: https://timber.io -# Documentation: https://timber.io/docs -# Support: support@timber.io -# ------------------------------------------------------------------- - -config = Timber::Config.instance -config.integrations.action_view.silence = true -config.integrations.active_record.silence = !Rails.env.development? -config.integrations.rack.http_events.collapse_into_single_event = true - -config.integrations.rack.http_events.silence_request = lambda do |_rack_env, rack_request| - rack_request.path.match?(%r{^/page_views/\d{1,9}}) -end - -config.integrations.rack.user_context.custom_user_hash = lambda do |rack_env| - session_user_id = rack_env["rack.session"].to_h["warden.user.user.key"]&.first&.first - if session_user_id - { - id: session_user_id - } - end -end - -# Add additional configuration here. -# For a full list of configuration options and their explanations see: -# http://www.rubydoc.info/github/timberio/timber-ruby/Timber/Config diff --git a/spec/workers/metrics/record_data_counts_worker_spec.rb b/spec/workers/metrics/record_data_counts_worker_spec.rb index c124dffb1..c6292cd4d 100644 --- a/spec/workers/metrics/record_data_counts_worker_spec.rb +++ b/spec/workers/metrics/record_data_counts_worker_spec.rb @@ -1,19 +1,9 @@ require "rails_helper" RSpec.describe Metrics::RecordDataCountsWorker, type: :worker do - default_logger = Rails.logger - include_examples "#enqueues_on_correct_queue", "low_priority", 1 describe "#perform" do - # Override the default Rails logger as these tests require the Timber logger. - before do - timber_logger = Timber::Logger.new(nil) - Rails.logger = ActiveSupport::TaggedLogging.new(timber_logger) - end - - after { Rails.logger = default_logger } - it "calls count on each model" do allow(User).to receive(:count) allow(User).to receive(:estimated_count) diff --git a/vendor/cache/timber-3.0.1.gem b/vendor/cache/timber-3.0.1.gem deleted file mode 100644 index d032ed46c3527ea2be3314679670bfda507fea2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 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 J{P!yGKLCSx=Boez diff --git a/vendor/cache/timber-rack-1.0.1.gem b/vendor/cache/timber-rack-1.0.1.gem deleted file mode 100644 index 3b87dbbbd7a63da5dff699d84b28bbfbddca75af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12800 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 diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/.bundlecache b/vendor/cache/timber-ruby-rails-250326b0926d/.bundlecache deleted file mode 100644 index e69de29bb..000000000 diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/.gitignore b/vendor/cache/timber-ruby-rails-250326b0926d/.gitignore deleted file mode 100644 index 537ede7c2..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -/.bundle/ -/.yardoc -/_yardoc/ -/coverage/ -/doc/ -/pkg/ -/spec/reports/ -/tmp/ - -# rspec failure tracking -.rspec_status - -# Ignore gemset -/.gem diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/.rspec b/vendor/cache/timber-ruby-rails-250326b0926d/.rspec deleted file mode 100644 index 34c5164d9..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/.rspec +++ /dev/null @@ -1,3 +0,0 @@ ---format documentation ---color ---require spec_helper diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/.travis.yml b/vendor/cache/timber-ruby-rails-250326b0926d/.travis.yml deleted file mode 100644 index ce778226b..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/.travis.yml +++ /dev/null @@ -1,68 +0,0 @@ -sudo: false -language: ruby -cache: bundler -rvm: -- 1.9.3 -- 2.2.10 -- 2.3.8 -- 2.4.7 -- 2.5.6 -- 2.6.4 -- jruby-9.2.8.0 -before_install: gem install bundler -v 1.17.3 -gemfile: -- gemfiles/rails-3.2.gemfile -- gemfiles/rails-4.0.gemfile -- gemfiles/rails-4.1.gemfile -- gemfiles/rails-4.2.gemfile -- gemfiles/rails-5.0.gemfile -- gemfiles/rails-5.1.gemfile -- gemfiles/rails-5.2.gemfile -- gemfiles/rails-6.0.gemfile -- gemfiles/rails-edge.gemfile -env: - global: RAILS_ENV=test -before_script: -- echo $BUNDLE_GEMFILE -- bundle install -script: - - bundle exec rspec --format documentation -matrix: - fast_finish: true - exclude: - - rvm: 1.9.3 - - gemfile: gemfiles/rails-edge.gemfile - - rvm: 2.2.10 - gemfile: gemfiles/rails-6.0.gemfile - - rvm: 2.3.8 - gemfile: gemfiles/rails-6.0.gemfile - - rvm: 2.4.7 - gemfile: gemfiles/rails-4.0.gemfile - - rvm: 2.4.7 - gemfile: gemfiles/rails-4.1.gemfile - - rvm: 2.4.7 - gemfile: gemfiles/rails-6.0.gemfile - - rvm: 2.5.6 - gemfile: gemfiles/rails-3.2.gemfile - - rvm: 2.5.6 - gemfile: gemfiles/rails-4.0.gemfile - - rvm: 2.5.6 - gemfile: gemfiles/rails-4.1.gemfile - - rvm: 2.6.4 - gemfile: gemfiles/rails-4.0.gemfile - - rvm: 2.6.4 - gemfile: gemfiles/rails-4.1.gemfile - include: - - rvm: 2.5.6 - gemfile: gemfiles/rails-edge.gemfile - - rvm: 1.9.3 - gemfile: gemfiles/rails-3.2.gemfile - allow_failures: - - rvm: 1.9.3 # bundler wont install the gems - - gemfile: gemfiles/rails-edge.gemfile - - rvm: jruby-9.2.8.0 -notifications: - email: false - slack: - rooms: - secure: F4BGVLUnaDqJ3YXfuIwx+m6047E8YstCUXs33Tfcs7SUlSuOSChuXqvCfVtnfNy2muF7xgB6VRL3xpFIRm7qNStqGUWCQJXmKq2OEgq1DYGkhAVle4d/LBtVcfBgeLelsoi+1TI9MrUtpZDHPl0li3PLoC+dq7rzSuhrxQ9EOhZlZGVn6LTeVcgNw6cLNzHSWJJ8zpYWLjBWUXgJ75MQvo5qaNbQxyfzm7GzEgRNfSzabFBwpKwB1Tog9X9TKTtPrn30O9Ur9+wmTu6EnwaDWZjaTK6I+AbxE8huIfUGvSrq1aV2JaDIra6zHEQ+d4j0oRYutgFM4YfyN9124MbPE2yH/5lXNQHMpUOsP0bl2U+KGDzq/V5APyrZ6irsvwGYpo3fSXrW8nDIAK4Mh8KB+Ta0zN5H8PmIRK76wJ+wG2zAtrfl+ailxMrdpK6J04fl3pCBuO6eW+AKEJ7Wfi5GiE7a9lk/YewAeDHyyLSnUNFIP0/iFAbTtRh5denCk0ZUS1XyfZNQuFoku7jk5lpe41SNItqOO0jv/jXPF+wensNa2UgMBIP0XkRw55LKn9eY0MKm9P+zp9ePaXs0T0Ttv4e0T4Jxrgf5QBynefgHwAsOI1nHr7GhlPaFQ6u8iNmjNYLB9v1JZMlO08LkytzZFpUuJoHbYYoBaRtUtEosBHg= diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/Gemfile b/vendor/cache/timber-ruby-rails-250326b0926d/Gemfile deleted file mode 100644 index b4e2a20bb..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/Gemfile +++ /dev/null @@ -1,3 +0,0 @@ -source "https://rubygems.org" - -gemspec diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/LICENSE.md b/vendor/cache/timber-ruby-rails-250326b0926d/LICENSE.md deleted file mode 100644 index c1a72ce15..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/LICENSE.md +++ /dev/null @@ -1,15 +0,0 @@ -# License - -Copyright (c) 2019, Timber Technologies, Inc. - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/README.md b/vendor/cache/timber-ruby-rails-250326b0926d/README.md deleted file mode 100644 index a3ab4c225..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# 🌲 Timber Integration For Rails - -[![ISC License](https://img.shields.io/badge/license-ISC-ff69b4.svg)](LICENSE.md) -[![Yard Docs](http://img.shields.io/badge/yard-docs-blue.svg)](http://www.rubydoc.info/github/timberio/timber-ruby-rails) -[![Build Status](https://travis-ci.org/timberio/timber-ruby-rails.svg?branch=master)](https://travis-ci.org/timberio/timber-ruby-rails) - -This library integrates the -[`timber` Ruby library](https://github.com/timberio/timber-ruby) with the -[rails](https://github.com/rails/rails) framework, turning your rails logs into -rich structured events. - -- **Sign-up: [https://app.timber.io](https://app.timber.io)** -- **Documentation: - [https://docs.timber.io/setup/languages/ruby/integrations/rails](https://docs.timber.io/setup/languages/ruby/integrations/rails)** diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/Rakefile b/vendor/cache/timber-ruby-rails-250326b0926d/Rakefile deleted file mode 100644 index b7e9ed549..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/Rakefile +++ /dev/null @@ -1,6 +0,0 @@ -require "bundler/gem_tasks" -require "rspec/core/rake_task" - -RSpec::Core::RakeTask.new(:spec) - -task :default => :spec diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/bin/console b/vendor/cache/timber-ruby-rails-250326b0926d/bin/console deleted file mode 100755 index 8bbc5f456..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/bin/console +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env ruby - -require "bundler/setup" -require "timber-rails" - -# You can add fixtures and/or initialization code here to make experimenting -# with your gem easier. You can also use a different console, if you like. - -# (If you use this, don't forget to add pry to your Gemfile!) -# require "pry" -# Pry.start - -require "irb" -IRB.start(__FILE__) diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/bin/setup b/vendor/cache/timber-ruby-rails-250326b0926d/bin/setup deleted file mode 100755 index dce67d860..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/bin/setup +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -IFS=$'\n\t' -set -vx - -bundle install - -# Do any other automated setup that you need to do here diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-3.0.gemfile b/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-3.0.gemfile deleted file mode 100644 index 22194130c..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-3.0.gemfile +++ /dev/null @@ -1,8 +0,0 @@ -source 'https://rubygems.org' - -gem 'rails', '~> 3.0.0' - -gem 'timber', -gem 'timber-rack' - -gemspec :path => '../' diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-3.1.gemfile b/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-3.1.gemfile deleted file mode 100644 index ed455abc9..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-3.1.gemfile +++ /dev/null @@ -1,8 +0,0 @@ -source 'https://rubygems.org' - -gem 'rails', '~> 3.1.0' - -gem 'timber' -gem 'timber-rack' - -gemspec :path => '../' diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-3.2.gemfile b/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-3.2.gemfile deleted file mode 100644 index 74111c421..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-3.2.gemfile +++ /dev/null @@ -1,8 +0,0 @@ -source 'https://rubygems.org' - -gem 'rails', '~> 3.2.0' - -gem 'timber' -gem 'timber-rack' - -gemspec :path => '../' diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-4.0.gemfile b/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-4.0.gemfile deleted file mode 100644 index 7b6f29647..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-4.0.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -source 'https://rubygems.org' - -gem 'rails', '~> 4.0.0' - -gem 'timber' -gem 'timber-rack' - -if RUBY_PLATFORM == "java" - gem 'mime-types', '2.6.2' -end - -gemspec :path => '../' diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-4.1.gemfile b/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-4.1.gemfile deleted file mode 100644 index 2735403bc..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-4.1.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -source 'https://rubygems.org' - -gem 'rails', '~> 4.1.0' - -gem 'timber' -gem 'timber-rack' - -if RUBY_PLATFORM == "java" - gem 'mime-types', '2.6.2' -end - -gemspec :path => '../' diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-4.2.gemfile b/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-4.2.gemfile deleted file mode 100644 index a5365c0f1..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-4.2.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -source 'https://rubygems.org' - -gem 'rails', '~> 4.2.0' - -gem 'timber' -gem 'timber-rack' - -if RUBY_PLATFORM == "java" - gem 'mime-types', '2.6.2' -end - -gemspec :path => '../' diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-5.0.gemfile b/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-5.0.gemfile deleted file mode 100644 index c3af66b33..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-5.0.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -source 'https://rubygems.org' - -gem 'rails', '~> 5.0.0' - -gem 'timber' -gem 'timber-rack' - -if RUBY_PLATFORM == "java" - gem 'mime-types', '2.6.2' -end - -gemspec :path => '../' diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-5.1.gemfile b/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-5.1.gemfile deleted file mode 100644 index d7af51d02..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-5.1.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -source 'https://rubygems.org' - -gem 'rails', '~> 5.1.0' - -gem 'timber' -gem 'timber-rack' - -if RUBY_PLATFORM == "java" - gem 'mime-types', '2.6.2' -end - -gemspec :path => '../' diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-5.2.gemfile b/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-5.2.gemfile deleted file mode 100644 index 2a441bc33..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-5.2.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -source 'https://rubygems.org' - -gem 'rails', '~> 5.2.0' - -gem 'timber' -gem 'timber-rack' - -if RUBY_PLATFORM == "java" - gem 'mime-types', '2.6.2' -end - -gemspec :path => '../' diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-6.0.gemfile b/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-6.0.gemfile deleted file mode 100644 index 5361b7143..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-6.0.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -source 'https://rubygems.org' - -gem 'rails', '~> 6.0.0' - -gem 'timber' -gem 'timber-rack' - -if RUBY_PLATFORM == "java" - gem 'mime-types', '2.6.2' -end - -gemspec :path => '../' diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-edge.gemfile b/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-edge.gemfile deleted file mode 100644 index 52727186a..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/gemfiles/rails-edge.gemfile +++ /dev/null @@ -1,10 +0,0 @@ -source 'https://rubygems.org' - -gem 'rack', git: 'https://github.com/rack/rack', branch: 'master' -gem 'arel', git: 'https://github.com/rails/arel', branch: 'master' -gem 'rails', git: 'https://github.com/rails/rails', branch: 'master' - -gem 'timber' -gem 'timber-rack' - -gemspec :path => '../' diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails.rb deleted file mode 100644 index 450cd5865..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails.rb +++ /dev/null @@ -1,65 +0,0 @@ -require "timber-rails/overrides" - -require "timber" -require "rails" -require "timber-rails/active_support_log_subscriber" -require "timber-rails/config" -require "timber-rails/railtie" - -require "timber-rack/http_context" -require "timber-rack/http_events" -require "timber-rack/user_context" -require "timber-rails/session_context" -require "timber-rails/rack_logger" -require "timber-rails/error_event" - -require "timber-rails/action_controller" -require "timber-rails/action_dispatch" -require "timber-rails/action_view" -require "timber-rails/active_record" - - -require "timber-rails/logger" - -module Timber - module Integrations - # Module for holding *all* Rails integrations. This module does *not* - # extend {Integration} because it's dependent on {Rack::HTTPEvents}. This - # module simply disables the default HTTP request logging. - module Rails - def self.enabled? - Timber::Integrations::Rack::HTTPEvents.enabled? - end - - def self.integrate! - return false if !enabled? - - ActionController.integrate! - ActionDispatch.integrate! - ActionView.integrate! - ActiveRecord.integrate! - RackLogger.integrate! - end - - def self.enabled=(value) - Timber::Integrations::Rails::ErrorEvent.enabled = value - Timber::Integrations::Rack::HTTPContext.enabled = value - Timber::Integrations::Rack::HTTPEvents.enabled = value - Timber::Integrations::Rack::UserContext.enabled = value - SessionContext.enabled = value - - ActionController.enabled = value - ActionView.enabled = value - ActiveRecord.enabled = value - end - - # All enabled middlewares. The order is relevant. Middlewares that set - # context are added first so that context is included in subsequent log lines. - def self.middlewares - @middlewares ||= [Timber::Integrations::Rack::HTTPContext, SessionContext, Timber::Integrations::Rack::UserContext, - Timber::Integrations::Rack::HTTPEvents, Timber::Integrations::Rails::ErrorEvent].select(&:enabled?) - end - end - end -end - diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_controller.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_controller.rb deleted file mode 100644 index 75ea0a21f..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_controller.rb +++ /dev/null @@ -1,17 +0,0 @@ -require "timber-rails/action_controller/log_subscriber" - -module Timber - module Integrations - # Module for holding *all* ActionController integrations. See {Integration} for - # configuration details for all integrations. - module ActionController - extend Integration - - def self.integrate! - return false if !enabled? - - LogSubscriber.integrate! - end - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_controller/log_subscriber.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_controller/log_subscriber.rb deleted file mode 100644 index 16d25c67f..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_controller/log_subscriber.rb +++ /dev/null @@ -1,25 +0,0 @@ -module Timber - module Integrations - module ActionController - # Responsible for removing the default ActionController::LogSubscriber and installing - # the TimberLogSubscriber - # - # @private - class LogSubscriber < Integrator - def initialize - require "action_controller/log_subscriber" - require "timber-rails/action_controller/log_subscriber/timber_log_subscriber" - rescue LoadError => e - raise RequirementNotMetError.new(e.message) - end - - def integrate! - return true if Timber::Integrations::Rails::ActiveSupportLogSubscriber.subscribed?(:action_controller, TimberLogSubscriber) - - Timber::Integrations::Rails::ActiveSupportLogSubscriber.unsubscribe!(:action_controller, ::ActionController::LogSubscriber) - TimberLogSubscriber.attach_to(:action_controller) - end - end - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_controller/log_subscriber/timber_log_subscriber.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_controller/log_subscriber/timber_log_subscriber.rb deleted file mode 100644 index 9a1fa8f25..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_controller/log_subscriber/timber_log_subscriber.rb +++ /dev/null @@ -1,46 +0,0 @@ -module Timber - module Integrations - module ActionController - class LogSubscriber < Integrator - # The log subscriber that replaces the default `ActionController::LogSubscriber`. - # The intent of this subscriber is to, as transparently as possible, properly - # track events that are being logged here. This LogSubscriber will never change - # default behavior / log messages. - # - # @private - class TimberLogSubscriber < ::ActionController::LogSubscriber - def start_processing(event) - return true if silence? - - info do - payload = event.payload - params = payload[:params].except(*INTERNAL_PARAMS) - format = extract_format(payload) - format = format.to_s.upcase if format.is_a?(Symbol) - - Events::ControllerCall.new( - controller: payload[:controller], - action: payload[:action], - format: format, - params: params - ) - end - end - - private - def extract_format(payload) - if payload.key?(:format) - payload[:format] # rails > 4.X - elsif payload.key?(:formats) - payload[:formats].first # rails 3.X - end - end - - def silence? - ActionController.silence? - end - end - end - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_dispatch.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_dispatch.rb deleted file mode 100644 index 0e9cb2c45..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_dispatch.rb +++ /dev/null @@ -1,20 +0,0 @@ -require "timber-rails/action_dispatch/debug_exceptions" - -module Timber - module Integrations - # Module for holding *all* ActionDispatch integrations. This - # module simply disables the exception tracking middleware so that our middleware - # works as expected. - module ActionDispatch - def self.enabled? - Rails::ErrorEvent.enabled? - end - - def self.integrate! - return false if !enabled? - - DebugExceptions.integrate! - end - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_dispatch/debug_exceptions.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_dispatch/debug_exceptions.rb deleted file mode 100644 index 5b4a4ebe2..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_dispatch/debug_exceptions.rb +++ /dev/null @@ -1,51 +0,0 @@ -module Timber - module Integrations - module ActionDispatch - # Reponsible for disabled logging in the ActionDispatch::DebugExceptions - # Rack middleware. We cannot simply remove the middleware because it is - # coupled with displaying an exception debug screen if debug exceptions is enabled. - # - # @private - class DebugExceptions < Integrator - - # Patch for disabling logging - # - # @private - module InstanceMethods - def self.included(klass) - klass.class_eval do - private - def logger(*args) - nil - end - end - end - end - - def initialize - begin - # Rails >= 3.1 - require "action_dispatch/middleware/debug_exceptions" - rescue LoadError - # Rails < 3.1 - require "action_dispatch/middleware/show_exceptions" - end - rescue LoadError => e - raise RequirementNotMetError.new(e.message) - end - - def integrate! - if defined?(::ActionDispatch::DebugExceptions) && !::ActionDispatch::DebugExceptions.include?(InstanceMethods) - ::ActionDispatch::DebugExceptions.send(:include, InstanceMethods) - end - - if defined?(::ActionDispatch::ShowExceptions) && !::ActionDispatch::ShowExceptions.include?(InstanceMethods) - ::ActionDispatch::ShowExceptions.send(:include, InstanceMethods) - end - - true - end - end - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_view.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_view.rb deleted file mode 100644 index c2e8af249..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_view.rb +++ /dev/null @@ -1,17 +0,0 @@ -require "timber-rails/action_view/log_subscriber" - -module Timber - module Integrations - # Module for holding *all* ActionView integrations. See {Integration} for - # configuration details for all integrations. - module ActionView - extend Integration - - def self.integrate! - return false if !enabled? - - LogSubscriber.integrate! - end - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_view/log_subscriber.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_view/log_subscriber.rb deleted file mode 100644 index 4d63ab7af..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_view/log_subscriber.rb +++ /dev/null @@ -1,25 +0,0 @@ -module Timber - module Integrations - module ActionView - # Reponsible for uninstalling the default `ActionView::LogSubscriber` and installing - # the TimberLogSubscriber. - # - # @private - class LogSubscriber < Integrator - def initialize - require "action_view/log_subscriber" - require "timber-rails/action_view/log_subscriber/timber_log_subscriber" - rescue LoadError => e - raise RequirementNotMetError.new(e.message) - end - - def integrate! - return true if Timber::Integrations::Rails::ActiveSupportLogSubscriber.subscribed?(:action_view, TimberLogSubscriber) - - Timber::Integrations::Rails::ActiveSupportLogSubscriber.unsubscribe!(:action_view, ::ActionView::LogSubscriber) - TimberLogSubscriber.attach_to(:action_view) - end - end - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_view/log_subscriber/timber_log_subscriber.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_view/log_subscriber/timber_log_subscriber.rb deleted file mode 100644 index f4aed95a0..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/action_view/log_subscriber/timber_log_subscriber.rb +++ /dev/null @@ -1,83 +0,0 @@ -module Timber - module Integrations - module ActionView - class LogSubscriber < Integrator - - # The log subscriber that replaces the default `ActionView::LogSubscriber`. - # The intent of this subscriber is to, as transparently as possible, properly - # track events that are being logged here. - # - # @private - class TimberLogSubscriber < ::ActionView::LogSubscriber - def render_template(event) - return true if silence? - - info do - full_name = from_rails_root(event.payload[:identifier]) - message = " Rendered #{full_name}" - message << " within #{from_rails_root(event.payload[:layout])}" if event.payload[:layout] - message << " (#{event.duration.round(1)}ms)" - - Events::TemplateRender.new( - name: full_name, - duration_ms: event.duration, - message: message - ) - end - end - - def render_partial(event) - return true if silence? - - info do - full_name = from_rails_root(event.payload[:identifier]) - message = " Rendered #{full_name}" - message << " within #{from_rails_root(event.payload[:layout])}" if event.payload[:layout] - message << " (#{event.duration.round(1)}ms)" - message << " #{cache_message(event.payload)}" if event.payload.key?(:cache_hit) - - Events::TemplateRender.new( - name: full_name, - duration_ms: event.duration, - message: message - ) - end - end - - def render_collection(event) - return true if silence? - - if respond_to?(:render_count, true) - info do - identifier = event.payload[:identifier] || "templates" - full_name = from_rails_root(identifier) - message = " Rendered collection of #{full_name}" \ - " #{render_count(event.payload)} (#{event.duration.round(1)}ms)" - - Events::TemplateRender.new( - name: full_name, - duration_ms: event.duration, - message: message - ) - end - else - # Older versions of rails delegate this method to #render_template - render_template(event) - end - end - - private - def log_rendering_start(payload) - # Consolidates 2 template rendering events into 1. We don't need 2 events for - # rendering a template. If you disagree, please feel free to open a PR and we - # can make this an option. - end - - def silence? - ActionView.silence? - end - end - end - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/active_record.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/active_record.rb deleted file mode 100644 index 00e0eb0a2..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/active_record.rb +++ /dev/null @@ -1,17 +0,0 @@ -require "timber-rails/active_record/log_subscriber" - -module Timber - module Integrations - # Module for holding *all* ActiveRecord integrations. See {Integration} for - # configuration details for all integrations. - module ActiveRecord - extend Integration - - def self.integrate! - return false if !enabled? - - LogSubscriber.integrate! - end - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/active_record/log_subscriber.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/active_record/log_subscriber.rb deleted file mode 100644 index 6e2d4376c..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/active_record/log_subscriber.rb +++ /dev/null @@ -1,20 +0,0 @@ -require "timber-rails/active_record/log_subscriber/timber_log_subscriber" - -module Timber - module Integrations - module ActiveRecord - # Reponsible for uninstalling the default `ActiveRecord::LogSubscriber` and replacing it - # with the `TimberLogSubscriber`. - # - # @private - class LogSubscriber < Integrator - def integrate! - return true if Timber::Integrations::Rails::ActiveSupportLogSubscriber.subscribed?(:active_record, TimberLogSubscriber) - - Timber::Integrations::Rails::ActiveSupportLogSubscriber.unsubscribe!(:active_record, ::ActiveRecord::LogSubscriber) - TimberLogSubscriber.attach_to(:active_record) - end - end - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/active_record/log_subscriber/timber_log_subscriber.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/active_record/log_subscriber/timber_log_subscriber.rb deleted file mode 100644 index af402a8c2..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/active_record/log_subscriber/timber_log_subscriber.rb +++ /dev/null @@ -1,52 +0,0 @@ -# We require all of ActiveRecord because the #logger method in ::ActiveRecord::LogSubscriber -# uses ActiveRecord::Base. We can't require active_record/base directly because ActiveRecord -# does not require files properly and we receive unintialized constant errors. -require "active_record" -require "active_record/log_subscriber" - -module Timber - module Integrations - module ActiveRecord - class LogSubscriber < Integrator - # The log subscriber that replaces the default `ActiveRecord::LogSubscriber`. - # The intent of this subscriber is to, as transparently as possible, properly - # track events that are being logged here. This LogSubscriber will never change - # default behavior / log messages. - # - # @private - class TimberLogSubscriber < ::ActiveRecord::LogSubscriber - def sql(event) - return true if silence? - - r = super(event) - - if @message - payload = event.payload - - sql_event = Events::SQLQuery.new( - sql: payload[:sql], - duration_ms: event.duration, - message: @message, - ) - - logger.debug sql_event - - @message = nil - end - - r - end - - private - def debug(message) - @message = message - end - - def silence? - ActiveRecord.silence? - end - end - end - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/active_support_log_subscriber.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/active_support_log_subscriber.rb deleted file mode 100644 index a3f702326..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/active_support_log_subscriber.rb +++ /dev/null @@ -1,39 +0,0 @@ -module Timber - module Integrations - module Rails - # @private - module ActiveSupportLogSubscriber - extend self - - def find(component, type) - ::ActiveSupport::LogSubscriber.log_subscribers.find do |subscriber| - subscriber.class == type - end - end - - def subscribed?(component, type) - !find(component, type).nil? - end - - # I don't know why this has to be so complicated, but it is. This code was taken from - # lograge :/ - def unsubscribe!(component, type) - subscriber = find(component, type) - - if !subscriber - raise "We could not find a log subscriber for #{component.inspect} of type #{type.inspect}" - end - - events = subscriber.public_methods(false).reject { |method| method.to_s == 'call' } - events.each do |event| - ::ActiveSupport::Notifications.notifier.listeners_for("#{event}.#{component}").each do |listener| - if listener.instance_variable_get('@delegate') == subscriber - ::ActiveSupport::Notifications.unsubscribe listener - end - end - end - end - end - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/config.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/config.rb deleted file mode 100644 index ee3a45833..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/config.rb +++ /dev/null @@ -1,12 +0,0 @@ -require 'timber/config' -require 'timber-rack/config' -require 'timber-rails/config/action_view' -require 'timber-rails/config/active_record' -require 'timber-rails/config/action_controller' - -Timber::Config.instance.define_singleton_method(:logrageify!) do - integrations.action_controller.silence = true - integrations.action_view.silence = true - integrations.active_record.silence = true - integrations.rack.http_events.collapse_into_single_event = true -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/config/action_controller.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/config/action_controller.rb deleted file mode 100644 index 2e9410e1b..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/config/action_controller.rb +++ /dev/null @@ -1,29 +0,0 @@ -require "timber-rails/action_controller" - -module Timber - class Config - # Convenience module for accessing the various `Timber::Integrations::*` classes - # through the {Timber::Config} object. Timber couples configuration with the class - # responsible for implementing it. This provides for a tighter design, but also - # requires the user to understand and access the various classes. This module aims - # to provide a simple ruby-like configuration interface for internal Timber classes. - # - # For example: - # - # config = Timber::Config.instance - # config.integrations.active_record.silence = true - module Integrations - extend self - - # Convenience method for accessing the {Timber::Integrations::ActionController} class - # specific configuration. - # - # @example - # config = Timber::Config.instance - # config.integrations.action_controller.silence = true - def action_controller - Timber::Integrations::ActionController - end - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/config/action_view.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/config/action_view.rb deleted file mode 100644 index 78a08f676..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/config/action_view.rb +++ /dev/null @@ -1,29 +0,0 @@ -require "timber-rails/action_view" - -module Timber - class Config - # Convenience module for accessing the various `Timber::Integrations::*` classes - # through the {Timber::Config} object. Timber couples configuration with the class - # responsible for implementing it. This provides for a tighter design, but also - # requires the user to understand and access the various classes. This module aims - # to provide a simple ruby-like configuration interface for internal Timber classes. - # - # For example: - # - # config = Timber::Config.instance - # config.integrations.active_record.silence = true - module Integrations - extend self - - # Convenience method for accessing the {Timber::Integrations::ActionView} class - # specific configuration. - # - # @example - # config = Timber::Config.instance - # config.integrations.action_view.silence = true - def action_view - Timber::Integrations::ActionView - end - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/config/active_record.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/config/active_record.rb deleted file mode 100644 index 95b6dac73..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/config/active_record.rb +++ /dev/null @@ -1,29 +0,0 @@ -require "timber-rails/active_record" - -module Timber - class Config - # Convenience module for accessing the various `Timber::Integrations::*` classes - # through the {Timber::Config} object. Timber couples configuration with the class - # responsible for implementing it. This provides for a tighter design, but also - # requires the user to understand and access the various classes. This module aims - # to provide a simple ruby-like configuration interface for internal Timber classes. - # - # For example: - # - # config = Timber::Config.instance - # config.integrations.active_record.silence = true - module Integrations - extend self - - # Convenience method for accessing the {Timber::Integrations::ActiveRecord} class - # specific configuration. - # - # @example - # config = Timber::Config.instance - # config.integrations.active_record.silence = true - def active_record - Timber::Integrations::ActiveRecord - end - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/error_event.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/error_event.rb deleted file mode 100644 index 36a58de6b..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/error_event.rb +++ /dev/null @@ -1,61 +0,0 @@ -begin - # Rails 3.2 requires you to require all of Rails before requiring - # the exception wrapper. - require "action_dispatch/middleware/exception_wrapper" -rescue Exception -end - -require "timber/events/error" -require "timber-rack/middleware" -require "timber/util" - -module Timber - module Integrations - module Rails - # A Rack middleware that is reponsible for capturing exception and error events - # {Timber::Events::Error}. - class ErrorEvent < Timber::Integrations::Rack::Middleware - # We determine this when the app loads to avoid the overhead on a per request basis. - EXCEPTION_WRAPPER_TAKES_CLEANER = defined?(::ActionDispatch::ExceptionWrapper) && - !::ActionDispatch::ExceptionWrapper.instance_methods.include?(:env) - - def call(env) - begin - status, headers, body = @app.call(env) - rescue Exception => exception - Config.instance.logger.fatal do - backtrace = extract_backtrace(env, exception) - Events::Error.new( - name: exception.class.name, - error_message: exception.message, - backtrace: backtrace - ) - end - - raise exception - end - end - - private - # Rails provides a backtrace cleaner, so we use it here. - def extract_backtrace(env, exception) - if defined?(::ActionDispatch::ExceptionWrapper) - wrapper = if EXCEPTION_WRAPPER_TAKES_CLEANER - request = Util::Request.new(env) - backtrace_cleaner = request.get_header("action_dispatch.backtrace_cleaner") - ::ActionDispatch::ExceptionWrapper.new(backtrace_cleaner, exception) - else - ::ActionDispatch::ExceptionWrapper.new(env, exception) - end - - trace = wrapper.application_trace - trace = wrapper.framework_trace if trace.empty? - trace - else - exception.backtrace - end - end - end - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/logger.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/logger.rb deleted file mode 100644 index f940ff04e..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/logger.rb +++ /dev/null @@ -1,20 +0,0 @@ -module Timber - # The Timber Logger behaves exactly like the standard Ruby `::Logger`, except that it supports a - # transparent API for logging structured data and events. - # - # @example Basic logging - # logger.info "Payment rejected for customer #{customer_id}" - # - # @example Logging an event - # logger.info "Payment rejected", payment_rejected: {customer_id: customer_id, amount: 100} - class Logger < ::Logger - include ::ActiveSupport::LoggerThreadSafeLevel if defined?(::ActiveSupport::LoggerThreadSafeLevel) - - if defined?(::ActiveSupport::LoggerSilence) - include ::ActiveSupport::LoggerSilence - elsif defined?(::LoggerSilence) - include ::LoggerSilence - end - end -end - diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides.rb deleted file mode 100644 index 7ba034efc..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides.rb +++ /dev/null @@ -1,12 +0,0 @@ -# The order is relevant -require "timber-rails/overrides/active_support_3_tagged_logging" -require "timber-rails/overrides/active_support_tagged_logging" -require "timber-rails/overrides/active_support_buffered_logger" -require "timber-rails/overrides/lograge" -require "timber-rails/overrides/rails_stdout_logging" - -module Timber - # @private - module Overrides - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides/active_support_3_tagged_logging.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides/active_support_3_tagged_logging.rb deleted file mode 100644 index f2a87f08f..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides/active_support_3_tagged_logging.rb +++ /dev/null @@ -1,111 +0,0 @@ -# Please note, this patch is merely an upgrade, backporting improved tagged logging code -# from newer versions of Rails: -# https://github.com/rails/rails/blob/5-1-stable/activesupport/lib/active_support/tagged_logging.rb -# The behavior of tagged logging will not change in any way. -# -# This patch is specifically for Rails 3. The legacy approach to wrapping the logger in -# ActiveSupport::TaggedLogging is rather poor, hence the reason it was changed entirely -# for Rails 4 and 5. The problem is that ActiveSupport::TaggedLogging is a wrapping -# class that entirely redefines the public API for the logger. As a result, any deviations -# from this API in the logger are not exposed (such as accepting event data as a second argument). -# This is assuming, so we're fixing it here. - -begin - require "active_support/tagged_logging" - - # Instead of patching the class we're pulling the code from Rails master. This brings in - # a number of improvements while also addressing the issue above. - if ActiveSupport::TaggedLogging.instance_of?(Class) - ActiveSupport.send(:remove_const, :TaggedLogging) - - require "active_support/core_ext/module/delegation" - require "active_support/core_ext/object/blank" - require "logger" - - module ActiveSupport - # Wraps any standard Logger object to provide tagging capabilities. - # - # logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT)) - # logger.tagged('BCX') { logger.info 'Stuff' } # Logs "[BCX] Stuff" - # logger.tagged('BCX', "Jason") { logger.info 'Stuff' } # Logs "[BCX] [Jason] Stuff" - # logger.tagged('BCX') { logger.tagged('Jason') { logger.info 'Stuff' } } # Logs "[BCX] [Jason] Stuff" - # - # This is used by the default Rails.logger as configured by Railties to make - # it easy to stamp log lines with subdomains, request ids, and anything else - # to aid debugging of multi-user production applications. - module TaggedLogging - module Formatter # :nodoc: - # This method is invoked when a log event occurs. - def call(severity, timestamp, progname, msg) - super(severity, timestamp, progname, "#{tags_text}#{msg}") - end - - def tagged(*tags) - new_tags = push_tags(*tags) - yield self - ensure - pop_tags(new_tags.size) - end - - def push_tags(*tags) - tags.flatten.reject(&:blank?).tap do |new_tags| - current_tags.concat new_tags - end - end - - def pop_tags(size = 1) - current_tags.pop size - end - - def clear_tags! - current_tags.clear - end - - def current_tags - # We use our object ID here to avoid conflicting with other instances - thread_key = @thread_key ||= "activesupport_tagged_logging_tags:#{object_id}".freeze - Thread.current[thread_key] ||= [] - end - - def tags_text - tags = current_tags - if tags.any? - tags.collect { |tag| "[#{tag}] " }.join - end - end - end - - # Simple formatter which only displays the message. - class SimpleFormatter < ::Logger::Formatter - # This method is invoked when a log event occurs - def call(severity, timestamp, progname, msg) - "#{String === msg ? msg : msg.inspect}\n" - end - end - - def self.new(logger) - if logger.respond_to?(:formatter=) && logger.respond_to?(:formatter) - # Ensure we set a default formatter so we aren't extending nil! - logger.formatter ||= SimpleFormatter.new - logger.formatter.extend Formatter - end - - logger.extend(self) - end - - delegate :push_tags, :pop_tags, :clear_tags!, to: :formatter - - def tagged(*tags) - formatter.tagged(*tags) { yield self } - end - - def flush - clear_tags! - super if defined?(super) - end - end - end - end - -rescue Exception -end \ No newline at end of file diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides/active_support_buffered_logger.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides/active_support_buffered_logger.rb deleted file mode 100644 index b5e9f3210..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides/active_support_buffered_logger.rb +++ /dev/null @@ -1,22 +0,0 @@ -# This adds a #formatter and #formatter= method to the legacy ActiveSupport::BufferedLogger -# class. This bug was never resolved due to it being phased out past Rails >= 4. - -begin - require "active_support/buffered_logger" - - class ActiveSupport::BufferedLogger - def formatter - if @log.respond_to?(:formatter) - @log.formatter - end - end - - def formatter=(value) - if @log.respond_to?(:formatter=) - @log.formatter = value - end - end - end - -rescue Exception -end \ No newline at end of file diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides/active_support_tagged_logging.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides/active_support_tagged_logging.rb deleted file mode 100644 index 69a7ccbab..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides/active_support_tagged_logging.rb +++ /dev/null @@ -1,66 +0,0 @@ -# This is an override instead of an integration because without this Timber would not -# work properly if ActiveSupport::TaggedLogging is used. -# -# This is called after 'active_support_3_tagged_logging' where the constant is loaded and -# replaced. I want to make sure we don't attempt to load it again undoing the patches -# applied there. -if defined?(ActiveSupport::TaggedLogging) - module Timber - module Overrides - # @private - module ActiveSupportTaggedLogging - # @private - module FormatterMethods - def self.included(mod) - mod.module_eval do - alias_method :_timber_original_push_tags, :push_tags - alias_method :_timber_original_pop_tags, :pop_tags - - def call(severity, timestamp, progname, msg) - if is_a?(Timber::Logger::Formatter) - # Don't convert the message into a string - super(severity, timestamp, progname, msg) - else - super(severity, timestamp, progname, "#{tags_text}#{msg}") - end - end - end - end - end - - # @private - module LoggerMethods - def self.included(klass) - klass.class_eval do - def add(severity, message = nil, progname = nil, &block) - if message.nil? - if block_given? - message = block.call - else - message = progname - progname = nil #No instance variable for this like Logger - end - end - if @logger.is_a?(Timber::Logger) - @logger.add(severity, message, progname) - else - @logger.add(severity, "#{tags_text}#{message}", progname) - end - end - end - end - end - - if defined?(::ActiveSupport::TaggedLogging::Formatter) - if !::ActiveSupport::TaggedLogging::Formatter.include?(FormatterMethods) - ::ActiveSupport::TaggedLogging::Formatter.send(:include, FormatterMethods) - end - else - if !::ActiveSupport::TaggedLogging.include?(LoggerMethods) - ::ActiveSupport::TaggedLogging.send(:include, LoggerMethods) - end - end - end - end - end -end \ No newline at end of file diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides/lograge.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides/lograge.rb deleted file mode 100644 index 8d47ce8ba..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides/lograge.rb +++ /dev/null @@ -1,18 +0,0 @@ -# Timber and lograge are not compatible installed together. Using lograge -# with the Timber.io *service* is perfectly fine, but not with the Timber *gem*. -# -# Timber does ship with a {Timber::Config#logrageify!} option that configures -# Timber to behave similarly to Lograge (silencing various logs). Check out -# the aforementioned method or the README for info. -begin - require "lograge" - - module Lograge - module_function - - def setup(app) - return true - end - end -rescue Exception -end \ No newline at end of file diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides/rails_stdout_logging.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides/rails_stdout_logging.rb deleted file mode 100644 index 5a42cc912..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/overrides/rails_stdout_logging.rb +++ /dev/null @@ -1,21 +0,0 @@ -# See https://github.com/heroku/rails_stdout_logging -# I have no idea why this library was created, but most Heroku / Rails apps use it. -# This library completely obliterates any logger configuration you set. -# So this patch fixes that. - -begin - require "rails_stdout_logging" - - module RailsStdoutLogging - class Rails2 < Rails - def self.set_logger - end - end - - class Rails3 < Rails - def self.set_logger(config) - end - end - end -rescue Exception -end \ No newline at end of file diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/rack_logger.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/rack_logger.rb deleted file mode 100644 index d435cb92c..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/rack_logger.rb +++ /dev/null @@ -1,58 +0,0 @@ -module Timber - module Integrations - module Rails - # Disables the default rail's rack logging. Note, we cannot simply uninstall this rack - # middleware because rails couples this with ActiveSupport instrumentation. As such, - # we simply disable the logger and let our Rack middleware handle the logging. - # - # See: https://github.com/rails/rails/blob/80e66cc4d90bf8c15d1a5f6e3152e90147f00772/railties/lib/rails/rack/logger.rb#L34 - # - # @private - class RackLogger < Integrator - - # @private - module InstanceMethods - LOGGER = ::Logger.new(nil) - - def self.included(klass) - klass.class_eval do - private - if ::Rails::VERSION::MAJOR == 3 - # Rails 3.2 calls Rails.logger directly in call_app, so we - # will just replace it with a version that doesn't - def call_app(_, env) - # Put some space between requests in development logs. - if ::Rails.env.development? - ::Rails.logger.info '' - ::Rails.logger.info '' - end - @app.call(env) - ensure - ActiveSupport::LogSubscriber.flush_all! - end - end - - # Rails > 3.2 uses a logger method. Muting logs is accomplished by - # passing a dummy logger instance with a nil log device. - def logger - LOGGER - end - end - end - end - - def initialize - require "rails/rack/logger" - rescue LoadError => e - raise RequirementNotMetError.new(e.message) - end - - def integrate! - return true if ::Rails::Rack::Logger.include?(InstanceMethods) - - ::Rails::Rack::Logger.send(:include, InstanceMethods) - end - end - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/railtie.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/railtie.rb deleted file mode 100644 index 0c029e3f5..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/railtie.rb +++ /dev/null @@ -1,27 +0,0 @@ -module Timber - module Frameworks - # Module for Rails specific code, such as the Railtie and any methods that assist - # with Rails setup. - module Rails - # Installs Timber into your Rails app automatically. - class Railtie < ::Rails::Railtie - config.timber = Config.instance - - config.before_initialize do - Timber::Config.instance.logger = Proc.new { ::Rails.logger } - end - - # Must be loaded after initializers so that we respect any Timber configuration set - initializer(:timber, before: :build_middleware_stack, after: :load_config_initializers) do - Integrations::Rails.integrate! - - # Install the Rack middlewares so that we capture structured data instead of - # raw text logs. - Integrations::Rails.middlewares.collect do |middleware_class| - config.app_middleware.use middleware_class - end - end - end - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/session_context.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/session_context.rb deleted file mode 100644 index 4d776f27a..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/session_context.rb +++ /dev/null @@ -1,37 +0,0 @@ -require "timber/contexts/session" -require "timber-rack/middleware" - -module Timber - module Integrations - module Rails - # A Rack middleware that is responsible for adding the Session context - # {Timber::Contexts::Session}. - class SessionContext < Timber::Integrations::Rack::Middleware - def call(env) - id = get_session_id(env) - if id - context = Contexts::Session.new(id: id) - CurrentContext.add(context.to_hash) - end - @app.call(env) - end - - private - def get_session_id(env) - session_key = ::Rails.application.config.session_options[:key] - request = ::ActionDispatch::Request.new(env) - extract_from_cookie(request, session_key) - rescue Exception => e - nil - end - - def extract_from_cookie(request, session_key) - data = request - .cookie_jar - .signed_or_encrypted[session_key] || {} - data["session_id"] - end - end - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/version.rb b/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/version.rb deleted file mode 100644 index c7ba4a56b..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/lib/timber-rails/version.rb +++ /dev/null @@ -1,7 +0,0 @@ -module Timber - module Integrations - module Rails - VERSION = "1.0.2" - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/spec/README.md b/vendor/cache/timber-ruby-rails-250326b0926d/spec/README.md deleted file mode 100644 index 04c5f6a49..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/spec/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Testing - -To get started: - -```shell -bundle install -``` - -Be sure to install specific Gemfile dependencies: - -``` -BUNDLE_GEMFILE=gemfiles/rails-4.2.gemfile bundle install -``` - -You can run tests like this: - -```shell -BUNDLE_GEMFILE=gemfiles/rails-4.2.gemfile bundle exec rspec -``` diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/spec/spec_helper.rb b/vendor/cache/timber-ruby-rails-250326b0926d/spec/spec_helper.rb deleted file mode 100644 index 354cdcc17..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/spec/spec_helper.rb +++ /dev/null @@ -1,39 +0,0 @@ -# Base -# require 'rubygems' -require 'bundler/setup' - -# Testing -require 'rspec' -require 'rspec/its' -require 'rspec/mocks' - -# Support files, order is relevant -require File.join(File.dirname(__FILE__), 'support', 'socket_hostname') -require File.join(File.dirname(__FILE__), 'support', 'timecop') -require File.join(File.dirname(__FILE__), 'support', 'webmock') -require File.join(File.dirname(__FILE__), 'support', 'timber') - -# Load framework files after we've setup everything -if !ENV["RAILS_23"] - require File.join(File.dirname(__FILE__), 'support', 'rails') - require File.join(File.dirname(__FILE__), 'support', 'action_controller') - require File.join(File.dirname(__FILE__), 'support', 'active_record') -end - -RSpec::Support::ObjectFormatter.default_instance.max_formatted_output_length = 5_000 - -RSpec.configure do |config| - config.color = true - config.order = :random - config.warnings = false - - # Enable flags like --only-failures and --next-failure - config.example_status_persistence_file_path = ".rspec_status" - - # Disable RSpec exposing methods globally on `Module` and `main` - config.disable_monkey_patching! - - config.expect_with :rspec do |c| - c.syntax = :expect - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/action_controller.rb b/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/action_controller.rb deleted file mode 100644 index b8c7c0dda..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/action_controller.rb +++ /dev/null @@ -1,2 +0,0 @@ -require "action_controller" -::ActionController::Base.prepend_view_path("#{File.dirname(__FILE__)}/rails/templates") diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/active_record.rb b/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/active_record.rb deleted file mode 100644 index 8e49544a2..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/active_record.rb +++ /dev/null @@ -1,26 +0,0 @@ -require 'active_record' -ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:" -ActiveRecord::Schema.define do - self.verbose = false - - create_table :organizations, :force => true do |t| - t.string :name - - t.timestamps :null => false - end - - create_table :users, :force => true do |t| - t.integer :age - t.string :email - t.string :first_name - - t.timestamps :null => false - end - -end - -class Organization < ::ActiveRecord::Base -end - -class User < ::ActiveRecord::Base -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/rails.rb b/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/rails.rb deleted file mode 100644 index 4bafd3c0f..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/rails.rb +++ /dev/null @@ -1,77 +0,0 @@ -require "rails" -require "timber-rails/railtie" - -# Defualt the rails logger to nothing, each test shoould be -# responsible for setting up the logger -logger = Timber::Logger.new(nil) # change to STDOUT to see rails logs -Rails.logger = logger - -class RailsApp < Rails::Application - if ::Rails.version =~ /^3\./ - config.secret_token = '1e05af2b349457936a41427e63450937' - else - config.secret_key_base = '1e05af2b349457936a41427e63450937' - end - - # This ensures our tests fail, otherwise exceptions get swallowed by ActionDispatch::DebugExceptions - config.action_dispatch.show_exceptions = false - config.active_support.deprecation = :stderr - config.eager_load = false -end - -RailsApp.initialize! - -module Support - module Rails - def dispatch_rails_request(path, additional_env_options = {}) - application = ::Rails.application - env = application.respond_to?(:env_config) ? application.env_config.clone : application.env_defaults.clone - env["rack.request.cookie_hash"] = {}.with_indifferent_access - env["CONTENT_LENGTH"] = 100 - env["REMOTE_ADDR"] = "123.456.789.10" - env["HTTP_X_REQUEST_ID"] = "unique-request-id-1234" - env["action_dispatch.request_id"] = env["HTTP_X_REQUEST_ID"] - env = env.merge(additional_env_options) - ::Rack::MockRequest.new(application).get(path, env) - end - - def with_rails_logger(logger) - old_logger = ::Rails.logger - - # We have to set these again because rails set's these after initialization. - # Since we've already booted the rails app we need to update them all as we - # change the logger. - # - # You can see here that they use simple class attribute, hence the reason we need - # to update all of them: https://github.com/rails/rails/blob/700ec897f97c60016ad748236bf3a49ef15a20de/actionview/lib/action_view/base.rb#L157 - ::ActionCable::Server::Base.logger = logger if defined?(::ActionCable::Server::Base) && ::ActionCable::Server::Base.respond_to?(:logger=) - ::ActionController::Base.logger = logger if defined?(::ActionController::Base) && ::ActionController::Base.respond_to?(:logger=) - ::ActionMailer::Base.logger = logger if defined?(::ActionMailer::Base) && ::ActionMailer::Base.respond_to?(:logger=) - ::ActionView::Base.logger = logger if defined?(::ActionView::Base) && ::ActionView::Base.respond_to?(:logger=) - ::ActiveRecord::Base.logger = logger if defined?(::ActiveRecord::Base) && ::ActiveRecord::Base.respond_to?(:logger=) - ::Rails.logger = logger - - yield - - ::Rails.logger = old_logger - end - end -end - -# This is necessary as tests use Timber::Config.send(:new) to create -# an instance of the Config class instead of the Timber::Config -# singleton. -module Timber - class Config - def logrageify! - integrations.action_controller.silence = true - integrations.action_view.silence = true - integrations.active_record.silence = true - integrations.rack.http_events.collapse_into_single_event = true - end - end -end - -RSpec.configure do |config| - config.include Support::Rails -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/rails/templates/_partial.html b/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/rails/templates/_partial.html deleted file mode 100644 index e4e340572..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/rails/templates/_partial.html +++ /dev/null @@ -1 +0,0 @@ -I am a partial diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/rails/templates/template.html b/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/rails/templates/template.html deleted file mode 100644 index 9258d279e..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/rails/templates/template.html +++ /dev/null @@ -1 +0,0 @@ -I am a template diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/socket_hostname.rb b/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/socket_hostname.rb deleted file mode 100644 index 730c21fa4..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/socket_hostname.rb +++ /dev/null @@ -1,12 +0,0 @@ -require "socket" - -# Stub out the hostname for tests only. This can't use a normal stub in the -# test life cycle since our test rails app is loaded once upon initialization. -# In other words, the rails app gets loaded with the server context inserted -# before any tests are run. - -class ::Socket - def self.gethostname - "computer-name.domain.com" - end -end \ No newline at end of file diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/timber.rb b/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/timber.rb deleted file mode 100644 index 33080027f..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/timber.rb +++ /dev/null @@ -1,6 +0,0 @@ -require "timber-rails" -require "timber" -require "timber/config" - -config = Timber::Config.instance -config.environment = "production" diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/timecop.rb b/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/timecop.rb deleted file mode 100644 index 3586b3d6f..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/timecop.rb +++ /dev/null @@ -1,3 +0,0 @@ -require 'timecop' - -Timecop.safe_mode = true diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/webmock.rb b/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/webmock.rb deleted file mode 100644 index 40c8b8eab..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/spec/support/webmock.rb +++ /dev/null @@ -1,3 +0,0 @@ -require 'webmock/rspec' - -WebMock.disable_net_connect! diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/action_controller/log_subscriber_spec.rb b/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/action_controller/log_subscriber_spec.rb deleted file mode 100644 index 1ac3ea550..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/action_controller/log_subscriber_spec.rb +++ /dev/null @@ -1,53 +0,0 @@ -require "spec_helper" - -RSpec.describe Timber::Integrations::ActionController::LogSubscriber do - let(:time) { Time.utc(2016, 9, 1, 12, 0, 0) } - let(:io) { StringIO.new } - let(:logger) do - logger = Timber::Logger.new(io) - logger.level = ::Logger::INFO - logger - end - - describe "#insert!" do - around(:each) do |example| - class LogSubscriberController < ActionController::Base - layout nil - - def index - render json: {} - end - - def method_for_action(action_name) - action_name - end - end - - ::RailsApp.routes.draw do - get 'log_subscriber' => 'log_subscriber#index' - end - - with_rails_logger(logger) do - Timecop.freeze(time) { example.run } - end - - Object.send(:remove_const, :LogSubscriberController) - end - - it "should log a controller_call event once" do - # Rails uses this to calculate the view runtime below - allow(Benchmark).to receive(:ms).and_return(1).and_yield - - dispatch_rails_request("/log_subscriber?query=value") - lines = clean_lines(io.string.split("\n")) - expect(lines.length).to eq(3) - expect(lines[1]).to include("Processing by LogSubscriberController#index as HTML") - expect(lines[1]).to include('"controller_called":{"controller":"LogSubscriberController","action":"index","params_json"') - end - - # Remove blank lines since Rails does this to space out requests in the logs - def clean_lines(lines) - lines.select { |line| !line.start_with?(" @metadat") } - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/action_dispatch/debug_exceptions_spec.rb b/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/action_dispatch/debug_exceptions_spec.rb deleted file mode 100644 index 95af57dde..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/action_dispatch/debug_exceptions_spec.rb +++ /dev/null @@ -1,52 +0,0 @@ -require "spec_helper" - -RSpec.describe Timber::Integrations::ActionDispatch::DebugExceptions do - let(:time) { Time.utc(2016, 9, 1, 12, 0, 0) } - let(:io) { StringIO.new } - let(:logger) do - logger = Timber::Logger.new(io) - logger.level = ::Logger::DEBUG - logger - end - - describe "#insert!" do - around(:each) do |example| - class ExceptionController < ActionController::Base - layout nil - - def index - raise "boom" - end - - def method_for_action(action_name) - action_name - end - end - - ::RailsApp.routes.draw do - get 'exception' => 'exception#index' - end - - with_rails_logger(logger) do - Timecop.freeze(time) { example.run } - end - - Object.send(:remove_const, :ExceptionController) - end - - it "should log an exception event once" do - expect { dispatch_rails_request("/exception") }.to raise_error(RuntimeError) - - lines = clean_lines(io.string.split("\n")) - expect(lines.length).to eq(3) - expect(lines[2]).to include('RuntimeError (boom)') - expect(lines[2]).to include('fatal') - expect(lines[2]).to include("\"error\":{\"name\":\"RuntimeError\",\"message\":\"boom\",\"backtrace_json\":\"[") - end - - # Remove blank lines since Rails does this to space out requests in the logs - def clean_lines(lines) - lines.select { |line| !line.start_with?(" @metadat") } - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/action_view/log_subscriber_spec.rb b/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/action_view/log_subscriber_spec.rb deleted file mode 100644 index 2dc6e4c2e..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/action_view/log_subscriber_spec.rb +++ /dev/null @@ -1,113 +0,0 @@ -require "spec_helper" - -RSpec.describe Timber::Integrations::ActionView::LogSubscriber do - let(:time) { Time.utc(2016, 9, 1, 12, 0, 0) } - let(:io) { StringIO.new } - let(:logger) do - logger = Timber::Logger.new(io) - logger.level = ::Logger::WARN - logger - end - - describe "insert!" do - around(:each) do |example| - class ActionViewLogSubscriberController < ActionController::Base - layout nil - - def index - render template: "template" - end - - def method_for_action(action_name) - action_name - end - end - - ::RailsApp.routes.draw do - get 'action_view_log_subscriber' => 'action_view_log_subscriber#index' - end - - with_rails_logger(logger) do - Timecop.freeze(time) { example.run } - end - - Object.send(:remove_const, :ActionViewLogSubscriberController) - end - - describe "#render_template" do - it "should not log if the level is not sufficient" do - dispatch_rails_request("/action_view_log_subscriber") - expect(io.string).to eq("") - end - - context "with an info level" do - around(:each) do |example| - old_level = logger.level - logger.level = ::Logger::INFO - example.run - logger.level = old_level - end - - it "should log a template render event once" do - dispatch_rails_request("/action_view_log_subscriber") - lines = clean_lines(io.string.split("\n")) - expect(lines[2].strip).to match(/Rendered spec\/support\/rails\/templates\/template.html \(\d+\.\d+ms\)/) - expect(lines[2]).to include("\"template_rendered\":{\"name\":\"spec/support/rails/templates/template.html\"") - end - end - end - end - - if defined?(described_class::TimberLogSubscriber) - describe described_class::TimberLogSubscriber do - let(:event) do - event = Struct.new(:duration, :payload) - event.new(2.0, identifier: "path/to/template.html") - end - - around(:each) do |example| - old_level = logger.level - logger.level = ::Logger::INFO - example.run - logger.level = old_level - end - - describe "#render_template" do - it "should render the collection" do - log_subscriber = described_class.new - allow(log_subscriber).to receive(:logger).and_return(logger) - log_subscriber.render_template(event) - expect(io.string.strip).to include("Rendered path/to/template.html (2.0ms)") - end - end - - describe "#render_partial" do - it "should render the collection" do - log_subscriber = described_class.new - allow(log_subscriber).to receive(:logger).and_return(logger) - log_subscriber.render_partial(event) - expect(io.string.strip).to include("Rendered path/to/template.html (2.0ms)") - end - end - - describe "#render_collection" do - it "should render the collection" do - log_subscriber = described_class.new - allow(log_subscriber).to receive(:logger).and_return(logger) - log_subscriber.render_collection(event) - - if log_subscriber.respond_to?(:render_count, true) - expect(io.string.strip).to include("Rendered collection of path/to/template.html [ times] (2.0ms)") - else - expect(io.string.strip).to include("Rendered path/to/template.html (2.0ms)") - end - end - end - end - end - - # Remove blank lines since Rails does this to space out requests in the logs - def clean_lines(lines) - lines.select { |line| !line.start_with?(" @metadata") } - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/active_record/log_subscriber_spec.rb b/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/active_record/log_subscriber_spec.rb deleted file mode 100644 index 2545964da..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/active_record/log_subscriber_spec.rb +++ /dev/null @@ -1,44 +0,0 @@ -require "spec_helper" - -RSpec.describe Timber::Integrations::ActiveRecord::LogSubscriber do - let(:time) { Time.utc(2016, 9, 1, 12, 0, 0) } - let(:io) { StringIO.new } - let(:logger) do - logger = Timber::Logger.new(io) - logger.level = ::Logger::INFO - logger - end - - describe "#insert!" do - around(:each) do |example| - with_rails_logger(logger) do - Timecop.freeze(time) { example.run } - end - end - - it "should not log if the level is not sufficient" do - ActiveRecord::Base.connection.execute("select * from users") - expect(io.string).to eq("") - end - - context "with an info level" do - around(:each) do |example| - old_level = logger.level - logger.level = ::Logger::DEBUG - example.run - logger.level = old_level - end - - it "should log the sql query" do - ActiveRecord::Base.connection.execute("select * from users") - # Rails 4.X adds random spaces :/ - string = io.string.gsub(" ORDER BY", " ORDER BY") - string = string.gsub(" ORDER BY", " ORDER BY") - expect(string).to include("select * from users") - expect(string).to include("duration_ms") - expect(string).to include("\"level\":\"debug\"") - expect(string).to include("\"sql_query_executed\":") - end - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/config_spec.rb b/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/config_spec.rb deleted file mode 100644 index 42af0e69c..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/config_spec.rb +++ /dev/null @@ -1,30 +0,0 @@ -require "singleton" -require "spec_helper" - -RSpec.describe Timber::Config, :rails_23 => true do - let(:config) { Timber::Config.send(:new) } - - describe ".logrageify!" do - it "should logrageify!" do - expect(Timber::Integrations::ActionController.silence?).to eq(false) - expect(Timber::Integrations::ActionView.silence?).to eq(false) - expect(Timber::Integrations::ActiveRecord.silence?).to eq(false) - expect(Timber::Integrations::Rack::HTTPEvents.collapse_into_single_event?).to eq(false) - - - config.logrageify! - - expect(Timber::Integrations::ActionController.silence?).to eq(true) - expect(Timber::Integrations::ActionView.silence?).to eq(true) - expect(Timber::Integrations::ActiveRecord.silence?).to eq(true) - expect(Timber::Integrations::Rack::HTTPEvents.collapse_into_single_event?).to eq(true) - - - # Reset - Timber::Integrations::ActionController.silence = false - Timber::Integrations::ActionView.silence = false - Timber::Integrations::ActiveRecord.silence = false - Timber::Integrations::Rack::HTTPEvents.collapse_into_single_event = false - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/error_event_spec.rb b/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/error_event_spec.rb deleted file mode 100644 index f327d1451..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/error_event_spec.rb +++ /dev/null @@ -1,62 +0,0 @@ -require "spec_helper" - -RSpec.describe Timber::Integrations::Rails::ErrorEvent do - let(:time) { Time.utc(2016, 9, 1, 12, 0, 0) } - let(:io) { StringIO.new } - let(:logger) do - logger = Timber::Logger.new(io) - logger.level = ::Logger::INFO - logger - end - - around(:each) do |example| - class RackErrorController < ActionController::Base - layout nil - - hook_name = respond_to?(:before_action) ? "before_action" : "before_filter" - send(hook_name) do - raise "Boom!" - end - - def index - Thread.current[:_timber_context_snapshot] = Timber::CurrentContext.instance.snapshot - render json: {} - end - - def method_for_action(action_name) - action_name - end - end - - ::RailsApp.routes.draw do - get '/rack_error' => 'rack_error#index' - end - - with_rails_logger(logger) do - Timecop.freeze(time) { example.run } - end - - Object.send(:remove_const, :RackErrorController) - end - - describe "#process" do - it "should log the exception" do - allow(Benchmark).to receive(:ms).and_return(1).and_yield - - expect { dispatch_rails_request("/rack_error") }.to raise_error(RuntimeError) - - lines = clean_lines(io.string.split("\n")) - - expect(lines.length).to eq(3) - - expect(lines[0]).to include("Started GET \\\"/rack_error\\\"") - expect(lines[1]).to include("Processing by RackErrorController#index as HTML") - expect(lines[2]).to include("RuntimeError (Boom!)") - end - end - - # Remove blank lines since Rails does this to space out requests in the logs - def clean_lines(lines) - lines.select { |line| !line.start_with?(" @metadat") } - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/http_context_spec.rb b/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/http_context_spec.rb deleted file mode 100644 index 170b8287e..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/http_context_spec.rb +++ /dev/null @@ -1,58 +0,0 @@ -require "spec_helper" - -RSpec.describe Timber::Integrations::Rack::HTTPContext do - let(:time) { Time.utc(2016, 9, 1, 12, 0, 0) } - let(:io) { StringIO.new } - let(:logger) do - logger = Timber::Logger.new(io) - logger.level = ::Logger::INFO - logger - end - - around(:each) do |example| - class RackHttpController < ActionController::Base - layout nil - - def index - Thread.current[:_timber_context_snapshot] = Timber::CurrentContext.instance.snapshot - render json: {} - end - - def method_for_action(action_name) - action_name - end - end - - ::RailsApp.routes.draw do - get '/rack_http' => 'rack_http#index' - end - - with_rails_logger(logger) do - Timecop.freeze(time) { example.run } - end - - Object.send(:remove_const, :RackHttpController) - end - - describe "#process" do - it "should set the context" do - allow(Benchmark).to receive(:ms).and_return(1).and_yield - - dispatch_rails_request("/rack_http") - http_context = Thread.current[:_timber_context_snapshot][:http] - - expect(http_context).to eq({:host => "example.org", :method=>"GET", :path=>"/rack_http", :remote_addr=>"123.456.789.10", :request_id=>"unique-request-id-1234"}) - - lines = clean_lines(io.string.split("\n")) - expect(lines.length).to eq(3) - lines.each do |line| - expect(line).to include("\"http\":{\"host\":\"example.org\",\"method\":\"GET\",\"path\":\"/rack_http\",\"remote_addr\":\"123.456.789.10\",\"request_id\":\"unique-request-id-1234\"}") - end - end - end - - # Remove blank lines since Rails does this to space out requests in the logs - def clean_lines(lines) - lines.select { |line| !line.start_with?(" @metadat") } - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/http_events_spec.rb b/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/http_events_spec.rb deleted file mode 100644 index b63b00fb2..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/http_events_spec.rb +++ /dev/null @@ -1,99 +0,0 @@ -require "spec_helper" - -RSpec.describe Timber::Integrations::Rack::HTTPEvents do - let(:time) { Time.utc(2016, 9, 1, 12, 0, 0) } - let(:io) { StringIO.new } - let(:logger) do - logger = Timber::Logger.new(io) - logger.level = ::Logger::INFO - logger - end - - around(:each) do |example| - class RackHttpController < ActionController::Base - layout nil - - def index - Thread.current[:_timber_context_snapshot] = Timber::CurrentContext.instance.snapshot - render json: {} - end - - def method_for_action(action_name) - action_name - end - end - - ::RailsApp.routes.draw do - get '/rack_http' => 'rack_http#index' - end - - with_rails_logger(logger) do - Timecop.freeze(time) { example.run } - end - - Object.send(:remove_const, :RackHttpController) - end - - describe "#process" do - it "should log the events" do - allow(Benchmark).to receive(:ms).and_return(1).and_yield - - dispatch_rails_request("/rack_http") - - lines = clean_lines(io.string.split("\n")) - expect(lines.length).to eq(3) - - expect(lines[0]).to include("Started GET \\\"/rack_http\\\"") - expect(lines[1]).to include("Processing by RackHttpController#index as HTML") - expect(lines[2]).to include("Completed 200 OK in 0.0ms") - end - - context "with the route silenced" do - around(:each) do |example| - described_class.silence_request = lambda do |rack_env, rack_request| - rack_request.path == "/rack_http" - end - - example.run - - described_class.silence_request = nil - end - - it "should silence the logs" do - allow(Benchmark).to receive(:ms).and_return(1).and_yield - - dispatch_rails_request("/rack_http") - - lines = clean_lines(io.string.split("\n")) - expect(lines.length).to eq(0) - end - end - - context "collapsed into a single event" do - around(:each) do |example| - described_class.collapse_into_single_event = true - - example.run - - described_class.collapse_into_single_event = nil - end - - it "should silence the logs" do - allow(Benchmark).to receive(:ms).and_return(1).and_yield - - dispatch_rails_request("/rack_http") - - lines = clean_lines(io.string.split("\n")) - expect(lines.length).to eq(2) - - expect(lines[0]).to include("Processing by RackHttpController#index as HTML") - expect(lines[1]).to include("GET /rack_http completed with 200 OK in 0.0ms") - end - end - end - - # Remove blank lines since Rails does this to space out requests in the logs - def clean_lines(lines) - lines.select { |line| !line.start_with?(" @metadat") } - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/logger_spec.rb b/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/logger_spec.rb deleted file mode 100644 index dfd6bf64e..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/logger_spec.rb +++ /dev/null @@ -1,16 +0,0 @@ -require "spec_helper" - -RSpec.describe Timber::Logger, :rails_23 => true do - describe "#silence" do - let(:io) { StringIO.new } - let(:logger) { Timber::Logger.new(io) } - - it "should silence the logs" do - logger.silence do - logger.info("test") - end - - expect(io.string).to eq("") - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/rack_logger_spec.rb b/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/rack_logger_spec.rb deleted file mode 100644 index eb46e0755..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/rack_logger_spec.rb +++ /dev/null @@ -1,56 +0,0 @@ -require "spec_helper" - -RSpec.describe Timber::Integrations::Rails::RackLogger do - describe described_class::InstanceMethods do - let(:time) { Time.utc(2016, 9, 1, 12, 0, 0) } - let(:io) { StringIO.new } - let(:logger) do - logger = Timber::Logger.new(io) - logger.level = ::Logger::INFO - logger - end - - around(:each) do |example| - class RailsRackLoggerController < ActionController::Base - layout nil - - def index - render json: {} - end - - def method_for_action(action_name) - action_name - end - end - - ::RailsApp.routes.draw do - get '/rails_rack_logger' => 'rails_rack_logger#index' - end - - with_rails_logger(logger) do - Timecop.freeze(time) { example.run } - end - - Object.send(:remove_const, :RailsRackLoggerController) - end - - describe "#started_request_message" do - it "should mute the default rails logs" do - allow(::Rails).to receive(:env).and_return(ActiveSupport::StringInquirer.new("production")) # Rails 3.2.X - - dispatch_rails_request("/rails_rack_logger") - - lines = clean_lines(io.string.split("\n")) - expect(lines.length).to eq(3) - expect(lines[0]).to include("Started GET \\\"/rails_rack_logger\\\"") - expect(lines[1]).to include("Processing by RailsRackLoggerController#index as HTML") - expect(lines[2]).to include("Completed 200 OK in 0.0ms") - end - end - end - - # Remove blank lines since Rails does this to space out requests in the logs - def clean_lines(lines) - lines.select { |line| !line.start_with?(" @metadat") } - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/session_context_spec.rb b/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/session_context_spec.rb deleted file mode 100644 index 2a9d76ce3..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/session_context_spec.rb +++ /dev/null @@ -1,11 +0,0 @@ -require "spec_helper" - -RSpec.describe Timber::Integrations::Rails::SessionContext do - let(:time) { Time.utc(2016, 9, 1, 12, 0, 0) } - let(:io) { StringIO.new } - let(:logger) do - logger = Timber::Logger.new(io) - logger.level = ::Logger::INFO - logger - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/tagged_logging_spec.rb b/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/tagged_logging_spec.rb deleted file mode 100644 index 2c564d082..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/spec/timber-rails/tagged_logging_spec.rb +++ /dev/null @@ -1,29 +0,0 @@ -require "spec_helper" - -RSpec.describe ActiveSupport::TaggedLogging, :rails_23 => true do - describe "#new" do - let(:io) { StringIO.new } - - it "should instantiate for Timber::Logger object" do - ActiveSupport::TaggedLogging.new(Timber::Logger.new(io)) - end - - if defined?(ActiveSupport::BufferedLogger) - it "should instantiate for a ActiveSupport::BufferedLogger object" do - ActiveSupport::TaggedLogging.new(ActiveSupport::BufferedLogger.new(io)) - end - end - end - - describe "#info" do - let(:time) { Time.utc(2016, 9, 1, 12, 0, 0) } - let(:io) { StringIO.new } - let(:logger) { ActiveSupport::TaggedLogging.new(Timber::Logger.new(io)) } - - it "should accept events as the second argument" do - logger.info("SQL query", payment_rejected: {customer_id: "abcd1234", amount: 100, reason: "Card expired"}) - expect(io.string).to include("SQL query") - expect(io.string).to include("\"payment_rejected\":") - end - end -end diff --git a/vendor/cache/timber-ruby-rails-250326b0926d/timber-rails.gemspec b/vendor/cache/timber-ruby-rails-250326b0926d/timber-rails.gemspec deleted file mode 100644 index e2ba9c652..000000000 --- a/vendor/cache/timber-ruby-rails-250326b0926d/timber-rails.gemspec +++ /dev/null @@ -1,55 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: timber-rails 1.0.2 ruby lib - -Gem::Specification.new do |s| - s.name = "timber-rails".freeze - s.version = "1.0.2" - - s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= - s.metadata = { "changelog_uri" => "https://github.com/timberio/timber-ruby-rails/blob/master/README.md", "homepage_uri" => "https://docs.timber.io/languages/ruby/", "source_code_uri" => "https://github.com/timberio/timber-ruby-rails" } if s.respond_to? :metadata= - s.require_paths = ["lib".freeze] - s.authors = ["Timber Technologies, Inc.".freeze] - s.bindir = "exe".freeze - s.date = "2020-06-01" - s.email = ["hi@timber.io".freeze] - s.files = [".gitignore".freeze, ".rspec".freeze, ".travis.yml".freeze, "Gemfile".freeze, "LICENSE.md".freeze, "README.md".freeze, "Rakefile".freeze, "bin/console".freeze, "bin/setup".freeze, "gemfiles/rails-3.0.gemfile".freeze, "gemfiles/rails-3.1.gemfile".freeze, "gemfiles/rails-3.2.gemfile".freeze, "gemfiles/rails-4.0.gemfile".freeze, "gemfiles/rails-4.1.gemfile".freeze, "gemfiles/rails-4.2.gemfile".freeze, "gemfiles/rails-5.0.gemfile".freeze, "gemfiles/rails-5.1.gemfile".freeze, "gemfiles/rails-5.2.gemfile".freeze, "gemfiles/rails-6.0.gemfile".freeze, "gemfiles/rails-edge.gemfile".freeze, "lib/timber-rails.rb".freeze, "lib/timber-rails/action_controller.rb".freeze, "lib/timber-rails/action_controller/log_subscriber.rb".freeze, "lib/timber-rails/action_controller/log_subscriber/timber_log_subscriber.rb".freeze, "lib/timber-rails/action_dispatch.rb".freeze, "lib/timber-rails/action_dispatch/debug_exceptions.rb".freeze, "lib/timber-rails/action_view.rb".freeze, "lib/timber-rails/action_view/log_subscriber.rb".freeze, "lib/timber-rails/action_view/log_subscriber/timber_log_subscriber.rb".freeze, "lib/timber-rails/active_record.rb".freeze, "lib/timber-rails/active_record/log_subscriber.rb".freeze, "lib/timber-rails/active_record/log_subscriber/timber_log_subscriber.rb".freeze, "lib/timber-rails/active_support_log_subscriber.rb".freeze, "lib/timber-rails/config.rb".freeze, "lib/timber-rails/config/action_controller.rb".freeze, "lib/timber-rails/config/action_view.rb".freeze, "lib/timber-rails/config/active_record.rb".freeze, "lib/timber-rails/error_event.rb".freeze, "lib/timber-rails/logger.rb".freeze, "lib/timber-rails/overrides.rb".freeze, "lib/timber-rails/overrides/active_support_3_tagged_logging.rb".freeze, "lib/timber-rails/overrides/active_support_buffered_logger.rb".freeze, "lib/timber-rails/overrides/active_support_tagged_logging.rb".freeze, "lib/timber-rails/overrides/lograge.rb".freeze, "lib/timber-rails/overrides/rails_stdout_logging.rb".freeze, "lib/timber-rails/rack_logger.rb".freeze, "lib/timber-rails/railtie.rb".freeze, "lib/timber-rails/session_context.rb".freeze, "lib/timber-rails/version.rb".freeze, "timber-rails.gemspec".freeze] - s.homepage = "https://docs.timber.io/languages/ruby/".freeze - s.licenses = ["ISC".freeze] - s.required_ruby_version = Gem::Requirement.new(">= 1.9.0".freeze) - s.rubygems_version = "3.1.2".freeze - s.summary = "Timber.io Rails integration".freeze - - s.installed_by_version = "3.1.2" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 4 - end - - if s.respond_to? :add_runtime_dependency then - s.add_runtime_dependency(%q.freeze, [">= 3.0.0"]) - s.add_runtime_dependency(%q.freeze, ["~> 3.0"]) - s.add_runtime_dependency(%q.freeze, ["~> 1.0"]) - s.add_development_dependency(%q.freeze, [">= 0.0"]) - s.add_development_dependency(%q.freeze, [">= 0.8"]) - s.add_development_dependency(%q.freeze, ["~> 3.0"]) - s.add_development_dependency(%q.freeze, [">= 0"]) - s.add_development_dependency(%q.freeze, [">= 0"]) - s.add_development_dependency(%q.freeze, [">= 0"]) - s.add_development_dependency(%q.freeze, [">= 0"]) - s.add_development_dependency(%q.freeze, ["= 1.3.13"]) - s.add_development_dependency(%q.freeze, ["~> 2.3"]) - else - s.add_dependency(%q.freeze, [">= 3.0.0"]) - s.add_dependency(%q.freeze, ["~> 3.0"]) - s.add_dependency(%q.freeze, ["~> 1.0"]) - s.add_dependency(%q.freeze, [">= 0.0"]) - s.add_dependency(%q.freeze, [">= 0.8"]) - s.add_dependency(%q.freeze, ["~> 3.0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, ["= 1.3.13"]) - s.add_dependency(%q.freeze, ["~> 2.3"]) - end -end