speedy-bg 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +3 -0
- data/CODE_OF_CONDUCT.md +134 -0
- data/CONTRIBUTING.md +67 -0
- data/LICENSE.txt +21 -0
- data/README.md +150 -0
- data/SECURITY.md +29 -0
- data/docs/API.md +740 -0
- data/docs/RESPONSE_CONTRACTS.md +55 -0
- data/docs/VCR.md +161 -0
- data/docs/schema-notes.md +38 -0
- data/lib/speedy/camel_case_middleware.rb +71 -0
- data/lib/speedy/client.rb +100 -0
- data/lib/speedy/client_resources.rb +776 -0
- data/lib/speedy/collection.rb +58 -0
- data/lib/speedy/error.rb +29 -0
- data/lib/speedy/model.rb +92 -0
- data/lib/speedy/models/calculation/address_location.rb +16 -0
- data/lib/speedy/models/calculation/calculation_content.rb +15 -0
- data/lib/speedy/models/calculation/calculation_recipient.rb +15 -0
- data/lib/speedy/models/calculation/calculation_result.rb +19 -0
- data/lib/speedy/models/calculation/calculation_sender.rb +16 -0
- data/lib/speedy/models/calculation/calculation_service.rb +16 -0
- data/lib/speedy/models/clients/client.rb +21 -0
- data/lib/speedy/models/clients/cod_contract_info.rb +16 -0
- data/lib/speedy/models/clients/cod_international_annex.rb +12 -0
- data/lib/speedy/models/clients/contract_info.rb +16 -0
- data/lib/speedy/models/clients/requirement.rb +12 -0
- data/lib/speedy/models/clients/special_delivery_requirements.rb +12 -0
- data/lib/speedy/models/common/address.rb +36 -0
- data/lib/speedy/models/error.rb +37 -0
- data/lib/speedy/models/location/address_nomenclature_type.rb +12 -0
- data/lib/speedy/models/location/block.rb +15 -0
- data/lib/speedy/models/location/complex.rb +23 -0
- data/lib/speedy/models/location/country.rb +25 -0
- data/lib/speedy/models/location/find_office_response.rb +12 -0
- data/lib/speedy/models/location/find_site_response.rb +12 -0
- data/lib/speedy/models/location/get_office_response.rb +12 -0
- data/lib/speedy/models/location/get_site_response.rb +12 -0
- data/lib/speedy/models/location/office.rb +41 -0
- data/lib/speedy/models/location/office_result.rb +13 -0
- data/lib/speedy/models/location/office_working_time_schedule.rb +15 -0
- data/lib/speedy/models/location/point_of_interest.rb +22 -0
- data/lib/speedy/models/location/postcode.rb +12 -0
- data/lib/speedy/models/location/routing_information.rb +14 -0
- data/lib/speedy/models/location/site.rb +30 -0
- data/lib/speedy/models/location/state.rb +17 -0
- data/lib/speedy/models/location/street.rb +23 -0
- data/lib/speedy/models/location/tour.rb +14 -0
- data/lib/speedy/models/payments/payout.rb +20 -0
- data/lib/speedy/models/payments/payout_details.rb +23 -0
- data/lib/speedy/models/pickup/pickup_order.rb +16 -0
- data/lib/speedy/models/pickup/terms_response.rb +12 -0
- data/lib/speedy/models/print/extended_print_response.rb +13 -0
- data/lib/speedy/models/print/label_info.rb +19 -0
- data/lib/speedy/models/print/label_info_response.rb +12 -0
- data/lib/speedy/models/print/parcel_to_print_additional_barcode.rb +14 -0
- data/lib/speedy/models/print/print_response.rb +12 -0
- data/lib/speedy/models/response.rb +13 -0
- data/lib/speedy/models/services/additional_courier_service.rb +11 -0
- data/lib/speedy/models/services/additional_courier_services.rb +21 -0
- data/lib/speedy/models/services/courier_service.rb +19 -0
- data/lib/speedy/models/services/extended_courier_service.rb +13 -0
- data/lib/speedy/models/shipments/bank_account.rb +12 -0
- data/lib/speedy/models/shipments/barcode_information.rb +20 -0
- data/lib/speedy/models/shipments/cod_payment.rb +12 -0
- data/lib/speedy/models/shipments/content.rb +20 -0
- data/lib/speedy/models/shipments/create_shipment_response.rb +16 -0
- data/lib/speedy/models/shipments/created_shipment_parcel.rb +14 -0
- data/lib/speedy/models/shipments/external_carrier_parcel_number.rb +12 -0
- data/lib/speedy/models/shipments/goods_item.rb +16 -0
- data/lib/speedy/models/shipments/money_transfer_premium.rb +13 -0
- data/lib/speedy/models/shipments/parcel.rb +22 -0
- data/lib/speedy/models/shipments/payment.rb +16 -0
- data/lib/speedy/models/shipments/primary_shipment.rb +12 -0
- data/lib/speedy/models/shipments/recipient.rb +21 -0
- data/lib/speedy/models/shipments/return_amounts.rb +11 -0
- data/lib/speedy/models/shipments/secondary_shipment.rb +18 -0
- data/lib/speedy/models/shipments/sender.rb +21 -0
- data/lib/speedy/models/shipments/shipment.rb +28 -0
- data/lib/speedy/models/shipments/shipment_additional_services.rb +17 -0
- data/lib/speedy/models/shipments/shipment_address.rb +10 -0
- data/lib/speedy/models/shipments/shipment_cod_additional_service.rb +20 -0
- data/lib/speedy/models/shipments/shipment_cod_fiscal_receipt_item.rb +14 -0
- data/lib/speedy/models/shipments/shipment_content.rb +24 -0
- data/lib/speedy/models/shipments/shipment_declared_value_additional_service.rb +13 -0
- data/lib/speedy/models/shipments/shipment_delivery.rb +14 -0
- data/lib/speedy/models/shipments/shipment_discount_card_id.rb +12 -0
- data/lib/speedy/models/shipments/shipment_electronic_return_receipt_additional_service.rb +14 -0
- data/lib/speedy/models/shipments/shipment_obpd.rb +13 -0
- data/lib/speedy/models/shipments/shipment_parcel.rb +23 -0
- data/lib/speedy/models/shipments/shipment_parcel_number.rb +12 -0
- data/lib/speedy/models/shipments/shipment_parcel_ref.rb +13 -0
- data/lib/speedy/models/shipments/shipment_parcel_size.rb +13 -0
- data/lib/speedy/models/shipments/shipment_payment.rb +17 -0
- data/lib/speedy/models/shipments/shipment_phone_number.rb +12 -0
- data/lib/speedy/models/shipments/shipment_price.rb +23 -0
- data/lib/speedy/models/shipments/shipment_price_amount.rb +13 -0
- data/lib/speedy/models/shipments/shipment_recipient.rb +14 -0
- data/lib/speedy/models/shipments/shipment_return_additional_services.rb +20 -0
- data/lib/speedy/models/shipments/shipment_return_receipt_additional_service.rb +14 -0
- data/lib/speedy/models/shipments/shipment_return_voucher_additional_service.rb +14 -0
- data/lib/speedy/models/shipments/shipment_rod_additional_service.rb +15 -0
- data/lib/speedy/models/shipments/shipment_rop_additional_service.rb +12 -0
- data/lib/speedy/models/shipments/shipment_rop_additional_service_line.rb +12 -0
- data/lib/speedy/models/shipments/shipment_sender.rb +23 -0
- data/lib/speedy/models/shipments/shipment_service.rb +17 -0
- data/lib/speedy/models/shipments/shipment_swap_additional_service.rb +17 -0
- data/lib/speedy/models/shipments/update_shipment_response.rb +10 -0
- data/lib/speedy/models/tracking/bulk_tracking_data_file.rb +14 -0
- data/lib/speedy/models/tracking/external_carrier_parcel_number_details.rb +13 -0
- data/lib/speedy/models/tracking/tracked_parcel.rb +21 -0
- data/lib/speedy/models/tracking/tracked_parcel_operation.rb +22 -0
- data/lib/speedy/models/tracking/tracked_parcel_operation_additional_info.rb +17 -0
- data/lib/speedy/models/tracking/tracked_parcel_operation_additional_info_predict.rb +14 -0
- data/lib/speedy/models/tracking/tracked_parcel_operation_additional_info_recipient.rb +14 -0
- data/lib/speedy/models/validation/validation_response.rb +14 -0
- data/lib/speedy/resource_attributes.rb +87 -0
- data/lib/speedy/service_resource.rb +94 -0
- data/lib/speedy/services/calculation.rb +22 -0
- data/lib/speedy/services/clients.rb +40 -0
- data/lib/speedy/services/courier_services.rb +25 -0
- data/lib/speedy/services/location/block.rb +32 -0
- data/lib/speedy/services/location/complex.rb +39 -0
- data/lib/speedy/services/location/country.rb +70 -0
- data/lib/speedy/services/location/office.rb +50 -0
- data/lib/speedy/services/location/point_of_interest.rb +39 -0
- data/lib/speedy/services/location/postcode.rb +25 -0
- data/lib/speedy/services/location/site.rb +77 -0
- data/lib/speedy/services/location/state.rb +46 -0
- data/lib/speedy/services/location/street.rb +39 -0
- data/lib/speedy/services/location.rb +11 -0
- data/lib/speedy/services/payments.rb +19 -0
- data/lib/speedy/services/pickup.rb +38 -0
- data/lib/speedy/services/print.rb +58 -0
- data/lib/speedy/services/shipments/shipment.rb +120 -0
- data/lib/speedy/services/shipments.rb +11 -0
- data/lib/speedy/services/tracking.rb +26 -0
- data/lib/speedy/services/validation/address.rb +26 -0
- data/lib/speedy/services/validation/general.rb +37 -0
- data/lib/speedy/services/validation.rb +11 -0
- data/lib/speedy/transport_error.rb +17 -0
- data/lib/speedy/util.rb +67 -0
- data/lib/speedy/version.rb +5 -0
- data/lib/speedy-bg.rb +6 -0
- data/lib/speedy.rb +203 -0
- data/sig/speedy.rbs +374 -0
- metadata +227 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Speedy
|
|
4
|
+
module Services
|
|
5
|
+
class Payments < Speedy::ServiceResource
|
|
6
|
+
resource_path 'payments'
|
|
7
|
+
|
|
8
|
+
def payouts(from_date:, to_date:, include_details: nil)
|
|
9
|
+
response = post(body: {
|
|
10
|
+
from_date: from_date,
|
|
11
|
+
to_date: to_date,
|
|
12
|
+
include_details: include_details
|
|
13
|
+
}.compact)
|
|
14
|
+
|
|
15
|
+
collection(response, Speedy::Models::Payments::Payout)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Speedy
|
|
4
|
+
module Services
|
|
5
|
+
class Pickup < Speedy::ServiceResource
|
|
6
|
+
resource_path 'pickup'
|
|
7
|
+
|
|
8
|
+
# POST `/pickup`
|
|
9
|
+
def create(pickup_date_time:, pickup_scope: nil, explicit_shipment_id_list: nil,
|
|
10
|
+
visit_end_time: nil, contact_name: nil, phone_number: nil,
|
|
11
|
+
auto_adjust_pickup_date: nil)
|
|
12
|
+
response = post(body: {
|
|
13
|
+
pickup_date_time: pickup_date_time,
|
|
14
|
+
pickup_scope: pickup_scope,
|
|
15
|
+
explicit_shipment_id_list: explicit_shipment_id_list,
|
|
16
|
+
visit_end_time: visit_end_time,
|
|
17
|
+
contact_name: contact_name,
|
|
18
|
+
phone_number: phone_number,
|
|
19
|
+
auto_adjust_pickup_date: auto_adjust_pickup_date
|
|
20
|
+
}.compact)
|
|
21
|
+
|
|
22
|
+
collection(response, Speedy::Models::Pickup::PickupOrder)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# POST `/pickup/terms`
|
|
26
|
+
def terms(service_id:, starting_date: nil, sender: nil, sender_has_payment: nil)
|
|
27
|
+
response = post('terms', body: {
|
|
28
|
+
service_id: service_id,
|
|
29
|
+
starting_date: starting_date,
|
|
30
|
+
sender: sender,
|
|
31
|
+
sender_has_payment: sender_has_payment
|
|
32
|
+
}.compact)
|
|
33
|
+
|
|
34
|
+
resource(response, Speedy::Models::Pickup::TermsResponse)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Speedy
|
|
4
|
+
module Services
|
|
5
|
+
class Print < Speedy::ServiceResource
|
|
6
|
+
resource_path 'print'
|
|
7
|
+
|
|
8
|
+
# POST `/print`
|
|
9
|
+
def create_pdf(parcels:, format: nil, paper_size: nil, printer_name: nil, dpi: nil,
|
|
10
|
+
additional_waybill_sender_copy: nil)
|
|
11
|
+
post(body: {
|
|
12
|
+
parcels: parcels,
|
|
13
|
+
format: format,
|
|
14
|
+
paper_size: paper_size,
|
|
15
|
+
printer_name: printer_name,
|
|
16
|
+
dpi: dpi,
|
|
17
|
+
additional_waybill_sender_copy: additional_waybill_sender_copy
|
|
18
|
+
}.compact)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# POST `/print/extended`
|
|
22
|
+
def create_pdf_extended(parcels:, format: nil, paper_size: nil, printer_name: nil, dpi: nil,
|
|
23
|
+
additional_waybill_sender_copy: nil)
|
|
24
|
+
response = post('extended', body: {
|
|
25
|
+
parcels: parcels,
|
|
26
|
+
format: format,
|
|
27
|
+
paper_size: paper_size,
|
|
28
|
+
printer_name: printer_name,
|
|
29
|
+
dpi: dpi,
|
|
30
|
+
additional_waybill_sender_copy: additional_waybill_sender_copy
|
|
31
|
+
}.compact)
|
|
32
|
+
|
|
33
|
+
resource(response, Speedy::Models::Print::ExtendedPrintResponse)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# POST `/print/labelInfo`
|
|
37
|
+
def label_info(parcel: nil, parcels: nil)
|
|
38
|
+
parcels ||= parcel.is_a?(Hash) ? [parcel] : Array(parcel)
|
|
39
|
+
response = post('labelInfo', body: { parcels: parcels })
|
|
40
|
+
|
|
41
|
+
resource(response, Speedy::Models::Print::LabelInfoResponse)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# POST `/print/voucher`
|
|
45
|
+
# The documented response content type is application/pdf (or ZPL when requested).
|
|
46
|
+
def voucher(shipment_ids:, printer_name: nil, format: nil, dpi: nil)
|
|
47
|
+
response = post('voucher', body: {
|
|
48
|
+
shipment_ids: shipment_ids,
|
|
49
|
+
printer_name: printer_name,
|
|
50
|
+
format: format,
|
|
51
|
+
dpi: dpi
|
|
52
|
+
}.compact)
|
|
53
|
+
|
|
54
|
+
response.body
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Speedy
|
|
4
|
+
module Services
|
|
5
|
+
module Shipments
|
|
6
|
+
class Shipment < Speedy::ServiceResource
|
|
7
|
+
include Speedy::Services::Shipments
|
|
8
|
+
|
|
9
|
+
resource_path 'shipment'
|
|
10
|
+
|
|
11
|
+
# POST `/shipment`
|
|
12
|
+
def create(service:, content:, payment:, recipient:, sender: nil, **options)
|
|
13
|
+
response = post(body: {
|
|
14
|
+
service: service,
|
|
15
|
+
content: content,
|
|
16
|
+
payment: payment,
|
|
17
|
+
sender: sender,
|
|
18
|
+
recipient: recipient
|
|
19
|
+
}.merge(options).compact)
|
|
20
|
+
|
|
21
|
+
resource(response, Speedy::Models::Shipments::CreateShipmentResponse)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
alias create_shipment create
|
|
25
|
+
|
|
26
|
+
# POST `/shipment/info`
|
|
27
|
+
def info(shipment_ids)
|
|
28
|
+
response = post('info', body: { shipment_ids: Array(shipment_ids) })
|
|
29
|
+
|
|
30
|
+
collection(response, Speedy::Models::Shipments::Shipment)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# POST `/shipment/update`
|
|
34
|
+
def update(id:, **attributes)
|
|
35
|
+
response = post('update', body: { id: id }.merge(attributes))
|
|
36
|
+
|
|
37
|
+
resource(response, Speedy::Models::Shipments::UpdateShipmentResponse)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# POST `/shipment/update/properties`
|
|
41
|
+
def update_properties(id:, **properties)
|
|
42
|
+
response = post('update/properties', body: { id: id, properties: properties })
|
|
43
|
+
|
|
44
|
+
resource(response, Speedy::Models::Shipments::UpdateShipmentResponse)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# POST `/shipment/cancel`
|
|
48
|
+
def cancel(id:, comment: nil)
|
|
49
|
+
response = post('cancel', body: { shipment_id: id, comment: comment }.compact)
|
|
50
|
+
|
|
51
|
+
resource(response, Speedy::Models::Response)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# POST `/shipment/finalize`
|
|
55
|
+
def finalize(id:)
|
|
56
|
+
response = post('finalize', body: { shipment_id: id })
|
|
57
|
+
|
|
58
|
+
resource(response, Speedy::Models::Shipments::CreateShipmentResponse)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# POST `/shipment/add_parcel`
|
|
62
|
+
def add_parcel(shipment_id:, parcel:, declared_value_amount: nil, cod_amount: nil,
|
|
63
|
+
cod_fiscal_receipt_items: nil)
|
|
64
|
+
response = post('add_parcel', body: {
|
|
65
|
+
shipment_id: shipment_id,
|
|
66
|
+
parcel: parcel,
|
|
67
|
+
declared_value_amount: declared_value_amount,
|
|
68
|
+
cod_amount: cod_amount,
|
|
69
|
+
cod_fiscal_receipt_items: cod_fiscal_receipt_items
|
|
70
|
+
}.compact)
|
|
71
|
+
|
|
72
|
+
resource(response, Speedy::Models::Shipments::CreatedShipmentParcel, key: :parcel)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# POST `/shipment/{shipmentId}/secondary`
|
|
76
|
+
def secondary(shipment_id:, types: nil)
|
|
77
|
+
response = post("#{shipment_id}/secondary", body: { types: types }.compact)
|
|
78
|
+
|
|
79
|
+
collection(response, Speedy::Models::Shipments::SecondaryShipment)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# POST `/shipment/search`
|
|
83
|
+
def find_by_reference(ref:, search_in_ref:, shipments_only: nil, include_returns: nil,
|
|
84
|
+
from_date_time: nil, to_date_time: nil)
|
|
85
|
+
response = post('search', body: {
|
|
86
|
+
ref: ref,
|
|
87
|
+
search_in_ref: search_in_ref,
|
|
88
|
+
shipments_only: shipments_only,
|
|
89
|
+
include_returns: include_returns,
|
|
90
|
+
from_date_time: from_date_time,
|
|
91
|
+
to_date_time: to_date_time
|
|
92
|
+
}.compact)
|
|
93
|
+
|
|
94
|
+
response.body[:barcodes] || response.body['barcodes'] || []
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# POST `/shipment/handover`
|
|
98
|
+
def hand_over_to_courier(parcels:)
|
|
99
|
+
response = post('handover', body: { parcels: parcels })
|
|
100
|
+
|
|
101
|
+
resource(response, Speedy::Models::Response)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# POST `/shipment/handover-to-midway-carrier`
|
|
105
|
+
def hand_over_to_midway_carrier(parcels:)
|
|
106
|
+
response = post('handover-to-midway-carrier', body: { parcels: parcels })
|
|
107
|
+
|
|
108
|
+
resource(response, Speedy::Models::Response)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# POST `/shipment/barcode-information`
|
|
112
|
+
def barcode_information(parcel:)
|
|
113
|
+
response = post('barcode-information', body: { parcel: parcel })
|
|
114
|
+
|
|
115
|
+
resource(response, Speedy::Models::Shipments::BarcodeInformation)
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Speedy
|
|
4
|
+
module Services
|
|
5
|
+
class Tracking < Speedy::ServiceResource
|
|
6
|
+
resource_path 'track'
|
|
7
|
+
|
|
8
|
+
# POST `/track`
|
|
9
|
+
def track(parcels:, last_operation_only: nil)
|
|
10
|
+
response = post(body: {
|
|
11
|
+
parcels: parcels,
|
|
12
|
+
last_operation_only: last_operation_only
|
|
13
|
+
}.compact)
|
|
14
|
+
|
|
15
|
+
collection(response, Speedy::Models::Tracking::TrackedParcel)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# POST `/track/bulk`
|
|
19
|
+
def bulk_files(last_processed_file_id:)
|
|
20
|
+
response = post('bulk', body: { last_processed_file_id: last_processed_file_id })
|
|
21
|
+
|
|
22
|
+
collection(response, Speedy::Models::Tracking::BulkTrackingDataFile)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Speedy
|
|
4
|
+
module Services
|
|
5
|
+
module Validation
|
|
6
|
+
class Address < Speedy::ServiceResource
|
|
7
|
+
resource_path 'validation/address'
|
|
8
|
+
|
|
9
|
+
# POST `/validation/address`
|
|
10
|
+
def validate_address(address)
|
|
11
|
+
response = post(body: { address: address_to_hash(address) })
|
|
12
|
+
|
|
13
|
+
resource(response, Speedy::Models::Validation::ValidationResponse)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
def address_to_hash(address)
|
|
19
|
+
return address.to_h if address.is_a?(Speedy::Models::Shipments::ShipmentAddress)
|
|
20
|
+
|
|
21
|
+
Speedy::Models::Shipments::ShipmentAddress.new(address).to_h
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Speedy
|
|
4
|
+
module Services
|
|
5
|
+
module Validation
|
|
6
|
+
class General < Speedy::ServiceResource
|
|
7
|
+
resource_path 'validation'
|
|
8
|
+
|
|
9
|
+
def phone(number:, extension: nil)
|
|
10
|
+
response = post('phone', body: { number: number, ext: extension }.compact)
|
|
11
|
+
|
|
12
|
+
resource(response, Speedy::Models::Validation::ValidationResponse)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def post_code(country_id:, post_code:, site_id: nil)
|
|
16
|
+
response = post('postcode', body: {
|
|
17
|
+
country_id: country_id, site_id: site_id, post_code: post_code
|
|
18
|
+
}.compact)
|
|
19
|
+
|
|
20
|
+
resource(response, Speedy::Models::Validation::ValidationResponse)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def shipment(service:, content:, payment:, recipient:, sender: nil, **options)
|
|
24
|
+
response = post('shipment', body: {
|
|
25
|
+
service: service,
|
|
26
|
+
content: content,
|
|
27
|
+
payment: payment,
|
|
28
|
+
sender: sender,
|
|
29
|
+
recipient: recipient
|
|
30
|
+
}.merge(options).compact)
|
|
31
|
+
|
|
32
|
+
resource(response, Speedy::Models::Validation::ValidationResponse)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Speedy
|
|
4
|
+
# A network failure with no usable HTTP response. The original exception is
|
|
5
|
+
# retained as cause; inspect it carefully because it may contain private data.
|
|
6
|
+
class TransportError < Error; end
|
|
7
|
+
|
|
8
|
+
# The API connection could not be established or was interrupted.
|
|
9
|
+
class ConnectionError < TransportError; end
|
|
10
|
+
|
|
11
|
+
# An API request exceeded its configured connection/read/write timeout.
|
|
12
|
+
# A timeout does not establish whether a remote mutation took effect.
|
|
13
|
+
class TimeoutError < TransportError; end
|
|
14
|
+
|
|
15
|
+
# TLS negotiation or certificate verification failed.
|
|
16
|
+
class SSLError < TransportError; end
|
|
17
|
+
end
|
data/lib/speedy/util.rb
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Speedy
|
|
4
|
+
module Util
|
|
5
|
+
module_function
|
|
6
|
+
|
|
7
|
+
def pluralize(word)
|
|
8
|
+
base = underscore(word.to_s.split('::').last)
|
|
9
|
+
|
|
10
|
+
if base.end_with?('y') && !base.end_with?('ay', 'ey', 'iy', 'oy', 'uy')
|
|
11
|
+
"#{base[0..-2]}ies"
|
|
12
|
+
elsif base.end_with?('s', 'x', 'z', 'ch', 'sh')
|
|
13
|
+
"#{base}es"
|
|
14
|
+
else
|
|
15
|
+
"#{base}s"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def camel_case(str)
|
|
20
|
+
str.gsub(/_([a-z])/) { ::Regexp.last_match(1).upcase }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def underscore(str)
|
|
24
|
+
str
|
|
25
|
+
.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
|
26
|
+
.gsub(/([a-z\d])([A-Z])/, '\1_\2')
|
|
27
|
+
.downcase
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def underscore_keys(hash)
|
|
31
|
+
return hash if primitive_value?(hash)
|
|
32
|
+
|
|
33
|
+
hash.each_with_object({}) do |(key, value), result|
|
|
34
|
+
result[underscore(key.to_s)] = case value
|
|
35
|
+
when Hash
|
|
36
|
+
underscore_keys(value)
|
|
37
|
+
when Array
|
|
38
|
+
value.map { |v| underscore_keys(v) }
|
|
39
|
+
else
|
|
40
|
+
value
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def camelize_keys(hash)
|
|
46
|
+
return hash if primitive_value?(hash)
|
|
47
|
+
|
|
48
|
+
hash.each_with_object({}) do |(key, value), result|
|
|
49
|
+
result[camel_case(key.to_s)] = case value
|
|
50
|
+
when Hash
|
|
51
|
+
camelize_keys(value)
|
|
52
|
+
when Array
|
|
53
|
+
value.map { |v| camelize_keys(v) }
|
|
54
|
+
else
|
|
55
|
+
value
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def primitive_value?(value)
|
|
61
|
+
PRIMITIVE_TYPES.any? { |type| value.is_a?(type) }
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
PRIMITIVE_TYPES = [String, Numeric, TrueClass, FalseClass, NilClass].freeze
|
|
65
|
+
private_constant :PRIMITIVE_TYPES
|
|
66
|
+
end
|
|
67
|
+
end
|
data/lib/speedy-bg.rb
ADDED
data/lib/speedy.rb
ADDED
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'speedy/version'
|
|
4
|
+
require_relative 'speedy/util'
|
|
5
|
+
require_relative 'speedy/error'
|
|
6
|
+
require_relative 'speedy/transport_error'
|
|
7
|
+
require_relative 'speedy/client_resources'
|
|
8
|
+
require_relative 'speedy/client'
|
|
9
|
+
require_relative 'speedy/camel_case_middleware'
|
|
10
|
+
require_relative 'speedy/service_resource'
|
|
11
|
+
require_relative 'speedy/resource_attributes'
|
|
12
|
+
require_relative 'speedy/model'
|
|
13
|
+
require_relative 'speedy/collection'
|
|
14
|
+
|
|
15
|
+
module Speedy
|
|
16
|
+
module Services
|
|
17
|
+
autoload :Calculation, 'speedy/services/calculation'
|
|
18
|
+
autoload :Shipments, 'speedy/services/shipments'
|
|
19
|
+
autoload :Print, 'speedy/services/print'
|
|
20
|
+
autoload :Tracking, 'speedy/services/tracking'
|
|
21
|
+
autoload :CourierServices, 'speedy/services/courier_services'
|
|
22
|
+
autoload :Pickup, 'speedy/services/pickup'
|
|
23
|
+
autoload :Clients, 'speedy/services/clients'
|
|
24
|
+
autoload :Payments, 'speedy/services/payments'
|
|
25
|
+
autoload :Location, 'speedy/services/location'
|
|
26
|
+
autoload :Validation, 'speedy/services/validation'
|
|
27
|
+
|
|
28
|
+
module Shipments
|
|
29
|
+
autoload :Shipment, 'speedy/services/shipments/shipment'
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
module Location
|
|
33
|
+
autoload :Office, 'speedy/services/location/office'
|
|
34
|
+
autoload :Site, 'speedy/services/location/site'
|
|
35
|
+
autoload :State, 'speedy/services/location/state'
|
|
36
|
+
autoload :Country, 'speedy/services/location/country'
|
|
37
|
+
autoload :Street, 'speedy/services/location/street'
|
|
38
|
+
autoload :Complex, 'speedy/services/location/complex'
|
|
39
|
+
autoload :Block, 'speedy/services/location/block'
|
|
40
|
+
autoload :PointOfInterest, 'speedy/services/location/point_of_interest'
|
|
41
|
+
autoload :Postcode, 'speedy/services/location/postcode'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
module Validation
|
|
45
|
+
autoload :Address, 'speedy/services/validation/address'
|
|
46
|
+
autoload :General, 'speedy/services/validation/general'
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
module Models
|
|
51
|
+
autoload :Error, 'speedy/models/error'
|
|
52
|
+
autoload :Response, 'speedy/models/response'
|
|
53
|
+
|
|
54
|
+
module Tracking
|
|
55
|
+
autoload :TrackedParcel, 'speedy/models/tracking/tracked_parcel'
|
|
56
|
+
autoload :TrackedParcelOperation, 'speedy/models/tracking/tracked_parcel_operation'
|
|
57
|
+
autoload :TrackedParcelOperationAdditionalInfo,
|
|
58
|
+
'speedy/models/tracking/tracked_parcel_operation_additional_info'
|
|
59
|
+
autoload :TrackedParcelOperationAdditionalInfoRecipient,
|
|
60
|
+
'speedy/models/tracking/tracked_parcel_operation_additional_info_recipient'
|
|
61
|
+
autoload :TrackedParcelOperationAdditionalInfoPredict,
|
|
62
|
+
'speedy/models/tracking/tracked_parcel_operation_additional_info_predict'
|
|
63
|
+
autoload :ExternalCarrierParcelNumberDetails,
|
|
64
|
+
'speedy/models/tracking/external_carrier_parcel_number_details'
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
module Services
|
|
68
|
+
autoload :CourierService, 'speedy/models/services/courier_service'
|
|
69
|
+
autoload :ExtendedCourierService, 'speedy/models/services/extended_courier_service'
|
|
70
|
+
autoload :AdditionalCourierService, 'speedy/models/services/additional_courier_service'
|
|
71
|
+
autoload :AdditionalCourierServices, 'speedy/models/services/additional_courier_services'
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
module Pickup
|
|
75
|
+
autoload :PickupOrder, 'speedy/models/pickup/pickup_order'
|
|
76
|
+
autoload :TermsResponse, 'speedy/models/pickup/terms_response'
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
module Clients
|
|
80
|
+
autoload :Client, 'speedy/models/clients/client'
|
|
81
|
+
autoload :ContractInfo, 'speedy/models/clients/contract_info'
|
|
82
|
+
autoload :SpecialDeliveryRequirements, 'speedy/models/clients/special_delivery_requirements'
|
|
83
|
+
autoload :Requirement, 'speedy/models/clients/requirement'
|
|
84
|
+
autoload :CODContractInfo, 'speedy/models/clients/cod_contract_info'
|
|
85
|
+
autoload :CODInternationalAnnex, 'speedy/models/clients/cod_international_annex'
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
module Payments
|
|
89
|
+
autoload :Payout, 'speedy/models/payments/payout'
|
|
90
|
+
autoload :PayoutDetails, 'speedy/models/payments/payout_details'
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
module Common
|
|
94
|
+
autoload :Address, 'speedy/models/common/address'
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
module Calculation
|
|
98
|
+
autoload :CalculationResult, 'speedy/models/calculation/calculation_result'
|
|
99
|
+
autoload :AddressLocation, 'speedy/models/calculation/address_location'
|
|
100
|
+
autoload :CalculationContent, 'speedy/models/calculation/calculation_content'
|
|
101
|
+
autoload :CalculationRecipient, 'speedy/models/calculation/calculation_recipient'
|
|
102
|
+
autoload :CalculationSender, 'speedy/models/calculation/calculation_sender'
|
|
103
|
+
autoload :CalculationService, 'speedy/models/calculation/calculation_service'
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
module Shipments
|
|
107
|
+
autoload :CreateShipmentResponse, 'speedy/models/shipments/create_shipment_response'
|
|
108
|
+
autoload :UpdateShipmentResponse, 'speedy/models/shipments/update_shipment_response'
|
|
109
|
+
autoload :Shipment, 'speedy/models/shipments/shipment'
|
|
110
|
+
autoload :Sender, 'speedy/models/shipments/sender'
|
|
111
|
+
autoload :Recipient, 'speedy/models/shipments/recipient'
|
|
112
|
+
autoload :Content, 'speedy/models/shipments/content'
|
|
113
|
+
autoload :Payment, 'speedy/models/shipments/payment'
|
|
114
|
+
autoload :Parcel, 'speedy/models/shipments/parcel'
|
|
115
|
+
autoload :ShipmentDelivery, 'speedy/models/shipments/shipment_delivery'
|
|
116
|
+
autoload :CreatedShipmentParcel, 'speedy/models/shipments/created_shipment_parcel'
|
|
117
|
+
autoload :ShipmentContent, 'speedy/models/shipments/shipment_content'
|
|
118
|
+
autoload :ShipmentPayment, 'speedy/models/shipments/shipment_payment'
|
|
119
|
+
autoload :ShipmentParcel, 'speedy/models/shipments/shipment_parcel'
|
|
120
|
+
autoload :ShipmentParcelSize, 'speedy/models/shipments/shipment_parcel_size'
|
|
121
|
+
autoload :GoodsItem, 'speedy/models/shipments/goods_item'
|
|
122
|
+
autoload :ExternalCarrierParcelNumber, 'speedy/models/shipments/external_carrier_parcel_number'
|
|
123
|
+
autoload :ShipmentDiscountCardId, 'speedy/models/shipments/shipment_discount_card_id'
|
|
124
|
+
autoload :BankAccount, 'speedy/models/shipments/bank_account'
|
|
125
|
+
autoload :CODPayment, 'speedy/models/shipments/cod_payment'
|
|
126
|
+
autoload :ShipmentAdditionalServices, 'speedy/models/shipments/shipment_additional_services'
|
|
127
|
+
autoload :ShipmentCODAdditionalService, 'speedy/models/shipments/shipment_cod_additional_service'
|
|
128
|
+
autoload :ShipmentCODFiscalReceiptItem, 'speedy/models/shipments/shipment_cod_fiscal_receipt_item'
|
|
129
|
+
autoload :ShipmentDeclaredValueAdditionalService,
|
|
130
|
+
'speedy/models/shipments/shipment_declared_value_additional_service'
|
|
131
|
+
autoload :ShipmentOBPD, 'speedy/models/shipments/shipment_obpd'
|
|
132
|
+
autoload :ShipmentReturnAdditionalServices,
|
|
133
|
+
'speedy/models/shipments/shipment_return_additional_services'
|
|
134
|
+
autoload :ShipmentRODAdditionalService, 'speedy/models/shipments/shipment_rod_additional_service'
|
|
135
|
+
autoload :ShipmentReturnReceiptAdditionalService,
|
|
136
|
+
'speedy/models/shipments/shipment_return_receipt_additional_service'
|
|
137
|
+
autoload :ShipmentElectronicReturnReceiptAdditionalService,
|
|
138
|
+
'speedy/models/shipments/shipment_electronic_return_receipt_additional_service'
|
|
139
|
+
autoload :ShipmentSWAPAdditionalService, 'speedy/models/shipments/shipment_swap_additional_service'
|
|
140
|
+
autoload :ShipmentROPAdditionalService, 'speedy/models/shipments/shipment_rop_additional_service'
|
|
141
|
+
autoload :ShipmentROPAdditionalServiceLine,
|
|
142
|
+
'speedy/models/shipments/shipment_rop_additional_service_line'
|
|
143
|
+
autoload :ShipmentReturnVoucherAdditionalService,
|
|
144
|
+
'speedy/models/shipments/shipment_return_voucher_additional_service'
|
|
145
|
+
autoload :MoneyTransferPremium, 'speedy/models/shipments/money_transfer_premium'
|
|
146
|
+
autoload :ReturnAmounts, 'speedy/models/shipments/return_amounts'
|
|
147
|
+
autoload :ShipmentAddress, 'speedy/models/shipments/shipment_address'
|
|
148
|
+
autoload :ShipmentPhoneNumber, 'speedy/models/shipments/shipment_phone_number'
|
|
149
|
+
autoload :ShipmentPrice, 'speedy/models/shipments/shipment_price'
|
|
150
|
+
autoload :ShipmentPriceAmount, 'speedy/models/shipments/shipment_price_amount'
|
|
151
|
+
autoload :ShipmentParcelRef, 'speedy/models/shipments/shipment_parcel_ref'
|
|
152
|
+
autoload :ShipmentRecipient, 'speedy/models/shipments/shipment_recipient'
|
|
153
|
+
autoload :ShipmentSender, 'speedy/models/shipments/shipment_sender'
|
|
154
|
+
autoload :ShipmentService, 'speedy/models/shipments/shipment_service'
|
|
155
|
+
autoload :SecondaryShipment, 'speedy/models/shipments/secondary_shipment'
|
|
156
|
+
autoload :ShipmentParcelNumber, 'speedy/models/shipments/shipment_parcel_number'
|
|
157
|
+
autoload :PrimaryShipment, 'speedy/models/shipments/primary_shipment'
|
|
158
|
+
autoload :BarcodeInformation, 'speedy/models/shipments/barcode_information'
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
module Print
|
|
162
|
+
autoload :ExtendedPrintResponse, 'speedy/models/print/extended_print_response'
|
|
163
|
+
autoload :LabelInfo, 'speedy/models/print/label_info'
|
|
164
|
+
autoload :LabelInfoResponse, 'speedy/models/print/label_info_response'
|
|
165
|
+
autoload :PrintResponse, 'speedy/models/print/print_response'
|
|
166
|
+
autoload :ParcelToPrintAdditionalBarcode, 'speedy/models/print/parcel_to_print_additional_barcode'
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
module Location
|
|
170
|
+
autoload :FindOfficeResponse, 'speedy/models/location/find_office_response'
|
|
171
|
+
autoload :FindSiteResponse, 'speedy/models/location/find_site_response'
|
|
172
|
+
autoload :GetOfficeResponse, 'speedy/models/location/get_office_response'
|
|
173
|
+
autoload :GetSiteResponse, 'speedy/models/location/get_site_response'
|
|
174
|
+
autoload :Office, 'speedy/models/location/office'
|
|
175
|
+
autoload :OfficeResult, 'speedy/models/location/office_result'
|
|
176
|
+
autoload :OfficeWorkingTimeSchedule, 'speedy/models/location/office_working_time_schedule'
|
|
177
|
+
autoload :RoutingInformation, 'speedy/models/location/routing_information'
|
|
178
|
+
autoload :Tour, 'speedy/models/location/tour'
|
|
179
|
+
autoload :Site, 'speedy/models/location/site'
|
|
180
|
+
autoload :State, 'speedy/models/location/state'
|
|
181
|
+
autoload :Country, 'speedy/models/location/country'
|
|
182
|
+
autoload :Street, 'speedy/models/location/street'
|
|
183
|
+
autoload :Complex, 'speedy/models/location/complex'
|
|
184
|
+
autoload :Block, 'speedy/models/location/block'
|
|
185
|
+
autoload :PointOfInterest, 'speedy/models/location/point_of_interest'
|
|
186
|
+
autoload :Postcode, 'speedy/models/location/postcode'
|
|
187
|
+
autoload :AddressNomenclatureType, 'speedy/models/location/address_nomenclature_type'
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
module Validation
|
|
191
|
+
autoload :ValidationResponse, 'speedy/models/validation/validation_response'
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
module Tracking
|
|
195
|
+
autoload :BulkTrackingDataFile, 'speedy/models/tracking/bulk_tracking_data_file'
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
Address = Models::Common::Address
|
|
200
|
+
ShipmentAddress = Models::Shipments::ShipmentAddress
|
|
201
|
+
Office = Models::Location::Office
|
|
202
|
+
State = Models::Location::State
|
|
203
|
+
end
|