Class: PaulBunyan::Railtie

Inherits:
Rails::Railtie
  • Object
show all
Defined in:
lib/paul_bunyan/railtie.rb

Constant Summary collapse

DEFAULT_LOGGERS =
[ActionController::LogSubscriber, ActionView::LogSubscriber].freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.activesupport_formatterObject



10
11
12
13
14
# File 'lib/paul_bunyan/railtie.rb', line 10

def self.activesupport_formatter
  ActiveSupport::Logger::SimpleFormatter.new.tap do |formatter|
    formatter.extend ActiveSupport::TaggedLogging::Formatter
  end
end

.development_or_test?Boolean



16
17
18
# File 'lib/paul_bunyan/railtie.rb', line 16

def self.development_or_test?
  Rails.env.development? || Rails.env.test?
end

.migrating?Boolean



24
25
26
# File 'lib/paul_bunyan/railtie.rb', line 24

def self.migrating?
  rake_task? && ARGV.include?('db:migrate')
end

.rake_task?Boolean



20
21
22
# File 'lib/paul_bunyan/railtie.rb', line 20

def self.rake_task?
  File.basename($0) == 'rake'
end

Instance Method Details

#conditionally_unsubscribe(listener) ⇒ Object



60
61
62
63
# File 'lib/paul_bunyan/railtie.rb', line 60

def conditionally_unsubscribe(listener)
  delegate = listener.instance_variable_get(:@delegate)
  ActiveSupport::Notifications.unsubscribe(listener) if DEFAULT_LOGGERS.include?(delegate.class)
end

#file_target(app_config) ⇒ Object



65
66
67
68
69
70
71
72
73
74
# File 'lib/paul_bunyan/railtie.rb', line 65

def file_target(app_config)
  path = app_config.paths['log'].first
  path_dir = File.dirname(path)
  FileUtils.mkdir_p(path_dir) unless File.exist?(path_dir)

  output = File.open(path, 'a')
  output.binmode
  output.sync = app_config.autoflush_log
  output
end

#log_target(app_config) ⇒ Object



76
77
78
# File 'lib/paul_bunyan/railtie.rb', line 76

def log_target(app_config)
  config.logging.override_location ? stream_target : file_target(app_config)
end

#stream_targetObject



80
81
82
83
# File 'lib/paul_bunyan/railtie.rb', line 80

def stream_target
  STDOUT.sync = true
  STDOUT
end

#unsubscribe_default_log_subscribersObject



85
86
87
88
89
90
91
# File 'lib/paul_bunyan/railtie.rb', line 85

def unsubscribe_default_log_subscribers
  LogSubscriber.event_patterns.each do |pattern|
    ActiveSupport::Notifications.notifier.listeners_for(pattern).each do |listener|
      conditionally_unsubscribe(listener)
    end
  end
end