Sha256: 36b7348895e2069545fef9b98e8fca5ae98d886060b34072d7b8e0b65dda6314

Contents?: true

Size: 1.18 KB

Versions: 1

Compression:

Stored size: 1.18 KB

Contents

module EasySearch
  def self.included(base)
    base.send :extend, ClassMethods
  end
 
  module ClassMethods
    def acts_as_searchable(*args)
      @search_options = args
      self.send :extend, SearchClassMethods
    end
  end
  
  module SearchClassMethods
    def search(search)
      if search
        query = []
        values = []
        @search_options.each do |opt|
          condition_type = nil
        
          if opt.instance_of?(Hash)
            debugger
            case opt[opt.keys.first]
            when :equals
              condition_type = "="
            else
              condition_type = "LIKE"
            end
            
            query << "#{opt.keys.first} #{condition_type} ?"
          else
            query << "#{opt} LIKE ?"
          end
        
          if condition_type.nil? or condition_type == "LIKE"
            values << "%#{search}%"
          else
            values << search
          end            
        end
        
        conditions = [query.join(" OR ")]
        conditions += values
        
        find(:all, :conditions => conditions)
      else
        all
      end
    end      
  end
end

ActiveRecord::Base.send :include, EasySearch

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
easy_search_form-0.1.0 lib/easy_search/acts_as_searchable.rb