Class: Deliveries::Couriers::MondialRelay::Shipments::Trace

Inherits:
Object
  • Object
show all
Defined in:
lib/deliveries/couriers/mondial_relay/shipments/trace.rb,
lib/deliveries/couriers/mondial_relay/shipments/trace/format_response.rb

Defined Under Namespace

Classes: FormatResponse

Constant Summary collapse

SUPPORTED_LANGUAGES =
%i[fr es nl en].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(tracking_code:, language:) ⇒ Trace

Returns a new instance of Trace.



10
11
12
13
14
15
16
17
18
# File 'lib/deliveries/couriers/mondial_relay/shipments/trace.rb', line 10

def initialize(tracking_code:, language:)
  self.tracking_code = tracking_code
  self.language =
    if SUPPORTED_LANGUAGES.include? language&.to_sym&.downcase
      language
    else
      'en'
    end
end

Instance Attribute Details

#languageObject

Returns the value of attribute language.



8
9
10
# File 'lib/deliveries/couriers/mondial_relay/shipments/trace.rb', line 8

def language
  @language
end

#tracking_codeObject

Returns the value of attribute tracking_code.



8
9
10
# File 'lib/deliveries/couriers/mondial_relay/shipments/trace.rb', line 8

def tracking_code
  @tracking_code
end

Instance Method Details

#executeObject



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/deliveries/couriers/mondial_relay/shipments/trace.rb', line 20

def execute
  params = { 'Enseigne' => Deliveries::Couriers::MondialRelay.config(:mondial_relay_merchant),
             'Expedition' => tracking_code,
             'Langue' => language }

  params['Security'] = Deliveries::Couriers::MondialRelay.calculate_security_param params

  # Call web service.
  response = MondialRelay.api_client.call :wsi2_tracing_colis_detaille, message: params

  response_result = response.body.dig(:wsi2_tracing_colis_detaille_response,
                                      :wsi2_tracing_colis_detaille_result)
  if  response_result.present? &&
      StatusCodes.tracking_info_success?(response_result[:stat].to_i)

    response_result
  else
    raise Deliveries::APIError.new(
      StatusCodes.message_for(response_result[:stat].to_i),
      response_result[:stat]
    )
  end
end