Class: QuickTravel::Product

Inherits:
Adapter
  • Object
show all
Defined in:
lib/quick_travel/product.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

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_messageObject (readonly)

Returns the value of attribute error_message.



5
6
7
# File 'lib/quick_travel/product.rb', line 5

def error_message
  @error_message
end

#pricing_details_for_rack_rateObject

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_rulesObject

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, options = {})
  request_params = options.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

Returns:

  • (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

#idObject



88
89
90
# File 'lib/quick_travel/product.rb', line 88

def id
  @reservation_attributes['resource_id']
end

#nameObject



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