Sha256: 6c5021edb7eae88429ffcabe21b1eacf934d363954cbccbede9a3a93bab10803

Contents?: true

Size: 1.81 KB

Versions: 13

Compression:

Stored size: 1.81 KB

Contents

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

    attr_reader :count, :ids, :score, :combinations, :result_identifier
    
    #
    #
    def initialize combinations, result_identifier
      @combinations      = combinations
      @result_identifier = result_identifier
    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 ||= @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_identifier, 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

13 entries across 13 versions & 1 rubygems

Version Path
picky-1.4.1 lib/picky/query/allocation.rb
picky-1.4.0 lib/picky/query/allocation.rb
picky-1.3.4 lib/picky/query/allocation.rb
picky-1.3.3 lib/picky/query/allocation.rb
picky-1.3.2 lib/picky/query/allocation.rb
picky-1.3.1 lib/picky/query/allocation.rb
picky-1.3.0 lib/picky/query/allocation.rb
picky-1.2.4 lib/picky/query/allocation.rb
picky-1.2.3 lib/picky/query/allocation.rb
picky-1.2.2 lib/picky/query/allocation.rb
picky-1.2.1 lib/picky/query/allocation.rb
picky-1.2.0 lib/picky/query/allocation.rb
picky-1.1.7 lib/picky/query/allocation.rb