Sha256: 1b171ad3fb5612fdd205c98344735e49252799a3cddc30bfc16c1f6787a7cec3

Contents?: true

Size: 1.98 KB

Versions: 2

Compression:

Stored size: 1.98 KB

Contents

# encoding: utf-8
#
module Query

  # This class primarily handles switching through similar token constellations.
  #
  class Tokens

    #
    #
    cattr_accessor :maximum
    self.maximum = 5

    # Basically delegates to its internal tokens array.
    #
    self.delegate *[Enumerable.instance_methods, :slice!, :[], :uniq!, :last, :reject!, :length, :size, :empty?, :each, :exit, { :to => :@tokens }].flatten

    #
    #
    def initialize tokens = []
      @tokens = tokens
    end

    #
    #
    def tokenize_with tokenizer
      @tokens.each { |token| token.tokenize_with(tokenizer) }
    end

    # Generates an array in the form of
    # [
    #  [combination],                           # of token 1
    #  [combination, combination, combination], # of token 2
    #  [combination, combination]               # of token 3
    # ]
    #
    # TODO If we want token behaviour defined per Query, we can
    #      compact! here
    #
    def possible_combinations_in type
      @tokens.inject([]) do |combinations, token|
        combinations << token.possible_combinations_in(type)
      end
      # TODO compact! if ignore_unassigned_tokens
    end

    # Makes the last of the tokens partial.
    #
    def partialize_last
      @tokens.last.partial = true unless empty?
    end

    # Caps the tokens to the maximum.
    #
    # TODO parametrize?
    #
    def cap
      @tokens.slice!(@@maximum..-1) if cap?
    end
    def cap?
      @tokens.size > @@maximum
    end

    # Rejects blank tokens.
    #
    def reject
      @tokens.reject! &:blank?
    end

    # Switches the tokens
    #
    # TODO
    #
    def next_similar
      @tokens.first.next_similar unless empty?
    end

    # Returns a solr query.
    #
    def to_solr_query
      @tokens.map(&:to_solr).join ' '
    end

    #
    #
    def originals
      @tokens.map(&:original)
    end

    # Just join the token original texts.
    #
    def to_s
      originals.join ' '
    end
    
    # def to_a
    #   @tokens
    # end

  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
picky-0.0.3 lib/picky/query/tokens.rb
picky-0.0.2 lib/picky/query/tokens.rb