Class: SpreeCmCommissioner::Integrations::BookMeBusV1::Polling::SyncVariant
- Inherits:
-
Object
- Object
- SpreeCmCommissioner::Integrations::BookMeBusV1::Polling::SyncVariant
- 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
- #call(product:, external_trip:, price:) ⇒ Object
-
#initialize(sync_result:, vendor:) ⇒ SyncVariant
constructor
A new instance of SyncVariant.
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 |