lib/anyway/config.rb in anyway_config-0.1.0 vs lib/anyway/config.rb in anyway_config-0.2.0

- old
+ new

@@ -1,29 +1,40 @@ module Anyway class Config class << self attr_reader :defaults, :config_attributes - def attr_config(*args,**hargs) + def attr_config(*args,hargs) @defaults = hargs.dup.with_indifferent_access @config_attributes = args+hargs.keys attr_accessor *@config_attributes end def config_name(val = nil) return (@config_name = val.to_s) unless val.nil? @config_name ||= extract_name end + # Load config as Hash by any name + # + # 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) + self.new(name,false).load_from_sources + end + private def extract_name self.name[/^(\w+)/].underscore end end - def initialize - load + def initialize(config_name=nil, do_load=true) + @config_name = config_name || self.class.config_name + load if do_load end def reload clear load @@ -36,29 +47,30 @@ end self end def load - # first, copy defaults - config = self.class.defaults.deep_dup - config_name = self.class.config_name + config = load_from_sources self.class.defaults.deep_dup + config.each do |key, val| + self.send("#{key}=",val) + end + end + def load_from_sources(config={}.with_indifferent_access) # then load from YAML if any - config_path = Rails.root.join("config","#{config_name}.yml") + config_path = Rails.root.join("config","#{@config_name}.yml") if File.file? config_path + require 'yaml' config.deep_merge! (YAML.load_file(config_path)[Rails.env] || {}) end # then load from Rails secrets - unless Rails.application.try(:secrets).nil? - config.deep_merge! (Rails.application.secrets.send(config_name)||{}) + if Rails.application.respond_to?(:secrets) + config.deep_merge! (Rails.application.secrets.send(@config_name)||{}) end # and then load from env - config.deep_merge! (Anyway.env.send(config_name) || {}) - - config.each do |key, val| - self.send("#{key}=",val) - end + config.deep_merge! (Anyway.env.send(@config_name) || {}) + config end end end \ No newline at end of file