Sha256: 23a49b15b7fc85f1244bf8d2d7032786e9b9fee2917c016dbf89d3e5d2300b2d

Contents?: true

Size: 851 Bytes

Versions: 2

Compression:

Stored size: 851 Bytes

Contents

class ThinkingSphinx::Masks::ScopesMask
  def initialize(search)
    @search = search
  end

  def can_handle?(method)
    public_methods(false).include?(method) || can_apply_scope?(method)
  end

  def search(query = nil, options = {})
    query, options = nil, query if query.is_a?(Hash)
    ThinkingSphinx::Search::Merger.new(@search).merge! query, options
  end

  private

  def apply_scope(scope, *args)
    search *sphinx_scopes[scope].call(*args)
  end

  def can_apply_scope?(scope)
    @search.options[:classes].present?    &&
    @search.options[:classes].length == 1 &&
    @search.options[:classes].first.respond_to?(:sphinx_scopes) &&
    sphinx_scopes[scope].present?
  end

  def method_missing(method, *args, &block)
    apply_scope method, *args
  end

  def sphinx_scopes
    @search.options[:classes].first.sphinx_scopes
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
thinking-sphinx-3.0.3 lib/thinking_sphinx/masks/scopes_mask.rb
thinking-sphinx-3.0.2 lib/thinking_sphinx/masks/scopes_mask.rb