Class: SpreeCmCommissioner::TripResult

Inherits:
Object
  • Object
show all
Defined in:
lib/spree_cm_commissioner/trip_result.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ TripResult



11
12
13
14
15
# File 'lib/spree_cm_commissioner/trip_result.rb', line 11

def initialize(options = {})
  options.each do |key, value|
    instance_variable_set("@#{key}", value)
  end
end

Instance Attribute Details

#allow_seat_selection ⇒ Object

Returns the value of attribute allow_seat_selection.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def allow_seat_selection
  @allow_seat_selection
end

#amenities ⇒ Object

Returns the value of attribute amenities.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def amenities
  @amenities
end

#compare_at_price ⇒ Object

Returns the value of attribute compare_at_price.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def compare_at_price
  @compare_at_price
end

#currency ⇒ Object

Returns the value of attribute currency.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def currency
  @currency
end

#departure_time ⇒ Object

Returns the value of attribute departure_time.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def departure_time
  @departure_time
end

#destination_place ⇒ Object

Returns the value of attribute destination_place.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def destination_place
  @destination_place
end

#distance ⇒ Object

Returns the value of attribute distance.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def distance
  @distance
end

#duration ⇒ Object

Returns the value of attribute duration.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def duration
  @duration
end

Returns the value of attribute featured_until.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def featured_until
  @featured_until
end

#has_return_trip_globally ⇒ Object

Returns the value of attribute has_return_trip_globally.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def has_return_trip_globally
  @has_return_trip_globally
end

#has_return_trip_in_vendor ⇒ Object

Returns the value of attribute has_return_trip_in_vendor.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def has_return_trip_in_vendor
  @has_return_trip_in_vendor
end

#id ⇒ Object

Returns the value of attribute id.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def id
  @id
end

#max_capacity ⇒ Object

Returns the value of attribute max_capacity.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def max_capacity
  @max_capacity
end

#name ⇒ Object

Returns the value of attribute name.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def name
  @name
end

#offset_days ⇒ Object

Returns the value of attribute offset_days.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def offset_days
  @offset_days
end

#open_dated_compare_at_price ⇒ Object

Returns the value of attribute open_dated_compare_at_price.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def open_dated_compare_at_price
  @open_dated_compare_at_price
end

#open_dated_price ⇒ Object

Returns the value of attribute open_dated_price.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def open_dated_price
  @open_dated_price
end

#open_dated_product_id ⇒ Object

Returns the value of attribute open_dated_product_id.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def open_dated_product_id
  @open_dated_product_id
end

#origin_place ⇒ Object

Returns the value of attribute origin_place.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def origin_place
  @origin_place
end

#price ⇒ Object

Returns the value of attribute price.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def price
  @price
end

#product_id ⇒ Object

Returns the value of attribute product_id.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def product_id
  @product_id
end

#quantity_available ⇒ Object

Returns the value of attribute quantity_available.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def quantity_available
  @quantity_available
end

#route_type ⇒ Object

Returns the value of attribute route_type.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def route_type
  @route_type
end

#sequence ⇒ Object

Returns the value of attribute sequence.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def sequence
  @sequence
end

#short_name ⇒ Object

Returns the value of attribute short_name.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def short_name
  @short_name
end

#stops ⇒ Object

Returns the value of attribute stops.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def stops
  @stops
end

#vehicle_type ⇒ Object

Returns the value of attribute vehicle_type.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def vehicle_type
  @vehicle_type
end

#vehicle_type_id ⇒ Object

Returns the value of attribute vehicle_type_id.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def vehicle_type_id
  @vehicle_type_id
end

#vendor ⇒ Object

Returns the value of attribute vendor.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def vendor
  @vendor
end

#vendor_id ⇒ Object

Returns the value of attribute vendor_id.



3
4
5
# File 'lib/spree_cm_commissioner/trip_result.rb', line 3

def vendor_id
  @vendor_id
end

Class Method Details

.from_trip(trip) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/spree_cm_commissioner/trip_result.rb', line 17

def self.from_trip(trip)
  return nil if trip.nil?

  vehicle_type = trip&.vehicle_type
  vendor = trip&.vendor
  new(
    id: trip&.id,
    name: trip&.display_name,
    short_name: trip&.short_name,
    departure_time: trip&.departure_time,
    duration: trip&.duration,
    distance: trip&.distance,
    allow_seat_selection: trip&.allow_seat_selection,
    route_type: trip&.route_type,
    featured_until: trip&.featured_until,
    origin_place: {
      id: trip&.origin_place_id,
      name: trip&.origin_place_name
    },
    destination_place: {
      id: trip&.destination_place_id,
      name: trip&.destination_place_name
    },
    vehicle_type_id: trip&.vehicle_type_id,
    vehicle_type: vehicle_type,
    vendor_id: trip&.vendor_id,
    vendor: vendor,
    product_id: trip&.product_id,
    price: trip&.price,
    currency: trip&.currency,
    compare_at_price: trip&.compare_at_price,
    offset_days: trip.try(:offset_days) || 0,
    stops: build_stops_from_trip(trip),
    quantity_available: trip&.quantity_available,
    max_capacity: trip&.max_capacity,
    amenities: (trip.vehicle_type&.option_values || []),
    open_dated_product_id: trip&.open_dated_product_id,
    open_dated_price: trip&.open_dated_price,
    open_dated_compare_at_price: trip&.open_dated_compare_at_price,
    has_return_trip_globally: trip.has_return_trip_globally,
    has_return_trip_in_vendor: trip.has_return_trip_in_vendor
  )
end

Instance Method Details

#amenity_ids ⇒ Object



67
68
69
# File 'lib/spree_cm_commissioner/trip_result.rb', line 67

def amenity_ids
  amenities&.map(&:id) || []
end

#arrival_time ⇒ Object



96
97
98
99
100
# File 'lib/spree_cm_commissioner/trip_result.rb', line 96

def arrival_time
  return nil if departure_time.nil? || duration_with_offset.nil?

  departure_time + duration_with_offset.seconds
end

#boarding ⇒ Object



76
77
78
79
# File 'lib/spree_cm_commissioner/trip_result.rb', line 76

def boarding
  stop = Array(stops).find { |s| s.is_a?(Hash) && (s[:allow_boarding] || s['allow_boarding']) }
  normalize_stop(stop)
end

#cache_key_with_version ⇒ Object

Enable serializer-level caching (like ActiveRecord's cache_key_with_version) Create a version hash based on attributes that matter for caching



122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/spree_cm_commissioner/trip_result.rb', line 122

def cache_key_with_version
  version_parts = [
    id,
    price,
    quantity_available,
    max_capacity,
    departure_time&.to_i,
    open_dated_product_id
  ].compact.join('-')

  version_hash = Digest::MD5.hexdigest(version_parts)
  "trip_results/#{id}-#{version_hash}"
end

#compare_at_amount ⇒ Object

Deprecated for backwards compatibility



72
73
74
# File 'lib/spree_cm_commissioner/trip_result.rb', line 72

def compare_at_amount
  compare_at_price
end

#display_compare_at_price ⇒ Object



114
115
116
117
118
# File 'lib/spree_cm_commissioner/trip_result.rb', line 114

def display_compare_at_price
  return nil if compare_at_price.nil? || currency.nil?

  Spree::Money.new(compare_at_price, currency: currency).to_s
end

#display_price ⇒ Object



108
109
110
111
112
# File 'lib/spree_cm_commissioner/trip_result.rb', line 108

def display_price
  return nil if price.nil? || currency.nil?

  Spree::Money.new(price, currency: currency).to_s
end

#drop_off ⇒ Object



81
82
83
84
# File 'lib/spree_cm_commissioner/trip_result.rb', line 81

def drop_off
  stop = Array(stops).select { |s| s.is_a?(Hash) && (s[:allow_drop_off] || s['allow_drop_off']) }.last
  normalize_stop(stop)
end

#duration_in_hms ⇒ Object



86
87
88
89
90
91
92
93
94
# File 'lib/spree_cm_commissioner/trip_result.rb', line 86

def duration_in_hms
  total_seconds = duration_with_offset
  return { hours: 0, minutes: 0, seconds: 0 } if total_seconds.nil?

  hours = total_seconds / 3600
  minutes = (total_seconds % 3600) / 60
  seconds = total_seconds % 60
  { hours: hours, minutes: minutes, seconds: seconds }
end

#duration_with_offset ⇒ Object



102
103
104
105
106
# File 'lib/spree_cm_commissioner/trip_result.rb', line 102

def duration_with_offset
  return nil if duration.nil?

  duration + offset_days.to_i.days
end

#total_sold ⇒ Object



61
62
63
64
65
# File 'lib/spree_cm_commissioner/trip_result.rb', line 61

def total_sold
  return if max_capacity.nil? || quantity_available.nil?

  max_capacity - quantity_available
end