Sha256: 48394d9a0c1a7f11ee88318b4450ea8e4983effd15a233eeb1c6a375ef1d5dea

Contents?: true

Size: 1.1 KB

Versions: 5

Compression:

Stored size: 1.1 KB

Contents

# frozen_string_literal: true

module SolidusPromotions
  class EligibilityResults
    include Enumerable
    attr_reader :results, :promotion

    def initialize(promotion)
      @promotion = promotion
      @results = []
    end

    def add(item:, condition:, success:, code:, message:)
      results << EligibilityResult.new(
        item: item,
        condition: condition,
        success: success,
        code: code,
        message: message
      )
    end

    def success?
      return true if results.empty?
      promotion.benefits.any? do |benefit|
        benefit.conditions.all? do |condition|
          results_for_condition = results.select { |result| result.condition == condition }
          results_for_condition.any?(&:success)
        end
      end
    end

    def error_messages
      return [] if results.empty?
      results.group_by(&:condition).map do |_condition, results|
        next if results.any?(&:success)
        results.detect { |r| !r.success }&.message
      end.compact
    end

    def each(&block)
      results.each(&block)
    end

    delegate :last, to: :results
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
solidus_promotions-4.5.1 app/models/solidus_promotions/eligibility_results.rb
solidus_promotions-4.5.0 app/models/solidus_promotions/eligibility_results.rb
solidus_promotions-4.4.2 app/models/solidus_promotions/eligibility_results.rb
solidus_promotions-4.4.1 app/models/solidus_promotions/eligibility_results.rb
solidus_promotions-4.4.0 app/models/solidus_promotions/eligibility_results.rb