Class: SpreeCmCommissioner::TripQueryResult
- Inherits:
-
Object
- Object
- SpreeCmCommissioner::TripQueryResult
- Defined in:
- lib/spree_cm_commissioner/trip_query_result.rb
Instance Attribute Summary collapse
-
#parent_trip ⇒ Object
readonly
Returns the value of attribute parent_trip.
-
#trips ⇒ Object
readonly
Returns the value of attribute trips.
Class Method Summary collapse
-
.from_hash(hash) ⇒ Object
Accepts either: { parent_trip: <Trip>, legs: [<Trip>, <Trip>] } OR { parent_trip: <Trip>, trips: [<TripResult>, <TripResult>] }.
Instance Method Summary collapse
- #amenities ⇒ Object
- #arrival_time ⇒ Object
- #departure_time ⇒ Object
- #direct? ⇒ Boolean
- #id ⇒ Object
-
#initialize(trips:, parent_trip: nil) ⇒ TripQueryResult
constructor
A new instance of TripQueryResult.
- #max_capacity ⇒ Object
- #open_dated_product ⇒ Object
- #quantity_available ⇒ Object
- #total_duration ⇒ Object
- #total_duration_in_hms ⇒ Object
- #total_open_return_price ⇒ Object
- #total_price ⇒ Object
- #trip_ids ⇒ Object
- #vehicle_types ⇒ Object
- #vendors ⇒ Object
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_trip ⇒ Object (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 |
#trips ⇒ Object (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
#amenities ⇒ Object
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_time ⇒ Object
77 78 79 |
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 77 def arrival_time @trips.last&.arrival_time end |
#departure_time ⇒ Object
73 74 75 |
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 73 def departure_time @trips.first&.departure_time end |
#direct? ⇒ Boolean
36 37 38 |
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 36 def direct? @trips.size == 1 end |
#id ⇒ Object
28 29 30 |
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 28 def id @parent_trip&.id || @trips.first&.id end |
#max_capacity ⇒ Object
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_product ⇒ Object
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_available ⇒ Object
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_duration ⇒ Object
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_hms ⇒ Object
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_price ⇒ Object
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_price ⇒ Object
48 49 50 |
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 48 def total_price @trips.map(&:price).compact.sum end |
#trip_ids ⇒ Object
32 33 34 |
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 32 def trip_ids @trips.map(&:id) end |
#vehicle_types ⇒ Object
85 86 87 |
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 85 def vehicle_types @trips.map(&:vehicle_type).uniq end |
#vendors ⇒ Object
81 82 83 |
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 81 def vendors @trips.map(&:vendor).uniq end |