Sha256: 858d6ec120f4172d26c2d91c49bdd8ff5b03472d28b24cf6a7e7cab4a32fb1e8

Contents?: true

Size: 1.74 KB

Versions: 8

Compression:

Stored size: 1.74 KB

Contents

module Query
  # An allocation has a number of combinations:
  # [token, index] [other_token, other_index], ...
  #
  class Allocation

    attr_reader   :count, :ids, :score, :combinations
    attr_accessor :result_type

    #
    #
    def initialize combinations
      @combinations = combinations
    end

    def hash
      @combinations.hash
    end
    def eql? other_allocation
      true # FIXME
      # @combinations.eql? other_allocation.combinations
    end

    # Scores its combinations and caches the result.
    #
    def calculate_score weights
      @score || @score = @combinations.calculate_score(weights)
    end

    # Asks the combinations for the (intersected) ids.
    #
    def calculate_ids
      @combinations.ids
    end

    # This starts the searching process.
    #
    def process! amount, offset
      ids    = calculate_ids
      @count = ids.size                         # cache the count before throwing away the ids
      @ids   = ids.slice!(offset, amount) || [] # slice out the relevant part
    end

    #
    #
    def keep identifiers = [] # categories
      @combinations.keep identifiers
    end
    #
    #
    def remove identifiers = [] # categories
      @combinations.remove identifiers
    end

    # Sort highest score first.
    #
    def <=> other_allocation
       other_allocation.score <=> self.score
    end

    # Transform the allocation into result form.
    #
    def to_result
      [self.result_type, self.score, self.count, @combinations.to_result, self.ids] if self.count > 0
    end

    # Json representation of this allocation.
    #
    # Note: Delegates to to_result.
    #
    def to_json
      to_result.to_json
    end

    #
    #
    def to_s
      "Allocation: #{to_result.join(', ')}"
    end

  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
picky-0.0.9 lib/picky/query/allocation.rb
picky-0.0.8 lib/picky/query/allocation.rb
picky-0.0.7 lib/picky/query/allocation.rb
picky-0.0.6 lib/picky/query/allocation.rb
picky-0.0.5 lib/picky/query/allocation.rb
picky-0.0.4 lib/picky/query/allocation.rb
picky-0.0.3 lib/picky/query/allocation.rb
picky-0.0.2 lib/picky/query/allocation.rb