Class: TravelTime::ProtoUtils

Inherits:
Object
  • Object
show all
Defined in:
lib/utils.rb

Overview

Utilities for encoding/decoding protobuf requests

Constant Summary collapse

ONE_TO_MANY =

Request type constants

:one_to_many
MANY_TO_ONE =
:many_to_one

Class Method Summary collapse

Class Method Details

.build_deltas(departure, destinations) ⇒ Object



18
19
20
21
22
23
24
# File 'lib/utils.rb', line 18

def self.build_deltas(departure, destinations)
  deltas = destinations.map do |destination|
    [encode_fixed_point(departure[:lat], destination[:lat]),
     encode_fixed_point(departure[:lng], destination[:lng])]
  end
  deltas.flatten
end

.decode_proto_response(response) ⇒ Object



71
72
73
# File 'lib/utils.rb', line 71

def self.decode_proto_response(response)
  Com::Igeolise::Traveltime::Rabbitmq::Responses::TimeFilterFastResponse.decode(response).to_h
end

.encode_fixed_point(source, target) ⇒ Object



14
15
16
# File 'lib/utils.rb', line 14

def self.encode_fixed_point(source, target)
  ((target - source) * 10.pow(5)).round
end

.encode_proto_message(message) ⇒ Object



67
68
69
# File 'lib/utils.rb', line 67

def self.encode_proto_message(message)
  Com::Igeolise::Traveltime::Rabbitmq::Requests::TimeFilterFastRequest.encode(message)
end

.make_many_to_one(arrival, origins, transport_obj, traveltime, properties) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/utils.rb', line 39

def self.make_many_to_one(arrival, origins, transport_obj, traveltime, properties)
  transportation = Com::Igeolise::Traveltime::Rabbitmq::Requests::Transportation.new
  transport_obj.apply_to_proto(transportation)
  Com::Igeolise::Traveltime::Rabbitmq::Requests::TimeFilterFastRequest::ManyToOne.new(
    arrivalLocation: arrival,
    locationDeltas: build_deltas(arrival, origins),
    transportation: transportation,
    arrivalTimePeriod: 0,
    travelTime: traveltime,
    properties: properties
  )
end

.make_one_to_many(origin, destinations, transport_obj, traveltime, properties) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/utils.rb', line 26

def self.make_one_to_many(origin, destinations, transport_obj, traveltime, properties)
  transportation = Com::Igeolise::Traveltime::Rabbitmq::Requests::Transportation.new
  transport_obj.apply_to_proto(transportation)
  Com::Igeolise::Traveltime::Rabbitmq::Requests::TimeFilterFastRequest::OneToMany.new(
    departureLocation: origin,
    locationDeltas: build_deltas(origin, destinations),
    transportation: transportation,
    arrivalTimePeriod: 0,
    travelTime: traveltime,
    properties: properties
  )
end

.make_proto_message(origin, destinations, transport_obj, traveltime, properties: nil, request_type: nil) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/utils.rb', line 52

def self.make_proto_message(origin, destinations, transport_obj, traveltime, properties: nil, request_type: nil)
  request_type ||= ONE_TO_MANY
  request = Com::Igeolise::Traveltime::Rabbitmq::Requests::TimeFilterFastRequest.new

  if request_type == ONE_TO_MANY
    request.oneToManyRequest = make_one_to_many(origin, destinations, transport_obj, traveltime, properties)
  elsif request_type == MANY_TO_ONE
    request.manyToOneRequest = make_many_to_one(origin, destinations, transport_obj, traveltime, properties)
  else
    raise ArgumentError, "Invalid request_type: #{request_type}. Must be ONE_TO_MANY or MANY_TO_ONE"
  end

  request
end