class Class def attr_accessor_with_history(attr_name) attr_name = attr_name.to_s attr_hist_name = attr_name+'_history' #getter self.class_eval("def #{attr_name};@#{attr_name};end") #setter self.class_eval %Q{ def #{attr_name}=(val) # add to history @#{attr_hist_name} = [nil] if @#{attr_hist_name}.nil? @#{attr_hist_name} << val # set the value itself @#{attr_name}=val end def #{attr_hist_name};@#{attr_hist_name};end } end end