class ActiveSupport::EncryptedConfiguration


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

my_config.read # => “some_secret: 123nsome_namespace:n another_secret: 456”
my_config = ActiveSupport::EncryptedConfiguration.new(…)
dynamic accessor methods, similar to OrderedOptions.
Values can be accessed via Hash methods, such as fetch and dig, or via
as encrypted YAML.
Provides convenience methods on top of EncryptedFile to access values stored
= Encrypted Configuration

def config


# => { some_secret: 123, some_namespace: { another_secret: 789 } }
my_config.config

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

Returns the decrypted content as a Hash with symbolized keys.
def config
  @config ||= deserialize(read).deep_symbolize_keys
end

def deep_transform(hash)

def deep_transform(hash)
  return hash unless hash.is_a?(Hash)
  h = ActiveSupport::OrderedOptions.new
  hash.each do |k, v|
    h[k] = deep_transform(v)
  end
  h
end

def deserialize(content)

def deserialize(content)
  config = YAML.respond_to?(:unsafe_load) ?
    YAML.unsafe_load(content, filename: content_path) :
    YAML.load(content, filename: content_path)
  config.presence || {}
rescue Psych::SyntaxError
  raise InvalidContentError.new(content_path)
end

def initialize(config_path:, key_path:, env_key:, raise_if_missing_key:)

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
  @config = nil
  @options = nil
end

def inspect # :nodoc:

:nodoc:
def inspect # :nodoc:
  "#<#{self.class.name}:#{'%#016x' % (object_id << 1)}>"
end

def options

def options
  @options ||= deep_transform(config)
end

def read

Reads the file and returns the decrypted content. See EncryptedFile#read.
def read
  super
rescue ActiveSupport::EncryptedFile::MissingContentError
  # Allow a config to be started without a file present
  ""
end

def validate! # :nodoc:

:nodoc:
def validate! # :nodoc:
  deserialize(read)
end