Class: QuickTravel::Product
- Defined in:
- lib/quick_travel/product.rb
Instance Attribute Summary collapse
-
#error_message ⇒ Object
readonly
Returns the value of attribute error_message.
-
#pricing_details_for_rack_rate ⇒ Object
needed as captain cook grid cell exepcts them to be defined.
-
#pricing_details_without_rules ⇒ Object
needed as captain cook grid cell exepcts them to be defined.
Class Method Summary collapse
- .bulk_availability(resource_ids, date_from, date_to, units) ⇒ Object
-
.fetch_and_arrange_by_resource_id_and_date(resource_ids, options = {}) ⇒ Object
Returns minified mega structure:.
-
.find(id, params = {}) ⇒ Object
Find product details for a given product.
- .unavailable_dates(resource_ids, date_from, date_to) ⇒ Object
Instance Method Summary collapse
- #availability_details=(availability_details) ⇒ Object
- #available? ⇒ Boolean
- #extras=(extra_attrs) ⇒ Object
- #id ⇒ Object
- #name ⇒ Object
- #pricing_details=(pricing_details) ⇒ Object
- #resource=(resource_hash) ⇒ Object
- #select_extras_by_id(selected_ids) ⇒ Object
Methods inherited from Adapter
all, belongs_to, create, has_many, #to_s, update
Methods included from InitFromHash
#define_readers, #initialize, #to_hash
Instance Attribute Details
#error_message ⇒ Object (readonly)
Returns the value of attribute error_message.
5 6 7 |
# File 'lib/quick_travel/product.rb', line 5 def @error_message end |
#pricing_details_for_rack_rate ⇒ Object
needed as captain cook grid cell exepcts them to be defined
85 86 87 |
# File 'lib/quick_travel/product.rb', line 85 def pricing_details_for_rack_rate @pricing_details_for_rack_rate end |
#pricing_details_without_rules ⇒ Object
needed as captain cook grid cell exepcts them to be defined
85 86 87 |
# File 'lib/quick_travel/product.rb', line 85 def pricing_details_without_rules @pricing_details_without_rules end |
Class Method Details
.bulk_availability(resource_ids, date_from, date_to, units) ⇒ Object
24 25 26 27 28 29 30 31 32 |
# File 'lib/quick_travel/product.rb', line 24 def self.bulk_availability(resource_ids, date_from, date_to, units) request_params = { resource_ids: resource_ids, date_from: date_from, date_to: date_to, units: units } get_and_validate('/api/availability/bulk.json', request_params) end |
.fetch_and_arrange_by_resource_id_and_date(resource_ids, options = {}) ⇒ Object
Returns minified mega structure:
products_by_resource_id_and_date
<resource-id> => {<date> => <product-instance>, ...,
...
}
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/quick_travel/product.rb', line 50 def self.fetch_and_arrange_by_resource_id_and_date(resource_ids, = {}) request_params = .clone request_params[:resource_ids] = resource_ids # Returned call mega-structure is: # [ # { # "resource" => {"id" => <resource-id>, "name" => <resource-name>}, # "bookability" => { # <date-as-string> => {<product-attrs} # ... # } # }, # ... # ] complex_data = get_and_validate('/api/products/date_range_bookability.json', request_params) complex_data ||= {} products_by_resource_id_and_date = {} # Go through shitty complex_grid_data complex_data.each do |resource_and_bookability_hash| resource_id = resource_and_bookability_hash.fetch('resource', {}).fetch('id', nil) product_attrs_by_date = resource_and_bookability_hash.fetch('bookability', {}) products_by_resource_id_and_date[resource_id] = {} product_attrs_by_date.each do |date, product_attrs| products_by_resource_id_and_date[resource_id][date] = new(product_attrs) end end products_by_resource_id_and_date end |
.find(id, params = {}) ⇒ Object
Find product details for a given product
Options are::tabnew
passenger_types: {<passenger_type_id> => <num_pax>, ...},
date_range: {start_date: <date>, end_date: <date>}
14 15 16 17 18 19 20 21 22 |
# File 'lib/quick_travel/product.rb', line 14 def self.find(id, params = {}) if params[:passenger_type_numbers].blank? fail ArgumentError, 'Product#find requires passenger_type_numbers' end if params[:date_range].blank? fail ArgumentError, 'Product#find requires date_range' end super end |
.unavailable_dates(resource_ids, date_from, date_to) ⇒ Object
34 35 36 37 38 39 40 41 |
# File 'lib/quick_travel/product.rb', line 34 def self.unavailable_dates(resource_ids, date_from, date_to) request_params = { resource_ids: resource_ids, date_from: date_from, date_to: date_to } get_and_validate('/api/availability/unavailable_dates.json', request_params) end |
Instance Method Details
#availability_details=(availability_details) ⇒ Object
114 115 116 |
# File 'lib/quick_travel/product.rb', line 114 def availability_details=(availability_details) @availability_details = AvailabilityDetails.new(availability_details) end |
#available? ⇒ Boolean
96 97 98 |
# File 'lib/quick_travel/product.rb', line 96 def available? !!@available end |
#extras=(extra_attrs) ⇒ Object
100 101 102 103 104 |
# File 'lib/quick_travel/product.rb', line 100 def extras=(extra_attrs) @extras = extra_attrs.map do |extra_attr| QuickTravel::Product.new(extra_attr) end end |
#id ⇒ Object
88 89 90 |
# File 'lib/quick_travel/product.rb', line 88 def id @reservation_attributes['resource_id'] end |
#name ⇒ Object
92 93 94 |
# File 'lib/quick_travel/product.rb', line 92 def name @selection_name end |
#pricing_details=(pricing_details) ⇒ Object
118 119 120 |
# File 'lib/quick_travel/product.rb', line 118 def pricing_details=(pricing_details) @pricing_details = PricingDetails.new(pricing_details) end |
#resource=(resource_hash) ⇒ Object
110 111 112 |
# File 'lib/quick_travel/product.rb', line 110 def resource=(resource_hash) @resource = QuickTravel::Resource.new(resource_hash) end |
#select_extras_by_id(selected_ids) ⇒ Object
106 107 108 |
# File 'lib/quick_travel/product.rb', line 106 def select_extras_by_id(selected_ids) @extras.select { |extra| selected_ids.include? extra.id } end |