Module: Doppel::ActsAsDoppel::ClassMethods

Defined in:
lib/doppel/acts_as_doppel.rb

Instance Method Summary collapse

Instance Method Details

#has_many_doppels(fields = [], options = {}) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/doppel/acts_as_doppel.rb', line 9

def has_many_doppels(fields = [], options = {})
  options = Doppel::ActsAsDoppel.merge_default_options(options)
  other_table_name = "doppel_#{table_name}"
  table_name_key = "#{table_name}.#{primary_key}"
  other_table_name_key = "#{other_table_name}.#{primary_key}"
  fields.each do |field|
    class_eval "      scope \"with_\#{field}_doppels\", lambda { |count = \#{options[:count]}, lev = \#{options[:sensitivity]}|\n        select(\"DISTINCT \#{table_name}.*\")\n          .where(\"\#{table_name_key} != \#{other_table_name_key}\")\n          .where(\"levenshtein(\#{table_name}.\#{field}, \#{other_table_name}.\#{field}) < \\#\\{lev\\}\")\n          .from(\"\#{table_name}, \#{table_name} as \#{other_table_name}\")\n          .group(table_name_key).having(\"COUNT(\#{other_table_name_key}) > \\#\\{count\\}\")\n      }\n\n      def \#{field}_doppels\n        @\#{field}_doppels ||= self.where(\"levenshtein(\\#\\{self.sanitize(\#{field})\\}, \#{table_name}.\#{field}) < 2\").where.not(\#{primary_key}: \#{primary_key})\n      end\n    END\n    # scope \"with_\#{field}_doppels\", lambda { |count = options[:count], lev = options[:sensitivity]|\n    #   select(\"DISTINCT \#{table_name}.*\")\n    #     .where(\"\#{table_name_key} != \#{other_table_name_key}\")\n    #     .where(\"levenshtein(\#{table_name}.\#{field}, \#{other_table_name}.\#{field}) < \#{lev}\")\n    #     .from(\"\#{table_name}, \#{table_name} as \#{other_table_name}\")\n    #     .group(table_name_key).having(\"COUNT(\#{other_table_name_key}) > \#{count}\")\n    # }\n  end\n\n  # scope 'with_any_doppels', lambda { |count = options[:count], lev = options[:sensitivity]|\n  #   fields.inject(self) { |query, field| query.merge(send(\"with_\#{field}_doppels\")) }\n  # }\n\n  # alias_method 'with_dopels', \"with_\#{fields.first}_doppels\" if fields.one?\nend\n", __FILE__, __LINE__ + 1