lib/rails_config.rb in rails_config-0.0.5 vs lib/rails_config.rb in rails_config-0.0.6

- old
+ new

@@ -1,5 +1,65 @@ -require 'rails_config/vendor/deep_merge' unless defined?(DeepMerge) require 'pathname' +require 'ostruct' +require 'yaml' +require 'erb' -require 'rails_config/setting_builder' +require 'rails_config/vendor/deep_merge' unless defined?(DeepMerge) + +module RailsConfig + + @@load_paths = [] + def self.load_paths + @@load_paths + end + + # Create a config object (OpenStruct) from a yaml file. If a second yaml file is given, then the sections of that file will overwrite the sections + # if the first file if they exist in the first file. + def self.load_files(*files) + config = OpenStruct.new + + @@load_paths = [files].flatten.compact.uniq + # add singleton method to our Settings that reloads its settings from the load_paths + def config.reload! + + conf = {} + RailsConfig.load_paths.to_a.each do |path| + file_conf = YAML.load(ERB.new(IO.read(path.to_s)).result) if path and File.exists?(path.to_s) + next unless file_conf + + if conf.size > 0 + DeepMerge.deep_merge!(file_conf, conf, :preserve_unmergeables => false) + else + conf = file_conf + end + end + + # load all the new values into the openstruct + marshal_load(RailsConfig.convert(conf).marshal_dump) + + return self + end + + config.reload! + return config + end + + # Recursively converts Hashes to OpenStructs (including Hashes inside Arrays) + def self.convert(h) #:nodoc: + s = OpenStruct.new + h.each do |k, v| + s.new_ostruct_member(k) + if v.is_a?(Hash) + s.send( (k+'=').to_sym, convert(v)) + elsif v.is_a?(Array) + converted_array = v.collect { |e| e.instance_of?(Hash) ? convert(e) : e } + s.send("#{k}=".to_sym, converted_array) + else + s.send("#{k}=".to_sym, v) + end + end + s + end +end + +# add railtie require 'rails_config/railtie'