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