From cc4660b35a9a5aaff4ff5bedab30a29b74b716ff Mon Sep 17 00:00:00 2001 From: Gannon McGibbon Date: Wed, 8 Feb 2023 13:08:18 -0600 Subject: [PATCH 1/4] Rename lib/mini_profiler/profiler.rb to lib/mini_profiler.rb This file contains Rack::MiniProfiler, not Rack::MiniProfiler::Profiler. --- lib/{mini_profiler/profiler.rb => mini_profiler.rb} | 6 +++--- lib/rack-mini-profiler.rb | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) rename lib/{mini_profiler/profiler.rb => mini_profiler.rb} (99%) diff --git a/lib/mini_profiler/profiler.rb b/lib/mini_profiler.rb similarity index 99% rename from lib/mini_profiler/profiler.rb rename to lib/mini_profiler.rb index 674b8433..62166cb6 100644 --- a/lib/mini_profiler/profiler.rb +++ b/lib/mini_profiler.rb @@ -27,11 +27,11 @@ def config end def resources_root - @resources_root ||= ::File.expand_path("../../html", __FILE__) + @resources_root ||= ::File.expand_path("../html", __FILE__) end def share_template - @share_template ||= ERB.new(::File.read(::File.expand_path("../html/share.html", ::File.dirname(__FILE__)))) + @share_template ||= ERB.new(::File.read(::File.expand_path("html/share.html", ::File.dirname(__FILE__)))) end def current @@ -773,7 +773,7 @@ def get_profile_script(env) end # TODO : cache this snippet - script = ::File.read(::File.expand_path('../html/profile_handler.js', ::File.dirname(__FILE__))) + script = ::File.read(::File.expand_path('html/profile_handler.js', ::File.dirname(__FILE__))) # replace the variables settings.each do |k, v| regex = Regexp.new("\\{#{k.to_s}\\}") diff --git a/lib/rack-mini-profiler.rb b/lib/rack-mini-profiler.rb index da864e5b..ad023f3f 100644 --- a/lib/rack-mini-profiler.rb +++ b/lib/rack-mini-profiler.rb @@ -28,7 +28,7 @@ require 'mini_profiler/client_settings' require 'mini_profiler/gc_profiler' require 'mini_profiler/snapshots_transporter' -require 'mini_profiler/profiler' +require 'mini_profiler' require 'patches/sql_patches' require 'patches/net_patches' From 05e7b9a1e397f83b36ee9559c6a6f6097b61d942 Mon Sep 17 00:00:00 2001 From: Gannon McGibbon Date: Wed, 8 Feb 2023 13:21:04 -0600 Subject: [PATCH 2/4] Simplify requires - Make module files require their nested contents - Move library requires to the files that use them - Remove require for timeout because it isn't used - Remove require for thread because it is required by default This patch also allows for easier transition to autoloading should we choose to use it later. --- lib/mini_profiler.rb | 11 ++++++++++ lib/mini_profiler/storage.rb | 7 ++++++ lib/mini_profiler/storage/file_store.rb | 2 ++ lib/mini_profiler/storage/memory_store.rb | 2 ++ lib/mini_profiler/storage/redis_store.rb | 1 + lib/mini_profiler/timer_struct.rb | 8 +++++++ lib/mini_profiler/timer_struct/base.rb | 2 ++ lib/mini_profiler/timer_struct/sql.rb | 2 ++ lib/rack-mini-profiler.rb | 26 +---------------------- spec/integration/railtie_methods_spec.rb | 1 + 10 files changed, 37 insertions(+), 25 deletions(-) create mode 100644 lib/mini_profiler/storage.rb create mode 100644 lib/mini_profiler/timer_struct.rb diff --git a/lib/mini_profiler.rb b/lib/mini_profiler.rb index 62166cb6..8572a3a1 100644 --- a/lib/mini_profiler.rb +++ b/lib/mini_profiler.rb @@ -1,6 +1,17 @@ # frozen_string_literal: true require 'cgi' +require 'json' +require 'erb' + +require 'mini_profiler/timer_struct' +require 'mini_profiler/storage' +require 'mini_profiler/config' +require 'mini_profiler/profiling_methods' +require 'mini_profiler/context' +require 'mini_profiler/client_settings' +require 'mini_profiler/gc_profiler' +require 'mini_profiler/snapshots_transporter' module Rack class MiniProfiler diff --git a/lib/mini_profiler/storage.rb b/lib/mini_profiler/storage.rb new file mode 100644 index 00000000..5e32849f --- /dev/null +++ b/lib/mini_profiler/storage.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +require 'mini_profiler/storage/abstract_store' +require 'mini_profiler/storage/memcache_store' +require 'mini_profiler/storage/memory_store' +require 'mini_profiler/storage/redis_store' +require 'mini_profiler/storage/file_store' diff --git a/lib/mini_profiler/storage/file_store.rb b/lib/mini_profiler/storage/file_store.rb index 812cec59..938f7153 100644 --- a/lib/mini_profiler/storage/file_store.rb +++ b/lib/mini_profiler/storage/file_store.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'securerandom' + module Rack class MiniProfiler class FileStore < AbstractStore diff --git a/lib/mini_profiler/storage/memory_store.rb b/lib/mini_profiler/storage/memory_store.rb index 52068d0b..63475761 100644 --- a/lib/mini_profiler/storage/memory_store.rb +++ b/lib/mini_profiler/storage/memory_store.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'securerandom' + module Rack class MiniProfiler class MemoryStore < AbstractStore diff --git a/lib/mini_profiler/storage/redis_store.rb b/lib/mini_profiler/storage/redis_store.rb index d1ec3c1d..7f286905 100644 --- a/lib/mini_profiler/storage/redis_store.rb +++ b/lib/mini_profiler/storage/redis_store.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require 'digest' +require 'securerandom' module Rack class MiniProfiler diff --git a/lib/mini_profiler/timer_struct.rb b/lib/mini_profiler/timer_struct.rb new file mode 100644 index 00000000..b3cc5168 --- /dev/null +++ b/lib/mini_profiler/timer_struct.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +require 'mini_profiler/timer_struct/base' +require 'mini_profiler/timer_struct/page' +require 'mini_profiler/timer_struct/sql' +require 'mini_profiler/timer_struct/custom' +require 'mini_profiler/timer_struct/client' +require 'mini_profiler/timer_struct/request' diff --git a/lib/mini_profiler/timer_struct/base.rb b/lib/mini_profiler/timer_struct/base.rb index 2757413d..15a46982 100644 --- a/lib/mini_profiler/timer_struct/base.rb +++ b/lib/mini_profiler/timer_struct/base.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'json' + module Rack class MiniProfiler module TimerStruct diff --git a/lib/mini_profiler/timer_struct/sql.rb b/lib/mini_profiler/timer_struct/sql.rb index 12397eb4..e9a78c75 100644 --- a/lib/mini_profiler/timer_struct/sql.rb +++ b/lib/mini_profiler/timer_struct/sql.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'erb' + module Rack class MiniProfiler diff --git a/lib/rack-mini-profiler.rb b/lib/rack-mini-profiler.rb index ad023f3f..f6cc80d8 100644 --- a/lib/rack-mini-profiler.rb +++ b/lib/rack-mini-profiler.rb @@ -1,34 +1,10 @@ # frozen_string_literal: true -require 'erb' -require 'json' -require 'timeout' -require 'thread' -require 'securerandom' - require 'mini_profiler/version' require 'mini_profiler/asset_version' -require 'mini_profiler/timer_struct/base' -require 'mini_profiler/timer_struct/page' -require 'mini_profiler/timer_struct/sql' -require 'mini_profiler/timer_struct/custom' -require 'mini_profiler/timer_struct/client' -require 'mini_profiler/timer_struct/request' - -require 'mini_profiler/storage/abstract_store' -require 'mini_profiler/storage/memcache_store' -require 'mini_profiler/storage/memory_store' -require 'mini_profiler/storage/redis_store' -require 'mini_profiler/storage/file_store' - -require 'mini_profiler/config' -require 'mini_profiler/profiling_methods' -require 'mini_profiler/context' -require 'mini_profiler/client_settings' -require 'mini_profiler/gc_profiler' -require 'mini_profiler/snapshots_transporter' require 'mini_profiler' + require 'patches/sql_patches' require 'patches/net_patches' diff --git a/spec/integration/railtie_methods_spec.rb b/spec/integration/railtie_methods_spec.rb index 6cc655de..ccea3ad3 100644 --- a/spec/integration/railtie_methods_spec.rb +++ b/spec/integration/railtie_methods_spec.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true +require 'securerandom' require 'rack/test' require File.expand_path('../../../lib/mini_profiler_rails/railtie_methods', __FILE__) From f9252b3cc42425f14129357b0921c9094ac100b9 Mon Sep 17 00:00:00 2001 From: Gannon McGibbon Date: Wed, 8 Feb 2023 16:52:12 -0600 Subject: [PATCH 3/4] Autoload sotrage adapters Autoloads storage adapters because it is unnecessary to load storage adapters you won't use. Autoload lets us defer loading the file until it is referenced, so that we can require storage dependencies normally and expect them to load when called. --- lib/mini_profiler/storage.rb | 15 ++++++++++----- lib/mini_profiler/storage/memcache_store.rb | 3 ++- lib/mini_profiler/storage/redis_store.rb | 2 +- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/lib/mini_profiler/storage.rb b/lib/mini_profiler/storage.rb index 5e32849f..22ccb8c1 100644 --- a/lib/mini_profiler/storage.rb +++ b/lib/mini_profiler/storage.rb @@ -1,7 +1,12 @@ # frozen_string_literal: true -require 'mini_profiler/storage/abstract_store' -require 'mini_profiler/storage/memcache_store' -require 'mini_profiler/storage/memory_store' -require 'mini_profiler/storage/redis_store' -require 'mini_profiler/storage/file_store' + +module Rack + class MiniProfiler + autoload(:AbstractStore, 'mini_profiler/storage/abstract_store') + autoload(:MemcacheStore, 'mini_profiler/storage/memcache_store') + autoload(:MemoryStore, 'mini_profiler/storage/memory_store') + autoload(:RedisStore, 'mini_profiler/storage/redis_store') + autoload(:FileStore, 'mini_profiler/storage/file_store') + end +end diff --git a/lib/mini_profiler/storage/memcache_store.rb b/lib/mini_profiler/storage/memcache_store.rb index 872d167a..e14a3276 100644 --- a/lib/mini_profiler/storage/memcache_store.rb +++ b/lib/mini_profiler/storage/memcache_store.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'dalli' + module Rack class MiniProfiler class MemcacheStore < AbstractStore @@ -8,7 +10,6 @@ class MemcacheStore < AbstractStore MAX_RETRIES = 10 def initialize(args = nil) - require 'dalli' unless defined? Dalli args ||= {} @prefix = args[:prefix] || "MPMemcacheStore" diff --git a/lib/mini_profiler/storage/redis_store.rb b/lib/mini_profiler/storage/redis_store.rb index 7f286905..94c6d85c 100644 --- a/lib/mini_profiler/storage/redis_store.rb +++ b/lib/mini_profiler/storage/redis_store.rb @@ -2,6 +2,7 @@ require 'digest' require 'securerandom' +require 'redis' module Rack class MiniProfiler @@ -271,7 +272,6 @@ def prefixed_id(id) def redis @redis_connection ||= begin - require 'redis' unless defined? Redis Redis.new(@args) end end From 4026a0f27fd76ae1defb6082be5f0df8928152c4 Mon Sep 17 00:00:00 2001 From: Gannon McGibbon Date: Wed, 8 Feb 2023 17:52:58 -0600 Subject: [PATCH 4/4] Don't globally define to_seconds helper in Rack::MiniProfilerRailsMethods spec --- spec/integration/railtie_methods_spec.rb | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/spec/integration/railtie_methods_spec.rb b/spec/integration/railtie_methods_spec.rb index ccea3ad3..c79aa4ec 100644 --- a/spec/integration/railtie_methods_spec.rb +++ b/spec/integration/railtie_methods_spec.rb @@ -4,12 +4,13 @@ require 'rack/test' require File.expand_path('../../../lib/mini_profiler_rails/railtie_methods', __FILE__) -def to_seconds(array) - array.map! { |n, s, f| [n, s / 1000.0, f / 1000.0] } - array -end - describe Rack::MiniProfilerRailsMethods do + def to_seconds(array) + array.map! { |n, s, f| [n, s / 1000.0, f / 1000.0] } + array + end + + describe '#render_notification_handler' do before do allow(Process).to receive(:clock_gettime).and_return(0)