lib/appfuel/service/config.rb in appfuel-service-0.1.3 vs lib/appfuel/service/config.rb in appfuel-service-0.1.4

- old
+ new

@@ -3,5 +3,77 @@ require_relative 'config/sneakers' require_relative 'config/aws' require_relative 'config/worker' require_relative 'config/sentry' require_relative 'config/newrelic' + +module Appfuel + module Service + module Config + + class << self + + # Returns the worker definition while allowing you to override it and + # its child definition values through the options hash + # + # @param options [Hash] + # @return Appfuel::Configuration::DefinitionDsl + def definition(options = {}) + definition = options.delete(:definition) || worker_definition + update_definition(definition, options) + end + + def update_definition(definition, options) + options = validate_hash!(options) + return definition if options.empty? + + [:defaults, :file, :env, :exclude, :children].each do |type| + name = "definition_#{type}" + send(name, definition, options[type]) if options.key?(type) + end + + definition + end + + private + + def definition_file(definition, file) + definition.file(file) + end + + def definition_defaults(definition, defaults) + defaults = validate_hash!(defaults, :defaults) + definition.defaults(definition.defaults.merge(defaults)) + end + + def definition_env(definition, env) + env = validate_hash!(options[:env], :env) + definition.env(definition.env.merge(env)) + end + + def definition_exclude(definition, excludes) + if excludes.is_a?(String) || excludes.is_a?(Symbol) + excludes = [exlcudes] + end + Fail "Options (excludes) must be an array" unless excludes.is_a?(Array) + + excludes.each do |item| + definition.delete(item) + end + end + + def definition_children(definition, children) + validate_hash!(children, :children).each do |key, options| + update_definition(definition[key], options) + end + end + + def validate_hash!(value, key = nil) + msg = "Options" + msg << " (#{key})" unless key.nil? + fail "#{msg} must be a hash" unless value.is_a?(Hash) + value + end + end + end + end +end