class SimpleParameterStore

Constants

VERSION

Attributes

client[R]
decrypt[R]
expires_after[R]
expires_at[R]
prefix[R]

Public Class Methods

new(names:, client: nil, prefix: nil, decrypt: true, expires_after: nil) click to toggle source
# File lib/simple_parameter_store.rb, line 10
def initialize(names:, client: nil, prefix: nil, decrypt: true, expires_after: nil)
  @client = client || build_client
  @prefix = prefix
  @decrypt = decrypt
  @expires_after = expires_after

  @mappings = {}
  @casters = {}
  @cache = {}

  prepare(names)
  refresh
end

Public Instance Methods

[](key) click to toggle source
# File lib/simple_parameter_store.rb, line 45
def [](key)
  refresh_if_needed
  @cache.fetch(key)
end
expired?() click to toggle source
# File lib/simple_parameter_store.rb, line 41
def expired?
  expires_after && expires_at < Time.now
end
refresh() click to toggle source
# File lib/simple_parameter_store.rb, line 26
def refresh
  fetch.each_pair do |name, value|
    key, = @mappings.rassoc(name)
    caster = @casters.fetch(key)
    value = caster.call(value)
    @cache[key] = value
  end

  @expires_at = Time.now + expires_after if expires_after
end
refresh_if_needed() click to toggle source
# File lib/simple_parameter_store.rb, line 37
def refresh_if_needed
  refresh if expired?
end

Private Instance Methods

build_client() click to toggle source
# File lib/simple_parameter_store.rb, line 66
def build_client
  Aws::SSM::Client.new
end
fetch() click to toggle source
# File lib/simple_parameter_store.rb, line 52
def fetch
  result = client.get_parameters(names: @mappings.values, with_decryption: decrypt)
  raise SSMKeyError, "Missing keys: `#{result.invalid_parameters}`" if result.invalid_parameters.any?

  result.parameters.map { |parameter| [parameter.name, parameter.value] }.to_h
end
prepare(names) click to toggle source
# File lib/simple_parameter_store.rb, line 59
def prepare(names)
  names.each_pair do |key, (name, caster)|
    @mappings[key] = "#{prefix}#{name}"
    @casters[key] = caster || :itself.to_proc
  end
end