Commit 4280df894b6bac6bed15b60c29ba270e13e31c8d

Authored by Fernanda Lopes
Committed by Antonio Terceiro
1 parent 998a91fa

class ActsAsSearchable transformed into a module

(ActionItem1519)
Showing 1 changed file with 35 additions and 28 deletions   Show diff stats
lib/acts_as_searchable.rb
1   -class << ActiveRecord::Base
2   -
3   - def acts_as_searchable(options = {})
4   - acts_as_ferret({ :remote => true }.merge(options))
5   - def find_by_contents(query, ferret_options = {}, db_options = {})
6   - pg_options = {}
7   - if ferret_options[:page]
8   - pg_options[:page] = ferret_options.delete(:page)
9   - end
10   - if ferret_options[:per_page]
11   - pg_options[:per_page] = ferret_options.delete(:per_page)
12   - end
  1 +module ActsAsSearchable
  2 +
  3 + module ClassMethods
  4 + def acts_as_searchable(options = {})
  5 + acts_as_ferret({ :remote => true }.merge(options))
  6 + extend FindByContents
  7 + end
13 8  
14   - ferret_options[:limit] = :all
15   -
16   - # FIXME this is a HORRIBLE HACK
17   - ids = find_ids_with_ferret(query, ferret_options)[1][0..8000].map{|r|r[:id].to_i}
  9 + module FindByContents
  10 + def find_by_contents(query, ferret_options = {}, db_options = {})
  11 + pg_options = {}
  12 + if ferret_options[:page]
  13 + pg_options[:page] = ferret_options.delete(:page)
  14 + end
  15 + if ferret_options[:per_page]
  16 + pg_options[:per_page] = ferret_options.delete(:per_page)
  17 + end
18 18  
19   - if ids.empty?
20   - ids << -1
21   - end
  19 + ferret_options[:limit] = :all
22 20  
23   - if db_options[:conditions]
24   - db_options[:conditions] = sanitize_sql_for_conditions(db_options[:conditions]) + " and #{table_name}.id in (#{ids.join(', ')})"
25   - else
26   - db_options[:conditions] = "#{table_name}.id in (#{ids.join(', ')})"
27   - end
  21 + # FIXME this is a HORRIBLE HACK
  22 + ids = find_ids_with_ferret(query, ferret_options)[1][0..8000].map{|r|r[:id].to_i}
28 23  
29   - pg_options[:page] ||= 1
30   - result = find(:all, db_options)
31   - result.paginate(pg_options)
  24 + if ids.empty?
  25 + ids << -1
  26 + end
  27 +
  28 + if db_options[:conditions]
  29 + db_options[:conditions] = sanitize_sql_for_conditions(db_options[:conditions]) + " and #{table_name}.id in (#{ids.join(', ')})"
  30 + else
  31 + db_options[:conditions] = "#{table_name}.id in (#{ids.join(', ')})"
  32 + end
  33 +
  34 + pg_options[:page] ||= 1
  35 + result = find(:all, db_options)
  36 + result.paginate(pg_options)
  37 + end
32 38 end
33 39 end
34   -
35 40 end
  41 +
  42 +ActiveRecord::Base.send(:extend, ActsAsSearchable::ClassMethods)
... ...