module Fizzy module Api class CalculateOutcome < ActiveInteraction::Base string :dossier_id string :protocol_subscription_id def execute response = Api.basic_auth_session.post("/dossier/#{dossier_id}"\ "/protocol_subscriptions/#{protocol_subscription_id}"\ '/calculate') process_response(response) end private def process_response(response) case response.code when 200 response else invalid_response(response) end end def invalid_response(response) case response.code when 202 raise Errors::OutcomeNotAvailableError, response.body || 'The results are currently being calculated.' when 404 raise Errors::GraphNotFoundError, response.body || 'Participant not found, or graph not supported.' else raise Errors::UnexpectedStatusError, "Status code #{response.code} not expected." end end end end end