require 'quick_travel/adapter' module QuickTravel class Product < Adapter attr_accessor :selection_name, :description, :capacity, :available_capacity, :available, :error_message attr_accessor :price # money_json(bookable_product.price) attr_accessor :reservation_attributes attr_accessor :image # is it url? dunno => json.image bookable_product.image # {url: image_url, desc: image_desc} attr_accessor :is_assigned # is it an assigned product -- i.e. reserved... # useful only for extras when going through reservations api attr_accessor :extras # more products self.api_base = '/api/products' # Find product details for a given product # # Options are::tabnew # passenger_types: { => , ...}, # date_range: {start_date: , end_date: } def self.find(id, params = {}) fail 'Product#find requires passenger_type_numbers' if params[:passenger_type_numbers].blank? fail 'Product#find requires date_range' if params[:date_range].blank? super end 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 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 # Returns minified mega structure: # # products_by_resource_id_and_date # { # => { => , ...}, # ... # } def self.fetch_and_arrange_by_resource_id_and_date(resource_ids, options = {}) request_params = options.clone request_params[:resource_ids] = resource_ids # Returned call mega-structure is: # [ # { # "resource" => {"id" => , "name" => }, # "bookability" => { # => {