Sha256: a900b35a5112690cf6d344384065574fba70b23b050663a5ca665e8917e7b9cf

Contents?: true

Size: 945 Bytes

Versions: 4

Compression:

Stored size: 945 Bytes

Contents

# frozen_string_literal: true

module SolidusFriendlyPromotions
  module Conditions
    class UserRole < Condition
      include OrderLevelCondition

      preference :role_ids, :array, default: []

      MATCH_POLICIES = %w[any all].freeze
      preference :match_policy, default: MATCH_POLICIES.first

      def eligible?(order, _options = {})
        return false unless order.user

        if all_match_policy?
          match_all_roles?(order)
        else
          match_any_roles?(order)
        end
      end

      private

      def all_match_policy?
        preferred_match_policy == "all" && preferred_role_ids.present?
      end

      def user_roles(order)
        order.user.spree_roles.where(id: preferred_role_ids)
      end

      def match_all_roles?(order)
        user_roles(order).count == preferred_role_ids.count
      end

      def match_any_roles?(order)
        user_roles(order).exists?
      end
    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/conditions/user_role.rb
solidus_friendly_promotions-1.9.2 app/models/solidus_friendly_promotions/conditions/user_role.rb
solidus_friendly_promotions-1.9.1 app/models/solidus_friendly_promotions/conditions/user_role.rb
solidus_friendly_promotions-1.9.0 app/models/solidus_friendly_promotions/conditions/user_role.rb