gillbus 0.16.7 → 0.16.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +88 -0
  3. data/Rakefile +3 -3
  4. data/gillbus.gemspec +16 -15
  5. data/lib/gillbus.rb +10 -9
  6. data/lib/gillbus/base_request.rb +17 -19
  7. data/lib/gillbus/base_response.rb +11 -13
  8. data/lib/gillbus/buy_booking.rb +1 -9
  9. data/lib/gillbus/buy_tickets.rb +1 -8
  10. data/lib/gillbus/cancel_order.rb +0 -10
  11. data/lib/gillbus/drivers/faraday_response_file_logger.rb +1 -3
  12. data/lib/gillbus/find_order.rb +0 -5
  13. data/lib/gillbus/get_all_cities.rb +0 -2
  14. data/lib/gillbus/get_bus_image.rb +0 -3
  15. data/lib/gillbus/get_cities.rb +0 -4
  16. data/lib/gillbus/get_countries.rb +0 -4
  17. data/lib/gillbus/get_dates_new.rb +0 -4
  18. data/lib/gillbus/get_order_status.rb +1 -6
  19. data/lib/gillbus/get_order_ticket.rb +4 -7
  20. data/lib/gillbus/get_time_table.rb +0 -4
  21. data/lib/gillbus/get_trip_seats.rb +8 -11
  22. data/lib/gillbus/get_trip_segments.rb +0 -2
  23. data/lib/gillbus/get_trips.rb +0 -2
  24. data/lib/gillbus/helpers/fields.rb +5 -7
  25. data/lib/gillbus/helpers/parser.rb +10 -13
  26. data/lib/gillbus/helpers/update_attrs.rb +2 -4
  27. data/lib/gillbus/lock_seats.rb +7 -10
  28. data/lib/gillbus/logout.rb +0 -6
  29. data/lib/gillbus/parse_error.rb +3 -1
  30. data/lib/gillbus/reserve_tickets.rb +0 -2
  31. data/lib/gillbus/return_position.rb +0 -1
  32. data/lib/gillbus/search_trips.rb +5 -6
  33. data/lib/gillbus/session_login.rb +0 -6
  34. data/lib/gillbus/structs/commission.rb +4 -4
  35. data/lib/gillbus/structs/item.rb +0 -2
  36. data/lib/gillbus/structs/passenger_discount.rb +2 -3
  37. data/lib/gillbus/structs/point.rb +0 -1
  38. data/lib/gillbus/structs/return_cause.rb +0 -2
  39. data/lib/gillbus/structs/seat.rb +0 -2
  40. data/lib/gillbus/structs/segment.rb +5 -6
  41. data/lib/gillbus/structs/tariff.rb +1 -2
  42. data/lib/gillbus/structs/tariff/return_cause.rb +3 -3
  43. data/lib/gillbus/structs/ticket.rb +0 -2
  44. data/lib/gillbus/structs/timetable_trip.rb +4 -4
  45. data/lib/gillbus/structs/trip.rb +5 -6
  46. data/lib/gillbus/structs/trip_options.rb +0 -1
  47. data/lib/gillbus/structs/trip_service.rb +0 -2
  48. data/lib/gillbus/tickets_booking.rb +17 -13
  49. data/lib/gillbus/unlock_seats.rb +0 -2
  50. data/lib/gillbus/version.rb +1 -1
  51. data/script/example_booking.rb +16 -18
  52. data/script/example_booking_with_segments.rb +0 -1
  53. data/script/example_canceling_booking.rb +12 -13
  54. data/script/example_canceling_reservation.rb +11 -12
  55. data/script/example_reservation.rb +14 -15
  56. data/test/all_commissions_test.rb +1 -2
  57. data/test/buy_booking_test.rb +14 -13
  58. data/test/buy_tickets_test.rb +1 -2
  59. data/test/cancel_order_test.rb +1 -2
  60. data/test/error_test.rb +1 -3
  61. data/test/find_order_test.rb +3 -4
  62. data/test/get_bus_image_test.rb +0 -1
  63. data/test/get_cities_test.rb +1 -2
  64. data/test/get_countries_test.rb +1 -2
  65. data/test/get_dates_new_test.rb +0 -1
  66. data/test/get_order_ticket_test.rb +1 -2
  67. data/test/get_time_table_test.rb +0 -1
  68. data/test/get_trip_seats_test.rb +3 -4
  69. data/test/get_trip_segments_test.rb +5 -6
  70. data/test/lock_seats_test.rb +43 -33
  71. data/test/reserve_tickets_test.rb +10 -3
  72. data/test/return_position_test.rb +8 -5
  73. data/test/search_trips_test.rb +15 -19
  74. data/test/session_login_test.rb +0 -1
  75. data/test/tickets_booking_test.rb +2 -3
  76. metadata +24 -9
@@ -1,6 +1,5 @@
1
1
  class Gillbus
2
2
  class FaradayResponseFileLogger < Faraday::Middleware
3
-
4
3
  def initialize(app, dir = '.')
5
4
  @dir = dir
6
5
  super(app)
@@ -8,12 +7,11 @@ class Gillbus
8
7
 
9
8
  def call(env)
10
9
  path = env.url.path
11
- @app.call(env).on_complete do |environment|
10
+ @app.call(env).on_complete do |_environment|
12
11
  sanitized_path = path.gsub(/[^A-Za-z0-9_-]+/, '_').gsub(/^_|_$/, '')
13
12
  sanitized_path = '_' if sanitized_path == ''
14
13
  File.write(@dir + '/' + sanitized_path, env.body) if env.body != ''
15
14
  end
16
15
  end
17
-
18
16
  end
19
17
  end
@@ -1,10 +1,8 @@
1
1
  class Gillbus
2
2
  module FindOrder
3
-
4
3
  Gillbus.register self, :find_order
5
4
 
6
5
  class Request < BaseRequest
7
-
8
6
  def path; '/online2/findOrder' end
9
7
 
10
8
  # orderId
@@ -25,13 +23,10 @@ class Gillbus
25
23
  locale: translated_locale(locale),
26
24
  )
27
25
  end
28
-
29
26
  end
30
27
 
31
28
  class Response < BaseResponse
32
29
  field :tickets, [Ticket], key: 'TICKET'
33
30
  end
34
-
35
31
  end
36
-
37
32
  end
@@ -1,6 +1,5 @@
1
1
  class Gillbus
2
2
  module GetAllCities
3
-
4
3
  Gillbus.register self, :get_all_cities
5
4
 
6
5
  class Request < BaseRequest
@@ -32,6 +31,5 @@ class Gillbus
32
31
  class Response < BaseResponse
33
32
  field :cities, [City], key: 'CITY'
34
33
  end
35
-
36
34
  end
37
35
  end
@@ -1,10 +1,8 @@
1
1
  class Gillbus
2
2
  module GetBusImage
3
-
4
3
  Gillbus.register self, :get_bus_image
5
4
 
6
5
  class Request < BaseRequest
7
-
8
6
  def path; '/online2/getBusImage' end
9
7
 
10
8
  # busId
@@ -16,7 +14,6 @@ class Gillbus
16
14
  busId: bus_id,
17
15
  )
18
16
  end
19
-
20
17
  end
21
18
 
22
19
  class Image
@@ -1,10 +1,8 @@
1
1
  class Gillbus
2
2
  module GetCities
3
-
4
3
  Gillbus.register self, :get_cities
5
4
 
6
5
  class Request < BaseRequest
7
-
8
6
  def path; '/online2/getCities' end
9
7
 
10
8
  attr_accessor :start_city_id
@@ -14,7 +12,6 @@ class Gillbus
14
12
  startCityId: start_city_id,
15
13
  }
16
14
  end
17
-
18
15
  end
19
16
 
20
17
  class City
@@ -29,6 +26,5 @@ class Gillbus
29
26
  class Response < BaseResponse
30
27
  field :cities, [City], key: 'CITY'
31
28
  end
32
-
33
29
  end
34
30
  end
@@ -1,12 +1,9 @@
1
1
  class Gillbus
2
2
  module GetCountries
3
-
4
3
  Gillbus.register self, :get_countries
5
4
 
6
5
  class Request < BaseRequest
7
-
8
6
  def path; '/online2/getCountries' end
9
-
10
7
  end
11
8
 
12
9
  class Country
@@ -19,6 +16,5 @@ class Gillbus
19
16
  class Response < BaseResponse
20
17
  field :countries, [Country], key: 'COUNTRY'
21
18
  end
22
-
23
19
  end
24
20
  end
@@ -1,10 +1,8 @@
1
1
  class Gillbus
2
2
  module GetDatesNew
3
-
4
3
  Gillbus.register self, :get_dates_new
5
4
 
6
5
  class Request < BaseRequest
7
-
8
6
  def path; '/online2/getDatesNew' end
9
7
 
10
8
  attr_accessor :start_city_id
@@ -24,12 +22,10 @@ class Gillbus
24
22
  selectedModes: modes(selected_modes),
25
23
  )
26
24
  end
27
-
28
25
  end
29
26
 
30
27
  class Response < BaseResponse
31
28
  field :items, [Item], key: 'ITEM'
32
29
  end
33
-
34
30
  end
35
31
  end
@@ -1,10 +1,8 @@
1
1
  class Gillbus
2
2
  module GetOrderStatus
3
-
4
3
  Gillbus.register self, :get_order_status
5
4
 
6
5
  class Request < BaseRequest
7
-
8
6
  def path; '/online2/getOrderStatus' end
9
7
 
10
8
  # orderNumber
@@ -13,16 +11,13 @@ class Gillbus
13
11
 
14
12
  def params
15
13
  compact(
16
- orderNumber: order_number.is_a?(Array) ? order_number.join(";") : order_number,
14
+ orderNumber: order_number.is_a?(Array) ? order_number.join(';') : order_number,
17
15
  )
18
16
  end
19
-
20
17
  end
21
18
 
22
19
  class Response < BaseResponse
23
20
  field :tickets, [Ticket], key: 'TICKET'
24
21
  end
25
-
26
22
  end
27
-
28
23
  end
@@ -1,11 +1,9 @@
1
1
  require 'base64'
2
2
  class Gillbus
3
3
  module GetOrderTicket
4
-
5
4
  Gillbus.register self, :get_order_ticket
6
5
 
7
6
  class Request < BaseRequest
8
-
9
7
  def path; '/online2/getOrderTicket' end
10
8
 
11
9
  # orderId
@@ -22,7 +20,9 @@ class Gillbus
22
20
  attr_accessor :order_number
23
21
 
24
22
  # base64 (не обязательный)
25
- # Признак получения билета заказа в виде строки Base64. true – билет заказа будет возвращен как строка Base64. По умолчанию false.
23
+ # Признак получения билета заказа в виде строки Base64.
24
+ # true – билет заказа будет возвращен как строка Base64.
25
+ # По умолчанию false.
26
26
  # Важно: надо передать true, парсер ответа ожидает этого.
27
27
  # Иначе можно получить невалидный xml
28
28
  attr_accessor :base64
@@ -41,13 +41,12 @@ class Gillbus
41
41
  orderNumber: order_number,
42
42
  base64: base64,
43
43
  as: as,
44
- locale: translated_locale(locale)
44
+ locale: translated_locale(locale),
45
45
  )
46
46
  end
47
47
  end
48
48
 
49
49
  class Response < BaseResponse
50
-
51
50
  field :ticket, :ticket
52
51
 
53
52
  parser do
@@ -55,8 +54,6 @@ class Gillbus
55
54
  Base64.decode64(val)
56
55
  end
57
56
  end
58
-
59
57
  end
60
-
61
58
  end
62
59
  end
@@ -1,10 +1,8 @@
1
1
  class Gillbus
2
2
  module GetTimeTable
3
-
4
3
  Gillbus.register self, :get_time_table
5
4
 
6
5
  class Request < BaseRequest
7
-
8
6
  def path; '/online2/getTimeTable' end
9
7
 
10
8
  attr_accessor :locale
@@ -22,12 +20,10 @@ class Gillbus
22
20
  endDateSearch: date(end_date_search),
23
21
  )
24
22
  end
25
-
26
23
  end
27
24
 
28
25
  class Response < BaseResponse
29
26
  field :trips, [TimetableTrip], key: 'TRIP'
30
27
  end
31
-
32
28
  end
33
29
  end
@@ -1,10 +1,8 @@
1
1
  class Gillbus
2
2
  module GetTripSeats
3
-
4
3
  Gillbus.register self, :get_trip_seats
5
4
 
6
5
  class Request < BaseRequest
7
-
8
6
  def path; '/online2/getTripSeats' end
9
7
 
10
8
  # tripId
@@ -12,11 +10,15 @@ class Gillbus
12
10
  attr_accessor :trip_id
13
11
 
14
12
  # carriageId (не обязательный)
15
- # ИД вагона, для которого нужно получить карту мест. По- умолчанию первый попавшийся. Только для железнодорожных рейсов.
13
+ # ИД вагона, для которого нужно получить карту мест.
14
+ # По- умолчанию первый попавшийся.
15
+ # Только для железнодорожных рейсов.
16
16
  attr_accessor :carriage_id
17
17
 
18
18
  # backCarriageId (не обязательный)
19
- # ИД вагона обратного рейса, для которого нужно получить карту мест. По-умолчанию первый попавшийся. Только для железнодорожных рейсов.
19
+ # ИД вагона обратного рейса, для которого нужно получить карту мест.
20
+ # По-умолчанию первый попавшийся.
21
+ # Только для железнодорожных рейсов.
20
22
  attr_accessor :back_carriage_id
21
23
 
22
24
  # segment0carriageId...segmentNcarriageId (не обязательный)
@@ -27,14 +29,12 @@ class Gillbus
27
29
  compact(
28
30
  tripId: trip_id,
29
31
  carriageId: carriage_id,
30
- backCarriageId: back_carriage_id
32
+ backCarriageId: back_carriage_id,
31
33
  )
32
34
  end
33
-
34
35
  end
35
36
 
36
37
  class Response < BaseResponse
37
-
38
38
  SEGMENT_REGEX = /SEGMENT_(?<number>\d+)_SEAT/
39
39
 
40
40
  field :seats, [Seat], key: 'SEAT'
@@ -47,15 +47,12 @@ class Gillbus
47
47
 
48
48
  max_segment_number = val.keys.max.match(SEGMENT_REGEX)[:number].to_i
49
49
 
50
- [*0..max_segment_number].inject({}) do |hash, segment|
50
+ [*0..max_segment_number].each_with_object({}) do |segment, hash|
51
51
  seats = val["SEGMENT_#{segment}_SEAT"].to_a
52
52
  hash[segment] = seats.map { |seat| Seat.parse(seat) }.presence || []
53
- hash
54
53
  end
55
54
  end
56
55
  end
57
-
58
56
  end
59
-
60
57
  end
61
58
  end
@@ -3,7 +3,6 @@ class Gillbus
3
3
  # Возвращает список остановочных пунктов следования рейса
4
4
  # Если список остановочных пунктов отсутствует, то ресурс не предоставляет возможности получения маршрута следования.
5
5
  module GetTripSegments
6
-
7
6
  Gillbus.register self, :get_trip_segments
8
7
 
9
8
  class Request < BaseRequest
@@ -21,6 +20,5 @@ class Gillbus
21
20
  class Response < BaseResponse
22
21
  field :points, [Point], key: 'POINT'
23
22
  end
24
-
25
23
  end
26
24
  end
@@ -1,6 +1,5 @@
1
1
  class Gillbus
2
2
  module GetTrips
3
-
4
3
  Gillbus.register self, :get_trips
5
4
 
6
5
  class Request < BaseRequest
@@ -8,6 +7,5 @@ class Gillbus
8
7
  end
9
8
 
10
9
  Response = Gillbus::SearchTrips::Response
11
-
12
10
  end
13
11
  end
@@ -13,7 +13,6 @@ class Gillbus
13
13
  #
14
14
  # MyClass.parse(hash)
15
15
  module Fields
16
-
17
16
  def parser_class
18
17
  if defined? @parser_class
19
18
  @parser_class || Gillbus::Parser
@@ -22,13 +21,14 @@ class Gillbus
22
21
  end
23
22
  end
24
23
 
25
- def parse(doc, instance = new, parent = nil)
24
+ def parse(doc, instance: new, parent: nil, options: {})
26
25
  instance ||= new
27
26
  parser_class.new(
28
27
  doc: doc,
29
28
  instance: instance,
30
29
  fields: field_definitions,
31
- parent: parent
30
+ parent: parent,
31
+ options: options,
32
32
  ).parse
33
33
  instance
34
34
  end
@@ -43,11 +43,9 @@ class Gillbus
43
43
  @fields ||= []
44
44
  end
45
45
 
46
- def field(name, type=:string, key: name.to_s.upcase, root: nil)
47
- field_definitions << {name: name, key: key, type: type, root: root}
46
+ def field(name, type = :string, key: name.to_s.upcase, root: nil)
47
+ field_definitions << { name: name, key: key, type: type, root: root }
48
48
  attr_accessor name
49
49
  end
50
-
51
-
52
50
  end
53
51
  end
@@ -3,17 +3,17 @@ require 'active_support/time'
3
3
 
4
4
  class Gillbus
5
5
  class Parser
6
-
7
6
  attr_accessor :doc
8
7
  attr_accessor :instance
9
8
  attr_accessor :fields
10
9
  attr_accessor :parent
11
10
 
12
- def initialize(instance:, doc:, fields:, parent:)
11
+ def initialize(instance:, doc:, fields:, parent:, options: {})
13
12
  @instance = instance
14
13
  @doc = doc
15
14
  @fields = fields
16
15
  @parent = parent
16
+ @options = options
17
17
  end
18
18
 
19
19
  def parse
@@ -32,12 +32,12 @@ class Gillbus
32
32
  instance
33
33
  end
34
34
 
35
- private
35
+ private
36
36
 
37
37
  def make_one_or_many(type, val)
38
38
  # [:type]
39
39
  if type.is_a? Array
40
- array(val).map {|v| make_one type.first, v }
40
+ array(val).map { |v| make_one type.first, v }
41
41
  # :type
42
42
  else
43
43
  make_one type, val
@@ -47,14 +47,12 @@ class Gillbus
47
47
  def make_one(type, val)
48
48
  return if val.nil?
49
49
  if type.is_a? Class
50
- type.parse(val, nil, instance)
50
+ type.parse(val, instance: nil, parent: instance, options: @options)
51
51
  else
52
52
  send type, val
53
53
  end
54
54
  end
55
55
 
56
- private
57
-
58
56
  # nil => []
59
57
  # [] => []
60
58
  # {} => [{}]
@@ -64,12 +62,12 @@ class Gillbus
64
62
  end
65
63
 
66
64
  def string(val)
67
- return if val == "null"
65
+ return if val == 'null'
68
66
  val
69
67
  end
70
68
 
71
69
  def bool(val)
72
- val == "true"
70
+ val == 'true'
73
71
  end
74
72
 
75
73
  def yesno_bool(val)
@@ -84,21 +82,20 @@ class Gillbus
84
82
  Date.strptime(val, '%d.%m.%Y')
85
83
  end
86
84
 
85
+ # rubocop:disable Style/GuardClause, Style/IfUnlessModifier
87
86
  def time(val)
88
87
  if val =~ /^ ( \d\d:\d\d ) (?: :\d\d )? $/x
89
88
  $1
90
- else
91
- nil
92
89
  end
93
90
  end
94
91
 
95
92
  def datetime(val)
96
- ActiveSupport::TimeZone["Europe/Kiev"].parse(val)
93
+ tz = @options[:timezone] || 'Europe/Kiev'
94
+ ActiveSupport::TimeZone[tz].parse(val)
97
95
  end
98
96
 
99
97
  def decimal(val)
100
98
  BigDecimal.new(val)
101
99
  end
102
-
103
100
  end
104
101
  end