Sha256: 6a81576c71c888fdf633f6e11b02eb6dce2be9c3a00af37f946a7d3cf2acb5c1

Contents?: true

Size: 1.04 KB

Versions: 138

Compression:

Stored size: 1.04 KB

Contents

# frozen_string_literal: true

module Spree
  class Promotion < Spree::Base
    module Rules
      class UserRole < PromotionRule
        preference :role_ids, :array, default: []

        MATCH_POLICIES = %w(any all)
        preference :match_policy, default: MATCH_POLICIES.first

        def applicable?(promotable)
          promotable.is_a?(Spree::Order)
        end

        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
end

Version data entries

138 entries across 138 versions & 3 rubygems

Version Path
solidus_legacy_promotions-4.5.1 app/models/spree/promotion/rules/user_role.rb
solidus_legacy_promotions-4.5.0 app/models/spree/promotion/rules/user_role.rb
solidus_core-4.3.6 app/models/spree/promotion/rules/user_role.rb
solidus_core-4.2.5 app/models/spree/promotion/rules/user_role.rb
solidus_core-4.1.6 app/models/spree/promotion/rules/user_role.rb
solidus_legacy_promotions-4.4.2 app/models/spree/promotion/rules/user_role.rb
solidus_legacy_promotions-4.4.1 app/models/spree/promotion/rules/user_role.rb
solidus_legacy_promotions-4.4.0 app/models/spree/promotion/rules/user_role.rb
solidus_core-4.3.4 app/models/spree/promotion/rules/user_role.rb
solidus_core-4.2.4 app/models/spree/promotion/rules/user_role.rb
solidus_core-4.1.5 app/models/spree/promotion/rules/user_role.rb
solidus_core-4.3.3 app/models/spree/promotion/rules/user_role.rb
solidus_core-4.3.2 app/models/spree/promotion/rules/user_role.rb
solidus_core-4.1.4 app/models/spree/promotion/rules/user_role.rb
solidus_core-4.3.1 app/models/spree/promotion/rules/user_role.rb
solidus_core-4.3.0 app/models/spree/promotion/rules/user_role.rb
solidus_core-4.2.3 app/models/spree/promotion/rules/user_role.rb
solidus_core-4.1.3 app/models/spree/promotion/rules/user_role.rb
solidus_core-4.0.4 app/models/spree/promotion/rules/user_role.rb
solidus_core-3.4.6 app/models/spree/promotion/rules/user_role.rb