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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 78c47ef6c5947119308e70daf1e9cb9c1e83709f3a6ca834973da9e7e9ca5071
4
- data.tar.gz: 757c32077592a545cc4879cf19d7a42269ac349845f59336e3a80b21cb235f2e
3
+ metadata.gz: d1008d20da4fb897a42fa30395860fe020751486e0e26d2a735b3be946673d92
4
+ data.tar.gz: faf70421ce7cb48e8a5dc346e7eb2234b5847ab9d24f1db6a27cd2a35e7f7022
5
5
  SHA512:
6
- metadata.gz: 39f1d4da26c865d295f546d6cee038fde9d4ae7b17e4a278e3dd6cdf867d015c7aceb15aff903f9231262a42234ebaa06249534b389c8b68e1c7b2d089c02032
7
- data.tar.gz: be36f522e8f17a2983befd368dbf6b35d6ec71d37ced04387f4e4eded292a76f0a0a36536f034c0e0e13c0da2e7c59dfefd43ecc728f64cca2db42e8e414a3d7
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| Array(target_doc[k]) }.inject(&:+)
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: start_city_id,
27
- endCityId: end_city_id,
28
- startDateSearch: date(start_date_search),
29
- ticketCount: ticket_count,
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
@@ -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: modes(selected_modes),
97
- connectionIds: list(connection_ids),
98
- tripFullSale: bool(trip_full_sale),
99
- fullSearch: bool(full_search),
100
- startCityId: start_city_id,
101
- endCityId: end_city_id,
102
- startDateSearch: date(start_date_search),
103
- roundTrip: bool(round_trip),
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: ticket_count,
106
- waitTimeout: wait_timeout,
107
- onlyBranded: bool(only_branded),
108
- tripOptions: bool(trip_options),
109
- insuranceId: insurance_id,
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
 
@@ -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
@@ -1,3 +1,3 @@
1
1
  class Gillbus
2
- VERSION = '0.22.1'.freeze
2
+ VERSION = '0.22.6'.freeze
3
3
  end
@@ -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>Внимание! Ознакомьтесь со списком стран, въезд в которые ограничен в связи с коронавирусом &gt;&gt; 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>Внимание! Ознакомьтесь со списком стран, въезд в которые ограничен в связи с коронавирусом &gt;&gt; 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
- <CRITICAL_INF ID="1">ВНИМАНИЕ: Особые условия паспортного режима пересечения пропускного пункта (только с паспортами РБ и РФ).</CRITICAL_INF>
120
+ <ITEM>Внимание! Ознакомьтесь со списком стран, въезд в которые ограничен в связи с коронавирусом &gt;&gt; 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>
@@ -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.1
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: 2020-03-25 00:00:00.000000000 Z
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.1.2
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