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
|