module Medivo class LabsController < ActionController::Base def index lab_data = Medivo::Lab.data_for_zip(params[:zip_code]) render :json=> lab_data end def find_appointment date = Date.strptime(params[:date], "%m/%d/%Y") data = Medivo::Appointment.find(params[:lab_code], date, params[:am_pm]) render :json=> {times: data} rescue => e appointment_error_handler(e) end def make_appointment time = Time.parse(params[:time]) data = Medivo::Appointment.make(params[:lab_code], time, params[:user]) render :json=> data rescue Exception => e appointment_error_handler(e) end def cancel_appointment data = Medivo::Appointment.cancel(params[:confirmation], params[:first_name], params[:last_name]) render :json=> data rescue Exception => e render :status=> 500, json: {message: e.message} end def appointment_error_handler(e) case e when RestClient::RequestTimeout, RestClient::InternalServerError render :status=> e.http_code, json: {message: "Could be lab_code is wrong, or labcorp server is down"} when RestClient::Exception render :status=> e.http_code, json: {message: e.response} else render :status=> 500, json: {message: e.message} end end end end