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
98 99 100 |
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 98 def amenities @trips.flat_map(&:amenities).uniq { |a| a[:id] } end |
#arrival_time ⇒ Object
82 83 84 |
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 82 def arrival_time @trips.last&.arrival_time end |
#departure_time ⇒ Object
78 79 80 |
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 78 def departure_time @trips.first&.departure_time end |
#direct? ⇒ Boolean
41 42 43 |
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 41 def direct? @trips.size == 1 end |
#id ⇒ Object
28 29 30 31 32 33 |
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 28 def id return parent_trip[:id] if parent_trip.is_a?(Hash) && parent_trip.key?(:id) return parent_trip['id'] if parent_trip.is_a?(Hash) && parent_trip.key?('id') parent_trip&.try(:id) || @trips.first&.id end |
#max_capacity ⇒ Object
49 50 51 |
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 49 def max_capacity @trips.map(&:max_capacity).compact.min end |
#open_dated_product ⇒ Object
94 95 96 |
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 94 def open_dated_product @trips.first&.open_dated_product end |
#quantity_available ⇒ Object
45 46 47 |
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 45 def quantity_available @trips.map(&:quantity_available).compact.min end |
#total_duration ⇒ Object
64 65 66 |
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 64 def total_duration @trips.map { |trip| trip.respond_to?(:duration_with_offset) ? trip.duration_with_offset : trip.duration }.compact.sum end |
#total_duration_in_hms ⇒ Object
68 69 70 71 72 73 74 75 76 |
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 68 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
57 58 59 60 61 62 |
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 57 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
53 54 55 |
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 53 def total_price @trips.map(&:price).compact.sum end |
#trip_ids ⇒ Object
35 36 37 38 39 |
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 35 def trip_ids return @trips.map(&:id) unless direct? @trips.sort_by { |trip| trip.respond_to?(:sequence) ? trip.sequence.to_i : 0 }.map(&:id) end |
#vehicle_types ⇒ Object
90 91 92 |
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 90 def vehicle_types @trips.map(&:vehicle_type).uniq end |
#vendors ⇒ Object
86 87 88 |
# File 'lib/spree_cm_commissioner/trip_query_result.rb', line 86 def vendors @trips.map(&:vendor).uniq end |