eps-rapid 1.0.0 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.MD +10 -0
- data/README.md +3 -2
- data/lib/eps-rapid/client.rb +18 -9
- data/lib/eps-rapid/content.rb +4 -4
- data/lib/eps-rapid/manage_booking.rb +5 -5
- data/lib/eps-rapid/notifications.rb +2 -2
- data/lib/eps-rapid/version.rb +1 -1
- data/lib/eps-rapid.rb +2 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e74a7d9580ae563ef8d367ce748691c80fdde1ec01e7849466d8fdc2d7fcb3e
|
4
|
+
data.tar.gz: 4aa354de65648601c5eca059b1429d2ef8ced7e3299ba8b006f1eda1a63f0610
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 86d9efda010d3c6cd963b50cef0e7bd5ff50e9361e78f028a5a19885e64aee977bf5b5b2494a87274d861e979f909fe912ce838ca6aa509e6bf5cb7ee49488b5
|
7
|
+
data.tar.gz: bde4281965bd918dd31ca578edd4a3f017cc2cb3c3895365589df8a6d6435356499e0b679030e3ff91dda0908af2f7ff8a656c00e7d521c637f1fd5032dc3340
|
data/CHANGELOG.MD
CHANGED
@@ -18,3 +18,13 @@
|
|
18
18
|
- Move recommendation rate from Shopping to Recommendations class(#recommendation-resource)
|
19
19
|
# Removed
|
20
20
|
- Remove redundant methods get_by_link & post_by_link form client(#booking-resource)
|
21
|
+
### Version 1.0.1
|
22
|
+
# Changed
|
23
|
+
- add compatibility with ruby 3.0.0
|
24
|
+
### Version 1.1.0
|
25
|
+
# Added
|
26
|
+
- add request and response logging
|
27
|
+
- 204 responses returns hash
|
28
|
+
### Version 1.1.1
|
29
|
+
# Patched
|
30
|
+
- support for multi-value params, i.e. `property_id: [1234, 2345]` is translated to `property_id=1234&property_id=2345`
|
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# eps-rapid
|
2
|
-
Ruby gem for the eps-rapid 2.4 API
|
2
|
+
Ruby gem for the eps-rapid 2.4 and 3 API
|
3
3
|
|
4
4
|
## Installation
|
5
5
|
|
@@ -20,6 +20,7 @@ EpsRapid.configure do |c|
|
|
20
20
|
c.secret_key = 'YOUR_SECRET_KEY'
|
21
21
|
c.base_path = 'BASE_PATH'
|
22
22
|
c.language = 'en-US'
|
23
|
+
c.logger = Logger.new(nil)
|
23
24
|
end
|
24
25
|
```
|
25
26
|
Base path depends of environment and can be `https://test.ean.com/2.4` or `https://api.ean.com/2.4`
|
@@ -128,7 +129,7 @@ The EPS Rapid Shopping API provides you with access to live rates and availabili
|
|
128
129
|
https://developer.expediapartnersolutions.com/documentation/rapid-shopping-docs-2-4/
|
129
130
|
#### Methods
|
130
131
|
```ruby
|
131
|
-
EpsRapid::
|
132
|
+
EpsRapid::Shopping.availability(occupancy: '2-9,4;2-8,6', property_id: '12345,567899', country_code: 'US', sales_environment: 'hotel_package', sales_channel: 'website', checkin: '2021-05-01', checkout: '2021-05-03', currency: 'USD', rate_plan_count: '1')
|
132
133
|
```
|
133
134
|
Returns rates on available room types for specified properties (maximum of 250 properties per request). The response includes rate details such as promos, whether the rate is refundable, cancellation penalties and a full price breakdown to meet the price display requirements for your market.
|
134
135
|
Note: If there are no available rooms, the response will be an empty array.
|
data/lib/eps-rapid/client.rb
CHANGED
@@ -7,7 +7,7 @@ require 'json'
|
|
7
7
|
module EpsRapid
|
8
8
|
class Client
|
9
9
|
class << self
|
10
|
-
def get(path,
|
10
|
+
def get(path, params)
|
11
11
|
uri = generate_uri(path, params)
|
12
12
|
req = Net::HTTP::Get.new(uri)
|
13
13
|
test_header, customer_ip_header = additional_headers(params)
|
@@ -15,7 +15,7 @@ module EpsRapid
|
|
15
15
|
fetch_data(uri, req, test_header, customer_ip_header)
|
16
16
|
end
|
17
17
|
|
18
|
-
def post(path, body,
|
18
|
+
def post(path, body, params)
|
19
19
|
uri = generate_uri(path, params)
|
20
20
|
req = Net::HTTP::Post.new(uri)
|
21
21
|
req.body = body.to_json
|
@@ -24,16 +24,17 @@ module EpsRapid
|
|
24
24
|
fetch_data(uri, req, test_header, customer_ip_header)
|
25
25
|
end
|
26
26
|
|
27
|
-
def put(path, body = {},
|
27
|
+
def put(path, body = {}, params)
|
28
28
|
uri = generate_uri(path, params)
|
29
29
|
req = Net::HTTP::Put.new(uri)
|
30
30
|
req.body = body.to_json
|
31
|
+
|
31
32
|
test_header, customer_ip_header = additional_headers(params)
|
32
33
|
|
33
34
|
fetch_data(uri, req, test_header, customer_ip_header)
|
34
35
|
end
|
35
36
|
|
36
|
-
def delete(path,
|
37
|
+
def delete(path, params)
|
37
38
|
uri = generate_uri(path, params)
|
38
39
|
req = Net::HTTP::Delete.new(uri)
|
39
40
|
test_header, customer_ip_header = additional_headers(params)
|
@@ -43,23 +44,25 @@ module EpsRapid
|
|
43
44
|
|
44
45
|
private
|
45
46
|
|
46
|
-
def generate_uri(path,
|
47
|
+
def generate_uri(path, params)
|
47
48
|
uri = URI("#{EpsRapid.base_path}/#{path}")
|
48
49
|
params.merge!({ language: EpsRapid.language })
|
49
50
|
transformed_params = transform_params(params)
|
50
|
-
transformed_params.
|
51
|
+
transformed_params.reject { |k,_| k == :customer_ip }
|
51
52
|
uri.query = URI.encode_www_form(transformed_params) unless path.include?('token')
|
52
53
|
|
53
54
|
uri
|
54
55
|
end
|
55
56
|
|
56
|
-
def transform_params(
|
57
|
+
def transform_params(params)
|
57
58
|
params.each do |k, v|
|
58
59
|
params[k] =
|
59
60
|
if k == :occupancy
|
60
61
|
v.to_s.tr(' ', '').split(';')
|
61
|
-
|
62
|
+
elsif v.is_a?(String) || v.is_a?(Symbol) || v.is_a?(Integer)
|
62
63
|
v.to_s.tr(' ', '').split(',')
|
64
|
+
else
|
65
|
+
v
|
63
66
|
end
|
64
67
|
end
|
65
68
|
end
|
@@ -78,13 +81,15 @@ module EpsRapid
|
|
78
81
|
req['Customer-Ip'] = customer_ip if customer_ip != ''
|
79
82
|
req['Test'] = test_header if test_header != ''
|
80
83
|
|
84
|
+
logger.debug("Request: #{uri} headers=(#{req.to_hash}): body=(#{req.body})")
|
81
85
|
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
|
86
|
+
logger.debug("Response: #{response.code.to_i} headers=(#{response.to_hash}): body=(#{response.body})")
|
82
87
|
|
83
88
|
case response.code.to_i
|
84
89
|
when HttpStatusCodes::HTTP_OK_CODE, HttpStatusCodes::HTTP_CREATED_CODE
|
85
90
|
JSON.parse(response.body)
|
86
91
|
when HttpStatusCodes::HTTP_NO_CONTENT_CODE
|
87
|
-
'
|
92
|
+
{ 'status' => 204 }
|
88
93
|
else
|
89
94
|
raise error_class(response.code), "Code: #{response.code}, Error: #{map_error_messages(response.body)}"
|
90
95
|
end
|
@@ -124,6 +129,10 @@ module EpsRapid
|
|
124
129
|
parsed_errors['message']
|
125
130
|
end
|
126
131
|
end
|
132
|
+
|
133
|
+
def logger
|
134
|
+
EpsRapid.logger || Logger.new(nil)
|
135
|
+
end
|
127
136
|
end
|
128
137
|
end
|
129
138
|
end
|
data/lib/eps-rapid/content.rb
CHANGED
@@ -7,19 +7,19 @@ module EpsRapid
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def self.guest_review(property_id)
|
10
|
-
EpsRapid::Client.get("properties/#{property_id}/guest-reviews")
|
10
|
+
EpsRapid::Client.get("properties/#{property_id}/guest-reviews", {})
|
11
11
|
end
|
12
12
|
|
13
13
|
def self.catalog_file
|
14
|
-
EpsRapid::Client.get('files/properties/catalog')
|
14
|
+
EpsRapid::Client.get('files/properties/catalog', {})
|
15
15
|
end
|
16
16
|
|
17
17
|
def self.content_file
|
18
|
-
EpsRapid::Client.get('files/properties/content')
|
18
|
+
EpsRapid::Client.get('files/properties/content', {})
|
19
19
|
end
|
20
20
|
|
21
21
|
def self.chains
|
22
|
-
EpsRapid::Client.get('chains')
|
22
|
+
EpsRapid::Client.get('chains', {})
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -2,23 +2,23 @@
|
|
2
2
|
|
3
3
|
module EpsRapid
|
4
4
|
class ManageBooking
|
5
|
-
def self.retrieve_bookings(
|
5
|
+
def self.retrieve_bookings(params)
|
6
6
|
EpsRapid::Client.get('itineraries', params)
|
7
7
|
end
|
8
8
|
|
9
|
-
def self.retrieve_booking(itinerary_id,
|
9
|
+
def self.retrieve_booking(itinerary_id, params)
|
10
10
|
EpsRapid::Client.get("itineraries/#{itinerary_id}", params)
|
11
11
|
end
|
12
12
|
|
13
|
-
def self.cancel_held_booking(path,
|
13
|
+
def self.cancel_held_booking(path, params)
|
14
14
|
EpsRapid::Client.delete(path, params)
|
15
15
|
end
|
16
16
|
|
17
|
-
def self.cancel_room(path,
|
17
|
+
def self.cancel_room(path, params)
|
18
18
|
EpsRapid::Client.delete(path, params)
|
19
19
|
end
|
20
20
|
|
21
|
-
def self.change_room(path, body,
|
21
|
+
def self.change_room(path, body, params)
|
22
22
|
EpsRapid::Client.put(path, body, params)
|
23
23
|
end
|
24
24
|
end
|
@@ -3,11 +3,11 @@
|
|
3
3
|
module EpsRapid
|
4
4
|
class Notifications
|
5
5
|
def self.test_notification_event(event)
|
6
|
-
EpsRapid::Client.get("notifications/#{event}")
|
6
|
+
EpsRapid::Client.get("notifications/#{event}", {})
|
7
7
|
end
|
8
8
|
|
9
9
|
def self.undeliverable_notifications
|
10
|
-
EpsRapid::Client.get('notifications/undeliverable')
|
10
|
+
EpsRapid::Client.get('notifications/undeliverable', {})
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
data/lib/eps-rapid/version.rb
CHANGED
data/lib/eps-rapid.rb
CHANGED
@@ -12,10 +12,11 @@ require 'eps-rapid/manage_booking'
|
|
12
12
|
require 'eps-rapid/recommendations'
|
13
13
|
require 'eps-rapid/notifications'
|
14
14
|
require 'digest'
|
15
|
+
require 'logger'
|
15
16
|
|
16
17
|
module EpsRapid
|
17
18
|
class << self
|
18
|
-
attr_accessor :api_key, :secret_key, :base_path, :language
|
19
|
+
attr_accessor :api_key, :secret_key, :base_path, :language, :logger
|
19
20
|
|
20
21
|
def configure
|
21
22
|
yield(self)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eps-rapid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Leonenko
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -91,7 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
91
91
|
- !ruby/object:Gem::Version
|
92
92
|
version: '0'
|
93
93
|
requirements: []
|
94
|
-
rubygems_version: 3.
|
94
|
+
rubygems_version: 3.2.22
|
95
95
|
signing_key:
|
96
96
|
specification_version: 4
|
97
97
|
summary: Ruby wrapper for the expediapartnersolutions.com api
|