module FindDuplicates::ClassMethods

Public Instance Methods

duplicates(*args) click to toggle source
# File lib/find_duplicates.rb, line 22
def duplicates(*args)
  set_fields(args)
  self.joins("join (
        select #{fields_str}, count(*) as qty
        from #{self.table_name}
        group by #{fields_str}
        having count(*) > 1
    ) t on #{fields_query}").all
end

Private Instance Methods

fields_query() click to toggle source
# File lib/find_duplicates.rb, line 39
def fields_query
  @fields.map {|f| "#{self.table_name}.#{f} = t.#{f}"}.join(' and ')
end
fields_str() click to toggle source
# File lib/find_duplicates.rb, line 36
def fields_str
  @fields.join(',')
end
set_fields(args) click to toggle source
# File lib/find_duplicates.rb, line 32
def set_fields(args)
  @fields = args.is_a?(Array) ? args : [args]
  @fields = @fields.flatten.map &:to_s
end