@order = @@order
@@order += 1
@key = key.to_sym
- if params.has_key? :default
+ if @manager.overrides.key?(@key)
+ @default = @manager.overrides[@key]
+ elsif params.has_key? :default
@default = params[:default]
else
@default = false
end
def get
return @manager.config[@key] if @manager.config.has_key?(@key)
- return @default
+ return default
end
alias :value :get
def set(value, on_change = true)
@manager.config[@key] = value
@manager.changed = true
@on_change.call(@manager.bot, value) if on_change && @on_change
+ return self
end
def unset
@manager.config.delete(@key)
@manager.changed = true
@on_change.call(@manager.bot, value) if @on_change
+ return self
end
# set string will raise ArgumentErrors on failed parse/validate
attr_reader :bot
attr_reader :items
attr_reader :config
+ attr_reader :overrides
attr_accessor :changed
def initialize
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
# Associate with bot _bot_
return false
end
- # TODO should I implement this via Value or leave it direct?
- # def []=(key, value)
- # end
+ 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
# pass everything else through to the hash
def method_missing(method, *args, &block)
end
def run()
+ $stdout.sync = true
puts _("First time rbot configuration wizard")
puts "===================================="
puts _("This is the first time you have run rbot with a config directory of: #{@bot.botclass}")