Sha256: 6964603543dee9313db8602510e55d5a7d4c74ccd025d7a3cb77371b272c2a50

Contents?: true

Size: 874 Bytes

Versions: 10

Compression:

Stored size: 874 Bytes

Contents

require "active_support/core_ext/module/delegation"
require "active_support/core_ext/object/blank"

module Administrate
  class Search
    def initialize(resolver, term)
      @resolver = resolver
      @term = term
    end

    def run
      if @term.blank?
        resource_class.all
      else
        resource_class.where(query, *search_terms)
      end
    end

    private

    delegate :resource_class, to: :resolver

    def query
      search_attributes.map { |attr| "lower(#{attr}) LIKE ?" }.join(" OR ")
    end

    def search_terms
      ["%#{term.downcase}%"] * search_attributes.count
    end

    def search_attributes
      attribute_types.keys.select do |attribute|
        attribute_types[attribute].searchable?
      end
    end

    def attribute_types
      resolver.dashboard_class::ATTRIBUTE_TYPES
    end

    attr_reader :resolver, :term
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
administrate-0.5.0 lib/administrate/search.rb
administrate-0.4.0 lib/administrate/search.rb
administrate-0.3.0 lib/administrate/search.rb
administrate-0.2.2 lib/administrate/search.rb
administrate-0.2.1 lib/administrate/search.rb
administrate-0.2.0 lib/administrate/search.rb
administrate-0.2.0.rc1 lib/administrate/search.rb
administrate-0.1.5 lib/administrate/search.rb
administrate-0.1.4 lib/administrate/search.rb
administrate-0.1.3 lib/administrate/search.rb