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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5fcdfecec2d521bca0534edc175c3d63bce638bade075f6fb0cf1997194464a9
4
- data.tar.gz: 42d0f1ea2b4b540ee29ec526120860cbad9ee4803b17a3845330614dac0d3be2
3
+ metadata.gz: 9e74a7d9580ae563ef8d367ce748691c80fdde1ec01e7849466d8fdc2d7fcb3e
4
+ data.tar.gz: 4aa354de65648601c5eca059b1429d2ef8ced7e3299ba8b006f1eda1a63f0610
5
5
  SHA512:
6
- metadata.gz: 583aebae3bbb10667e34fc5d07833bc3ed970d1c4d4baaced5e99930c3e68f006ca479e5d9033c7a1131f6746dab29736e571078dfac2f73e0b21c149d4e2561
7
- data.tar.gz: d2c5a079b12a22b7117ac1f340c718b2ae945dcc17303522410bd63e0386833017854ccc52c160146e72986dcb4a54e3c18a6e50d417fe710d37b1da32cf208c
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::Content.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
+ 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.
@@ -7,7 +7,7 @@ require 'json'
7
7
  module EpsRapid
8
8
  class Client
9
9
  class << self
10
- def get(path, **params)
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, **params)
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 = {}, **params)
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, **params)
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, **params)
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.delete(:customer_ip)
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(**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
- else
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
- 'Code: 204, No content'
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
@@ -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(**params)
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, **params)
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, **params)
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, **params)
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, **params)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EpsRapid
4
- VERSION = '1.0.0'
4
+ VERSION = '1.1.2'
5
5
  end
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.0.0
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-04-14 00:00:00.000000000 Z
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.0.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