module Botfly class CallbackContext def initialize(caller, params) setup_params(params) @caller = caller end def method_missing(name, *args) @caller.send(name,*args) if name.to_s.scan(/^setup/).empty? end private # OK, so. Get the instance's eigenclass, then, call the private method define_method - thus created the method called #{name} that returns value. Basically attr_reader but for any generic variable. def expose(name, value) (class<