Sha256: e168b9f6dda730ad8e70fd519b3e238efd41782f924371e9ccaa9eef641229de
Contents?: true
Size: 1.67 KB
Versions: 2
Compression:
Stored size: 1.67 KB
Contents
require 'ostruct' module RailsConfig class Options < OpenStruct def empty? marshal_dump.empty? end def add_source!(source) # handle yaml file paths source = (Sources::YAMLSource.new(source)) if source.is_a?(String) @config_sources ||= [] @config_sources << source end # look through all our sources and rebuild the configuration def reload! conf = {} @config_sources.each do |source| source_conf = source.load if conf.empty? conf = source_conf else DeepMerge.deep_merge!(source_conf, conf, :preserve_unmergeables => false) end end # swap out the contents of the OStruct with a hash (need to recursively convert) marshal_load(__convert(conf).marshal_dump) return self end alias :load! :reload! def reload_from_files(*files) RailsConfig.load_and_set_settings(files) reload! end def to_hash result = {} marshal_dump.each do |k, v| result[k] = v.instance_of?(RailsConfig::Options) ? v.to_hash : v end result end def to_json(*args) require "json" unless defined?(JSON) to_hash.to_json(*args) end protected # Recursively converts Hashes to Options (including Hashes inside Arrays) def __convert(h) #:nodoc: s = self.class.new h.each do |k, v| s.new_ostruct_member(k) if v.is_a?(Hash) v = v["type"] == "hash" ? v["contents"] : __convert(v) elsif v.is_a?(Array) v = v.collect { |e| e.instance_of?(Hash) ? __convert(e) : e } end s.send("#{k}=".to_sym, v) end s end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
rails_config-0.2.5 | lib/rails_config/options.rb |
rails_config-0.2.4 | lib/rails_config/options.rb |