Class: ActiveSupport::EncryptedConfiguration
- Inherits:
-
EncryptedFile
- Object
- EncryptedFile
- ActiveSupport::EncryptedConfiguration
- Defined in:
- activesupport/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
-
#config ⇒ Object
Returns the decrypted content as a Hash with symbolized keys.
-
#initialize(config_path:, key_path:, env_key:, raise_if_missing_key:) ⇒ EncryptedConfiguration
constructor
A new instance of EncryptedConfiguration.
-
#inspect ⇒ Object
:nodoc:.
-
#keys ⇒ Object
Returns an array of symbolized keys from the decrypted configuration.
-
#option(*key, default: nil) ⇒ Object
Find a upcased and double-underscored-joined string-version of the
keyin ENV. -
#read ⇒ Object
Reads the file and returns the decrypted content.
-
#reload ⇒ Object
Reload the cached values in case any of them changed or new ones were added during runtime.
-
#require(*key) ⇒ Object
Find the referenced key Raises
KeyErrorif not found. -
#validate! ⇒ Object
:nodoc:.
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 'activesupport/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
#config ⇒ Object
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 } }
129 130 131 |
# File 'activesupport/lib/active_support/encrypted_configuration.rb', line 129 def config @config ||= deep_symbolize_keys(deserialize(read)) end |
#inspect ⇒ Object
:nodoc:
145 146 147 |
# File 'activesupport/lib/active_support/encrypted_configuration.rb', line 145 def inspect # :nodoc: "#<#{self.class.name}:#{'%#016x' % (object_id << 1)} keys=#{keys.inspect}>" end |
#keys ⇒ Object
Returns an array of symbolized keys from the decrypted configuration.
my_config = ActiveSupport::EncryptedConfiguration.new(...)
my_config.read # => "some_secret: 123\nsome_namespace:\n another_secret: 456"
my_config.keys
# => [:some_secret, :some_namespace]
141 142 143 |
# File 'activesupport/lib/active_support/encrypted_configuration.rb', line 141 def keys config.keys end |
#option(*key, default: nil) ⇒ Object
Find a upcased and double-underscored-joined string-version of the key in ENV. Returns nil if the key isn’t found or the value of default when passed If default is a block, it’s called first.
Examples:
config.option(:db_host) # => ENV["DB_HOST"]
config.option(:database, :host) # => ENV["DATABASE__HOST"]
config.option(:database, :host, default: "missing") # => ENV.fetch("DATABASE__HOST", "missing")
config.option(:database, :host, default: -> { "missing" }) # => ENV.fetch("DATABASE__HOST", default.call)
88 89 90 91 92 93 94 95 96 97 98 |
# File 'activesupport/lib/active_support/encrypted_configuration.rb', line 88 def option(*key, default: nil) value = dig(*key) if !value.nil? value elsif default.respond_to?(:call) default.call else default end end |
#read ⇒ Object
Reads the file and returns the decrypted content. See EncryptedFile#read.
106 107 108 109 110 111 |
# File 'activesupport/lib/active_support/encrypted_configuration.rb', line 106 def read super rescue ActiveSupport::EncryptedFile::MissingContentError # Allow a config to be started without a file present "" end |
#reload ⇒ Object
Reload the cached values in case any of them changed or new ones were added during runtime.
101 102 103 |
# File 'activesupport/lib/active_support/encrypted_configuration.rb', line 101 def reload @config = @options = nil end |
#require(*key) ⇒ Object
Find the referenced key Raises KeyError if not found.
Examples:
require(:db_host) # => ENV.fetch("DB_HOST")
require(:database, :host) # => ENV.fetch("DATABASE__HOST")
68 69 70 71 72 73 74 75 76 |
# File 'activesupport/lib/active_support/encrypted_configuration.rb', line 68 def require(*key) value = dig(*key) if !value.nil? value else raise KeyError, "Missing key: #{key.inspect}" end end |
#validate! ⇒ Object
:nodoc:
113 114 115 116 117 118 119 |
# File 'activesupport/lib/active_support/encrypted_configuration.rb', line 113 def validate! # :nodoc: deserialize(read).each_key do |key| key.to_sym rescue NoMethodError raise InvalidKeyError.new(content_path, key) end end |