Class: SpreeCmCommissioner::TripQueryResult

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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(trips:, parent_trip: nil) ⇒ TripQueryResult

Returns a new instance of TripQueryResult.



5
6
7
8
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 5

def initialize(trips:, parent_trip: nil)
  @trips = Array(trips)
  @parent_trip = parent_trip
end

Instance Attribute Details

#parent_tripObject (readonly)

Returns the value of attribute parent_trip.



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

def parent_trip
  @parent_trip
end

#tripsObject (readonly)

Returns the value of attribute trips.



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

def trips
  @trips
end

Class Method Details

.from_hash(hash) ⇒ Object

Accepts either: { parent_trip: <Trip>, legs: [<Trip>, <Trip>] } OR { parent_trip: <Trip>, trips: [<TripResult>, <TripResult>] }



13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 13

def self.from_hash(hash)
  parent = hash[:parent_trip] || hash['parent_trip']

  raw = hash[:trips] || hash['trips']
  trips =
    if raw
      raw.map { |t| t.is_a?(SpreeCmCommissioner::TripResult) ? t : SpreeCmCommissioner::TripResult.from_trip(t) }.compact
    else
      legs = hash[:legs] || hash['legs'] || []
      legs.map { |leg| SpreeCmCommissioner::TripResult.from_trip(leg) }.compact
    end

  new(trips: trips, parent_trip: parent)
end

Instance Method Details

#amenitiesObject



93
94
95
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 93

def amenities
  @trips.flat_map(&:amenities).uniq { |a| a[:id] }
end

#arrival_timeObject



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

def arrival_time
  @trips.last&.arrival_time
end

#departure_timeObject



73
74
75
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 73

def departure_time
  @trips.first&.departure_time
end

#direct?Boolean

Returns:

  • (Boolean)


36
37
38
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 36

def direct?
  @trips.size == 1
end

#idObject



28
29
30
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 28

def id
  @parent_trip&.id || @trips.first&.id
end

#max_capacityObject



44
45
46
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 44

def max_capacity
  @trips.map(&:max_capacity).compact.min
end

#open_dated_productObject



89
90
91
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 89

def open_dated_product
  @trips.first&.open_dated_product
end

#quantity_availableObject



40
41
42
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 40

def quantity_available
  @trips.map(&:quantity_available).compact.min
end

#total_durationObject



59
60
61
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 59

def total_duration
  @trips.map(&:duration).compact.sum
end

#total_duration_in_hmsObject



63
64
65
66
67
68
69
70
71
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 63

def total_duration_in_hms
  total_seconds = total_duration || 0
  return { hours: 0, minutes: 0, seconds: 0 } if total_seconds.nil? || total_seconds <= 0

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

#total_open_return_priceObject



52
53
54
55
56
57
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 52

def total_open_return_price
  return total_price unless direct?

  open_return_price = open_dated_product&.variants&.first&.price.to_d
  total_price + open_return_price
end

#total_priceObject



48
49
50
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 48

def total_price
  @trips.map(&:price).compact.sum
end

#trip_idsObject



32
33
34
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 32

def trip_ids
  @trips.map(&:id)
end

#vehicle_typesObject



85
86
87
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 85

def vehicle_types
  @trips.map(&:vehicle_type).uniq
end

#vendorsObject



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

def vendors
  @trips.map(&:vendor).uniq
end