gillbus 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/.ruby-version +1 -0
- data/Gemfile +10 -0
- data/Guardfile +29 -0
- data/LICENSE.txt +22 -0
- data/README.md +140 -0
- data/Rakefile +9 -0
- data/gillbus.gemspec +31 -0
- data/lib/gillbus/base_request.rb +99 -0
- data/lib/gillbus/base_response.rb +43 -0
- data/lib/gillbus/buy_booking.rb +74 -0
- data/lib/gillbus/buy_tickets.rb +36 -0
- data/lib/gillbus/cancel_order.rb +55 -0
- data/lib/gillbus/drivers/faraday_response_file_logger.rb +19 -0
- data/lib/gillbus/find_order.rb +37 -0
- data/lib/gillbus/get_all_cities.rb +24 -0
- data/lib/gillbus/get_cities.rb +34 -0
- data/lib/gillbus/get_countries.rb +24 -0
- data/lib/gillbus/get_dates_new.rb +35 -0
- data/lib/gillbus/get_order_status.rb +28 -0
- data/lib/gillbus/get_order_ticket.rb +62 -0
- data/lib/gillbus/get_required_fields.rb +32 -0
- data/lib/gillbus/get_time_table.rb +33 -0
- data/lib/gillbus/get_trip_seats.rb +61 -0
- data/lib/gillbus/get_trips.rb +13 -0
- data/lib/gillbus/helpers/fields.rb +47 -0
- data/lib/gillbus/helpers/parser.rb +100 -0
- data/lib/gillbus/helpers/update_attrs.rb +15 -0
- data/lib/gillbus/lock_seats.rb +82 -0
- data/lib/gillbus/logout.rb +19 -0
- data/lib/gillbus/parse_error.rb +11 -0
- data/lib/gillbus/reserve_tickets.rb +13 -0
- data/lib/gillbus/search_trips.rb +96 -0
- data/lib/gillbus/session_login.rb +32 -0
- data/lib/gillbus/structs/commission.rb +54 -0
- data/lib/gillbus/structs/item.rb +14 -0
- data/lib/gillbus/structs/passenger_discount.rb +37 -0
- data/lib/gillbus/structs/point.rb +38 -0
- data/lib/gillbus/structs/return_cause.rb +23 -0
- data/lib/gillbus/structs/seat.rb +38 -0
- data/lib/gillbus/structs/segment.rb +161 -0
- data/lib/gillbus/structs/tariff.rb +59 -0
- data/lib/gillbus/structs/ticket.rb +285 -0
- data/lib/gillbus/structs/timetable_segment.rb +51 -0
- data/lib/gillbus/structs/timetable_trip.rb +77 -0
- data/lib/gillbus/structs/trip.rb +164 -0
- data/lib/gillbus/tickets_booking.rb +182 -0
- data/lib/gillbus/unlock_seats.rb +15 -0
- data/lib/gillbus/version.rb +3 -0
- data/lib/gillbus.rb +86 -0
- data/script/example_booking.rb +82 -0
- data/script/example_booking_with_segments.rb +90 -0
- data/script/example_canceling_booking.rb +67 -0
- data/script/example_canceling_reservation.rb +69 -0
- data/script/example_reservation.rb +88 -0
- data/test/buy_booking_test.rb +32 -0
- data/test/buy_tickets_test.rb +12 -0
- data/test/cancel_order_test.rb +12 -0
- data/test/error_test.rb +31 -0
- data/test/find_order_test.rb +24 -0
- data/test/get_cities_test.rb +12 -0
- data/test/get_countries_test.rb +12 -0
- data/test/get_dates_new_test.rb +12 -0
- data/test/get_order_ticket_test.rb +12 -0
- data/test/get_time_table_test.rb +21 -0
- data/test/get_trip_seats_test.rb +40 -0
- data/test/lock_seats_test.rb +70 -0
- data/test/reserve_tickets_test.rb +22 -0
- data/test/responses/buyBooking.xml +9 -0
- data/test/responses/buyTickets.xml +7 -0
- data/test/responses/cancelOrder.xml +8 -0
- data/test/responses/error.xml +1 -0
- data/test/responses/findOrder.xml +296 -0
- data/test/responses/getCities.xml +266 -0
- data/test/responses/getCountries.xml +90 -0
- data/test/responses/getOrderTicket.xml +3 -0
- data/test/responses/getTimeTable.xml +81 -0
- data/test/responses/getTripSeats-one-empty-segment.xml +562 -0
- data/test/responses/getTripSeats-segments.xml +1052 -0
- data/test/responses/getTripSeats.xml +492 -0
- data/test/responses/lockSeats.xml +23 -0
- data/test/responses/reserveTickets.xml +76 -0
- data/test/responses/searchTrips-empty.xml +3 -0
- data/test/responses/searchTrips-prod.xml +193 -0
- data/test/responses/searchTrips-segments-roundtrip.xml +15812 -0
- data/test/responses/searchTrips-segments.xml +808 -0
- data/test/responses/sessionLogin.xml +3 -0
- data/test/responses/ticketsBooking.xml +75 -0
- data/test/responses/very_empty.xml +1 -0
- data/test/search_trips_test.rb +71 -0
- data/test/session_login_test.rb +12 -0
- data/test/test_helper.rb +3 -0
- data/test/tickets_booking_test.rb +16 -0
- metadata +303 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: abd154225fa9cf95e090acd4e225b7793933afe3
|
4
|
+
data.tar.gz: df33244cd12c9948e297301164d27ab7a8c6eb50
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2faa23383a71fe67e11161f9a60b758a8c1020fcf64e0f046c1b2a882eac85ee306d3d46ef72126268a54c79264a621a4a2071bde00119cf07f638ad4fea0e0c
|
7
|
+
data.tar.gz: 0b8b35d7b404a02e9ee6ebcdcf9dbc4c97383c07f3b05cbef6ef5ddfd3fc572d2f3ca53aa2ad626d416cda1347144ac647678fdcbb95d3e91fb829c79b879121
|
data/.gitignore
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
Gemfile.lock
|
7
|
+
InstalledFiles
|
8
|
+
_yardoc
|
9
|
+
coverage
|
10
|
+
doc/
|
11
|
+
lib/bundler/man
|
12
|
+
pkg
|
13
|
+
rdoc
|
14
|
+
spec/reports
|
15
|
+
test/tmp
|
16
|
+
test/version_tmp
|
17
|
+
tmp
|
18
|
+
*.bundle
|
19
|
+
*.so
|
20
|
+
*.o
|
21
|
+
*.a
|
22
|
+
mkmf.log
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.2.4
|
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
guard :minitest do
|
5
|
+
# with Minitest::Unit
|
6
|
+
watch(%r{^test/(.*)\/?test_(.*)\.rb$})
|
7
|
+
watch(%r{^test/(.*)\/?(.*)_test\.rb$})
|
8
|
+
watch(%r{^lib/(.*/)?([^/]+)\.rb$}) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
|
9
|
+
watch(%r{^test/test_helper\.rb$}) { 'test' }
|
10
|
+
|
11
|
+
# with Minitest::Spec
|
12
|
+
# watch(%r{^spec/(.*)_spec\.rb$})
|
13
|
+
# watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
14
|
+
# watch(%r{^spec/spec_helper\.rb$}) { 'spec' }
|
15
|
+
|
16
|
+
# Rails 4
|
17
|
+
# watch(%r{^app/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
|
18
|
+
# watch(%r{^app/controllers/application_controller\.rb$}) { 'test/controllers' }
|
19
|
+
# watch(%r{^app/controllers/(.+)_controller\.rb$}) { |m| "test/integration/#{m[1]}_test.rb" }
|
20
|
+
# watch(%r{^app/views/(.+)_mailer/.+}) { |m| "test/mailers/#{m[1]}_mailer_test.rb" }
|
21
|
+
# watch(%r{^lib/(.+)\.rb$}) { |m| "test/lib/#{m[1]}_test.rb" }
|
22
|
+
# watch(%r{^test/.+_test\.rb$})
|
23
|
+
# watch(%r{^test/test_helper\.rb$}) { 'test' }
|
24
|
+
|
25
|
+
# Rails < 4
|
26
|
+
# watch(%r{^app/controllers/(.*)\.rb$}) { |m| "test/functional/#{m[1]}_test.rb" }
|
27
|
+
# watch(%r{^app/helpers/(.*)\.rb$}) { |m| "test/helpers/#{m[1]}_test.rb" }
|
28
|
+
# watch(%r{^app/models/(.*)\.rb$}) { |m| "test/unit/#{m[1]}_test.rb" }
|
29
|
+
end
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) BUSFOR LLC (2014-2016)
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,140 @@
|
|
1
|
+
# Gillbus
|
2
|
+
|
3
|
+
Gillbus IDS "online2" API wrapper
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'gillbus'
|
10
|
+
|
11
|
+
## Public API
|
12
|
+
|
13
|
+
We're trying hard not to raise exceptions.
|
14
|
+
Each call to Gillbus instance returns response object, which responds to #error?
|
15
|
+
if #error? is true, you can use #error_message and #error_code
|
16
|
+
for exact details
|
17
|
+
|
18
|
+
## Workflow
|
19
|
+
|
20
|
+
* login (sessionLogin/online)
|
21
|
+
* /online2/getCountries
|
22
|
+
* /online2/getCities
|
23
|
+
* /online2/searchTrips
|
24
|
+
* /online2/getTrips
|
25
|
+
* /online2/getTripSeats
|
26
|
+
* /online2/lockSeats
|
27
|
+
* /online2/ticketsBooking
|
28
|
+
* /online2/buyTickets
|
29
|
+
* /online2/getOrderTicket
|
30
|
+
* /online2/logout
|
31
|
+
|
32
|
+
## Quoting API documentation
|
33
|
+
|
34
|
+
* Entering the system
|
35
|
+
/online2/login/online/
|
36
|
+
User authorization
|
37
|
+
skipped as obsolete
|
38
|
+
|
39
|
+
* Entering the system (second way)
|
40
|
+
online2/sessionLogin/online/
|
41
|
+
User authorization
|
42
|
+
|
43
|
+
* Get trips’ schedule
|
44
|
+
/online2/getTimeTable
|
45
|
+
Returns trips schedule
|
46
|
+
|
47
|
+
* Get country list
|
48
|
+
/online2/getCountries
|
49
|
+
Returns available countries’ list
|
50
|
+
|
51
|
+
* Get available localities’ list
|
52
|
+
/online2/getCities
|
53
|
+
Returns available localities’ list
|
54
|
+
|
55
|
+
* Get available departure dates’ list
|
56
|
+
/online2/getDates
|
57
|
+
Returns available departure dates’ list
|
58
|
+
|
59
|
+
* Get parameterized trips’ list
|
60
|
+
/online2/searchTrips
|
61
|
+
Returns parameterized trips’ list
|
62
|
+
|
63
|
+
* Get trips’ list
|
64
|
+
/online2/getTrips
|
65
|
+
Returns trips’ list
|
66
|
+
|
67
|
+
* Get seats' map
|
68
|
+
/online2/getTripSeats
|
69
|
+
Returns seats' map of the vehicle
|
70
|
+
|
71
|
+
* Locks seats for sale
|
72
|
+
/online2/lockSeats
|
73
|
+
Locks seats for sale
|
74
|
+
|
75
|
+
* Unlocks seats for sale
|
76
|
+
/online2/unlockSeats
|
77
|
+
Unlocks seats for sale
|
78
|
+
|
79
|
+
* Postponed (unconfirmed) tickets sale
|
80
|
+
/online2/bookTickets
|
81
|
+
Performs the postponed tickets sale, that waits for the confirmation
|
82
|
+
|
83
|
+
* Postponed tickets sale (second way)
|
84
|
+
/online2/ticketsBooking
|
85
|
+
Performs the postponed tickets sale, that waits for the confirmation
|
86
|
+
|
87
|
+
* Sale confirmation
|
88
|
+
/online2/buyTickets
|
89
|
+
Confirms the earlier postponed tickets sale
|
90
|
+
|
91
|
+
* Get the ticket of the order
|
92
|
+
/online2/getOrderTicket
|
93
|
+
Generates the ticket of the order
|
94
|
+
|
95
|
+
* Reserve the ticket
|
96
|
+
/online2/reserveTickets
|
97
|
+
Makes the ticket reservation
|
98
|
+
|
99
|
+
* Reserved tickets’ search
|
100
|
+
/online2/findBooking
|
101
|
+
Performs parameterized reserved tickets' search
|
102
|
+
|
103
|
+
* "Reserved tickets’ search (second way)"
|
104
|
+
/online2/findReservation
|
105
|
+
Performs parameterized reserved tickets' search
|
106
|
+
|
107
|
+
* Buyout the reserved ticket
|
108
|
+
/online2/buyBooking
|
109
|
+
Buyout the earlier reserved ticket
|
110
|
+
|
111
|
+
* #cancel_order Order cancellation
|
112
|
+
/online2/cancelOrder
|
113
|
+
Cancels the order
|
114
|
+
|
115
|
+
|
116
|
+
* Returns the item, that had been sold
|
117
|
+
/online2/returnPosition
|
118
|
+
Returns the item, that had been previously sold
|
119
|
+
|
120
|
+
* Orders’ search
|
121
|
+
/online2/findOrder
|
122
|
+
Returns found order's data
|
123
|
+
|
124
|
+
* Logout
|
125
|
+
/online2/logout
|
126
|
+
Closes current session
|
127
|
+
|
128
|
+
* Reporting
|
129
|
+
/online2/getReport
|
130
|
+
Outputs the reports in the Microsoft Excel format
|
131
|
+
|
132
|
+
* Get the trips’ list for the date changing
|
133
|
+
/online2/getTripsForChange
|
134
|
+
Returns the list of trips that are like the assigned trip which has booked ticket, but for the different date.
|
135
|
+
|
136
|
+
* Departure date change
|
137
|
+
/online2/changeTripDate
|
138
|
+
Changes the departure date for the passenger
|
139
|
+
|
140
|
+
|
data/Rakefile
ADDED
data/gillbus.gemspec
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'gillbus/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "gillbus"
|
8
|
+
spec.version = Gillbus::VERSION
|
9
|
+
spec.authors = [%q{Alexey "codesnik" Trofimenko}, %q{Kirill Platonov}]
|
10
|
+
spec.email = ["aronaxis@gmail.com", "mail@kirillplatonov.com"]
|
11
|
+
spec.summary = %q{Driver for Gillbus IDS API}
|
12
|
+
# spec.description = %q{gillbus.com}
|
13
|
+
spec.homepage = "http://gillbus.com/"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency 'multi_xml'
|
22
|
+
spec.add_dependency 'faraday'
|
23
|
+
spec.add_dependency 'money'
|
24
|
+
spec.add_dependency 'monetize'
|
25
|
+
spec.add_dependency 'activesupport'
|
26
|
+
|
27
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
28
|
+
spec.add_development_dependency "rake"
|
29
|
+
spec.add_development_dependency "minitest"
|
30
|
+
spec.add_development_dependency "pry"
|
31
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
3
|
+
class Gillbus
|
4
|
+
class BaseRequest
|
5
|
+
|
6
|
+
def initialize(attrs={})
|
7
|
+
attrs.each do |k, v|
|
8
|
+
send "#{k}=", v
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def path
|
13
|
+
raise NotImplementedError, 'you need to define "path" method'
|
14
|
+
end
|
15
|
+
|
16
|
+
def params
|
17
|
+
{}
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def list(items)
|
23
|
+
return if items.nil?
|
24
|
+
Array(items).join(";")
|
25
|
+
end
|
26
|
+
|
27
|
+
def date(date)
|
28
|
+
return if date.nil?
|
29
|
+
date.strftime("%d.%m.%Y")
|
30
|
+
end
|
31
|
+
|
32
|
+
def bool(bool)
|
33
|
+
return if bool.nil?
|
34
|
+
bool ? "1" : "0"
|
35
|
+
end
|
36
|
+
|
37
|
+
def translated_locale(locale)
|
38
|
+
return if locale.nil?
|
39
|
+
{
|
40
|
+
"ru" => "rus",
|
41
|
+
"en" => "lat",
|
42
|
+
"uk" => "ukr",
|
43
|
+
"th" => "tai",
|
44
|
+
"pl" => "pol",
|
45
|
+
|
46
|
+
# temporary, until changed in busfor
|
47
|
+
"ua" => "ukr",
|
48
|
+
}[ locale.to_s ] || locale.to_s
|
49
|
+
end
|
50
|
+
|
51
|
+
MODES = {
|
52
|
+
# 0 – искать все виды транспорта;
|
53
|
+
all: 0,
|
54
|
+
# 1 – искать автобусные рейсы;
|
55
|
+
bus: 1,
|
56
|
+
# 2 - искать такси (только searchTransfersTrips?)
|
57
|
+
taxi: 2,
|
58
|
+
# 3 – искать авиационные рейсы;
|
59
|
+
avia: 3,
|
60
|
+
# 4 – искать авиационные чартерные рейсы;
|
61
|
+
charter: 4,
|
62
|
+
# 6 – рейсы водного транспорта;
|
63
|
+
boat: 6,
|
64
|
+
# 31 – искать авиационные рейсы эконом-класса;
|
65
|
+
avia_economy: 31,
|
66
|
+
# 32 – искать авиационные рейсы бизнес-класса;
|
67
|
+
avia_business: 32,
|
68
|
+
# 51 – искать железнодорожные рейсы;
|
69
|
+
train: 51,
|
70
|
+
# 8 – искать рейсы с пересадками;
|
71
|
+
connections: 8,
|
72
|
+
# 9 – искать рейсы только с пересадками.
|
73
|
+
connections_only: 9,
|
74
|
+
# 13 - автобусно-лодочный микс
|
75
|
+
bus_boat: 13,
|
76
|
+
}
|
77
|
+
|
78
|
+
def modes(items)
|
79
|
+
list(
|
80
|
+
Array(items).map { |item|
|
81
|
+
if item.is_a? Symbol
|
82
|
+
MODES[item] or
|
83
|
+
fail ArgumentError, "unknown search mode #{item.inspect}", caller
|
84
|
+
else
|
85
|
+
item
|
86
|
+
end
|
87
|
+
}
|
88
|
+
)
|
89
|
+
end
|
90
|
+
|
91
|
+
def compact(hash)
|
92
|
+
hash.each do |k,v|
|
93
|
+
hash.delete k if v.nil?
|
94
|
+
end
|
95
|
+
hash
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'multi_xml'
|
2
|
+
|
3
|
+
class Gillbus
|
4
|
+
class BaseResponse
|
5
|
+
|
6
|
+
extend Fields
|
7
|
+
include UpdateAttrs
|
8
|
+
|
9
|
+
attr_accessor :data
|
10
|
+
attr_accessor :session_id
|
11
|
+
|
12
|
+
attr_accessor :error_code
|
13
|
+
attr_accessor :error_message
|
14
|
+
|
15
|
+
def error?
|
16
|
+
! error_code.nil?
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.parse(data, instance=new)
|
20
|
+
# ugly
|
21
|
+
if data["MESSAGE"]
|
22
|
+
instance.error_code = data["MESSAGE"]["CODE"].to_i
|
23
|
+
instance.error_message = data["MESSAGE"]["TEXT"]
|
24
|
+
else
|
25
|
+
super(data, instance)
|
26
|
+
end
|
27
|
+
# for debugging?
|
28
|
+
instance.data = data
|
29
|
+
instance
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.parse_string(xml_string)
|
33
|
+
xml = MultiXml.parse(xml_string)
|
34
|
+
# <DATA/> is a valid response
|
35
|
+
xml.key?("DATA") or return ParseError.new(xml_string)
|
36
|
+
data = xml["DATA"] || {}
|
37
|
+
parse(data)
|
38
|
+
rescue MultiXml::ParseError
|
39
|
+
ParseError.new(xml_string)
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
class Gillbus
|
2
|
+
module BuyBooking
|
3
|
+
|
4
|
+
Gillbus.register self, :buy_booking
|
5
|
+
|
6
|
+
class Request < BaseRequest
|
7
|
+
|
8
|
+
def path; '/online2/buyBooking' end
|
9
|
+
|
10
|
+
# paymentMethod (не обязательный)
|
11
|
+
# Способ оплаты заказа.
|
12
|
+
attr_accessor :payment_method
|
13
|
+
|
14
|
+
# 1 – наличный;
|
15
|
+
METHOD_CASH = 1
|
16
|
+
# 2 – кредитной карточкой;
|
17
|
+
METHOD_CARD = 2
|
18
|
+
# 3 – безналичный;
|
19
|
+
METHOD_NOCASH = 3
|
20
|
+
# 4 – сервисный;
|
21
|
+
METHOD_SERVICE = 4
|
22
|
+
# 5 – эквайринг.
|
23
|
+
METHOD_ACQUIRING = 5
|
24
|
+
# По умолчанию 3.
|
25
|
+
|
26
|
+
# ticketCount
|
27
|
+
# Кол-во выкупаемых билетов. 1..k
|
28
|
+
attr_accessor :ticket_count
|
29
|
+
|
30
|
+
# Номера билетов с порядковым номером
|
31
|
+
attr_accessor :ticket_numbers
|
32
|
+
|
33
|
+
attr_accessor :order_ids
|
34
|
+
|
35
|
+
def params
|
36
|
+
numbers = ticket_numbers.map.with_index do |num, i|
|
37
|
+
[:"ticketNumber#{i}", num]
|
38
|
+
end.to_h
|
39
|
+
|
40
|
+
orders = order_ids.map.with_index do |val, i|
|
41
|
+
[:"orderId#{i}", val]
|
42
|
+
end.to_h
|
43
|
+
|
44
|
+
compact(
|
45
|
+
paymentMethod: payment_method,
|
46
|
+
ticketCount: ticket_count,
|
47
|
+
**numbers,
|
48
|
+
**orders
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
class Response < BaseResponse
|
55
|
+
|
56
|
+
class TicketConfirmation
|
57
|
+
|
58
|
+
extend Fields
|
59
|
+
|
60
|
+
field :number, :int
|
61
|
+
# String. пока не выяснится, в какой таймзоне это значение и зачем
|
62
|
+
field :date
|
63
|
+
field :order_id
|
64
|
+
field :confirmation, :yesno_bool
|
65
|
+
field :position_numbers, [:int], key: 'POSITION_NUMBER'
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
field :ticket, TicketConfirmation
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
class Gillbus
|
2
|
+
module BuyTickets
|
3
|
+
|
4
|
+
Gillbus.register self, :buy_tickets
|
5
|
+
|
6
|
+
class Request < BaseRequest
|
7
|
+
|
8
|
+
def path; '/online2/buyTickets' end
|
9
|
+
|
10
|
+
# orderId
|
11
|
+
# Уникальный ИД заказа, переданный при отложенной продаже.
|
12
|
+
attr_accessor :order_id
|
13
|
+
|
14
|
+
def params
|
15
|
+
{orderId: order_id}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class Response < BaseResponse
|
20
|
+
|
21
|
+
class TicketConfirmation
|
22
|
+
|
23
|
+
extend Fields
|
24
|
+
# String. пока не выяснится, в какой таймзоне это значение и зачем
|
25
|
+
field :date
|
26
|
+
field :order_id
|
27
|
+
field :confirmation, :yesno_bool
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
field :ticket, TicketConfirmation
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
class Gillbus
|
2
|
+
module CancelOrder
|
3
|
+
|
4
|
+
Gillbus.register self, :cancel_order
|
5
|
+
|
6
|
+
class Request < BaseRequest
|
7
|
+
|
8
|
+
def path; '/online2/cancelOrder' end
|
9
|
+
|
10
|
+
# orderNumber
|
11
|
+
# The order number
|
12
|
+
attr_accessor :order_number
|
13
|
+
|
14
|
+
# cancelReason
|
15
|
+
# Cancellation reason
|
16
|
+
attr_accessor :cancel_reason
|
17
|
+
|
18
|
+
def params
|
19
|
+
compact(
|
20
|
+
orderNumber: order_number,
|
21
|
+
cancelReason: cancel_reason,
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
class Response < BaseResponse
|
29
|
+
|
30
|
+
class OrderCancel
|
31
|
+
|
32
|
+
extend Fields
|
33
|
+
|
34
|
+
# The order number
|
35
|
+
field :number
|
36
|
+
|
37
|
+
# The cancellation reason
|
38
|
+
field :reason
|
39
|
+
|
40
|
+
# The flag, which indicates successful order cancellation.
|
41
|
+
field :confirmation, :yesno_bool
|
42
|
+
|
43
|
+
# The request’s performing date
|
44
|
+
# String. FIXME (Kiiv timezone?)
|
45
|
+
field :date
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
field :order_cancel, OrderCancel
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class Gillbus
|
2
|
+
class FaradayResponseFileLogger < Faraday::Middleware
|
3
|
+
|
4
|
+
def initialize(app, dir = '.')
|
5
|
+
@dir = dir
|
6
|
+
super(app)
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
path = env.url.path
|
11
|
+
@app.call(env).on_complete do |environment|
|
12
|
+
sanitized_path = path.gsub(/[^A-Za-z0-9_-]+/, '_').gsub(/^_|_$/, '')
|
13
|
+
sanitized_path = '_' if sanitized_path == ''
|
14
|
+
File.write(@dir + '/' + sanitized_path, env.body) if env.body != ''
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
class Gillbus
|
2
|
+
module FindOrder
|
3
|
+
|
4
|
+
Gillbus.register self, :find_order
|
5
|
+
|
6
|
+
class Request < BaseRequest
|
7
|
+
|
8
|
+
def path; '/online2/findOrder' end
|
9
|
+
|
10
|
+
# orderId
|
11
|
+
# Уникальный ИД заказа, переданный при отложенной продаже.
|
12
|
+
attr_accessor :order_id
|
13
|
+
|
14
|
+
# orderNumber
|
15
|
+
# Номер заказа полученный при создании отложенной продажи.
|
16
|
+
attr_accessor :order_number
|
17
|
+
|
18
|
+
# Язык формирования данных.
|
19
|
+
attr_accessor :locale
|
20
|
+
|
21
|
+
def params
|
22
|
+
compact(
|
23
|
+
orderId: order_id,
|
24
|
+
orderNumber: order_number,
|
25
|
+
locale: translated_locale(locale),
|
26
|
+
)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
class Response < BaseResponse
|
32
|
+
field :tickets, [Ticket], key: 'TICKET'
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class Gillbus
|
2
|
+
module GetAllCities
|
3
|
+
|
4
|
+
Gillbus.register self, :get_all_cities
|
5
|
+
|
6
|
+
class Request < BaseRequest
|
7
|
+
def path; '/online2/getAllCities' end
|
8
|
+
end
|
9
|
+
|
10
|
+
class City
|
11
|
+
extend Fields
|
12
|
+
include UpdateAttrs
|
13
|
+
field :id
|
14
|
+
field :name
|
15
|
+
field :country_id
|
16
|
+
field :country_name
|
17
|
+
end
|
18
|
+
|
19
|
+
class Response < BaseResponse
|
20
|
+
field :cities, [City], key: 'CITY'
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|