gillbus 0.22.0 → 0.22.5
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 +4 -4
- data/lib/gillbus/helpers/parser.rb +20 -1
- data/lib/gillbus/search_nearby_trips.rb +4 -4
- data/lib/gillbus/search_trips.rb +19 -13
- data/lib/gillbus/structs/segment.rb +15 -0
- data/lib/gillbus/structs/trip.rb +15 -0
- data/lib/gillbus/tickets_booking.rb +3 -1
- data/lib/gillbus/version.rb +1 -1
- data/test/parse_trip_options_test.rb +92 -0
- data/test/responses/searchTrips-full-carriers-info.xml +231 -0
- data/test/responses/searchTrips-new-options-format.xml +2 -1
- data/test/search_trips_test.rb +19 -1
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d869ac0e4f306ffb08e0105d44342d46292173a7f0bf92ac8e04e53aaec81ee1
|
4
|
+
data.tar.gz: 01b901835bb4109000f7c65dc2aa8a13f0bd020e7b84a962b0c57f664cf3497b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b450666814bc1be0d35f54e2801499167c552a5b72481e8a1b91b2509f2ca8b63195c9b4332f0ef7a2585db9d7579b77b2ca5ddf7e29241b64d2cf5efdcd3c8b
|
7
|
+
data.tar.gz: 88b5c89a7704f44796f0bd737a0004e55acfae7c75d543f35aee829ebbd6754ba7767a22b4c6cd683381b5ed0c0048f30777c6258df93a0cd64959f7e0a639e2
|
@@ -46,12 +46,31 @@ class Gillbus
|
|
46
46
|
if key.is_a?(Regexp)
|
47
47
|
target_doc.select { |k| k =~ key }
|
48
48
|
elsif key.is_a?(Array)
|
49
|
-
key.map { |k|
|
49
|
+
key.map { |k| ensure_array(target_doc[k]) }.inject(&:+)
|
50
50
|
else
|
51
51
|
target_doc[key]
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
+
# Нужно удостовериться, что элемент завёрнут в массив,
|
56
|
+
# чтобы дальше эти массивы сложить в методе fetch_value.
|
57
|
+
# Есть нюанс, что при сложении ['Item'] + [{'ID'=>'1'}, 'Subitem'] получается
|
58
|
+
# ['Item', {'ID'=>'1'}, 'Subitem'], а нам надо ['Item', [{'ID'=>'1'}, 'Subitem']]
|
59
|
+
# Поэтому item_with_id заворачиваем во внешний массив
|
60
|
+
def ensure_array(val)
|
61
|
+
if is_item_with_id?(val)
|
62
|
+
[val]
|
63
|
+
else
|
64
|
+
Array(val)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# Детектит элементы вида <CRITICAL_INF ID="1">Text</CRITICAL_INF>,
|
69
|
+
# которые парсятся как [{'ID'=>'1'}, 'Text']
|
70
|
+
def is_item_with_id?(val)
|
71
|
+
val.is_a?(Array) && val.size == 2 && val.first.is_a?(Hash) && val.first.keys == ['ID']
|
72
|
+
end
|
73
|
+
|
55
74
|
def make_one_or_many(type, val)
|
56
75
|
# [:type]
|
57
76
|
if type.is_a? Array
|
@@ -23,10 +23,10 @@ class Gillbus
|
|
23
23
|
|
24
24
|
def params
|
25
25
|
compact(
|
26
|
-
startCityId:
|
27
|
-
endCityId:
|
28
|
-
startDateSearch:
|
29
|
-
ticketCount:
|
26
|
+
startCityId: start_city_id,
|
27
|
+
endCityId: end_city_id,
|
28
|
+
startDateSearch: date(start_date_search),
|
29
|
+
ticketCount: ticket_count,
|
30
30
|
)
|
31
31
|
end
|
32
32
|
end
|
data/lib/gillbus/search_trips.rb
CHANGED
@@ -44,6 +44,11 @@ class Gillbus
|
|
44
44
|
# Если false, то будут искаться рейсы только в одну сторону.
|
45
45
|
attr_accessor :round_trip
|
46
46
|
|
47
|
+
# limitSegmentTripShow (опциональный параметр)
|
48
|
+
# Ограничение максимального количества сегментных рейсов.
|
49
|
+
# Если ничего не передано или передано число -1, то выдача не ограничена.
|
50
|
+
attr_accessor :limit_segment_trip_show
|
51
|
+
|
47
52
|
# backStartDateSearch (обязательный если roundTrip=true)
|
48
53
|
# Дата отправления, на которую будет произведен поиск обратных рейсов.
|
49
54
|
attr_accessor :back_start_date_search
|
@@ -93,20 +98,21 @@ class Gillbus
|
|
93
98
|
|
94
99
|
def params
|
95
100
|
compact(
|
96
|
-
selectedModes:
|
97
|
-
connectionIds:
|
98
|
-
tripFullSale:
|
99
|
-
fullSearch:
|
100
|
-
startCityId:
|
101
|
-
endCityId:
|
102
|
-
startDateSearch:
|
103
|
-
roundTrip:
|
101
|
+
selectedModes: modes(selected_modes),
|
102
|
+
connectionIds: list(connection_ids),
|
103
|
+
tripFullSale: bool(trip_full_sale),
|
104
|
+
fullSearch: bool(full_search),
|
105
|
+
startCityId: start_city_id,
|
106
|
+
endCityId: end_city_id,
|
107
|
+
startDateSearch: date(start_date_search),
|
108
|
+
roundTrip: bool(round_trip),
|
109
|
+
limitSegmentTripShow: limit_segment_trip_show,
|
104
110
|
backStartDateSearch: date(back_start_date_search),
|
105
|
-
ticketCount:
|
106
|
-
waitTimeout:
|
107
|
-
onlyBranded:
|
108
|
-
tripOptions:
|
109
|
-
insuranceId:
|
111
|
+
ticketCount: ticket_count,
|
112
|
+
waitTimeout: wait_timeout,
|
113
|
+
onlyBranded: bool(only_branded),
|
114
|
+
tripOptions: bool(trip_options),
|
115
|
+
insuranceId: insurance_id,
|
110
116
|
**passengers_data,
|
111
117
|
)
|
112
118
|
end
|
@@ -67,6 +67,21 @@ class Gillbus
|
|
67
67
|
# => "RU \"ПЕТРОКОМ - АВТО ПЛЮС\" ООО"
|
68
68
|
field :carrier_name
|
69
69
|
|
70
|
+
# => "RU \"Еременчук Е.А.\" ИП"
|
71
|
+
field :carrier_legal_name
|
72
|
+
|
73
|
+
# => "260802027265"
|
74
|
+
field :carrier_inn
|
75
|
+
|
76
|
+
# => "г СНТ Лилия, Московская, Наро-фоминский"
|
77
|
+
field :carrier_address_fact
|
78
|
+
|
79
|
+
# => "г СНТ Лилия, Московская, Наро-фоминский"
|
80
|
+
field :carrier_address_leg
|
81
|
+
|
82
|
+
# => "316265100057314"
|
83
|
+
field :carrier_egrul_egis
|
84
|
+
|
70
85
|
# => "09:10"
|
71
86
|
field :time_in_road, :time
|
72
87
|
|
data/lib/gillbus/structs/trip.rb
CHANGED
@@ -71,6 +71,21 @@ class Gillbus
|
|
71
71
|
# => "RU \"ПЕТРОКОМ - АВТО ПЛЮС\" ООО"
|
72
72
|
field :carrier_name
|
73
73
|
|
74
|
+
# => "RU \"Еременчук Е.А.\" ИП"
|
75
|
+
field :carrier_legal_name
|
76
|
+
|
77
|
+
# => "260802027265"
|
78
|
+
field :carrier_inn
|
79
|
+
|
80
|
+
# => "г СНТ Лилия, Московская, Наро-фоминский"
|
81
|
+
field :carrier_address_fact
|
82
|
+
|
83
|
+
# => "г СНТ Лилия, Московская, Наро-фоминский"
|
84
|
+
field :carrier_address_leg
|
85
|
+
|
86
|
+
# => "316265100057314"
|
87
|
+
field :carrier_egrul_egis
|
88
|
+
|
74
89
|
# => "09:10"
|
75
90
|
field :time_in_road, :time
|
76
91
|
|
@@ -85,7 +85,7 @@ class Gillbus
|
|
85
85
|
note: note,
|
86
86
|
ticketLocale: translated_locale(ticket_locale),
|
87
87
|
sendTo: send_to,
|
88
|
-
|
88
|
+
extCustomerUUID: user_uuid,
|
89
89
|
externalID: external_id,
|
90
90
|
returnLink: return_link,
|
91
91
|
**pax,
|
@@ -137,6 +137,7 @@ class Gillbus
|
|
137
137
|
# :seaman_passport 6 - паспорт моряка
|
138
138
|
# :birth_certificate 7 - свидетельство о рождении
|
139
139
|
# :ussr_passport 8 - паспорт формы СССР
|
140
|
+
# :tax_id 9 - CPF для WL Бразилии
|
140
141
|
attr_accessor :document_type
|
141
142
|
|
142
143
|
# passenger0passport... passengerNpassport (обязательный для авиаперевозки)
|
@@ -212,6 +213,7 @@ class Gillbus
|
|
212
213
|
seaman_passport: 6,
|
213
214
|
birth_certificate: 7,
|
214
215
|
ussr_passport: 8,
|
216
|
+
tax_id: 9,
|
215
217
|
}[value.try(:to_sym)]
|
216
218
|
end
|
217
219
|
end
|
data/lib/gillbus/version.rb
CHANGED
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'pry'
|
3
|
+
|
4
|
+
class ParseTripOptionsTest < Minitest::Test
|
5
|
+
def test_with_only_item
|
6
|
+
xml = <<~XML.strip
|
7
|
+
<DATA><TRIP><OPTIONS><CRITICAL_INFO>
|
8
|
+
<ITEM>Внимание! Ознакомьтесь со списком стран, въезд в которые ограничен в связи с коронавирусом >> https://busfor.com/ru/blog/covid-19-updates</ITEM>
|
9
|
+
</CRITICAL_INFO></OPTIONS></TRIP></DATA>
|
10
|
+
XML
|
11
|
+
|
12
|
+
subject = Gillbus::SearchTrips::Response.parse_string(xml).trips.first.options.critical_info
|
13
|
+
|
14
|
+
expected_result = [
|
15
|
+
"Внимание! Ознакомьтесь со списком стран, въезд в которые ограничен в связи с коронавирусом >> https://busfor.com/ru/blog/covid-19-updates",
|
16
|
+
]
|
17
|
+
|
18
|
+
assert_equal expected_result, subject
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_with_item_and_one_critical_inf
|
22
|
+
xml = <<~XML.strip
|
23
|
+
<DATA><TRIP><OPTIONS><CRITICAL_INFO>
|
24
|
+
<ITEM>Внимание! Ознакомьтесь со списком стран, въезд в которые ограничен в связи с коронавирусом >> https://busfor.com/ru/blog/covid-19-updates</ITEM>
|
25
|
+
<CRITICAL_INF ID="16">в связи с дорожными условиями, возможно отклонение в расписании движения в пределах 1час30.</CRITICAL_INF>
|
26
|
+
</CRITICAL_INFO></OPTIONS></TRIP></DATA>
|
27
|
+
XML
|
28
|
+
|
29
|
+
subject = Gillbus::SearchTrips::Response.parse_string(xml).trips.first.options.critical_info
|
30
|
+
|
31
|
+
expected_result = [
|
32
|
+
"Внимание! Ознакомьтесь со списком стран, въезд в которые ограничен в связи с коронавирусом >> https://busfor.com/ru/blog/covid-19-updates",
|
33
|
+
"в связи с дорожными условиями, возможно отклонение в расписании движения в пределах 1час30.",
|
34
|
+
]
|
35
|
+
|
36
|
+
assert_equal expected_result, subject
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_with_one_critical_inf
|
40
|
+
xml = <<~XML.strip
|
41
|
+
<DATA><TRIP><OPTIONS><CRITICAL_INFO>
|
42
|
+
<CRITICAL_INF ID="16">в связи с дорожными условиями, возможно отклонение в расписании движения в пределах 1час30.</CRITICAL_INF>
|
43
|
+
</CRITICAL_INFO></OPTIONS></TRIP></DATA>
|
44
|
+
XML
|
45
|
+
|
46
|
+
subject = Gillbus::SearchTrips::Response.parse_string(xml).trips.first.options.critical_info
|
47
|
+
|
48
|
+
expected_result = [
|
49
|
+
"в связи с дорожными условиями, возможно отклонение в расписании движения в пределах 1час30.",
|
50
|
+
]
|
51
|
+
|
52
|
+
assert_equal expected_result, subject
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_with_two_critical_inf
|
56
|
+
xml = <<~XML.strip
|
57
|
+
<DATA><TRIP><OPTIONS><CRITICAL_INFO>
|
58
|
+
<CRITICAL_INF ID="1">Всё будет хорошо</CRITICAL_INF>
|
59
|
+
<CRITICAL_INF ID="16">в связи с дорожными условиями, возможно отклонение в расписании движения в пределах 1час30.</CRITICAL_INF>
|
60
|
+
</CRITICAL_INFO></OPTIONS></TRIP></DATA>
|
61
|
+
XML
|
62
|
+
|
63
|
+
subject = Gillbus::SearchTrips::Response.parse_string(xml).trips.first.options.critical_info
|
64
|
+
|
65
|
+
expected_result = [
|
66
|
+
"Всё будет хорошо",
|
67
|
+
"в связи с дорожными условиями, возможно отклонение в расписании движения в пределах 1час30.",
|
68
|
+
]
|
69
|
+
|
70
|
+
assert_equal expected_result, subject
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_with_item_and_two_critical_inf
|
74
|
+
xml = <<~XML.strip
|
75
|
+
<DATA><TRIP><OPTIONS><CRITICAL_INFO>
|
76
|
+
<ITEM>Будьте внимательны, дорогие мои!</ITEM>
|
77
|
+
<CRITICAL_INF ID="1">Всё будет хорошо</CRITICAL_INF>
|
78
|
+
<CRITICAL_INF ID="16">в связи с дорожными условиями, возможно отклонение в расписании движения в пределах 1час30.</CRITICAL_INF>
|
79
|
+
</CRITICAL_INFO></OPTIONS></TRIP></DATA>
|
80
|
+
XML
|
81
|
+
|
82
|
+
subject = Gillbus::SearchTrips::Response.parse_string(xml).trips.first.options.critical_info
|
83
|
+
|
84
|
+
expected_result = [
|
85
|
+
"Будьте внимательны, дорогие мои!",
|
86
|
+
"Всё будет хорошо",
|
87
|
+
"в связи с дорожными условиями, возможно отклонение в расписании движения в пределах 1час30.",
|
88
|
+
]
|
89
|
+
|
90
|
+
assert_equal expected_result, subject
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,231 @@
|
|
1
|
+
<DATA>
|
2
|
+
<COMPLETED>true</COMPLETED>
|
3
|
+
<TRIP>
|
4
|
+
<ID>-340796927707233606</ID>
|
5
|
+
<STATIC_TRIP_ID>5cdc47e62392904e080f164fa2698b43</STATIC_TRIP_ID>
|
6
|
+
<TRIP_ROUTE_ID>A016E31EC8C61A35E053E41C0CB99E98</TRIP_ROUTE_ID>
|
7
|
+
<RES_ID>0</RES_ID>
|
8
|
+
<NUMBER>MD_TEST - Москва - Краснодар Москва - Краснодар</NUMBER>
|
9
|
+
<START_CITY_NAME>Москва</START_CITY_NAME>
|
10
|
+
<END_CITY_NAME>Ростов-на-Дону</END_CITY_NAME>
|
11
|
+
<START_TIMEZONE>Europe/Moscow</START_TIMEZONE>
|
12
|
+
<END_TIMEZONE>Europe/Moscow</END_TIMEZONE>
|
13
|
+
<START_DATE>24.07.2020</START_DATE>
|
14
|
+
<END_DATE>25.07.2020</END_DATE>
|
15
|
+
<START_TIME>11:40</START_TIME>
|
16
|
+
<END_TIME>03:30</END_TIME>
|
17
|
+
<BUS_MODEL>Mercedes BENZ 0404 CARRUS</BUS_MODEL>
|
18
|
+
<BUS_CLASS/>
|
19
|
+
<BUS_ID/>
|
20
|
+
<BUS_FLOORS_NUMBER>1</BUS_FLOORS_NUMBER>
|
21
|
+
<PLATFORM/>
|
22
|
+
<TRIP_SEATS_MAP>true</TRIP_SEATS_MAP>
|
23
|
+
<SHOW_PICKUP_DROPOFF>false</SHOW_PICKUP_DROPOFF>
|
24
|
+
<BRANDED>false</BRANDED>
|
25
|
+
<HAS_TRANSFER>false</HAS_TRANSFER>
|
26
|
+
<PLACES_COUNT>60</PLACES_COUNT>
|
27
|
+
<FREE_PLACES_COUNT>53</FREE_PLACES_COUNT>
|
28
|
+
<FAKE_FREE_SEAT_COUNT>false</FAKE_FREE_SEAT_COUNT>
|
29
|
+
<FREE_BUSY_PLACES>53/60</FREE_BUSY_PLACES>
|
30
|
+
<CARRIER_ID>6C552CE3DBDC34E2E0530300F00AEA7B</CARRIER_ID>
|
31
|
+
<CARRIER_NAME>"Еременчук Е.А." ИП</CARRIER_NAME>
|
32
|
+
<CARRIER_LEGAL_NAME>RU "Еременчук Е.А." ИП</CARRIER_LEGAL_NAME>
|
33
|
+
<CARRIER_INN>260802027265</CARRIER_INN>
|
34
|
+
<CARRIER_ADDRESS_FACT>г СНТ Лилия, Московская, Наро-фоминский</CARRIER_ADDRESS_FACT>
|
35
|
+
<CARRIER_ADDRESS_LEG>г СНТ Лилия, Московская, Наро-фоминский</CARRIER_ADDRESS_LEG>
|
36
|
+
<CARRIER_EGRUL_EGIS>316265100057314</CARRIER_EGRUL_EGIS>
|
37
|
+
<TIME_IN_ROAD>15:50</TIME_IN_ROAD>
|
38
|
+
<FAKE_TIME_IN_ROAD>false</FAKE_TIME_IN_ROAD>
|
39
|
+
<RES_POINT_BEGIN_ID>9DD3E329EC8A3EE2E0530300F00A4CBA</RES_POINT_BEGIN_ID>
|
40
|
+
<POINT_BEGIN_ID>1409820</POINT_BEGIN_ID>
|
41
|
+
<STATION_BEGIN_ID>9DD3E329EC8A3EE2E0530300F00A4CBA</STATION_BEGIN_ID>
|
42
|
+
<STATION_BEGIN_NAME>Автовокзал Битца (ТРЦ "Шелковый Путь")</STATION_BEGIN_NAME>
|
43
|
+
<STATION_BEGIN_ADDRESS>Варшавское шоссе, 21 км, уч. 26</STATION_BEGIN_ADDRESS>
|
44
|
+
<RES_POINT_END_ID>4557C0CAC2CC3C79E0530300F00A06C8</RES_POINT_END_ID>
|
45
|
+
<POINT_END_ID>87348</POINT_END_ID>
|
46
|
+
<STATION_END_ID>4557C0CAC2CC3C79E0530300F00A06C8</STATION_END_ID>
|
47
|
+
<STATION_END_NAME>Автовокзал "Главный"</STATION_END_NAME>
|
48
|
+
<STATION_END_ADDRESS>проспект Сиверса; дом 1</STATION_END_ADDRESS>
|
49
|
+
<RESERVATION_ENABLED>true</RESERVATION_ENABLED>
|
50
|
+
<SALE_ENABLED>true</SALE_ENABLED>
|
51
|
+
<RETURN_ENABLED>true</RETURN_ENABLED>
|
52
|
+
<TIME_FOR_CANCEL>25</TIME_FOR_CANCEL>
|
53
|
+
<TRIP_FULL_SALE>false</TRIP_FULL_SALE>
|
54
|
+
<CAN_DISCOUNT>true</CAN_DISCOUNT>
|
55
|
+
<INTERNATIONAL>false</INTERNATIONAL>
|
56
|
+
<JOIN_BOOK_BUY>true</JOIN_BOOK_BUY>
|
57
|
+
<TRIP_MODE>1</TRIP_MODE>
|
58
|
+
<CUSTOM_STATUS>1</CUSTOM_STATUS>
|
59
|
+
<SPECIAL_CONDITIONS/>
|
60
|
+
<REDIRECT_URL/>
|
61
|
+
<TOTAL_COST>800</TOTAL_COST>
|
62
|
+
<CURRENCY>RUB</CURRENCY>
|
63
|
+
<CURRENCY_CODE>643</CURRENCY_CODE>
|
64
|
+
<TECH_AGREEMENT>false</TECH_AGREEMENT>
|
65
|
+
<CARRIER_CODE/>
|
66
|
+
<TARIFF>
|
67
|
+
<SHORT_NAME>Y</SHORT_NAME>
|
68
|
+
<IS_BASE>true</IS_BASE>
|
69
|
+
<FULL_NAME>Базовый тариф</FULL_NAME>
|
70
|
+
<START_DATE/>
|
71
|
+
<END_DATE/>
|
72
|
+
<DESCRIPTION>Базовый тариф стоимости проезда одного пассажира в одном направлении
|
73
|
+
</DESCRIPTION>
|
74
|
+
<TIME_TO_BUY_RESERVED>2</TIME_TO_BUY_RESERVED>
|
75
|
+
<TIME_TO_STOP_BOOKING>2</TIME_TO_STOP_BOOKING>
|
76
|
+
<TIME_TO_PAY_RESERVATION>22.07.2020 12:51:03</TIME_TO_PAY_RESERVATION>
|
77
|
+
<COST>800</COST>
|
78
|
+
<INSURANCE_COST>0</INSURANCE_COST>
|
79
|
+
<INSURANCE_ID/>
|
80
|
+
<INSURANCE_SUM>0</INSURANCE_SUM>
|
81
|
+
<INSURANCE_CUR/>
|
82
|
+
<AFTER_DISPATCH_NO_RETURN>true</AFTER_DISPATCH_NO_RETURN>
|
83
|
+
<PASSENGER_BIRTHDAY/>
|
84
|
+
<PASSENGER_ISIC_NUMBER/>
|
85
|
+
<PASSENGER_STUDENT_TICKET/>
|
86
|
+
<NOTE/>
|
87
|
+
<WITHOUT_SEAT>N</WITHOUT_SEAT>
|
88
|
+
<RETURN_CAUSE>Возврат маршрутной квитанции более чем за 2 часа до отправления Удерживается при возврате: 5% тарифа. Ориентировочная сумма возврата 760 RUB</RETURN_CAUSE>
|
89
|
+
<RETURN_CAUSE>Возврат маршрутной квитанции в течение 2 часов до отправления Удерживается при возврате: 15% тарифа. Ориентировочная сумма возврата 680 RUB</RETURN_CAUSE>
|
90
|
+
<RETURN_CAUSE>Возврат маршрутной квитанции в случае опоздания к отправлению транспортного средства в течение 3 суток после отправления, при наличии справки из медицинского учреждения (по причине болезни) или акта о несчастном случае Удерживается при возврате: 25% тарифа. Ориентировочная сумма возврата 600 RUB</RETURN_CAUSE>
|
91
|
+
<RETURN_CAUSE>Возврат маршрутной квитанции в случае опоздания к отправлению транспортного средства в течение 3 часов Удерживается при возврате: 25% тарифа. Ориентировочная сумма возврата 600 RUB</RETURN_CAUSE>
|
92
|
+
<RETURN_CAUSE>Принудительно, при отмене рейса, при непредоставлении места, при т/с более низкого класса, задержка отправления т/с более чем на час. Возвращается 100% стоимости билета. Ориентировочная сумма возврата 800 RUB</RETURN_CAUSE>
|
93
|
+
<PROMOTE>false</PROMOTE>
|
94
|
+
<IS_EXCLUSIVE_PRICE>false</IS_EXCLUSIVE_PRICE>
|
95
|
+
<FREE_BOOKING>false</FREE_BOOKING>
|
96
|
+
</TARIFF>
|
97
|
+
<POINT>
|
98
|
+
<NUMBER>0</NUMBER>
|
99
|
+
<ID>1409820</ID>
|
100
|
+
<LOCATION_ID>244430</LOCATION_ID>
|
101
|
+
<GEOGRAPHY_NAME>Москва</GEOGRAPHY_NAME>
|
102
|
+
<NAME>Автовокзал Битца (ТРЦ "Шелковый Путь")</NAME>
|
103
|
+
<ADDRESS>Варшавское шоссе, 21 км, уч. 26</ADDRESS>
|
104
|
+
<TIMEZONE>Europe/Moscow</TIMEZONE>
|
105
|
+
<ARRIVAL_DATE>24.07.2020</ARRIVAL_DATE>
|
106
|
+
<ARRIVAL_TIME/>
|
107
|
+
<DISPATCH_DATE>24.07.2020</DISPATCH_DATE>
|
108
|
+
<DISPATCH_TIME>11:40</DISPATCH_TIME>
|
109
|
+
<CHECK_POINT>false</CHECK_POINT>
|
110
|
+
<DISTANCE>0</DISTANCE>
|
111
|
+
<TRANSFER_POINT>false</TRANSFER_POINT>
|
112
|
+
<PLATFORM/>
|
113
|
+
<BUSMODEL/>
|
114
|
+
<AGREED>true</AGREED>
|
115
|
+
</POINT>
|
116
|
+
<POINT>
|
117
|
+
<NUMBER>1</NUMBER>
|
118
|
+
<ID>1647236</ID>
|
119
|
+
<LOCATION_ID>55903</LOCATION_ID>
|
120
|
+
<GEOGRAPHY_NAME>Тула</GEOGRAPHY_NAME>
|
121
|
+
<NAME>Остановка "Памятник Три штыка"</NAME>
|
122
|
+
<ADDRESS>улица Ленина; дом 94</ADDRESS>
|
123
|
+
<TIMEZONE>Europe/Moscow</TIMEZONE>
|
124
|
+
<ARRIVAL_DATE>24.07.2020</ARRIVAL_DATE>
|
125
|
+
<ARRIVAL_TIME>14:30</ARRIVAL_TIME>
|
126
|
+
<DISPATCH_DATE>24.07.2020</DISPATCH_DATE>
|
127
|
+
<DISPATCH_TIME>14:35</DISPATCH_TIME>
|
128
|
+
<CHECK_POINT>false</CHECK_POINT>
|
129
|
+
<DISTANCE>182</DISTANCE>
|
130
|
+
<TRANSFER_POINT>false</TRANSFER_POINT>
|
131
|
+
<PLATFORM/>
|
132
|
+
<BUSMODEL/>
|
133
|
+
<AGREED>true</AGREED>
|
134
|
+
</POINT>
|
135
|
+
<POINT>
|
136
|
+
<NUMBER>2</NUMBER>
|
137
|
+
<ID>87015</ID>
|
138
|
+
<LOCATION_ID>41236</LOCATION_ID>
|
139
|
+
<GEOGRAPHY_NAME>Воронеж</GEOGRAPHY_NAME>
|
140
|
+
<NAME>Железнодорожный вокзал "Воронеж-1"</NAME>
|
141
|
+
<ADDRESS>площадь Генерала Черняховского; дом 1</ADDRESS>
|
142
|
+
<TIMEZONE>Europe/Moscow</TIMEZONE>
|
143
|
+
<ARRIVAL_DATE>24.07.2020</ARRIVAL_DATE>
|
144
|
+
<ARRIVAL_TIME>19:30</ARRIVAL_TIME>
|
145
|
+
<DISPATCH_DATE>24.07.2020</DISPATCH_DATE>
|
146
|
+
<DISPATCH_TIME>19:35</DISPATCH_TIME>
|
147
|
+
<CHECK_POINT>false</CHECK_POINT>
|
148
|
+
<DISTANCE>523</DISTANCE>
|
149
|
+
<TRANSFER_POINT>false</TRANSFER_POINT>
|
150
|
+
<PLATFORM/>
|
151
|
+
<BUSMODEL/>
|
152
|
+
<AGREED>true</AGREED>
|
153
|
+
</POINT>
|
154
|
+
<POINT>
|
155
|
+
<NUMBER>3</NUMBER>
|
156
|
+
<ID>924816</ID>
|
157
|
+
<LOCATION_ID>91587</LOCATION_ID>
|
158
|
+
<GEOGRAPHY_NAME>Богучар</GEOGRAPHY_NAME>
|
159
|
+
<NAME>Автовокзал Богучар</NAME>
|
160
|
+
<ADDRESS>улица Дзержинского; дом 239</ADDRESS>
|
161
|
+
<TIMEZONE>Europe/Moscow</TIMEZONE>
|
162
|
+
<ARRIVAL_DATE>24.07.2020</ARRIVAL_DATE>
|
163
|
+
<ARRIVAL_TIME>23:00</ARRIVAL_TIME>
|
164
|
+
<DISPATCH_DATE>24.07.2020</DISPATCH_DATE>
|
165
|
+
<DISPATCH_TIME>23:05</DISPATCH_TIME>
|
166
|
+
<CHECK_POINT>false</CHECK_POINT>
|
167
|
+
<DISTANCE>746</DISTANCE>
|
168
|
+
<TRANSFER_POINT>false</TRANSFER_POINT>
|
169
|
+
<PLATFORM/>
|
170
|
+
<BUSMODEL/>
|
171
|
+
<AGREED>true</AGREED>
|
172
|
+
</POINT>
|
173
|
+
<POINT>
|
174
|
+
<NUMBER>4</NUMBER>
|
175
|
+
<ID>1647237</ID>
|
176
|
+
<LOCATION_ID>52524</LOCATION_ID>
|
177
|
+
<GEOGRAPHY_NAME>Каменск-Шахтинский</GEOGRAPHY_NAME>
|
178
|
+
<NAME>Остановка Каменск-Шахтинский (трасса)</NAME>
|
179
|
+
<ADDRESS>трасса М-4 Дон, 932 км</ADDRESS>
|
180
|
+
<TIMEZONE>Europe/Moscow</TIMEZONE>
|
181
|
+
<ARRIVAL_DATE>25.07.2020</ARRIVAL_DATE>
|
182
|
+
<ARRIVAL_TIME>01:30</ARRIVAL_TIME>
|
183
|
+
<DISPATCH_DATE>25.07.2020</DISPATCH_DATE>
|
184
|
+
<DISPATCH_TIME>01:35</DISPATCH_TIME>
|
185
|
+
<CHECK_POINT>false</CHECK_POINT>
|
186
|
+
<DISTANCE>946</DISTANCE>
|
187
|
+
<TRANSFER_POINT>false</TRANSFER_POINT>
|
188
|
+
<PLATFORM/>
|
189
|
+
<BUSMODEL/>
|
190
|
+
<AGREED>true</AGREED>
|
191
|
+
</POINT>
|
192
|
+
<POINT>
|
193
|
+
<NUMBER>5</NUMBER>
|
194
|
+
<ID>1647238</ID>
|
195
|
+
<LOCATION_ID>243086</LOCATION_ID>
|
196
|
+
<GEOGRAPHY_NAME>Шахты</GEOGRAPHY_NAME>
|
197
|
+
<NAME>Остановка Шахты (трасса)</NAME>
|
198
|
+
<ADDRESS>трасса М-4 Дон, 994 км</ADDRESS>
|
199
|
+
<TIMEZONE>Europe/Moscow</TIMEZONE>
|
200
|
+
<ARRIVAL_DATE>25.07.2020</ARRIVAL_DATE>
|
201
|
+
<ARRIVAL_TIME>02:30</ARRIVAL_TIME>
|
202
|
+
<DISPATCH_DATE>25.07.2020</DISPATCH_DATE>
|
203
|
+
<DISPATCH_TIME>02:35</DISPATCH_TIME>
|
204
|
+
<CHECK_POINT>false</CHECK_POINT>
|
205
|
+
<DISTANCE>1022</DISTANCE>
|
206
|
+
<TRANSFER_POINT>false</TRANSFER_POINT>
|
207
|
+
<PLATFORM/>
|
208
|
+
<BUSMODEL/>
|
209
|
+
<AGREED>true</AGREED>
|
210
|
+
</POINT>
|
211
|
+
<POINT>
|
212
|
+
<NUMBER>6</NUMBER>
|
213
|
+
<ID>87348</ID>
|
214
|
+
<LOCATION_ID>52516</LOCATION_ID>
|
215
|
+
<GEOGRAPHY_NAME>Ростов-на-Дону</GEOGRAPHY_NAME>
|
216
|
+
<NAME>Автовокзал "Главный"</NAME>
|
217
|
+
<ADDRESS>проспект Сиверса; дом 1</ADDRESS>
|
218
|
+
<TIMEZONE>Europe/Moscow</TIMEZONE>
|
219
|
+
<ARRIVAL_DATE>25.07.2020</ARRIVAL_DATE>
|
220
|
+
<ARRIVAL_TIME>03:30</ARRIVAL_TIME>
|
221
|
+
<DISPATCH_DATE>25.07.2020</DISPATCH_DATE>
|
222
|
+
<DISPATCH_TIME>03:40</DISPATCH_TIME>
|
223
|
+
<CHECK_POINT>false</CHECK_POINT>
|
224
|
+
<DISTANCE>1075</DISTANCE>
|
225
|
+
<TRANSFER_POINT>false</TRANSFER_POINT>
|
226
|
+
<PLATFORM>26 </PLATFORM>
|
227
|
+
<BUSMODEL/>
|
228
|
+
<AGREED>true</AGREED>
|
229
|
+
</POINT>
|
230
|
+
</TRIP>
|
231
|
+
</DATA>
|
@@ -117,7 +117,8 @@
|
|
117
117
|
<TECHNICAL_STO ID="1">Технические остановки осуществляются каждые 2-3 часа.</TECHNICAL_STO>
|
118
118
|
</TECHNICAL_STOP>
|
119
119
|
<CRITICAL_INFO>
|
120
|
-
<
|
120
|
+
<ITEM>Внимание! Ознакомьтесь со списком стран, въезд в которые ограничен в связи с коронавирусом >> https://busfor.com/ru/blog/covid-19-updates</ITEM>
|
121
|
+
<CRITICAL_INF ID="16">в связи с дорожными условиями, возможно отклонение в расписании движения в пределах 1час30.</CRITICAL_INF>
|
121
122
|
</CRITICAL_INFO>
|
122
123
|
<SEATING>
|
123
124
|
<SEATIN ID="1">Свободная рассадка.</SEATIN>
|
data/test/search_trips_test.rb
CHANGED
@@ -6,6 +6,7 @@ class SearchTripsRequestTest < Minitest::Test
|
|
6
6
|
start_date_search: Date.new(2013, 2, 4),
|
7
7
|
selected_modes: [:avia, :connections],
|
8
8
|
round_trip: true,
|
9
|
+
limit_segment_trip_show: 3,
|
9
10
|
passengers: [
|
10
11
|
{
|
11
12
|
birthday: Date.parse('1990-01-01'),
|
@@ -28,6 +29,7 @@ class SearchTripsRequestTest < Minitest::Test
|
|
28
29
|
startDateSearch: '04.02.2013',
|
29
30
|
selectedModes: '3;8',
|
30
31
|
roundTrip: '1',
|
32
|
+
limitSegmentTripShow: 3,
|
31
33
|
passenger0birthday: '01.01.1990',
|
32
34
|
passenger0studentTicket: 'STUDENTTICKET#1',
|
33
35
|
passenger0studentYear: 1,
|
@@ -73,6 +75,10 @@ class SearchTripsResponseTest < Minitest::Test
|
|
73
75
|
Gillbus::SearchTrips::Response.parse_string(File.read('test/responses/searchTrips-round-trip-offers.xml'))
|
74
76
|
end
|
75
77
|
|
78
|
+
def get_trips_with_full_carriers_info
|
79
|
+
Gillbus::SearchTrips::Response.parse_string(File.read('test/responses/searchTrips-full-carriers-info.xml'))
|
80
|
+
end
|
81
|
+
|
76
82
|
def test_empty_completed
|
77
83
|
response = get_empty_search_trips
|
78
84
|
assert response.completed
|
@@ -199,7 +205,8 @@ class SearchTripsResponseTest < Minitest::Test
|
|
199
205
|
'Технические остановки осуществляются каждые 2-3 часа.',
|
200
206
|
]
|
201
207
|
critical_info = [
|
202
|
-
|
208
|
+
"Внимание! Ознакомьтесь со списком стран, въезд в которые ограничен в связи с коронавирусом >> https://busfor.com/ru/blog/covid-19-updates",
|
209
|
+
"в связи с дорожными условиями, возможно отклонение в расписании движения в пределах 1час30.",
|
203
210
|
]
|
204
211
|
resource_options = [
|
205
212
|
'Посадка начинается за 10 мин.',
|
@@ -309,4 +316,15 @@ class SearchTripsResponseTest < Minitest::Test
|
|
309
316
|
assert_equal 3, response.trips.count
|
310
317
|
assert_equal response.back_trips.first.id, response.trips.first.id
|
311
318
|
end
|
319
|
+
|
320
|
+
def test_trips_with_full_carriers_info
|
321
|
+
response = get_trips_with_full_carriers_info
|
322
|
+
trip = response.trips.first
|
323
|
+
|
324
|
+
assert_equal "RU \"Еременчук Е.А.\" ИП", trip.carrier_legal_name
|
325
|
+
assert_equal "260802027265", trip.carrier_inn
|
326
|
+
assert_equal "г СНТ Лилия, Московская, Наро-фоминский", trip.carrier_address_fact
|
327
|
+
assert_equal "г СНТ Лилия, Московская, Наро-фоминский", trip.carrier_address_leg
|
328
|
+
assert_equal "316265100057314", trip.carrier_egrul_egis
|
329
|
+
end
|
312
330
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gillbus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.22.
|
4
|
+
version: 0.22.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexey "codesnik" Trofimenko
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-
|
12
|
+
date: 2020-10-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -245,6 +245,7 @@ files:
|
|
245
245
|
- test/get_trip_seats_test.rb
|
246
246
|
- test/get_trip_segments_test.rb
|
247
247
|
- test/lock_seats_test.rb
|
248
|
+
- test/parse_trip_options_test.rb
|
248
249
|
- test/parse_trip_test.rb
|
249
250
|
- test/reserve_tickets_test.rb
|
250
251
|
- test/responses/bookingDifferentCurrencies.xml
|
@@ -275,6 +276,7 @@ files:
|
|
275
276
|
- test/responses/returnPositionFailure.xml
|
276
277
|
- test/responses/returnPositionSuccess.xml
|
277
278
|
- test/responses/searchTrips-empty.xml
|
279
|
+
- test/responses/searchTrips-full-carriers-info.xml
|
278
280
|
- test/responses/searchTrips-insurance.xml
|
279
281
|
- test/responses/searchTrips-new-options-format.xml
|
280
282
|
- test/responses/searchTrips-prod-invalid.xml
|
@@ -312,7 +314,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
312
314
|
- !ruby/object:Gem::Version
|
313
315
|
version: '0'
|
314
316
|
requirements: []
|
315
|
-
rubygems_version: 3.
|
317
|
+
rubygems_version: 3.1.2
|
316
318
|
signing_key:
|
317
319
|
specification_version: 4
|
318
320
|
summary: Driver for Gillbus IDS API
|
@@ -333,6 +335,7 @@ test_files:
|
|
333
335
|
- test/get_trip_seats_test.rb
|
334
336
|
- test/get_trip_segments_test.rb
|
335
337
|
- test/lock_seats_test.rb
|
338
|
+
- test/parse_trip_options_test.rb
|
336
339
|
- test/parse_trip_test.rb
|
337
340
|
- test/reserve_tickets_test.rb
|
338
341
|
- test/responses/bookingDifferentCurrencies.xml
|
@@ -363,6 +366,7 @@ test_files:
|
|
363
366
|
- test/responses/returnPositionFailure.xml
|
364
367
|
- test/responses/returnPositionSuccess.xml
|
365
368
|
- test/responses/searchTrips-empty.xml
|
369
|
+
- test/responses/searchTrips-full-carriers-info.xml
|
366
370
|
- test/responses/searchTrips-insurance.xml
|
367
371
|
- test/responses/searchTrips-new-options-format.xml
|
368
372
|
- test/responses/searchTrips-prod-invalid.xml
|