Class: ActiveSupport::EncryptedConfiguration

Inherits:
EncryptedFile show all
Defined in:
lib/active_support/encrypted_configuration.rb

Overview

Encrypted Configuration

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

Defined Under Namespace

Classes: InvalidContentError, InvalidKeyError

Constant Summary

Constants inherited from EncryptedFile

ActiveSupport::EncryptedFile::CIPHER

Instance Attribute Summary

Attributes inherited from EncryptedFile

#content_path, #env_key, #key_path, #raise_if_missing_key

Instance Method Summary collapse

Methods inherited from EncryptedFile

#change, expected_key_length, generate_key, #key, #key?, #write

Constructor Details

#initialize(config_path:, key_path:, env_key:, raise_if_missing_key:) ⇒ EncryptedConfiguration

Returns a new instance of EncryptedConfiguration.



54
55
56
57
58
59
# File 'lib/active_support/encrypted_configuration.rb', line 54

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

Instance Method Details

#configObject

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 } }


85
86
87
# File 'lib/active_support/encrypted_configuration.rb', line 85

def config
  @config ||= deep_symbolize_keys(deserialize(read))
end

#inspectObject

:nodoc:



89
90
91
# File 'lib/active_support/encrypted_configuration.rb', line 89

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

#readObject

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



62
63
64
65
66
67
# File 'lib/active_support/encrypted_configuration.rb', line 62

def read
  super
rescue ActiveSupport::EncryptedFile::MissingContentError
  # Allow a config to be started without a file present
  ""
end

#validate!Object

:nodoc:



69
70
71
72
73
74
75
# File 'lib/active_support/encrypted_configuration.rb', line 69

def validate! # :nodoc:
  deserialize(read).each_key do |key|
    key.to_sym
  rescue NoMethodError
    raise InvalidKeyError.new(content_path, key)
  end
end