Sha256: 4bc92ac87d8a22f148704d10a093f22ea44dc5a4416a793040eb28a4f5820c62

Contents?: true

Size: 1.7 KB

Versions: 2

Compression:

Stored size: 1.7 KB

Contents

module Query

  # Describes the combination of a token (the text) and
  # the index (the bundle): [text, index_bundle]
  #
  # A combination is a single part of an allocation:
  # [..., [text2, index_bundle2], ...]
  #
  # An allocation consists of a number of combinations:
  # [[text1, index_bundle1], [text2, index_bundle2], [text3, index_bundle1]]
  #
  class Combination # :nodoc:all

    attr_reader :token, :bundle, :category_name

    def initialize token, category
      @token         = token
      @category_name = category.name
      @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.
    #
    # Note: Caching is most of the time useful.
    #
    def weight
      @weight ||= @bundle.weight(@text)
    end
  
    # Returns an array of ids for the given text.
    #
    # Note: Caching is most of the time useful.
    #
    def ids
      @ids ||= @bundle.ids(@text)
    end
  
    # The identifier for this combination.
    #
    def identifier
      "#{bundle.identifier}:#{@token.identifier}"
    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
      [@category_name, *@token.to_result]
    end
  
    # Example:
    #  "exact title:Peter*:peter"
    #
    def to_s
      "#{bundle.identifier} #{to_result.join(':')}"
    end
  
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
picky-2.7.0 lib/picky/query/combination.rb
picky-2.6.0 lib/picky/query/combination.rb