Module: Bootprint::Collectors::Rails

Defined in:
lib/bootprint/collectors/rails.rb

Class Method Summary collapse

Class Method Details

.action_cable_adapterObject



53
54
55
56
57
58
59
# File 'lib/bootprint/collectors/rails.rb', line 53

def action_cable_adapter
  return unless defined?(ActionCable) && ActionCable.respond_to?(:server)

  ActionCable.server.config.cable.fetch("adapter", nil)
rescue StandardError
  nil
end

.adapters(config) ⇒ Object



36
37
38
39
40
41
42
43
# File 'lib/bootprint/collectors/rails.rb', line 36

def adapters(config)
  {
    "active_job" => nested_value(config, :active_job, :queue_adapter)&.to_s,
    "cache" => Array(value(config, :cache_store)).first&.to_s,
    "session" => value(config, :session_store)&.to_s,
    "database" => database_adapter
  }.compact
end

.captureObject



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/bootprint/collectors/rails.rb', line 10

def capture
  return {} unless defined?(::Rails) && ::Rails.respond_to?(:application) && ::Rails.application

  application = ::Rails.application
  config = application.config
  {
    "version" => ::Rails.version,
    "environment" => ::Rails.env.to_s,
    "framework_defaults" => value(config, :loaded_config_version)&.to_s,
    "eager_load" => value(config, :eager_load),
    "cache_classes" => value(config, :cache_classes),
    "autoload_paths" => paths(value(config, :autoload_paths)),
    "eager_load_paths" => paths(value(config, :eager_load_paths)),
    "adapters" => adapters(config),
    "active_storage_service" => nested_value(config, :active_storage, :service)&.to_s,
    "action_cable_adapter" => action_cable_adapter,
    "mail_delivery_method" => nested_value(config, :action_mailer, :delivery_method)&.to_s,
    "time_zone" => value(config, :time_zone)&.to_s,
    "logging" => logging(config),
    "public_file_server_enabled" => nested_value(config, :public_file_server, :enabled),
    "assets_compile" => nested_value(config, :assets, :compile),
    "secret_key_base" => (application),
    "initializers" => sanitized_initializers
  }
end

.database_adapterObject



45
46
47
48
49
50
51
# File 'lib/bootprint/collectors/rails.rb', line 45

def database_adapter
  return unless defined?(ActiveRecord::Base)

  ActiveRecord::Base.connection_db_config.adapter
rescue StandardError
  nil
end

.keyObject



8
# File 'lib/bootprint/collectors/rails.rb', line 8

def key = "rails"

.logging(config) ⇒ Object



61
62
63
64
# File 'lib/bootprint/collectors/rails.rb', line 61

def logging(config)
  logger = defined?(::Rails.logger) ? ::Rails.logger : nil
  { "level" => logger&.level, "class" => logger&.class&.name, "log_tags" => Array(value(config, :log_tags)).map(&:to_s) }
end

.nested_value(object, *methods) ⇒ Object



92
93
94
# File 'lib/bootprint/collectors/rails.rb', line 92

def nested_value(object, *methods)
  methods.reduce(object) { |current, method| current && value(current, method) }
end

.paths(value) ⇒ Object



82
83
84
# File 'lib/bootprint/collectors/rails.rb', line 82

def paths(value)
  Array(value).map { |path| Sanitizer.path(path) }.sort
end

.sanitized_initializersObject



74
75
76
77
78
79
80
# File 'lib/bootprint/collectors/rails.rb', line 74

def sanitized_initializers
  return [] unless defined?(Bootprint::RailsState)

  Array(Bootprint::RailsState.initializers).map do |initializer|
    initializer.merge("name" => Sanitizer.path(initializer["name"]))
  end
end

.secret_metadata(application) ⇒ Object



66
67
68
69
70
71
72
# File 'lib/bootprint/collectors/rails.rb', line 66

def (application)
  present = !application.secret_key_base.to_s.empty?
  source = ENV.key?("SECRET_KEY_BASE") ? "environment" : "credentials_or_configuration"
  { "present" => present, "source" => source, "redacted" => true }
rescue StandardError
  { "present" => false, "source" => "unavailable", "redacted" => true }
end

.value(object, method) ⇒ Object



86
87
88
89
90
# File 'lib/bootprint/collectors/rails.rb', line 86

def value(object, method)
  object.public_send(method) if object.respond_to?(method)
rescue StandardError
  nil
end