class Irc::Bot::Config::ManagerClass
container for bot configuration
Attributes
Public Class Methods
Public Instance Methods
Source
# File lib/rbot/config.rb, line 295 def [](key) # return @items[key].value if @items.has_key?(key) return @items[key.to_sym].value if @items.has_key?(key.to_sym) # try to still support unregistered lookups # but warn about them # if @config.has_key?(key) # warning "Unregistered lookup #{key.inspect}" # return @config[key] # end if @config.has_key?(key.to_sym) warning _("Unregistered lookup #{key.to_sym.inspect}") return @config[key.to_sym] end return false end
currently we store values in a hash but this could be changed in the future. We use hash semantics, however. components that register their config keys and setup defaults are supported via []
Source
# File lib/rbot/config.rb, line 311 def []=(key, value) return @items[key.to_sym].set(value) if @items.has_key?(key.to_sym) if @config.has_key?(key.to_sym) warning _("Unregistered lookup #{key.to_sym.inspect}") return @config[key.to_sym] = value end end
Source
# File lib/rbot/config.rb, line 259 def bot_associate(bot, reset=false) reset_config if reset @bot = bot return unless @bot @changed = false conf = @bot.path 'conf.yaml' if File.exist? conf begin newconfig = YAML::load_file conf newconfig.each { |key, val| @config[key.to_sym] = val } return rescue error "failed to read conf.yaml: #{$!}" end end # if we got here, we need to run the first-run wizard Wizard.new(@bot).run # save newly created config @changed = true save end
Associate with bot bot
Source
# File lib/rbot/config.rb, line 320 def method_missing(method, *args, &block) return @config.send(method, *args, &block) end
pass everything else through to the hash
Source
# File lib/rbot/config.rb, line 284 def register(item) unless item.kind_of?(Value) raise ArgumentError,"item must be an Irc::Bot::Config::Value" end @items[item.key] = item end
Source
# File lib/rbot/config.rb, line 238 def reset_config @items = Hash.new @config = Hash.new(false) # We allow default values for config keys to be overridden by # the config file /etc/rbot.conf # The main purpose for this is to allow distro or system-wide # settings such as external program paths (figlet, toilet, ispell) # to be set once for all the bots. @overrides = Hash.new etcfile = "/etc/rbot.conf" if File.exist?(etcfile) log "Loading defaults from #{etcfile}" etcconf = YAML::load_file(etcfile) etcconf.each { |k, v| @overrides[k.to_sym] = v } end end
Source
# File lib/rbot/config.rb, line 325 def save if not @changed debug "Not writing conf.yaml (unchanged)" return end begin conf = @bot.path 'conf.yaml' fnew = conf + '.new' debug "Writing new conf.yaml ..." File.open(fnew, "w") do |file| savehash = {} @config.each { |key, val| savehash[key.to_s] = val } file.puts savehash.to_yaml end debug "Officializing conf.yaml ..." File.rename(fnew, conf) @changed = false rescue => e error "failed to write configuration file conf.yaml! #{$!}" error "#{e.class}: #{e}" error e.backtrace.join("\n") end end
write current configuration to #{botclass}/conf.yaml