gillbus 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +22 -0
  3. data/.ruby-version +1 -0
  4. data/Gemfile +10 -0
  5. data/Guardfile +29 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +140 -0
  8. data/Rakefile +9 -0
  9. data/gillbus.gemspec +31 -0
  10. data/lib/gillbus/base_request.rb +99 -0
  11. data/lib/gillbus/base_response.rb +43 -0
  12. data/lib/gillbus/buy_booking.rb +74 -0
  13. data/lib/gillbus/buy_tickets.rb +36 -0
  14. data/lib/gillbus/cancel_order.rb +55 -0
  15. data/lib/gillbus/drivers/faraday_response_file_logger.rb +19 -0
  16. data/lib/gillbus/find_order.rb +37 -0
  17. data/lib/gillbus/get_all_cities.rb +24 -0
  18. data/lib/gillbus/get_cities.rb +34 -0
  19. data/lib/gillbus/get_countries.rb +24 -0
  20. data/lib/gillbus/get_dates_new.rb +35 -0
  21. data/lib/gillbus/get_order_status.rb +28 -0
  22. data/lib/gillbus/get_order_ticket.rb +62 -0
  23. data/lib/gillbus/get_required_fields.rb +32 -0
  24. data/lib/gillbus/get_time_table.rb +33 -0
  25. data/lib/gillbus/get_trip_seats.rb +61 -0
  26. data/lib/gillbus/get_trips.rb +13 -0
  27. data/lib/gillbus/helpers/fields.rb +47 -0
  28. data/lib/gillbus/helpers/parser.rb +100 -0
  29. data/lib/gillbus/helpers/update_attrs.rb +15 -0
  30. data/lib/gillbus/lock_seats.rb +82 -0
  31. data/lib/gillbus/logout.rb +19 -0
  32. data/lib/gillbus/parse_error.rb +11 -0
  33. data/lib/gillbus/reserve_tickets.rb +13 -0
  34. data/lib/gillbus/search_trips.rb +96 -0
  35. data/lib/gillbus/session_login.rb +32 -0
  36. data/lib/gillbus/structs/commission.rb +54 -0
  37. data/lib/gillbus/structs/item.rb +14 -0
  38. data/lib/gillbus/structs/passenger_discount.rb +37 -0
  39. data/lib/gillbus/structs/point.rb +38 -0
  40. data/lib/gillbus/structs/return_cause.rb +23 -0
  41. data/lib/gillbus/structs/seat.rb +38 -0
  42. data/lib/gillbus/structs/segment.rb +161 -0
  43. data/lib/gillbus/structs/tariff.rb +59 -0
  44. data/lib/gillbus/structs/ticket.rb +285 -0
  45. data/lib/gillbus/structs/timetable_segment.rb +51 -0
  46. data/lib/gillbus/structs/timetable_trip.rb +77 -0
  47. data/lib/gillbus/structs/trip.rb +164 -0
  48. data/lib/gillbus/tickets_booking.rb +182 -0
  49. data/lib/gillbus/unlock_seats.rb +15 -0
  50. data/lib/gillbus/version.rb +3 -0
  51. data/lib/gillbus.rb +86 -0
  52. data/script/example_booking.rb +82 -0
  53. data/script/example_booking_with_segments.rb +90 -0
  54. data/script/example_canceling_booking.rb +67 -0
  55. data/script/example_canceling_reservation.rb +69 -0
  56. data/script/example_reservation.rb +88 -0
  57. data/test/buy_booking_test.rb +32 -0
  58. data/test/buy_tickets_test.rb +12 -0
  59. data/test/cancel_order_test.rb +12 -0
  60. data/test/error_test.rb +31 -0
  61. data/test/find_order_test.rb +24 -0
  62. data/test/get_cities_test.rb +12 -0
  63. data/test/get_countries_test.rb +12 -0
  64. data/test/get_dates_new_test.rb +12 -0
  65. data/test/get_order_ticket_test.rb +12 -0
  66. data/test/get_time_table_test.rb +21 -0
  67. data/test/get_trip_seats_test.rb +40 -0
  68. data/test/lock_seats_test.rb +70 -0
  69. data/test/reserve_tickets_test.rb +22 -0
  70. data/test/responses/buyBooking.xml +9 -0
  71. data/test/responses/buyTickets.xml +7 -0
  72. data/test/responses/cancelOrder.xml +8 -0
  73. data/test/responses/error.xml +1 -0
  74. data/test/responses/findOrder.xml +296 -0
  75. data/test/responses/getCities.xml +266 -0
  76. data/test/responses/getCountries.xml +90 -0
  77. data/test/responses/getOrderTicket.xml +3 -0
  78. data/test/responses/getTimeTable.xml +81 -0
  79. data/test/responses/getTripSeats-one-empty-segment.xml +562 -0
  80. data/test/responses/getTripSeats-segments.xml +1052 -0
  81. data/test/responses/getTripSeats.xml +492 -0
  82. data/test/responses/lockSeats.xml +23 -0
  83. data/test/responses/reserveTickets.xml +76 -0
  84. data/test/responses/searchTrips-empty.xml +3 -0
  85. data/test/responses/searchTrips-prod.xml +193 -0
  86. data/test/responses/searchTrips-segments-roundtrip.xml +15812 -0
  87. data/test/responses/searchTrips-segments.xml +808 -0
  88. data/test/responses/sessionLogin.xml +3 -0
  89. data/test/responses/ticketsBooking.xml +75 -0
  90. data/test/responses/very_empty.xml +1 -0
  91. data/test/search_trips_test.rb +71 -0
  92. data/test/session_login_test.rb +12 -0
  93. data/test/test_helper.rb +3 -0
  94. data/test/tickets_booking_test.rb +16 -0
  95. metadata +303 -0
@@ -0,0 +1,285 @@
1
+ class Gillbus
2
+ class Ticket
3
+
4
+ extend Fields
5
+ include UpdateAttrs
6
+
7
+ # The ticket number in the system
8
+ # => 8472
9
+ field :ticket_number
10
+
11
+ field :carrier_ticket_number
12
+
13
+ # The item position system identifier (is unique for the for the every order item).
14
+ # => 8471
15
+ field :system_number
16
+
17
+ # The ticket order number
18
+ # => 14065
19
+ field :order_number
20
+
21
+ # The ticket status. Possible values are:
22
+ # :reserved 1 – ticket booked;
23
+ # :ticketed 2 – ticket sold;
24
+ # :ordered 3 – the booking, that waiting for the confirmation;
25
+ # :returned 4 – ticket returned;
26
+ # :canceled 5 – booking cancelled;
27
+ # :voided 6 – ticket cancelled;
28
+ # :booked 8 – the sale, that waiting for the confirmation
29
+ field :ticket_status, :ticket_status
30
+
31
+ # The insurance number
32
+ field :policy_number
33
+
34
+ # The flag, which indicates the registration of a trip on the exchange form.
35
+ # true – in case of the registration with the exchange form
36
+ # false – in case of ticket registration
37
+ field :exchange_blank, :bool
38
+
39
+ # => Surname Firstname
40
+ field :passenger_full_name
41
+
42
+ # => Firstname
43
+ field :passenger_first_name
44
+
45
+ # => Surname
46
+ field :passenger_last_name
47
+
48
+ field :passenger_birthday, :date
49
+
50
+ field :passenger_student_ticket
51
+
52
+ # The passenger contact phone number
53
+ # => 380000000000
54
+ field :passenger_phone
55
+
56
+ field :passenger_passport
57
+
58
+ # The agent name, which sold the ticket
59
+ # => ТОВ"Юпітер
60
+ field :agent_name
61
+
62
+ # => +00(044)496-08-00
63
+ field :agent_phone
64
+
65
+ # => ТОВ"Юпітер
66
+ field :carrier_name
67
+
68
+ # => +00(044)496-08-00
69
+ field :carrier_phone
70
+
71
+ # => Setra
72
+ field :bus_model
73
+
74
+ field :carriage_number
75
+
76
+ # => 16
77
+ field :number_seat
78
+
79
+ # => ДЕМ059
80
+ field :trip_number
81
+
82
+ # The trip mode. See the returned parameters description of the /online2/searchTrips command.
83
+ # => 1
84
+ field :trip_mode, :int
85
+
86
+ # => false
87
+ field :international_trip, :bool
88
+
89
+ # => Донецк
90
+ field :start_city
91
+
92
+ # => 20.02.2013
93
+ field :start_date, :date
94
+
95
+ # => 14:40
96
+ field :start_time, :time
97
+
98
+ # => Одесса
99
+ field :end_city
100
+
101
+ # => 06:35
102
+ field :end_time, :time
103
+
104
+ # Tariff short name
105
+ # => Y
106
+ field :type_tariff_name
107
+
108
+ # The tariff inside the country (country – France for example)
109
+ # => 75.0
110
+ field :tariff, :decimal
111
+
112
+ # The tariff VAT inside the country
113
+ # => 15.0
114
+ field :tariff_vat, :decimal
115
+
116
+ # The tariff outside the country
117
+ # => 0.0
118
+ field :foreign_tariff, :decimal
119
+
120
+ # The tariff VAT outside the country
121
+ # => 0.0
122
+ field :foreign_tariff_vat, :decimal
123
+
124
+ field :note
125
+
126
+ # Ticket barcode
127
+ # => ЮПТ000008472ЮПТ
128
+ field :barcode
129
+
130
+ # => 21.02.2013
131
+ field :end_date, :date
132
+
133
+ # Departure station name
134
+ # => Залізн. вокзал
135
+ field :station_name
136
+
137
+ # => БрокБізнесБанк
138
+ field :insurance_name
139
+
140
+ # => +33(333)333-33-33
141
+ field :insurance_phone
142
+
143
+ # Agent government registration ID
144
+ # => 132123
145
+ field :agent_reg
146
+
147
+ # Carrier government registration ID
148
+ # => 132123
149
+ field :carrier_reg
150
+
151
+ # => 232323223
152
+ field :insurance_reg
153
+
154
+ # The tariff full cost (sale currency)
155
+ # => 75.0
156
+ field :total_tariff, :money
157
+
158
+ # The blanket (full) tariff in currency in which the tariff is brought
159
+ # => 75.0
160
+ field :total_tariff_in_currency, :tariff_money
161
+
162
+ # The tariff full cost VAT (sale currency)
163
+ # => 15.0
164
+ field :total_tariff_vat, :money
165
+
166
+ # The blanket (full) tariff VAT in currency in which the tariff is brought
167
+ # => 15.0
168
+ field :total_tariff_vat_in_currency, :tariff_money
169
+
170
+ # The return amount from the common tariff in the sale currency (w/o VAT)
171
+ field :return_total_tariff, :money
172
+
173
+ # The return amount from the common tariff in currency in which the tariff is brought (w/o VAT)
174
+ field :return_total_tariff_in_currency, :tariff_money
175
+
176
+ # The return amount from the VAT from common tariff in the sale currency
177
+ field :return_total_tariff_vat, :money
178
+
179
+ # The return amount from the VAT from common tariff in currency in which the tariff is brought.
180
+ field :return_total_tariff_vat_in_currency, :tariff_money
181
+
182
+ # The description of the returning conditions
183
+ field :return_condition
184
+
185
+ # Sale currency
186
+ # => UAH
187
+ field :sale_cur_code
188
+
189
+ # The currency in which the tariff is brought
190
+ # => UAH
191
+ field :tariff_cur_code
192
+
193
+ # Sale exchange rate to currency in which the tariff is brought
194
+ field :tariff_cur_rate
195
+
196
+ # The total ticket cost, incliding service charge
197
+ # => 110.0
198
+ field :total_amount, :money
199
+
200
+ # The total ticket returning amount
201
+ field :return_total_amount, :money
202
+
203
+ # => 18.33
204
+ field :total_amount_vat, :tariff_money
205
+
206
+ field :customer_name
207
+
208
+ field :customer_phone
209
+
210
+ field :customer_address
211
+
212
+ # => м Київ, вул Якіра, д 13-б
213
+ field :agent_address
214
+
215
+ # => м Київ, вул Якіра, д 13-б
216
+ field :carrier_address
217
+
218
+ # => м. Донецьк. вул. Донецька
219
+ field :station_address
220
+
221
+ # => м Київ
222
+ field :insurance_address
223
+
224
+ # => ЮПТ
225
+ field :agent_code
226
+
227
+ # => Київ
228
+ field :agent_city
229
+
230
+ # => ЮПТ
231
+ field :carrier_code
232
+
233
+ # => DOK
234
+ field :begin_aviacode
235
+
236
+ # => ODS
237
+ field :end_aviacode
238
+
239
+ # The sum of all collecting over the tariff
240
+ # => 0.0
241
+ field :xt, :money
242
+
243
+ # The sum of all collecting VAT over the tariff
244
+ # => 0.0
245
+ field :xt_vat, :money
246
+
247
+ # Array of commissions
248
+ field :commissions, [Commission], key: 'COMMISSION'
249
+
250
+ field :return_causes, [:return_cause], key: 'RETURN_CAUSE'
251
+
252
+ # Date to pay reserved ticket
253
+ field :date_to_pay, :datetime
254
+
255
+ # Minutes to pay booked ticket
256
+ field :minutes_for_buyout, :int
257
+
258
+ parser do
259
+ def ticket_status(value)
260
+ {
261
+ '1' => :reserved, # ticket booked;
262
+ '2' => :ticketed, # ticket sold;
263
+ '3' => :ordered, # the booking, that waiting for the confirmation;
264
+ '4' => :returned, # ticket returned;
265
+ '5' => :canceled, # booking cancelled;
266
+ '6' => :voided, # ticket cancelled;
267
+ '8' => :booked, # the sale, that waiting for the confirmation
268
+ }[value]
269
+ end
270
+
271
+ def money(val)
272
+ Monetize.parse(val, doc['SALE_CUR_CODE'])
273
+ end
274
+
275
+ def tariff_money(val)
276
+ Monetize.parse(val, doc['TARIFF_CUR_CODE'])
277
+ end
278
+
279
+ def return_cause(val)
280
+ ReturnCause.parse(val.merge(_currency: doc['SALE_CUR_CODE']))
281
+ end
282
+
283
+ end
284
+ end
285
+ end
@@ -0,0 +1,51 @@
1
+ class Gillbus
2
+ class TimetableSegment
3
+ extend Fields
4
+ include UpdateAttrs
5
+
6
+ # => Киев
7
+ field :start_name
8
+
9
+ # => Київський Центральний Автовокзал
10
+ field :start_station_name
11
+
12
+ # => Московська площа, 2/1
13
+ field :start_station_address
14
+
15
+ # => 0123456789ABCDEF0123456789ABCDEF
16
+ field :start_station_id
17
+
18
+ # => Одесса
19
+ field :end_name
20
+
21
+ # => Автовокзал
22
+ field :end_station_name
23
+
24
+ # => Балківська вулиця
25
+ field :end_station_address
26
+
27
+ # => 0123456789ABCDEF0123456789ABCDEF
28
+ field :end_station_id
29
+
30
+ # => 07:30
31
+ field :start_time, :time
32
+
33
+ # => 12:55
34
+ field :end_time, :time
35
+
36
+ # => 0
37
+ field :days, :int
38
+
39
+ # => 1400
40
+ field :time_in_road, :int
41
+
42
+ # => "270.5"
43
+ field :base_cost, :money
44
+
45
+ parser do
46
+ def money(val)
47
+ Monetize.parse(val, doc['CUR_CODE'])
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,77 @@
1
+ class Gillbus
2
+ class TimetableTrip
3
+ extend Fields
4
+ include UpdateAttrs
5
+
6
+ # => "ЯРМ005 Киев-Коблево"
7
+ field :number
8
+
9
+ # => "Киев"
10
+ field :start_city_name
11
+
12
+ # => "Коблево"
13
+ field :end_city_name
14
+
15
+ # => "24.07.2015"
16
+ field :start_date, :date
17
+
18
+ # => "31.08.2015"
19
+ field :end_date, :date
20
+
21
+ # => "07:30"
22
+ field :start_time, :time
23
+
24
+ # => "14:30"
25
+ field :end_time, :time
26
+
27
+ # => "Neoplan 313 SHD"
28
+ field :bus_model
29
+
30
+ # => "38"
31
+ field :number_seats, :int
32
+
33
+ # => ""Ярмола А.Г." ФОП +38(044)5965112"
34
+ field :carrier_info
35
+
36
+ # => "3"
37
+ field :frequency, :int
38
+
39
+ # => "false"
40
+ field :international, :bool
41
+
42
+ # => "1"
43
+ field :trip_mode, :int
44
+
45
+ field :segments, [TimetableSegment], key: "SEGMENT"
46
+
47
+ field :days_of_week, :days_of_week, key: "DAY_OR_DATE"
48
+
49
+ field :dates, :dates, key: "DAY_OR_DATE"
50
+
51
+ parser do
52
+ DAYS_INTO_WEEK = {
53
+ 1 => :sunday,
54
+ 2 => :monday,
55
+ 3 => :tuesday,
56
+ 4 => :wednesday,
57
+ 5 => :thursday,
58
+ 6 => :friday,
59
+ 7 => :saturday,
60
+ }
61
+
62
+ def days_of_week(value)
63
+ return unless instance.frequency == 3
64
+ Array(value).map { |v| day_of_week(v) }
65
+ end
66
+
67
+ def dates(value)
68
+ return unless instance.frequency == 2
69
+ Array(value).map { |v| date(v) }
70
+ end
71
+
72
+ def day_of_week(day)
73
+ DAYS_INTO_WEEK[day.to_i]
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,164 @@
1
+ class Gillbus
2
+ class Trip
3
+
4
+ extend Fields
5
+ include UpdateAttrs
6
+
7
+ # => "393409381686201016"
8
+ field :id
9
+
10
+ # Идентификатор стороннего поставщика. 0 - gillbus
11
+ # => "0"
12
+ field :res_id
13
+
14
+ # => "Москва-Санкт-Петербург"
15
+ field :number
16
+
17
+ # => "Москва"
18
+ field :start_city_name
19
+
20
+ # => "Санкт-Петербург"
21
+ field :end_city_name
22
+
23
+ # => "10.10.2014"
24
+ field :start_date, :date
25
+
26
+ # => "11.10.2014"
27
+ field :end_date, :date
28
+
29
+ # => "22:50"
30
+ field :start_time, :time
31
+
32
+ # => "08:00"
33
+ field :end_time, :time
34
+
35
+ # => "Сетра S 315 НDH"
36
+ field :bus_model
37
+
38
+ # => "VIP"
39
+ field :bus_class
40
+
41
+ # => true
42
+ field :has_transfer, :bool
43
+
44
+ # => true
45
+ field :trip_seats_map, :bool
46
+
47
+ # => "49"
48
+ field :places_count, :int
49
+
50
+ # => "10"
51
+ field :free_places_count, :int
52
+
53
+ # => "10/49"
54
+ field :free_busy_places
55
+
56
+ # => "ABCDEE23413"
57
+ field :carrier_id
58
+
59
+ # => "RU \"ПЕТРОКОМ - АВТО ПЛЮС\" ООО"
60
+ field :carrier_name
61
+
62
+ # => "09:10"
63
+ field :time_in_road, :time
64
+
65
+ # => D547A366D02526A7E040B85960523246
66
+ field :station_begin_id
67
+
68
+ # => "м. \"Речной Вокзал\""
69
+ field :station_begin_name
70
+
71
+ # => "ул. Фестивальная, дом 11, метро \"Речной Вокзал\""
72
+ field :station_begin_address
73
+
74
+ # => D547A366D02526A7E040B85960523246
75
+ field :station_end_id
76
+
77
+ # => "м. \"Бухарестская\""
78
+ field :station_end_name
79
+
80
+ # => "ул. Бухарестская, 30/32 торговый дом \"Континент\", метро \"Бухарестская\""
81
+ field :station_end_address
82
+
83
+ # => "true"
84
+ field :reservation_enabled, :bool
85
+
86
+ # => "true"
87
+ field :sale_enabled, :bool
88
+
89
+ # => "false"
90
+ field :return_enabled, :bool
91
+
92
+ # => "25"
93
+ field :time_for_cancel, :int
94
+
95
+ # => "false"
96
+ field :trip_full_sale, :bool
97
+
98
+ # => "true"
99
+ field :can_discount, :bool
100
+
101
+ # => "false"
102
+ field :international, :bool
103
+
104
+ # => "false"
105
+ field :join_book_buy, :bool
106
+
107
+ # => "1"
108
+ field :trip_mode, :int
109
+
110
+ # => "null"
111
+ field :image_url
112
+
113
+ # => "null"
114
+ field :start_point_type
115
+
116
+ # => "null"
117
+ field :vehicle_description
118
+
119
+ # => "null"
120
+ field :vehicle_features
121
+
122
+ # => "false"
123
+ field :branded, :bool
124
+
125
+ # => "1100"
126
+ field :total_cost, :money
127
+
128
+ # => "RUB"
129
+ field :currency
130
+
131
+ # => "643"
132
+ field :currency_code
133
+
134
+ field :tariffs, [:tariff], key: "TARIFF"
135
+
136
+ field :points, [Point], key: "POINT"
137
+
138
+ field :segments, [Segment], key: "SEGMENT"
139
+
140
+ def start_at
141
+ ActiveSupport::TimeZone["Europe/Kiev"].parse("#{data["START_DATE"]} #{data["START_TIME"]}")
142
+ end
143
+
144
+ parser do
145
+ def money(val)
146
+ Monetize.parse(val, doc['CURRENCY'])
147
+ end
148
+
149
+ def tariff(val)
150
+ Tariff.parse(val.merge(_currency: doc['CURRENCY']))
151
+ end
152
+ end
153
+
154
+ # to hold unserialized data
155
+ attr_accessor :data
156
+
157
+ def self.parse(doc)
158
+ instance = super
159
+ instance.data = doc
160
+ instance
161
+ end
162
+
163
+ end
164
+ end