gillbus 0.19.0 → 0.20.0

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
  SHA1:
3
- metadata.gz: 48a23c8133793e9abcc37a872de7d32807c4b8b7
4
- data.tar.gz: 411679015803b8c36d9a4a4c529b3a006910feef
3
+ metadata.gz: bd4f1397e33a3f080cc2cbaf71079d3ee1a2d620
4
+ data.tar.gz: 0cceb90c341e2137e81b51d2ef597b5e1b957844
5
5
  SHA512:
6
- metadata.gz: 91ed219a443d7e9e4c4b4be9fab6824988c4477dd3b86225ee4ee88daaf6c209aa76d284d08a98194a37afc75619109148433196f98a397f1e406f94dcaf4d08
7
- data.tar.gz: 55b828d21194d0d877d410174bba84464ff25684e034cac91663e8a3594dfa03dad02a3541506b021cdb48ac0b2a434060cfd476953d69ade3a3154b48cab495
6
+ metadata.gz: 51110d42884c545f9faccba44bcd1ca5aeff7c321002ec57cec42a80c125902ca3b8223258a36ce1685254cc12a762e8347fe72ea1e3831f1da052f78c373bb9
7
+ data.tar.gz: 3eb457ec67c063dfc708778f16deaf8033df8feccd5b5571bbead73cec95e0f4efd4c123ef7d1d4ca0450a0a092e5ebd0fb37a6ba2b6c778d4f400d88d00cfd9
@@ -40,12 +40,15 @@ class Gillbus
40
40
  private
41
41
 
42
42
  def fetch_value(key:, root:)
43
+ target_doc = root ? doc[root] : doc
44
+ return unless target_doc
45
+
43
46
  if key.is_a?(Regexp)
44
- doc.select { |k| k =~ key }
45
- elsif root
46
- doc[root] && doc[root][key]
47
+ target_doc.select { |k| k =~ key }
48
+ elsif key.is_a?(Array)
49
+ key.map { |k| Array(target_doc[k]) }.inject(&:+)
47
50
  else
48
- doc[key]
51
+ target_doc[key]
49
52
  end
50
53
  end
51
54
 
@@ -81,6 +84,8 @@ class Gillbus
81
84
 
82
85
  def string(val)
83
86
  return if val == NULL_CONST
87
+ # если это тег с атрибутами - возвращаем только содержимое тега
88
+ return val.last if val.is_a?(Array) && val.size == 2
84
89
  val
85
90
  end
86
91
 
@@ -6,6 +6,10 @@ class Gillbus
6
6
  # => "393409381686201016"
7
7
  field :id
8
8
 
9
+ # Уникальный идентификатор
10
+ # => "20e4e7c8f5b75506b7447a108d362c0d"
11
+ field :static_trip_id
12
+
9
13
  # Идентификатор стороннего поставщика. 0 - gillbus
10
14
  # => "0"
11
15
  field :res_id
@@ -3,45 +3,91 @@ class Gillbus
3
3
  extend Fields
4
4
  include UpdateAttrs
5
5
 
6
- # услуги на рейсе (Wi-Fi, розетки и т.п.)
7
- field :services, [TripService], root: 'TRIP_SERVICES', key: 'TRIP_SERVICE'
6
+ # Услуги на рейсе (Wi-Fi, розетки и т.п.)
7
+ field :services, [TripService],
8
+ root: 'TRIP_SERVICES',
9
+ key: 'TRIP_SERVICE'
8
10
 
9
- # условия по багажу на рейсе
10
- field :luggage, [:string], root: 'LUGGAGE', key: 'ITEM'
11
+ # Условия по багажу на рейсе.
12
+ # Поддерживаются старый и новый форматы:
13
+ # <LUGGAGE>
14
+ # <ITEM>Text</ITEM>
15
+ # <LUGGAG ID="1">Text</LUGGAG>
16
+ # </LUGGAGE>
17
+ field :luggage, [:string],
18
+ root: 'LUGGAGE',
19
+ key: ['ITEM', 'LUGGAG']
11
20
 
12
- # условия рассадки на рейсе
13
- field :seating, [:string], root: 'SEATING', key: 'ITEM'
21
+ # Условия рассадки на рейсе.
22
+ # Поддерживаются старый и новый форматы:
23
+ # <SEATING>
24
+ # <ITEM>Text</ITEM>
25
+ # <SEATIN ID="1">Text</SEATIN>
26
+ # </SEATING>
27
+ field :seating, [:string],
28
+ root: 'SEATING',
29
+ key: ['ITEM', 'SEATIN']
14
30
 
15
- # информация о технических остановках
16
- field :technical_stops, [:string], root: 'TECHNICAL_STOP', key: 'ITEM'
31
+ # Информация о технических остановках.
32
+ # Поддерживаются старый и новый форматы:
33
+ # <TECHNICAL_STOP>
34
+ # <ITEM>Text</ITEM>
35
+ # <TECHNICAL_STO ID="1">Text</TECHNICAL_STO>
36
+ # </TECHNICAL_STOP>
37
+ field :technical_stops, [:string],
38
+ root: 'TECHNICAL_STOP',
39
+ key: ['ITEM', 'TECHNICAL_STO']
17
40
 
18
- # критичная информация о рейсе
19
- field :critical_info, [:string], root: 'CRITICAL_INFO', key: 'ITEM'
41
+ # Критичная информация о рейсе.
42
+ # Поддерживаются старый и новый форматы:
43
+ # <CRITICAL_INFO>
44
+ # <ITEM>Text</ITEM>
45
+ # <CRITICAL_INF ID="1">Text</CRITICAL_INF>
46
+ # </CRITICAL_INFO>
47
+ field :critical_info, [:string],
48
+ root: 'CRITICAL_INFO',
49
+ key: ['ITEM', 'CRITICAL_INF']
20
50
 
21
- # опции полученные от внешних ресурсов
22
- field :resource_options, [:string], root: 'RESOURCE_TRIP_OPTION', key: 'ITEM'
51
+ # Опции полученные от внешних ресурсов.
52
+ # Поддерживаются старый и новый форматы:
53
+ # <RESOURCE_TRIP_OPTION>
54
+ # <ITEM>Text</ITEM>
55
+ # <RESOURCE_TRIP_OPTIO ID="1">Text</RESOURCE_TRIP_OPTIO>
56
+ # </RESOURCE_TRIP_OPTION>
57
+ field :resource_options, [:string],
58
+ root: 'RESOURCE_TRIP_OPTION',
59
+ key: ['ITEM', 'RESOURCE_TRIP_OPTIO']
23
60
 
24
- # информация, отмеченная как "прочее"
25
- field :other, [:string], root: 'OTHER', key: 'ITEM'
61
+ # Информация, отмеченная как "прочее".
62
+ # Поддерживаются старый и новый форматы:
63
+ # <OTHER>
64
+ # <ITEM>Text</ITEM>
65
+ # <OTHE ID="1">Text</OTHE>
66
+ # </OTHER>
67
+ field :other, [:string],
68
+ root: 'OTHER',
69
+ key: ['ITEM', 'OTHE']
26
70
 
27
- # признак рекламируемого рейса, передается как <PROMO><ITEM>ADVERTISING</ITEM></PROMO>
28
- field :advertising, :adertising_bool, root: 'PROMO', key: 'ITEM'
71
+ # Поддерживаются старый и новый форматы:
72
+ # <PROMO>
73
+ # <ITEM>Text</ITEM>
74
+ # <PROM ID="1">Text</PROM>
75
+ # </PROMO>
76
+ field :promo, [:string],
77
+ root: 'PROMO',
78
+ key: ['ITEM', 'PROM']
29
79
 
30
- # признак рекомендованого рейса, передается как <PROMO><ITEM>BUSFOR_RECOMMEND</ITEM></PROMO>
31
- field :busfor_recommend, :recommend_bool, root: 'PROMO', key: 'ITEM'
80
+ # Опции, связанные с билетами.
81
+ field :tickets, [TicketsOption],
82
+ root: 'TICKETS',
83
+ key: 'TICKET'
32
84
 
33
- # опции, связанные с билетами
34
- # элемент с ID="7" означает электронный билет
35
- field :tickets, [TicketsOption], root: 'TICKETS', key: 'TICKET'
36
-
37
- parser do # better not to let flag value out of this gem
38
- def adertising_bool(vals)
39
- vals.include?('ADVERTISING')
40
- end
85
+ def advertising
86
+ promo.include?('ADVERTISING')
87
+ end
41
88
 
42
- def recommend_bool(vals)
43
- vals.include?('BUSFOR_RECOMMEND')
44
- end
89
+ def busfor_recommend
90
+ promo.include?('BUSFOR_RECOMMEND')
45
91
  end
46
92
 
47
93
  def self.build_blank
@@ -1,3 +1,3 @@
1
1
  class Gillbus
2
- VERSION = '0.19.0'.freeze
2
+ VERSION = '0.20.0'.freeze
3
3
  end
@@ -0,0 +1,243 @@
1
+ <DATA>
2
+ <COMPLETED>true</COMPLETED>
3
+ <TRIP>
4
+ <ID>3451212695530327295</ID>
5
+ <RES_ID>10</RES_ID>
6
+ <NUMBER>2197</NUMBER>
7
+ <START_CITY_NAME>Москва</START_CITY_NAME>
8
+ <END_CITY_NAME>Санкт-Петербург</END_CITY_NAME>
9
+ <START_DATE>23.08.2014</START_DATE>
10
+ <END_DATE>24.08.2014</END_DATE>
11
+ <START_TIME>19:00</START_TIME>
12
+ <START_TIMEZONE>Europe/Moscow</START_TIMEZONE>
13
+ <END_TIME>06:30</END_TIME>
14
+ <END_TIMEZONE>Europe/Moscow</END_TIMEZONE>
15
+ <BUS_MODEL/>
16
+ <PLACES_COUNT>18</PLACES_COUNT>
17
+ <FREE_PLACES_COUNT>3</FREE_PLACES_COUNT>
18
+ <FREE_BUSY_PLACES>3/18</FREE_BUSY_PLACES>
19
+ <CARRIER_NAME>ИП Унанян И.А.</CARRIER_NAME>
20
+ <TIME_IN_ROAD>11:30</TIME_IN_ROAD>
21
+ <STATION_BEGIN_NAME>Москва</STATION_BEGIN_NAME>
22
+ <STATION_BEGIN_ADDRESS>Москва, Рязанский переулок, д. 13, стр. 1</STATION_BEGIN_ADDRESS>
23
+ <STATION_END_NAME>Санкт-Петербург</STATION_END_NAME>
24
+ <STATION_END_ADDRESS>м. Купчино </STATION_END_ADDRESS>
25
+ <RESERVATION_ENABLED>true</RESERVATION_ENABLED>
26
+ <SALE_ENABLED>true</SALE_ENABLED>
27
+ <RETURN_ENABLED>false</RETURN_ENABLED>
28
+ <TIME_FOR_CANCEL>25</TIME_FOR_CANCEL>
29
+ <TRIP_FULL_SALE>false</TRIP_FULL_SALE>
30
+ <CAN_DISCOUNT>true</CAN_DISCOUNT>
31
+ <INTERNATIONAL>false</INTERNATIONAL>
32
+ <JOIN_BOOK_BUY>false</JOIN_BOOK_BUY>
33
+ <TRIP_MODE>1</TRIP_MODE>
34
+ <CUSTOM_STATUS>0</CUSTOM_STATUS>
35
+ <IMAGE_URL>null</IMAGE_URL>
36
+ <START_POINT_TYPE>null</START_POINT_TYPE>
37
+ <FAKE_TIME_IN_ROAD>true</FAKE_TIME_IN_ROAD>
38
+ <VEHICLE_DESCRIPTION>null</VEHICLE_DESCRIPTION>
39
+ <RECOMMENDED>true</RECOMMENDED>
40
+ <VEHICLE_FEATURES>null</VEHICLE_FEATURES>
41
+ <TOTAL_COST>1410.0</TOTAL_COST>
42
+ <CURRENCY>RUB</CURRENCY>
43
+ <CURRENCY_CODE>643</CURRENCY_CODE>
44
+ <REDIRECT_URL>http://example.com/123</REDIRECT_URL>
45
+ <TARIFF>
46
+ <SHORT_NAME>Y</SHORT_NAME>
47
+ <FULL_NAME/>
48
+ <START_DATE/>
49
+ <END_DATE/>
50
+ <DESCRIPTION/>
51
+ <TIME_TO_BUY_RESERVED>0</TIME_TO_BUY_RESERVED>
52
+ <TIME_TO_STOP_BOOKING>0</TIME_TO_STOP_BOOKING>
53
+ <COST>1410</COST>
54
+ <AFTER_DISPATCH_NO_RETURN>false</AFTER_DISPATCH_NO_RETURN>
55
+ <PASSENGER_BIRTHDAY/>
56
+ <PASSENGER_ISIC_NUMBER/>
57
+ <PASSENGER_STUDENT_TICKET/>
58
+ <RETURN_CAUSE lossless='true'>cause 1</RETURN_CAUSE>
59
+ <RETURN_CAUSE id='asdasd'>cause 2</RETURN_CAUSE>
60
+ <RETURN_CAUSE>cause 3</RETURN_CAUSE>
61
+ </TARIFF>
62
+ <POINT>
63
+ <NUMBER>0</NUMBER>
64
+ <GEOGRAPHY_NAME>Москва</GEOGRAPHY_NAME>
65
+ <NAME>Москва</NAME>
66
+ <ADDRESS>Москва, Рязанский переулок, д. 13, стр. 1</ADDRESS>
67
+ <ARRIVAL_DATE>23.08.2014</ARRIVAL_DATE>
68
+ <ARRIVAL_TIME>19:00</ARRIVAL_TIME>
69
+ <DISPATCH_DATE/>
70
+ <DISPATCH_TIME/>
71
+ <CHECK_POINT>false</CHECK_POINT>
72
+ </POINT>
73
+ <POINT>
74
+ <NUMBER>1</NUMBER>
75
+ <GEOGRAPHY_NAME>Вышний Волочек</GEOGRAPHY_NAME>
76
+ <NAME>Вышний Волочек</NAME>
77
+ <ADDRESS>трасса (М10)</ADDRESS>
78
+ <ARRIVAL_DATE>24.08.2014</ARRIVAL_DATE>
79
+ <ARRIVAL_TIME>00:00</ARRIVAL_TIME>
80
+ <DISPATCH_DATE/>
81
+ <DISPATCH_TIME/>
82
+ <CHECK_POINT>false</CHECK_POINT>
83
+ </POINT>
84
+ <POINT>
85
+ <NUMBER>2</NUMBER>
86
+ <GEOGRAPHY_NAME>Великий Новгород</GEOGRAPHY_NAME>
87
+ <NAME>Великий Новгород</NAME>
88
+ <ADDRESS>трасса (Подберезье, поворот на Великий Новгород)</ADDRESS>
89
+ <ARRIVAL_DATE>24.08.2014</ARRIVAL_DATE>
90
+ <ARRIVAL_TIME>03:30</ARRIVAL_TIME>
91
+ <DISPATCH_DATE/>
92
+ <DISPATCH_TIME/>
93
+ <CHECK_POINT>false</CHECK_POINT>
94
+ </POINT>
95
+ <POINT>
96
+ <NUMBER>3</NUMBER>
97
+ <GEOGRAPHY_NAME>Санкт-Петербург</GEOGRAPHY_NAME>
98
+ <NAME>Санкт-Петербург</NAME>
99
+ <ADDRESS>м. Купчино </ADDRESS>
100
+ <ARRIVAL_DATE>24.08.2014</ARRIVAL_DATE>
101
+ <ARRIVAL_TIME>06:30</ARRIVAL_TIME>
102
+ <DISPATCH_DATE/>
103
+ <DISPATCH_TIME/>
104
+ <CHECK_POINT>false</CHECK_POINT>
105
+ </POINT>
106
+ <OPTIONS>
107
+ <TRIP_SERVICES>
108
+ <TRIP_SERVICE ID="1">Кофе</TRIP_SERVICE>
109
+ <TRIP_SERVICE ID="15">Wi-Fi</TRIP_SERVICE>
110
+ </TRIP_SERVICES>
111
+ <LUGGAGE>
112
+ <LUGGAG ID="1">В стоимость входит провоз 2 единиц багажа свыше 80 кг.</LUGGAG>
113
+ <LUGGAG ID="2">Ручная кладь 20см x 40см x 30см входит в стоимость билета.</LUGGAG>
114
+ <LUGGAG ID="3">Превышение по багажу оплачивается в размере 1% от стоимости тарифа.</LUGGAG>
115
+ </LUGGAGE>
116
+ <TECHNICAL_STOP>
117
+ <TECHNICAL_STO ID="1">Технические остановки осуществляются каждые 2-3 часа.</TECHNICAL_STO>
118
+ </TECHNICAL_STOP>
119
+ <CRITICAL_INFO>
120
+ <CRITICAL_INF ID="1">ВНИМАНИЕ: Особые условия паспортного режима пересечения пропускного пункта (только с паспортами РБ и РФ).</CRITICAL_INF>
121
+ </CRITICAL_INFO>
122
+ <SEATING>
123
+ <SEATIN ID="1">Свободная рассадка.</SEATIN>
124
+ </SEATING>
125
+ <RESOURCE_TRIP_OPTION>
126
+ <RESOURCE_TRIP_OPTIO ID="1">Посадка начинается за 10 мин.</RESOURCE_TRIP_OPTIO>
127
+ </RESOURCE_TRIP_OPTION>
128
+ <OTHER>
129
+ <OTHE ID="1">Переправа</OTHE>
130
+ <OTHE ID="2">Трансфер</OTHE>
131
+ <OTHE>Cкидка при покупке раунд-трипа</OTHE>
132
+ </OTHER>
133
+ <PROMO>
134
+ <PROM ID="1">BUSFOR_RECOMMEND</PROM>
135
+ <PROM ID="2">ADVERTISING</PROM>
136
+ </PROMO>
137
+ <TICKETS>
138
+ <TICKET ID="7">ЭЛЕКТРОННЫЙ БИЛЕТ. Печать билета не требуется!</TICKET>
139
+ </TICKETS>
140
+ </OPTIONS>
141
+ </TRIP>
142
+ <TRIP>
143
+ <ID>-3986171261205069729</ID>
144
+ <RES_ID>10</RES_ID>
145
+ <NUMBER>2093</NUMBER>
146
+ <START_CITY_NAME>Москва</START_CITY_NAME>
147
+ <END_CITY_NAME>Санкт-Петербург</END_CITY_NAME>
148
+ <START_DATE>23.08.2014</START_DATE>
149
+ <END_DATE>24.08.2014</END_DATE>
150
+ <START_TIME>21:10</START_TIME>
151
+ <END_TIME>08:40</END_TIME>
152
+ <BUS_MODEL/>
153
+ <PLACES_COUNT>18</PLACES_COUNT>
154
+ <FREE_PLACES_COUNT>10</FREE_PLACES_COUNT>
155
+ <FREE_BUSY_PLACES>10/18</FREE_BUSY_PLACES>
156
+ <CARRIER_NAME>ИП Унанян И.А.</CARRIER_NAME>
157
+ <TIME_IN_ROAD>11:30</TIME_IN_ROAD>
158
+ <STATION_BEGIN_NAME>Москва</STATION_BEGIN_NAME>
159
+ <STATION_BEGIN_ADDRESS>Москва, Рязанский переулок, д. 13, стр. 1</STATION_BEGIN_ADDRESS>
160
+ <STATION_END_NAME>Санкт-Петербург</STATION_END_NAME>
161
+ <STATION_END_ADDRESS>м. Купчино </STATION_END_ADDRESS>
162
+ <RESERVATION_ENABLED>true</RESERVATION_ENABLED>
163
+ <SALE_ENABLED>true</SALE_ENABLED>
164
+ <RETURN_ENABLED>false</RETURN_ENABLED>
165
+ <TIME_FOR_CANCEL>25</TIME_FOR_CANCEL>
166
+ <TRIP_FULL_SALE>false</TRIP_FULL_SALE>
167
+ <CAN_DISCOUNT>true</CAN_DISCOUNT>
168
+ <INTERNATIONAL>false</INTERNATIONAL>
169
+ <JOIN_BOOK_BUY>false</JOIN_BOOK_BUY>
170
+ <RECOMMENDED>false</RECOMMENDED>
171
+ <TRIP_MODE>1</TRIP_MODE>
172
+ <CUSTOM_STATUS>0</CUSTOM_STATUS>
173
+ <IMAGE_URL>null</IMAGE_URL>
174
+ <START_POINT_TYPE>null</START_POINT_TYPE>
175
+ <VEHICLE_DESCRIPTION>null</VEHICLE_DESCRIPTION>
176
+ <VEHICLE_FEATURES>null</VEHICLE_FEATURES>
177
+ <TOTAL_COST>1410</TOTAL_COST>
178
+ <CURRENCY>RUB</CURRENCY>
179
+ <CURRENCY_CODE>643</CURRENCY_CODE>
180
+ <TARIFF>
181
+ <SHORT_NAME>Y</SHORT_NAME>
182
+ <FULL_NAME/>
183
+ <START_DATE/>
184
+ <END_DATE/>
185
+ <DESCRIPTION/>
186
+ <TIME_TO_BUY_RESERVED>0</TIME_TO_BUY_RESERVED>
187
+ <TIME_TO_STOP_BOOKING>0</TIME_TO_STOP_BOOKING>
188
+ <COST>1410</COST>
189
+ <AFTER_DISPATCH_NO_RETURN>false</AFTER_DISPATCH_NO_RETURN>
190
+ <PASSENGER_BIRTHDAY/>
191
+ <PASSENGER_ISIC_NUMBER/>
192
+ <PASSENGER_STUDENT_TICKET/>
193
+ <RETURN_CAUSE id='asdasd'>cause 1</RETURN_CAUSE>
194
+ <IS_EXCLUSIVE_PRICE>true</IS_EXCLUSIVE_PRICE>
195
+ </TARIFF>
196
+ <POINT>
197
+ <NUMBER>0</NUMBER>
198
+ <GEOGRAPHY_NAME>Москва</GEOGRAPHY_NAME>
199
+ <NAME>Москва</NAME>
200
+ <ADDRESS>Москва, Рязанский переулок, д. 13, стр. 1</ADDRESS>
201
+ <ARRIVAL_DATE>23.08.2014</ARRIVAL_DATE>
202
+ <ARRIVAL_TIME>21:10</ARRIVAL_TIME>
203
+ <DISPATCH_DATE/>
204
+ <DISPATCH_TIME/>
205
+ <CHECK_POINT>false</CHECK_POINT>
206
+ </POINT>
207
+ <POINT>
208
+ <NUMBER>1</NUMBER>
209
+ <GEOGRAPHY_NAME>Вышний Волочек</GEOGRAPHY_NAME>
210
+ <NAME>Вышний Волочек</NAME>
211
+ <ADDRESS>трасса (М10)</ADDRESS>
212
+ <ARRIVAL_DATE>24.08.2014</ARRIVAL_DATE>
213
+ <ARRIVAL_TIME>02:10</ARRIVAL_TIME>
214
+ <DISPATCH_DATE/>
215
+ <DISPATCH_TIME/>
216
+ <CHECK_POINT>false</CHECK_POINT>
217
+ </POINT>
218
+ <POINT>
219
+ <NUMBER>2</NUMBER>
220
+ <GEOGRAPHY_NAME>Великий Новгород</GEOGRAPHY_NAME>
221
+ <NAME>Великий Новгород</NAME>
222
+ <ADDRESS>трасса (Подберезье, поворот на Великий Новгород)</ADDRESS>
223
+ <ARRIVAL_DATE>24.08.2014</ARRIVAL_DATE>
224
+ <ARRIVAL_TIME>05:40</ARRIVAL_TIME>
225
+ <DISPATCH_DATE/>
226
+ <DISPATCH_TIME/>
227
+ <CHECK_POINT>false</CHECK_POINT>
228
+ </POINT>
229
+ <POINT>
230
+ <NUMBER>3</NUMBER>
231
+ <GEOGRAPHY_NAME>Санкт-Петербург</GEOGRAPHY_NAME>
232
+ <NAME>Санкт-Петербург</NAME>
233
+ <ADDRESS>м. Купчино </ADDRESS>
234
+ <ARRIVAL_DATE>24.08.2014</ARRIVAL_DATE>
235
+ <ARRIVAL_TIME>08:40</ARRIVAL_TIME>
236
+ <DISPATCH_DATE/>
237
+ <DISPATCH_TIME/>
238
+ <CHECK_POINT>false</CHECK_POINT>
239
+ </POINT>
240
+ <OPTIONS>
241
+ </OPTIONS>
242
+ </TRIP>
243
+ </DATA>
@@ -53,6 +53,10 @@ class SearchTripsResponseTest < Minitest::Test
53
53
  Gillbus::SearchTrips::Response.parse_string(File.read('test/responses/searchTrips-prod.xml'))
54
54
  end
55
55
 
56
+ def get_successful_search_trips_with_new_options_format
57
+ Gillbus::SearchTrips::Response.parse_string(File.read('test/responses/searchTrips-new-options-format.xml'))
58
+ end
59
+
56
60
  def get_successful_search_trips_with_bad_data
57
61
  Gillbus::SearchTrips::Response.parse_string(File.read('test/responses/searchTrips-prod-invalid.xml'))
58
62
  end
@@ -169,6 +173,55 @@ class SearchTripsResponseTest < Minitest::Test
169
173
  assert options.busfor_recommend
170
174
  end
171
175
 
176
+ def test_new_options_format
177
+ response = get_successful_search_trips_with_new_options_format
178
+ options = response.trips.first.options
179
+
180
+ services = {
181
+ 1 => 'Кофе',
182
+ 15 => 'Wi-Fi',
183
+ }
184
+ luggage_options = [
185
+ 'В стоимость входит провоз 2 единиц багажа свыше 80 кг.',
186
+ 'Ручная кладь 20см x 40см x 30см входит в стоимость билета.',
187
+ 'Превышение по багажу оплачивается в размере 1% от стоимости тарифа.',
188
+ ]
189
+ seating_options = [
190
+ 'Свободная рассадка.',
191
+ ]
192
+ technical_stops = [
193
+ 'Технические остановки осуществляются каждые 2-3 часа.',
194
+ ]
195
+ critical_info = [
196
+ 'ВНИМАНИЕ: Особые условия паспортного режима пересечения пропускного пункта (только с паспортами РБ и РФ).',
197
+ ]
198
+ resource_options = [
199
+ 'Посадка начинается за 10 мин.',
200
+ ]
201
+ other_options = [
202
+ 'Переправа',
203
+ 'Трансфер',
204
+ 'Cкидка при покупке раунд-трипа',
205
+ ]
206
+ titckets_options = [
207
+ 'ЭЛЕКТРОННЫЙ БИЛЕТ. Печать билета не требуется!',
208
+ ]
209
+ titckets_options_ids = [7]
210
+
211
+ assert_equal services.values, options.services.map(&:name)
212
+ assert_equal services.keys, options.services.map(&:id)
213
+ assert_equal luggage_options, options.luggage
214
+ assert_equal seating_options, options.seating
215
+ assert_equal technical_stops, options.technical_stops
216
+ assert_equal critical_info, options.critical_info
217
+ assert_equal resource_options, options.resource_options
218
+ assert_equal other_options, options.other
219
+ assert_equal titckets_options, options.tickets.map(&:text)
220
+ assert_equal titckets_options_ids, options.tickets.map(&:id)
221
+ assert options.advertising
222
+ assert options.busfor_recommend
223
+ end
224
+
172
225
  def test_empty_options_parsing
173
226
  response = get_successful_search_trips
174
227
  options = response.trips.last.options
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.19.0
4
+ version: 0.20.0
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: 2019-02-27 00:00:00.000000000 Z
12
+ date: 2019-03-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -269,6 +269,7 @@ files:
269
269
  - test/responses/returnPositionSuccess.xml
270
270
  - test/responses/searchTrips-empty.xml
271
271
  - test/responses/searchTrips-insurance.xml
272
+ - test/responses/searchTrips-new-options-format.xml
272
273
  - test/responses/searchTrips-prod-invalid.xml
273
274
  - test/responses/searchTrips-prod.xml
274
275
  - test/responses/searchTrips-segments-roundtrip.xml
@@ -350,6 +351,7 @@ test_files:
350
351
  - test/responses/returnPositionSuccess.xml
351
352
  - test/responses/searchTrips-empty.xml
352
353
  - test/responses/searchTrips-insurance.xml
354
+ - test/responses/searchTrips-new-options-format.xml
353
355
  - test/responses/searchTrips-prod-invalid.xml
354
356
  - test/responses/searchTrips-prod.xml
355
357
  - test/responses/searchTrips-segments-roundtrip.xml