code: def calculate_audit_for(param)
        #Gets all flattened attribute lists
        #objects are a hash of
        #{attributes: object attributes, whodunnit: paper_trail whodunnit which caused the object to be in this state}
        objects = [{attributes: self.attributes, whodunnit: self.paper_trail.originator},
          self.versions.map {|e| {attributes: YAML.load(e.object), whodunnit: e.paper_trail_originator} if e.object}.compact].flatten
        #rejecting objects with no update time, orders by the updated at times in ascending order
        objects = objects.select {|e| e[:attributes]["updated_at"]}.sort_by {|e| e[:attributes]["updated_at"]}
        result = []
        #Add the initial state if the first element has a value
        if(objects.count > 0 && !objects.first[:attributes][param.to_s].nil?)
          result <<  PaperTrailAudit::Change.new({old_value: nil,
              new_value: objects.first[:attributes][param.to_s],
              time: objects.first[:attributes]["updated_at"],
              whodunnit: objects.first[:whodunnit]
              })
        end
        objects.each_cons(2) do |a,b|
          if a[:attributes][param.to_s] != b[:attributes][param.to_s]
            result << PaperTrailAudit::Change.new({old_value: a[:attributes][param.to_s],
              new_value: b[:attributes][param.to_s],
              time: b[:attributes]["updated_at"],
              whodunnit: b[:whodunnit]
            })
          end
        end
        result
      end
docs: Returns the audit list for the specified column
  
   @param [symbol] param: symbol to query
   @return [array of Change objects]