lib/anyway/config.rb in anyway_config-1.1.2 vs lib/anyway/config.rb in anyway_config-1.1.3

- old
+ new

@@ -42,37 +42,53 @@ # Example: # # my_config = Anyway::Config.for(:my_app) # # will load data from config/my_app.yml, secrets.my_app, ENV["MY_APP_*"] def for(name) - new(name, false).load_from_sources + new(name: name, load: false).load_from_sources end end attr_reader :config_name - def initialize(config_name = nil, do_load = true) - @config_name = config_name || self.class.config_name + # Instantiate config with specified name, loads the data and applies overrides + # + # Example: + # + # my_config = Anyway::Config.new(name: :my_app, load: true, overrides: { some: :value }) + # + # rubocop:disable Metrics/LineLength,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity + def initialize(config_name = nil, do_load = nil, name: nil, load: true, overrides: {}) + unless config_name.nil? && do_load.nil? + warn "[Deprecated] Positional arguments for Anyway::Config#initialize will be removed in 1.2.0. Use keyword arguments instead: initialize(name:, load:, overrides:)" + end + name = config_name unless config_name.nil? + load = do_load unless do_load.nil? + + @config_name = name || self.class.config_name raise ArgumentError, "Config name is missing" unless @config_name - load if do_load + self.load(overrides) if load end + # rubocop:enable Metrics/LineLength,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity - def reload + def reload(overrides = {}) clear - load + load(overrides) self end def clear self.class.config_attributes.each do |attr| send("#{attr}=", nil) end self end - def load + def load(overrides = {}) config = load_from_sources((self.class.defaults || {}).deep_dup) + + config.merge!(overrides) unless overrides.nil? config.each do |key, val| set_value(key, val) end end @@ -84,12 +100,10 @@ end def load_from_file(config) config_path = Anyway.env.fetch(config_name).delete('conf') || "./config/#{config_name}.yml" - if config_path && File.file?(config_path) - config.deep_merge!(parse_yml(config_path) || {}) - end + config.deep_merge!(parse_yml(config_path) || {}) if config_path && File.file?(config_path) config end def load_from_env(config) config.deep_merge!(Anyway.env.fetch(config_name))