class S3Config::Application

Public Class Methods

new(options = {}) click to toggle source
# File lib/s3_config/application.rb, line 10
def initialize(options = {})
  @options = options.inject({}) { |m, (k, v)| m[k.to_sym] = v; m }
end

Public Instance Methods

configuration() click to toggle source
# File lib/s3_config/application.rb, line 36
def configuration
  @configuration ||= read_configuration
end
delete(key) click to toggle source
# File lib/s3_config/application.rb, line 83
def delete(key)
  config = read_configuration
  unless config[key].nil?
    config.delete key
    write_configuration config
  end
end
each(&block) click to toggle source
# File lib/s3_config/application.rb, line 46
def each(&block)
  configuration.each(&block)
end
environment() click to toggle source
# File lib/s3_config/application.rb, line 18
def environment
  environment = @options.fetch(:environment) { default_environment }
  environment.nil? ? nil : environment.to_s
end
environment=(environment) click to toggle source
# File lib/s3_config/application.rb, line 23
def environment=(environment)
  @options[:environment] = environment
end
environments() click to toggle source
# File lib/s3_config/application.rb, line 14
def environments
  bucket.objects.map(&:key).map{|key| key.split('/').first }.uniq
end
latest_version() click to toggle source
# File lib/s3_config/application.rb, line 62
def latest_version
  [versions_count - 1, 0].max
end
load() click to toggle source
# File lib/s3_config/application.rb, line 40
def load
  each do |key, value|
    skip?(key) ? key_skipped!(key) : graduate_to_env(key, value)
  end
end
read(key) click to toggle source
# File lib/s3_config/application.rb, line 66
def read(key)
  config = read_configuration
  config[key]
end
valid?() click to toggle source
# File lib/s3_config/application.rb, line 50
def valid?
  !client.nil? and !bucket.nil?
end
version() click to toggle source
# File lib/s3_config/application.rb, line 27
def version
  version = @options.fetch(:version) { default_version }
  version
end
version=(version) click to toggle source
# File lib/s3_config/application.rb, line 32
def version=(version)
  @options[:version] = version
end
versions_count() click to toggle source
# File lib/s3_config/application.rb, line 54
def versions_count
  begin
    bucket.objects({prefix: "#{environment}/"}).count
  rescue S3Config::ConfigNotDefinedError => e
    rescue ConfigNotDefinedError
  end
end
write(key, value) click to toggle source
# File lib/s3_config/application.rb, line 71
def write(key, value)
  begin
    config = read_configuration
  rescue ConfigNotDefinedError
    config = {}
  end
  unless config[key] == value
    config[key] = value
    write_configuration config
  end
end

Private Instance Methods

bucket() click to toggle source
# File lib/s3_config/application.rb, line 97
def bucket
  @bucket ||= Aws::S3::Bucket.new(::ENV.fetch("S3_CONFIG_BUCKET"), client: client)
end
client() click to toggle source
# File lib/s3_config/application.rb, line 93
def client
  @s3 ||= Aws::S3::Client.new(region: ::ENV.fetch("AWS_REGION", "us-east-1"))
end
default_environment() click to toggle source
# File lib/s3_config/application.rb, line 101
def default_environment
  nil
end
default_version() click to toggle source
# File lib/s3_config/application.rb, line 105
def default_version
  @default_version = ::ENV.fetch("S3_CONFIG_REVISION"){ latest_version }
end
graduate_to_env(key, value) click to toggle source
# File lib/s3_config/application.rb, line 137
def graduate_to_env(key, value)
  non_string_configuration!(key) unless key.is_a?(String)
  non_string_configuration!(value) unless value.is_a?(String) || value.nil?

  ::ENV[key.to_s] = value.nil? ? nil : value.to_s
end
key_skipped!(key) click to toggle source
# File lib/s3_config/application.rb, line 152
def key_skipped!(key)
  warn "WARNING: Skipping key #{key.inspect}. Already set in ENV."
end
non_string_configuration!(value) click to toggle source
# File lib/s3_config/application.rb, line 148
def non_string_configuration!(value)
  warn "WARNING: Use strings for S3Config configuration. #{value.inspect} was converted to #{value.to_s.inspect}."
end
read_configuration() click to toggle source
# File lib/s3_config/application.rb, line 109
def read_configuration
  if e = environment and v = version
    begin
      serialized_config = bucket.object("#{e}/#{v}.yml").get.body
      config = YAML.load serialized_config
      return config
    rescue Aws::S3::Errors::NoSuchKey
      raise ConfigNotDefinedError.new(e, v)
    end
  else
    throw NotImplementedError
  end
  {}
end
skip?(key) click to toggle source
# File lib/s3_config/application.rb, line 144
def skip?(key)
  ::ENV.key?(key.to_s)
end
write_configuration(config) click to toggle source
# File lib/s3_config/application.rb, line 124
def write_configuration(config)
  if e = environment and next_version = versions_count
    serialized_config = YAML.dump(config)
    bucket.put_object({
      body: serialized_config,
      key: "#{e}/#{next_version}.yml",
      server_side_encryption: "AES256"
    })
  else
    throw NotImplementedError
  end
end