class PrioTicket::Reservation

Describes a Reservation

@author [henkm]

Attributes

booking_details[RW]
booking_status[RW]
cancellation_date_time[RW]
distributor_id[RW]
distributor_reference[RW]
from_date_time[RW]
identifier[RW]
pickup_point_id[RW]
reservation_reference[RW]
ticket_id[RW]
to_date_time[RW]

Public Class Methods

cancel(distributor_id: nil, reservation_reference: nil, distributor_reference: nil, identifier: nil) click to toggle source
# File lib/prioticket/reservation.rb, line 59
def self.cancel(distributor_id: nil, reservation_reference: nil, distributor_reference: nil, identifier: nil)
  reservation = PrioTicket::Reservation.new(
    distributor_id: distributor_id,
    reservation_reference: reservation_reference,
    distributor_reference: distributor_reference,
    identifier: identifier
  )
  reservation.cancel
  return reservation  
end
new(args) click to toggle source
# File lib/prioticket/reservation.rb, line 22
def initialize(args)
  return if args.nil?
  args.each do |k,v|
    PrioTicket.parse_json_value(self, k,v)
  end
end

Public Instance Methods

cancel() click to toggle source

Cancels the current reservation

@return <Reservation>

# File lib/prioticket/reservation.rb, line 54
def cancel
  result = PrioTicket::API.call(cancel_request_body, identifier)
  parse_result(result)
end
cancelled() click to toggle source
# File lib/prioticket/reservation.rb, line 37
def cancelled
  booking_status == "Cancelled" || cancellation_date_time
end
cancelled?()
Alias for: success
save() click to toggle source

Sends the reservation request tot the API

# File lib/prioticket/reservation.rb, line 46
def save
  request_reservation
end
success() click to toggle source
# File lib/prioticket/reservation.rb, line 29
def success
  booking_status == "Reserved"
end
Also aliased as: cancelled?

Private Instance Methods

cancel_request_body() click to toggle source

Computes the request body to send to the API cancel_reserve endpoint

# File lib/prioticket/reservation.rb, line 100
def cancel_request_body
  { 
    request_type: "cancel_reserve",
    data: {
      distributor_id: distributor_id,
      reservation_reference: reservation_reference,
      distributor_reference: distributor_reference
    }
  }
end
parse_result(result) click to toggle source

Parses the return value from the API `{“response_type”=>“reserve”, “data”=> {“reservation_reference”=>“1522065689487477”, “distributor_reference”=>“TEST_RESERVATION”, “booking_status”=>“Reserved”}}`

@return [type] [description]

# File lib/prioticket/reservation.rb, line 90
def parse_result(result)
  self.booking_status         = result["data"]["booking_status"]
  self.reservation_reference  = result["data"]["reservation_reference"]
  if result["data"]["cancellation_date_time"]
    PrioTicket.parse_json_value(self, :cancellation_date_time, result["data"]["cancellation_date_time"])
  end
end
request_body() click to toggle source

Computes the request body to send to the API endpoint @param distributor_id Integer @param ticket_id Integer @param from_date String @param until_date String

@return Hash

# File lib/prioticket/reservation.rb, line 119
def request_body
  booking_details_array = booking_details.to_a.map{|bd| bd.to_h}
  body = {
    request_type: "reserve",
    data: {
      distributor_id: distributor_id.to_s,
      ticket_id: ticket_id.to_s,
      from_date_time: PrioTicket.parsed_date(from_date_time),
      to_date_time: PrioTicket.parsed_date(to_date_time),
      booking_details: booking_details_array,
      distributor_reference: distributor_reference
    }
  }
  
  # add pickuppoint to body, if present
  body[:data][:pickup_point_id] = pickup_point_id if pickup_point_id
  return body
end
request_reservation() click to toggle source

Sends the reservation request to the API endpoint and enriches current object with status and reference.

# File lib/prioticket/reservation.rb, line 76
def request_reservation
  result = PrioTicket::API.call(request_body, identifier)
  parse_result(result)
end