gillbus 0.22.1 → 0.22.6
Sign up to get free protection for your applications and to get access to all the features.
- 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 +18 -0
- data/lib/gillbus/structs/trip.rb +18 -0
- data/lib/gillbus/tickets_booking.rb +2 -0
- 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: d1008d20da4fb897a42fa30395860fe020751486e0e26d2a735b3be946673d92
|
4
|
+
data.tar.gz: faf70421ce7cb48e8a5dc346e7eb2234b5847ab9d24f1db6a27cd2a35e7f7022
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af0bf6dfc75344715281ed0322816bed521079fbcd10fec23c56471496027c518ce3530b83c8c34728fa247dbbba6667172e356252be784585dda0f64a0a06e2
|
7
|
+
data.tar.gz: 8ac1c7e0abf8d282ff7f0ded1222a0620f56b41319c027b674f9e4e2b0fcccde30a005f8019531709760d4cab7c35b29ba65744185a1bf90e8c87c3073f63626
|
@@ -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,24 @@ 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
|
+
|
85
|
+
# => "2514411332"
|
86
|
+
field :carrier_ogrn
|
87
|
+
|
70
88
|
# => "09:10"
|
71
89
|
field :time_in_road, :time
|
72
90
|
|
data/lib/gillbus/structs/trip.rb
CHANGED
@@ -71,6 +71,24 @@ 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
|
+
|
89
|
+
# => "2514411332"
|
90
|
+
field :carrier_ogrn
|
91
|
+
|
74
92
|
# => "09:10"
|
75
93
|
field :time_in_road, :time
|
76
94
|
|
@@ -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.6
|
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:
|
12
|
+
date: 2021-03-18 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.0.3
|
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
|