Class: Spree::Promotion::Rules::Product Private

Inherits:
Spree::PromotionRule show all
Defined in:
app/models/spree/promotion/rules/product.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

A rule to limit a promotion based on products in the order. Can require all or any of the products to be present. Valid products either come from assigned product group or are assingned directly to the rule.

Constant Summary

MATCH_POLICIES =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

%w(any all none)

Instance Method Summary (collapse)

Methods inherited from Spree::PromotionRule

#eligibility_errors, for

Methods inherited from Base

display_includes, #initialize_preference_defaults, page, preference

Methods included from Spree::Preferences::Preferable

#default_preferences, #defined_preferences, #get_preference, #has_preference!, #has_preference?, #preference_default, #preference_type, #set_preference

Instance Method Details

- (Boolean) actionable?(line_item)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


51
52
53
54
55
56
57
58
59
60
# File 'app/models/spree/promotion/rules/product.rb', line 51

def actionable?(line_item)
  case preferred_match_policy
  when 'any', 'all'
    product_ids.include? line_item.variant.product_id
  when 'none'
    product_ids.exclude? line_item.variant.product_id
  else
    raise "unexpected match policy: #{preferred_match_policy.inspect}"
  end
end

- (Boolean) applicable?(promotable)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


24
25
26
# File 'app/models/spree/promotion/rules/product.rb', line 24

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

- (Boolean) eligible?(order, _options = {})

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'app/models/spree/promotion/rules/product.rb', line 28

def eligible?(order, _options = {})
  return true if eligible_products.empty?

  case preferred_match_policy
  when 'all'
    unless eligible_products.all? { |p| order.products.include?(p) }
      eligibility_errors.add(:base, eligibility_error_message(:missing_product))
    end
  when 'any'
    unless order.products.any? { |p| eligible_products.include?(p) }
      eligibility_errors.add(:base, eligibility_error_message(:no_applicable_products))
    end
  when 'none'
    unless order.products.none? { |p| eligible_products.include?(p) }
      eligibility_errors.add(:base, eligibility_error_message(:has_excluded_product))
    end
  else
    raise "unexpected match policy: #{preferred_match_policy.inspect}"
  end

  eligibility_errors.empty?
end

- (Object) eligible_products

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

scope/association that is used to test eligibility



20
21
22
# File 'app/models/spree/promotion/rules/product.rb', line 20

def eligible_products
  products
end

- (Object) product_ids_string

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



62
63
64
# File 'app/models/spree/promotion/rules/product.rb', line 62

def product_ids_string
  product_ids.join(',')
end

- (Object) product_ids_string=(s)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



66
67
68
# File 'app/models/spree/promotion/rules/product.rb', line 66

def product_ids_string=(s)
  self.product_ids = s.to_s.split(',').map(&:strip)
end