class ActiveSupport::EncryptedConfiguration

Provides convenience methods on top of EncryptedFile to access values stored as encrypted YAML.

Values can be accessed via Hash methods, such as fetch and dig, or via dynamic accessor methods, similar to OrderedOptions.

my_config = ActiveSupport::EncryptedConfiguration.new(...)
my_config.read # => "some_secret: 123\nsome_namespace:\n  another_secret: 456"

my_config[:some_secret]
# => 123
my_config.some_secret
# => 123
my_config.dig(:some_namespace, :another_secret)
# => 456
my_config.some_namespace.another_secret
# => 456
my_config.fetch(:foo)
# => KeyError
my_config.foo!
# => KeyError

Public Class Methods

new(config_path:, key_path:, env_key:, raise_if_missing_key:) click to toggle source
Calls superclass method
# File lib/active_support/encrypted_configuration.rb, line 36
def initialize(config_path:, key_path:, env_key:, raise_if_missing_key:)
  super content_path: config_path, key_path: key_path,
    env_key: env_key, raise_if_missing_key: raise_if_missing_key
end

Public Instance Methods

config() click to toggle source

Returns the decrypted content as a Hash with symbolized keys.

my_config = ActiveSupport::EncryptedConfiguration.new(...)
my_config.read # => "some_secret: 123\nsome_namespace:\n  another_secret: 456"

my_config.config
# => { some_secret: 123, some_namespace: { another_secret: 789 } }
# File lib/active_support/encrypted_configuration.rb, line 63
def config
  @config ||= deserialize(read).deep_symbolize_keys
end
read() click to toggle source

Reads the file and returns the decrypted content. See EncryptedFile#read.

Calls superclass method
# File lib/active_support/encrypted_configuration.rb, line 42
def read
  super
rescue ActiveSupport::EncryptedFile::MissingContentError
  # Allow a config to be started without a file present
  ""
end
write(contents) click to toggle source
Calls superclass method
# File lib/active_support/encrypted_configuration.rb, line 49
def write(contents)
  deserialize(contents)

  super
end

Private Instance Methods

deep_transform(hash) click to toggle source
# File lib/active_support/encrypted_configuration.rb, line 68
def deep_transform(hash)
  return hash unless hash.is_a?(Hash)

  h = ActiveSupport::InheritableOptions.new
  hash.each do |k, v|
    h[k] = deep_transform(v)
  end
  h
end
deserialize(config) click to toggle source
# File lib/active_support/encrypted_configuration.rb, line 82
def deserialize(config)
  doc = YAML.respond_to?(:unsafe_load) ? YAML.unsafe_load(config) : YAML.load(config)
  doc.presence || {}
end
options() click to toggle source
# File lib/active_support/encrypted_configuration.rb, line 78
def options
  @options ||= deep_transform(config)
end