class AppCfg::Source

Public Class Methods

add(source_object, options={}) click to toggle source
# File lib/appcfg/source.rb, line 21
def self.add(source_object, options={})
  if source_object.is_a?(String) && source_object[-4..-1] == '.yml'
    #YAML
    raise "File #{source_object} could not be located" unless File.exist? source_object
    add_source(YamlSource.new(options.merge(:file => source_object)))
  elsif source_object.is_a?(String) && source_object[-11..-1] == '.properties'
    #.properties
    raise "File #{source_object} could not be located" unless File.exist? source_object
    add_source(PropertiesSource.new(options.merge(:file => source_object)))
  elsif source_object.is_a?(Class) && source_object.respond_to?(:all)
    #AR Model
    add_source(ModelSource.new(options.merge(:class => source_object)))
  elsif source_object.is_a?(Hash)
    #Simple hash
    add_source(Source.new(source_object))
  else
    raise 'Could not match source object to any known types'
  end
end
clear() click to toggle source
# File lib/appcfg/source.rb, line 41
def self.clear
  @@sources = []
  reload_sources!
end
list() click to toggle source
# File lib/appcfg/source.rb, line 46
def self.list
  @@sources
end
new(options={}) click to toggle source
# File lib/appcfg/source.rb, line 9
def initialize(options={})
  @hash = options
end
reload_sources!() click to toggle source
# File lib/appcfg/source.rb, line 50
def self.reload_sources!
  cache = {}

  @@sources.each do |source|
    source.reload_data!
    cache = recursive_merge(cache, source.to_hash)
  end

  AppCfg.set_cache add_key_methods cache
end

Private Class Methods

add_key_methods(base) click to toggle source
# File lib/appcfg/source.rb, line 80
def self.add_key_methods(base)
  mod = Module.new do
    base.each do |key, value|
      define_method key do
        value
      end
    end
  end

  base.extend mod

  base.each do |key, value|
    next unless value.is_a? Hash
    base[key] = add_key_methods(value)
  end

  base
end
add_source(source) click to toggle source
# File lib/appcfg/source.rb, line 63
def self.add_source(source)
  @@sources << source
  reload_sources!
end
recursive_merge(base, other) click to toggle source
# File lib/appcfg/source.rb, line 68
def self.recursive_merge(base, other)
  other.each do |key, value|
    if base[key].is_a?(Hash) && value.is_a?(Hash)
      base[key] = recursive_merge(base[key], value)
    else
      base[key] = value
    end
  end

  base
end

Public Instance Methods

reload_data!() click to toggle source
# File lib/appcfg/source.rb, line 17
def reload_data!
  #Do nothing
end
to_hash() click to toggle source
# File lib/appcfg/source.rb, line 13
def to_hash
  @hash
end