Class: SpreeCmCommissioner::Integrations::BookMeBusV1::Polling::SyncVariant

Inherits:
Object
  • Object
show all
Defined in:
app/services/spree_cm_commissioner/integrations/book_me_bus_v1/polling/sync_variant.rb

Overview

SyncVariant handles variant synchronization for BookMeBus trips

This service is responsible for:

  • Creating or updating Variant records for products

  • Managing variant attributes (SKU, pricing, inventory tracking)

  • Assigning option values (seat types)

Usage:

sync_service = SyncVariant.new(sync_result: sync_result, vendor: vendor)
variant = sync_service.call(product: product, external_trip: external_trip, price: 10.0)

Instance Method Summary collapse

Constructor Details

#initialize(sync_result:, vendor:) ⇒ SyncVariant

Returns a new instance of SyncVariant.



14
15
16
17
# File 'app/services/spree_cm_commissioner/integrations/book_me_bus_v1/polling/sync_variant.rb', line 14

def initialize(sync_result:, vendor:)
  @sync_result = sync_result
  @vendor = vendor
end

Instance Method Details

#call(product:, external_trip:, price:) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'app/services/spree_cm_commissioner/integrations/book_me_bus_v1/polling/sync_variant.rb', line 19

def call(product:, external_trip:, price:)
  sku = build_variant_sku(external_trip)
  variant = product.variants.find_by(sku: sku) || product.variants.build(sku: sku)

  @sync_result.track(:variant, variant) do |tracker|
    variant.assign_attributes(
      vendor: @vendor,
      price: price,
      track_inventory: true,
      product_type: :transit,
      option_values: [standard_seat_option_value]
    )
    tracker.save_if_changed!(variant)
  end

  variant
end