Sha256: 2cc5ab267e9990365cbdea2349f82efea59c9150b0e3f551d834f5bc142cd4a5

Contents?: true

Size: 1.43 KB

Versions: 6

Compression:

Stored size: 1.43 KB

Contents

module Searchlogic
  module Search
    # = Searchlogic Searching
    #
    # Implements searching functionality for searchlogic. Searchlogic::Search::Base and Searchlogic::Conditions::Base can both search and include
    # this module.
    module Searching
      # Use these methods just like you would in ActiveRecord
      SEARCH_METHODS = [:all, :find, :first]
      CALCULATION_METHODS = [:average, :calculate, :count, :maximum, :minimum, :sum]
      
      (SEARCH_METHODS + CALCULATION_METHODS).each do |method|
        class_eval <<-"end_eval", __FILE__, __LINE__
          def #{method}(*args)
            find_options = {}
            options = args.extract_options! # can't pass options, your options are in the search
            klass.send(:with_scope, :find => acting_as_filter? ? {} : scope) do
              options = sanitize(#{SEARCH_METHODS.include?(method)})
              if #{CALCULATION_METHODS.include?(method)}
                options[:distinct] = true if #{method == :count} && !joins.blank? && Config.search.remove_duplicates?
                args[0] = klass.primary_key if [nil, :all].include?(args[0])
              end
              args << options
              results = klass.#{method}(*args)
              results.uniq! if #{SEARCH_METHODS.include?(method)} && results.is_a?(Array) && !joins.blank? && Config.search.remove_duplicates?
              results
            end
          end
        end_eval
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
searchlogic-1.5.4 lib/searchlogic/search/searching.rb
searchlogic-1.5.7 lib/searchlogic/search/searching.rb
searchlogic-1.5.6 lib/searchlogic/search/searching.rb
searchlogic-1.5.8 lib/searchlogic/search/searching.rb
searchlogic-1.5.9 lib/searchlogic/search/searching.rb
searchlogic-1.5.10 lib/searchlogic/search/searching.rb