Sha256: a404b002dee1f4f1efa08f4ea7c8bb8a27a6aeb29c58cb1e50d11ab8eb79f75e

Contents?: true

Size: 1.36 KB

Versions: 25

Compression:

Stored size: 1.36 KB

Contents

# frozen_string_literal: true

module Maglev
  # Search for a single page if the id param is passed to the call function
  # or search for all the pages matching or not the q criteria (based on its presence).
  # It also searches among the static pages
  class SearchPages
    include Injectable

    dependency :fetch_site
    dependency :fetch_static_pages

    argument :id, default: nil
    argument :q, default: nil
    argument :content_locale
    argument :default_locale

    def call
      id.nil? ? all_pages : single_page
    end

    protected

    def single_page
      find_static_pages.find { |page| page.id == id } ||
        resources.by_id_or_path(id, content_locale).first ||
        resources.by_id_or_path(id, default_locale).first
    end

    def all_pages
      find_persisted_pages + find_static_pages
    end

    def find_persisted_pages
      q ? resources.search(q, content_locale) : resources.all
    end

    def find_static_pages
      Maglev::I18n.with_locale(content_locale) do
        fetch_static_pages.call.find_all do |page|
          match_static_page?(page)
        end
      end
    end

    def match_static_page?(page)
      q.nil? || (
        q.present? &&
        (
          page.title.downcase.include?(q.downcase) ||
          page.path.include?(q.downcase)
        )
      )
    end

    def resources
      ::Maglev::Page
    end
  end
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
maglevcms-1.8.0 app/services/maglev/search_pages.rb
maglevcms-1.7.3 app/services/maglev/search_pages.rb
maglevcms-1.7.2 app/services/maglev/search_pages.rb
maglevcms-1.7.1 app/services/maglev/search_pages.rb
maglevcms-1.7.0 app/services/maglev/search_pages.rb
maglevcms-1.6.1 app/services/maglev/search_pages.rb
maglevcms-1.6.0 app/services/maglev/search_pages.rb
maglevcms-1.5.1 app/services/maglev/search_pages.rb
maglevcms-1.4.0 app/services/maglev/search_pages.rb
maglevcms-1.3.0 app/services/maglev/search_pages.rb
maglevcms-1.2.2 app/services/maglev/search_pages.rb
maglevcms-1.2.1 app/services/maglev/search_pages.rb
maglevcms-1.2.0 app/services/maglev/search_pages.rb
maglevcms-1.1.7 app/services/maglev/search_pages.rb
maglevcms-1.1.6 app/services/maglev/search_pages.rb
maglevcms-1.1.5 app/services/maglev/search_pages.rb
maglevcms-1.1.4 app/services/maglev/search_pages.rb
maglevcms-1.1.3 app/services/maglev/search_pages.rb
maglevcms-1.1.2 app/services/maglev/search_pages.rb
maglevcms-1.1.1 app/services/maglev/search_pages.rb