Sha256: a5921d2bbbc96fc03e9b41143fe0656138209524af7e4f5e4cc4340d7eefd37e

Contents?: true

Size: 1.11 KB

Versions: 4

Compression:

Stored size: 1.11 KB

Contents

# frozen_string_literal: true

module SolidusFriendlyPromotions
  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

    def last
      results.last
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
solidus_friendly_promotions-1.9.3 app/models/solidus_friendly_promotions/eligibility_results.rb
solidus_friendly_promotions-1.9.2 app/models/solidus_friendly_promotions/eligibility_results.rb
solidus_friendly_promotions-1.9.1 app/models/solidus_friendly_promotions/eligibility_results.rb
solidus_friendly_promotions-1.9.0 app/models/solidus_friendly_promotions/eligibility_results.rb