Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

109 lines (96 sloc) 2.914 kb
module Picky
#
#
class Index
include Helpers::Indexing
# Delegators for indexing.
#
delegate :cache,
:clear,
:to => :categories
# Define an index tokenizer on the index.
#
# Parameters are the exact same as for indexing.
#
def indexing options = {}
@tokenizer = Tokenizer.from options
end
# Calling prepare on an index will call prepare
# on every category.
#
# Decides whether to use a parallel indexer or whether to
# delegate to each category to prepare themselves.
#
def prepare scheduler = Scheduler.new
if source.respond_to?(:each)
check_source_empty
prepare_in_parallel scheduler
else
with_data_snapshot { categories.prepare scheduler }
end
end
# Check if the given enumerable source is empty.
#
# Note: Checking as early as possible to tell the
# user as early as possible.
#
def check_source_empty
Picky.logger.warn %Q{\n\033[1mWarning\033[m, source for index "#{name}" is empty: #{source} (responds true to empty?).\n} if source.respond_to?(:empty?) && source.empty?
end
# Indexes the categories in parallel.
#
# Only use where the category does have a #each source defined.
#
def prepare_in_parallel scheduler
indexer = Indexers::Parallel.new self
indexer.prepare categories, scheduler
end
# Note: Duplicated in category_indexing.rb.
#
# Take a data snapshot if the source offers it.
#
def with_data_snapshot
if source.respond_to? :with_snapshot
source.with_snapshot(self) do
yield
end
else
yield
end
end
# Returns the installed tokenizer or the default.
#
def tokenizer
@tokenizer || Indexes.tokenizer
end
# Define a source on the index.
#
# Parameter is a source, either one of the standard sources or
# anything responding to #each and returning objects that
# respond to id and the category names (or the category from option).
#
def source some_source = nil, &block
some_source ||= block
some_source ? (@source = Source.from(some_source, false, name)) : unblock_source
end
# Get the actual source if it is wrapped in a time
# capsule, i.e. a block/lambda.
#
def unblock_source
@source.respond_to?(:call) ? @source.call : @source
end
# Define a key_format on the index.
#
# Parameter is a method name to use on the key (e.g. :to_i, :to_s, :strip).
#
def key_format key_format = nil
key_format ? (@key_format = key_format) : @key_format
end
# Define what to do after indexing.
# (Only used in the Sources::DB)
#
def after_indexing after_indexing = nil
after_indexing ? (@after_indexing = after_indexing) : @after_indexing
end
end
end
Jump to Line
Something went wrong with that request. Please try again.