class AppConfig

Constants

CONFIG_BASE_NAME
VERSION

Attributes

config_file_name[R]
config_files[R]
deploy_config_dir[R]
dist_config_dir[R]
global_config_dir[R]
platform_config_file_name[R]
user_config_dir[R]

Public Class Methods

app_name() click to toggle source
# File lib/appconf.rb, line 54
def self.app_name
        @@app_raw_name
end
get_config(config_name = nil, config_dir = nil) click to toggle source
# File lib/appconf.rb, line 57
def self.get_config config_name = nil, config_dir = nil
        raise ConfigError, ('please call %s::setup() before getting a config instance' % self.name) if @@app_name.nil?
        self.new config_name, config_dir
end
new(config_name = nil, config_dir = nil) click to toggle source
# File lib/appconf.rb, line 92
def initialize(config_name = nil, config_dir = nil)
        raise ArgumentError, 'specified config directory `%s\' does not exist'%config_dir if config_dir && !File.exist?(config_dir)
        
        @base_name = config_name || @@app_name
        @deploy_config_dir = config_dir || @@deploy_config_dir
        @deploy_config_dir = nil if config_dir && config_dir.length == 0
        @deploy_config_dir = File.expand_path(@deploy_config_dir) if @deploy_config_dir

        @config_file_name = '%s.%s.yaml' % [@base_name, CONFIG_BASE_NAME]
        @platform_config_file_name = '%s.%s.%s.yaml' % [@base_name, RUBY_PLATFORM, CONFIG_BASE_NAME]

        @dist_config_dir = File.join @@app_root_dir, CONFIG_BASE_NAME
        @global_config_dir = sys_config_dir
        @user_config_dir = usr_config_dir

        @config_files = []
        reload
end
setup(app_name, app_root_dir, deploy_conf_dir = nil) click to toggle source
# File lib/appconf.rb, line 40
def self.setup(app_name, app_root_dir, deploy_conf_dir = nil)
        raise ArgumentError, 'app name cannot be empty' if app_name.nil? or app_name.length == 0
        raise ArgumentError, 'app root directory not specified' if app_root_dir.nil? or app_root_dir.length == 0
        raise ArgumentError, 'app root directory does not exist or not a directory' unless File.directory?(app_root_dir)

        @@app_raw_name = app_name
        @@app_name = app_name.downcase
        @@app_root_dir = File.expand_path(app_root_dir)

        raise ArgumentError, 'deploy config directory does not exist or not a directory' if deploy_conf_dir && !File.directory?(deploy_conf_dir)
        @@deploy_config_dir = deploy_conf_dir or ENV[@@app_name.upcase + '_CONF_DIR']
        raise ConfigError, 'config directory `%s\' specifed by environment does not exist or not a directory' %
                @@deploy_config_dir if @@deploy_config_dir && !File.directory?(@@deploy_config_dir)
end

Public Instance Methods

[](key) click to toggle source
# File lib/appconf.rb, line 62
def [] key
        @deploy_platform_config.path_lookup(key) ||
                @deploy_config.path_lookup(key) ||
                @user_platform_config.path_lookup(key) ||
                @user_config.path_lookup(key) ||
                @global_platform_config.path_lookup(key) ||
                @global_config.path_lookup(key) ||
                @dist_platform_config.path_lookup(key) ||
                @dist_config.path_lookup(key)
end
reload() click to toggle source
# File lib/appconf.rb, line 73
def reload
        @deploy_platform_config = deploy_platform_config || {}
        @deploy_config = deploy_config || {}

        @user_platform_config = user_platform_config || {}
        @user_config = user_config || {}

        @global_platform_config = global_platform_config || {}
        @global_config = global_config || {}

        @dist_platform_config = dist_platform_config || {}
        @dist_config = dist_config || {}
end

Private Instance Methods

deploy_config() click to toggle source
# File lib/appconf.rb, line 159
def deploy_config
        return nil if @deploy_config_dir.nil?
        file_path = File.join @deploy_config_dir, @config_file_name
        if file_path && File.file?(file_path)
                @config_files << file_path
                return load_yaml_file(file_path)
        end
        nil
end
deploy_platform_config() click to toggle source
# File lib/appconf.rb, line 168
def deploy_platform_config
        return nil if @deploy_config_dir.nil?
        file_path = File.join @deploy_config_dir, @platform_config_file_name
        if file_path && File.file?(file_path)
                @config_files << file_path
                return load_yaml_file(file_path)
        end
        nil
end
dist_config() click to toggle source
# File lib/appconf.rb, line 111
def dist_config
        file_path = File.join @dist_config_dir, @config_file_name
        if File.exist?(file_path)
                @config_files << file_path
                return load_yaml_file file_path
        end
        nil
end
dist_platform_config() click to toggle source
# File lib/appconf.rb, line 119
def dist_platform_config
        file_path = File.join @dist_config_dir, @platform_config_file_name
        if File.exist?(file_path)
                @config_files << file_path
                return load_yaml_file file_path
        end
        nil
end
global_config() click to toggle source
# File lib/appconf.rb, line 127
def global_config
        file_path = File.join @global_config_dir, @config_file_name
        if File.exist?(file_path)
                @config_files << file_path
                return load_yaml_file file_path
        end
        nil
end
global_platform_config() click to toggle source
# File lib/appconf.rb, line 135
def global_platform_config
        file_path = File.join @global_config_dir, @platform_config_file_name
        if File.exist?(file_path)
                @config_files << file_path
                return load_yaml_file file_path
        end
        nil
end
load_yaml_file(file_path) click to toggle source
# File lib/appconf.rb, line 178
def load_yaml_file(file_path)
        YAML.load(IO.read(file_path)) if File.file?(file_path)
end
sys_config_dir() click to toggle source
# File lib/appconf.rb, line 182
def sys_config_dir
        if ENV['OS'] == 'Windows_NT'
                dir = File.join(ENV['ALLUSERSPROFILE'], 'Application Data', @@app_name)
        else
                dir = File.join('/etc', @@app_name)
        end
        return File.expand_path(dir)
end
user_config() click to toggle source
# File lib/appconf.rb, line 143
def user_config
        file_path = File.join @user_config_dir, @config_file_name
        if File.exist?(file_path)
                @config_files << file_path
                return load_yaml_file file_path
        end
        nil
end
user_platform_config() click to toggle source
# File lib/appconf.rb, line 151
def user_platform_config
        file_path = File.join @user_config_dir, @platform_config_file_name
        if File.exist?(file_path)
                @config_files << file_path
                return load_yaml_file file_path
        end
        nil
end
usr_config_dir() click to toggle source
# File lib/appconf.rb, line 190
def usr_config_dir
        if ENV['OS'] == 'Windows_NT'
                dir = File.join(ENV['USERPROFILE'], @@app_name)
        else
                dir = File.join(ENV['HOME'], '.' + @@app_name)
        end
        return File.expand_path(dir)
end