Class: SpreeCmCommissioner::Webhooks::Rules::OrderVendors

Inherits:
SubscriberRule
  • Object
show all
Defined in:
app/models/spree_cm_commissioner/webhooks/rules/order_vendors.rb

Constant Summary collapse

MATCH_POLICIES =
%w[any all].freeze
SUPPORTED_EVENTS =
[
  'order.create',
  'order.delete',
  'order.update',
  'order.canceled',
  'order.placed',
  'order.resumed',
  'order.shipped'
].freeze

Instance Method Summary collapse

Instance Method Details

#filter(orders) ⇒ Object

TODO: support all match policy



25
26
27
28
29
30
# File 'app/models/spree_cm_commissioner/webhooks/rules/order_vendors.rb', line 25

def filter(orders)
  case preferred_match_policy
  when 'any'
    orders.joins(:line_items).where(line_items: { vendor_id: vendor_ids })
  end
end

#matches?(webhook_payload_body, _options = {}) ⇒ Boolean

Returns:

  • (Boolean)


36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'app/models/spree_cm_commissioner/webhooks/rules/order_vendors.rb', line 36

def matches?(webhook_payload_body, _options = {})
  return false if vendor_ids.empty?

  payload_body = JSON.parse(webhook_payload_body)

  vendor_ids = payload_body['included'].filter_map do |include|
    include['attributes']['vendor_id'].to_s if include['type'] == 'line_item'
  end

  return false if vendor_ids.empty?

  case preferred_match_policy
  when 'any'
    preferred_vendors.any? { |vendor_id| vendor_ids.include?(vendor_id) }
  when 'all'
    preferred_vendors.all? { |vendor_id| vendor_ids.include?(vendor_id) }
  end
end

#supported?(event) ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
# File 'app/models/spree_cm_commissioner/webhooks/rules/order_vendors.rb', line 32

def supported?(event)
  SUPPORTED_EVENTS.include?(event)
end

#vendor_idsObject



20
21
22
# File 'app/models/spree_cm_commissioner/webhooks/rules/order_vendors.rb', line 20

def vendor_ids
  preferred_vendors || []
end