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

135 lines (117 sloc) 2.818 kb
module Picky
#
#
class Category
include Helpers::Indexing
attr_reader :exact,
:partial
# Indexes, creates the "prepared_..." file.
#
def prepare scheduler = Scheduler.new
categories = Categories.new
categories << self
with_data_snapshot do
scheduler.schedule do
indexer.prepare categories, scheduler
nil # Note: Needed so procrastinate is happy.
end
end
end
# Generates all caches for this category.
#
def cache scheduler = Scheduler.new
scheduler.schedule do
empty
retrieve
dump
nil # Note: Needed so procrastinate is happy.
end
end
# Empty all the indexes.
#
# TODO Call clear.
#
def empty
exact.empty
partial.empty
end
# Take a data snapshot if the source offers it.
#
def with_data_snapshot
if source.respond_to? :with_snapshot
source.with_snapshot(@index) do
yield
end
else
yield
end
end
# Retrieves the prepared index data into the indexes and
# generates the necessary derived indexes.
#
def retrieve
format = key_format?
static = static?
prepared.retrieve { |id, token| add_tokenized_token id, token, :<<, format, static }
end
# Return the key format.
#
# If no key_format is defined on the category
# and the source has no key format, ask
# the index for one.
#
def key_format
@key_format ||= @index.key_format
end
def key_format?
key_format
end
# Return the key format.
#
# If no key_format is defined on the category
# and the source has no key format, ask
# the index for one.
#
def id
@id ||= @index.id
end
def static?
@index.static? # || @static
end
# Where the data is taken from.
#
def from
@from || name
end
# Return an appropriate source.
#
# If we have no explicit source, we'll check the index for one.
#
def source
@source || @index.source
end
# The indexer is lazily generated and cached.
#
def indexer
@indexer ||= source.respond_to?(:each) ? Indexers::Parallel.new(self) : Indexers::Serial.new(self)
end
# Returns an appropriate tokenizer.
# If one isn't set on this category, will try the index,
# and finally the default index tokenizer.
#
# Will return nil if tokenize is set to false.
#
def tokenizer
@tokenizer || @index.tokenizer if @tokenize
end
# Clears the caches.
#
# THINK about the semantics of clear.
# Is a delete even needed or is it clear+dump?
#
def clear
exact.clear
partial.clear
end
end
end
Jump to Line
Something went wrong with that request. Please try again.