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))