Sha256: aa7d7a2480cff982db52ab776686041f7071c8a1a8ae24fb6db410aa34ef84a7

Contents?: true

Size: 1.63 KB

Versions: 3

Compression:

Stored size: 1.63 KB

Contents

module Credman
  class Delete < Credman::Base
    def perform(keys)
      abort pastel.red("At least one key required") if keys.empty?

      configs.each do |env, config|
        puts pastel.green("#{env}:")

        updated_config = config.dup
        is_updated = false

        keys_with_path = keys.index_with { |key| key.split(".").map(&:to_sym) }
        keys_with_path.each do |full_key, key_path|
          if config_has_keys?(config, key_path)
            is_updated ||= true
            deep_delete!(updated_config, key_path)
            print pastel.blue("\t#{full_key}:\t"), pastel.green("✅ deleted\n")
          else
            print pastel.blue("\t#{full_key}:\t"), pastel.red("❌ key not found, can't delete\n")
          end
        end

        if is_updated
          # removes "---\n" in the very beginning
          config_as_string = updated_config.deep_stringify_keys.to_yaml[4..]
          rewrite_config_for(env, config_as_string)
        end
      end
    end

    def rewrite_config_for(environment, new_config)
      ActiveSupport::EncryptedConfiguration.new(
        config_path: "config/credentials/#{environment}.yml.enc",
        key_path: "config/credentials/#{environment}.key",
        env_key: "RAILS_MASTER_KEY",
        raise_if_missing_key: true
      ).write(new_config)
    end

    def deep_delete!(obj, keys)
      key = keys.first
      if keys.length == 1
        obj.delete(key)
      else
        obj[key] = {} unless obj[key]
        deep_delete!(obj[key], keys.slice(1..-1))
      end
    end

    def normalize_new_value(new_value)
      return if new_value.in?(%w[nil null])

      new_value
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
credman-0.0.5 lib/credman/delete.rb
credman-0.0.4 lib/credman/delete.rb
credman-0.0.3 lib/credman/delete.rb