class Ruboty::Handlers::RubyPersistence

Constants

NAMESPACE

Public Class Methods

new(*) click to toggle source
Calls superclass method
# File lib/ruboty/handlers/ruby_persistence.rb, line 26
def initialize(*)
  super
  restore
end

Public Instance Methods

define(message) click to toggle source
# File lib/ruboty/handlers/ruby_persistence.rb, line 31
def define(message)
  name = message[:name]

  if !variables.key?(name) && (method = predefined_method(name))
    message.reply("Error: `#{name}` is predefined by `#{method.owner}`")
  else
    define_and_persist_variable(message)
  end
end
list(message) click to toggle source
# File lib/ruboty/handlers/ruby_persistence.rb, line 53
def list(message)
  summary = variables.map do |name, value|
    "#{name}: #{value.inspect}"
  end.join("\n")

  message.reply(summary, code: true)
end
undefine(message) click to toggle source
# File lib/ruboty/handlers/ruby_persistence.rb, line 41
def undefine(message)
  name = message[:name]

  if variables[name]
    undefine_variable(name)
    variables.delete(name)
    message.reply("`#{name}` is now undefined")
  else
    message.reply("Error: No such variable `#{name}`")
  end
end

Private Instance Methods

context() click to toggle source
# File lib/ruboty/handlers/ruby_persistence.rb, line 97
def context
  ::Ruboty::RubyPersistence::MainContext
end
define_and_persist_variable(message) click to toggle source
# File lib/ruboty/handlers/ruby_persistence.rb, line 75
def define_and_persist_variable(message)
  name = message[:name]
  value = context.instance_eval(message[:code])
  define_variable(name, value)
  variables[name] = value
  message.reply("`#{name}` is now `#{value.inspect}`")
rescue Exception => exception
  message.reply("#{exception.class}: #{exception}")
end
define_variable(name, value) click to toggle source
# File lib/ruboty/handlers/ruby_persistence.rb, line 85
def define_variable(name, value)
  context.__send__(:define_method, name) { value }
end
predefined_method(name) click to toggle source
# File lib/ruboty/handlers/ruby_persistence.rb, line 69
def predefined_method(name)
  context.method(name)
rescue NameError
  nil
end
restore() click to toggle source
# File lib/ruboty/handlers/ruby_persistence.rb, line 63
def restore
  variables.each do |name, value|
    define_variable(name, value)
  end
end
undefine_variable(name) click to toggle source
# File lib/ruboty/handlers/ruby_persistence.rb, line 89
def undefine_variable(name)
  context.singleton_class.__send__(:undef_method, name)
end
variables() click to toggle source
# File lib/ruboty/handlers/ruby_persistence.rb, line 93
def variables
  robot.brain.data[NAMESPACE] ||= {}
end