Kapitola 10. Konfigurace programu

Odkazy:

class Config
    def initialize(data={})
        @data = {}
        update!(data)
    end

    def update!(data)
        data.each do |key, value|
            self[key] = value
        end
    end

    def [](key)
        @data[key.to_sym]
    end

    def []=(key,value)
        if value.class == Hash
            @data[key.to_sym] = Config.new(value)
        else
            @data[key.to_sym] = value
        end
    end

    def method_missing(sym, *args)
        if sym.to_s =~ /(.+)=$/
            self[$1] = args.first
        else
            self[sym]
        end
    end
end

Použití:

config = Config.new
config.database = 'database_name'
config.username = 'user'
config.db_hosts = {
    'sj' => 'sj.example.com',
    'ny' => 'ny.example.com'
}

config.username      # => 'user'
config.db_hosts.ny   # => 'ny.example.com'

Použití třídy Hash místo třídy OpenStruct má své výhody hierarchických konfigurací.

yaml_data = "
---
database: mydb
auth:
    user: myuser
    pass: mypass
"

require 'yaml'
config = Config.new(YAML.load(yaml_data))
config.auth.user   # => "myuser"

Použití Configatron

def configatron
    @configatron ||= Configatron.new
end
configatron do |config|
    config.app_name = "My Awesome App"
    config.database_url = "postgres://localhost/somedb"
    # etc …
end
Licence Creative Commons
Tento dokument Ruby, jehož autorem je Radek Hnilica, podléhá licenci Creative Commons Uveďte autora-Nevyužívejte dílo komerčně-Zachovejte licenci 3.0 Česká republika .