lib/paper_trail/cleaner.rb
def clean_versions!(options = {})
      options = { keeping: 1, date: :all }.merge(options)
      gather_versions(options[:item_id], options[:date]).each do |_item_id, item_versions|
        group_versions_by_date(item_versions).each do |_date, date_versions|
          # Remove the number of versions we wish to keep from the collection
          # of versions prior to destruction.
          date_versions.pop(options[:keeping])
          date_versions.map(&:destroy)
        end
      end
    end
def clean_versions!(options = {})
      options = { keeping: 1, date: :all }.merge(options)
      gather_versions(options[:item_id], options[:date]).each do |_item_id, item_versions|
        group_versions_by_date(item_versions).each do |_date, date_versions|
          # Remove the number of versions we wish to keep from the collection
          # of versions prior to destruction.
          date_versions.pop(options[:keeping])
          date_versions.map(&:destroy)
        end
      end
    end
Destroys all but the most recent version(s) for items on a given date
 (or on all dates). Useful for deleting drafts.

 Options:

 - :keeping - An `integer` indicating the number of versions to be kept for
   each item per date. Defaults to `1`. The most recent matching versions
   are kept.
 - :date - Should either be a `Date` object specifying which date to
   destroy versions for or `:all`, which will specify that all dates
   should be cleaned. Defaults to `:all`.
 - :item_id - The `id` for the item to be cleaned on, or `nil`, which
   causes all items to be cleaned. Defaults to `nil`.