Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ability to have many post initialization callbacks #1261

Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion sentry-rails/lib/sentry/rails/configuration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ module Sentry
class Configuration
attr_reader :rails

def post_initialization_callback
add_post_initialization_callback do
@rails = Sentry::Rails::Configuration.new
@excluded_exceptions = @excluded_exceptions.concat(Sentry::Rails::IGNORE_DEFAULT)
end
Expand Down
24 changes: 21 additions & 3 deletions sentry-ruby/lib/sentry/configuration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,10 @@ class Configuration

AVAILABLE_BREADCRUMBS_LOGGERS = [:sentry_logger, :active_support_logger].freeze

# Post initialization callbacks are called at the end of initialization process
# allowing extending the configuration of sentry-ruby by multiple extensions
@@post_initialization_callbacks = []

def initialize
self.background_worker_threads = Concurrent.processor_count
self.breadcrumbs_logger = []
Expand All @@ -182,7 +186,7 @@ def initialize

@transport = Transport::Configuration.new
@gem_specs = Hash[Gem::Specification.map { |spec| [spec.name, spec.version.to_s] }] if Gem::Specification.respond_to?(:map)
post_initialization_callback
run_post_initialization_callbacks
end

def dsn=(value)
Expand Down Expand Up @@ -386,7 +390,21 @@ def server_name_from_env
end
end

# allow extensions to extend the Configuration class
def post_initialization_callback; end
def run_post_initialization_callbacks
self.class.post_initialization_callbacks.each do |hook|
instance_eval(&hook)
end
end

# allow extensions to add their hooks to the Configuration class
def self.add_post_initialization_callback(&block)
self.post_initialization_callbacks << block
end

protected

def self.post_initialization_callbacks
@@post_initialization_callbacks
end
end
end
23 changes: 23 additions & 0 deletions sentry-ruby/spec/sentry/configuration_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -367,4 +367,27 @@ class MyTestException < RuntimeError; end
end
end
end

describe '.add_post_initialization_callback' do
class SentryConfigurationSample < Sentry::Configuration
attr_reader :var1, :var2

add_post_initialization_callback do
@var1 = 1
end

add_post_initialization_callback do
@var2 = 2
end
end

subject(:configuration) { SentryConfigurationSample }

it 'calls all hooks and initializes assigned variables' do
instance = configuration.new

expect(instance.var1). to eq 1
expect(instance.var2). to eq 2
end
end
end