Module: NuclearSecrets

Defined in:
lib/nuclear_secrets.rb,
lib/nuclear_secrets/engine.rb,
lib/nuclear_secrets/errors.rb,
lib/nuclear_secrets/version.rb

Defined Under Namespace

Classes: Engine, ExtraSecretsError, InvalidRequiredSecretValue, MismatchedSecretType, NuclearSecretError, RequiredSecretsListMissing, SecretsMissingError

Constant Summary collapse

VERSION =
"1.0.2".freeze

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.required_secretsObject

Returns the value of attribute required_secrets.



6
7
8
# File 'lib/nuclear_secrets.rb', line 6

def required_secrets
  @required_secrets
end

Class Method Details

.build_assertions(secrets, existing_keys) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/nuclear_secrets.rb', line 30

def build_assertions(secrets, existing_keys)
  existing_keys.map do |key|
    if required_secrets[key].class == Class
      make_type_check(required_secrets[key])
    elsif required_secrets[key].respond_to? :call
      required_secrets[key]
    else
      raise NuclearSecrets::InvalidRequiredSecretValue.new(
        [
          build_secret_tuple(secrets, required_secrets, key),
        ],
      )
    end
  end
end

.build_pairs(keys, secrets) ⇒ Object



24
25
26
27
28
# File 'lib/nuclear_secrets.rb', line 24

def build_pairs(keys, secrets)
  keys.map do |k|
    build_secret_tuple(secrets, required_secrets, k)
  end
end

.build_secret_tuple(secrets, required_values, key) ⇒ Object

secrets: hash of given secrets required_values: hash of required secrets key: key to build tuple for returns [key, required_type, given_type]



20
21
22
# File 'lib/nuclear_secrets.rb', line 20

def build_secret_tuple(secrets, required_values, key)
  [key, required_values[key], secrets[key]]
end

.check_assertions(secrets, assertions) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/nuclear_secrets.rb', line 46

def check_assertions(secrets, assertions)
  secrets.to_a.zip(assertions).select do |pair|
    result = pair.last.call(pair.first[1])
    if !result
      pair.first[0]
    else
      false
    end
  end.map do |pair|
    flat_pair = pair.flatten
    build_secret_tuple(secrets, required_secrets, flat_pair.first)
  end
end

.check_secrets(secrets) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/nuclear_secrets.rb', line 60

def check_secrets(secrets)
  raise NuclearSecrets::RequiredSecretsListMissing if required_secrets.nil?
  req_keys = required_secrets.keys
  existing_keys = secrets.keys

  missing_keys = req_keys - existing_keys
  extra_keys = existing_keys - req_keys

  missing_pairs = build_pairs(missing_keys, secrets)
  extra_pairs = build_pairs(extra_keys, secrets)
  raise SecretsMissingError.new(missing_pairs) unless missing_keys.empty?
  raise ExtraSecretsError.new(extra_pairs) unless extra_keys.empty?

  assertions = build_assertions(secrets, existing_keys)
  error_pairs = check_assertions(secrets, assertions)
  raise MismatchedSecretType.new(error_pairs) if !error_pairs.empty?
end

.configure {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:



8
9
10
# File 'lib/nuclear_secrets.rb', line 8

def configure
  yield self if block_given?
end

.make_type_check(type) ⇒ Object



12
13
14
# File 'lib/nuclear_secrets.rb', line 12

def make_type_check(type)
  Proc.new { |item| item.class == type }
end