Sha256: e42395be637ed3c07692f4e8f6a9c0b493a5aa9b3497fa4b8e84cd364cb132ec

Contents?: true

Size: 1.38 KB

Versions: 1

Compression:

Stored size: 1.38 KB

Contents

module Query

  # Describes the combination of a token (the text) and
  # the index (the bundle).
  #
  # A combination is a single part of an allocation.
  #
  # An allocation consists of a number of combinations.
  #
  class Combination

    attr_reader :token, :bundle

    def initialize token, category
      @token    = token
      @category = category
      @bundle   = category.bundle_for token
      @text     = @token.text # don't want to use reset_similar already
    end
    
    # Note: Required for uniq!
    #
    def hash
      [@token.to_s, @bundle].hash
    end
    
    # Returns the weight of this combination.
    #
    def weight
      @weight || @weight = @bundle.weight(@text)
    end
    
    # Returns an array of ids for the given text.
    #
    def ids
      @ids || @ids = @bundle.ids(@text)
    end
    
    # The identifier for this combination.
    #
    def identifier
      @category.name
    end
    
    # Is the identifier in the given identifiers?
    #
    def in? identifiers
      identifiers.include? identifier
    end

    # Combines the category names with the original names.
    # [
    #  [:title,    'Flarbl', :flarbl],
    #  [:category, 'Gnorf',  :gnorf]
    # ]
    #
    def to_result
      [identifier, *@token.to_result]
    end
    
    # exact/title:Flarbl:flarbl
    #
    def to_s
      "#{bundle.name}/#{to_result.join(':')}"
    end
    
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
picky-0.2.3 lib/picky/query/combination.rb