class Configue::Container

When you have such configuration files:

# config/accounts/admin_users.yml
accounts:
  admin_users:
    - grumpy
    - sneezy

# config/accounts/test_users.yml
accounts:
  test_users:
    - sleepy
    - dopey

you can load them into your class in the following ways:

class Foo < Configue::Container
  config.source_dir "#{File.dirname(__FILE__)}/config"
end

Foo.accounts.admin_users
# => ["grumpy", "sneezy"]

Foo.accounts.test_users
# => ["sleepy", "dopey"]

Public Class Methods

config() click to toggle source

config allows you to access the object for setting up container.

# File lib/configue/container.rb, line 56
def config
  @config_access_name = "config"
  @setting ||= Setting.new(ContainerAdapter.new(self))
end
config_setting() click to toggle source

config_setting is the same with config.

# File lib/configue/container.rb, line 62
def config_setting
  @config_access_name = "config_setting"
  @setting ||= Setting.new(ContainerAdapter.new(self))
end

Private Class Methods

method_missing(name, *args, &block) click to toggle source
# File lib/configue/container.rb, line 68
def method_missing(name, *args, &block)
  # makes @instance in this line.
  @setting.load!

  if @instance.respond_to?(:key?) and @instance.key?(name)
    @instance[name]
  else
    @instance.__send__(name, *args, &block)
  end
end

Public Instance Methods

query(key=nil) click to toggle source

When you do not know whether your setting object has keys that you want to specify and want to avoid NoMethodError, you can use query and retrieve.

Foo.query("accounts.admin_users").retrieve
# => ["grumpy", "sneezy"]

Foo.query("users.admin_users").retrieve
# => nil

Foo.query[:accounts][:admin_users].retrieve
# => ["grumpy", "sneezy"]
# File lib/configue/container.rb, line 48
def query(key=nil)
  q = Criteria.new(self)
  q = key.split('.').each.inject(q) {|c, k| c[k] } if key
  q
end