class Kori
Public Class Methods
freeze(file_or_hash)
click to toggle source
# File lib/kori.rb, line 9 def freeze(file_or_hash) IceNine.deep_freeze(new(file_or_hash)) end
Also aliased as: create
new(file_or_hash)
click to toggle source
# File lib/kori.rb, line 46 def initialize(file_or_hash) case file_or_hash when Hash replace(file_or_hash) when String, Symbol replace(load_yaml(file_or_hash)) else raise ArgumentError, "Could not load configuration. Invalid type of argument (#{file_or_hash.class.name})." end create_accessors! end
Public Instance Methods
[](key)
click to toggle source
# File lib/kori.rb, line 26 def [](key) fetch(key, nil) end
fetch(*args)
click to toggle source
# File lib/kori.rb, line 30 def fetch(*args) arity = args.size raise ArgumentError, "invalid number of elements (#{arity} for 1..2)" unless arity.between?(1, 2) key, val = args if respond_to?(key.to_s) __send__(key.to_s) elsif arity == 2 val else raise KeyError, "key '#{key}' not found" end end
get(key)
click to toggle source
# File lib/kori.rb, line 17 def get(key) parts = key.split('.') curs = self while p = parts.shift curs = curs.__send__(p) end curs end
Private Instance Methods
create_accessor_for(key, val)
click to toggle source
# File lib/kori.rb, line 81 def create_accessor_for(key, val) instance_variable_set("@#{key}", val) self.class.class_eval <<-EOCODE, __FILE__, __LINE__ + 1 def #{key} @#{key} end EOCODE end
create_accessors!()
click to toggle source
# File lib/kori.rb, line 74 def create_accessors! self.each do |key, val| value = type_cast_if_hash(val) create_accessor_for(key, value) end end
load_yaml(file)
click to toggle source
# File lib/kori.rb, line 59 def load_yaml(file) on_rails = !!defined?(Rails) file = "#{rails_config_path}/#{file}.yml" if on_rails file = file.to_s.concat('.yml') if file.is_a?(Symbol) config = YAML.load(ERB.new(File.read(file)).result) config = config[Rails.env] if on_rails config end
rails_config_path()
click to toggle source
# File lib/kori.rb, line 70 def rails_config_path Rails.application.paths['config'].existent.first end
type_cast_if_hash(value)
click to toggle source
# File lib/kori.rb, line 90 def type_cast_if_hash(value) if value.is_a?(Hash) self.class.__send__(:new, value) elsif value.is_a?(Array) value.map { |item| type_cast_if_hash(item) } else value end end