class Kori

Public Class Methods

create(file_or_hash)
Alias for: freeze
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