Class: TravelTime::ProtoUtils
- Inherits:
-
Object
- Object
- TravelTime::ProtoUtils
- 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
- .build_deltas(departure, destinations) ⇒ Object
- .decode_proto_response(response) ⇒ Object
- .encode_fixed_point(source, target) ⇒ Object
- .encode_proto_message(message) ⇒ Object
- .make_many_to_one(arrival, origins, transport_obj, traveltime, properties) ⇒ Object
- .make_one_to_many(origin, destinations, transport_obj, traveltime, properties) ⇒ Object
- .make_proto_message(origin, destinations, transport_obj, traveltime, properties: nil, request_type: nil) ⇒ Object
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.() Com::Igeolise::Traveltime::Rabbitmq::Requests::TimeFilterFastRequest.encode() 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.(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 |