suitcase 1.6.7 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/suitcase/hotel.rb +0 -28
- data/lib/suitcase/hotel/helpers.rb +32 -2
- data/lib/suitcase/hotel/room.rb +19 -5
- data/lib/suitcase/hotel/surcharge.rb +1 -0
- data/lib/suitcase/version.rb +1 -1
- data/test/hotels/room_test.rb +5 -0
- metadata +4 -4
data/lib/suitcase/hotel.rb
CHANGED
@@ -251,34 +251,6 @@ module Suitcase
|
|
251
251
|
images || []
|
252
252
|
end
|
253
253
|
|
254
|
-
# Internal: Raise the errors returned from the response.
|
255
|
-
#
|
256
|
-
# info - The parsed JSON to get the errors from.
|
257
|
-
#
|
258
|
-
# Returns nothing.
|
259
|
-
def self.handle_errors(info)
|
260
|
-
key = info.keys.first
|
261
|
-
if info[key] && info[key]["EanWsError"]
|
262
|
-
message = info[key]["EanWsError"]["presentationMessage"]
|
263
|
-
exception = EANException.new(message)
|
264
|
-
if message =~ /Multiple locations/ && (info = info[key]["LocationInfos"])
|
265
|
-
exception.type = :multiple_locations
|
266
|
-
exception.recovery = {
|
267
|
-
alternate_locations: info["LocationInfo"].map do |info|
|
268
|
-
Location.new(
|
269
|
-
destination_id: info["destinationId"],
|
270
|
-
type: info["type"],
|
271
|
-
city: info["city"],
|
272
|
-
province: info["stateProvinceCode"]
|
273
|
-
)
|
274
|
-
end
|
275
|
-
}
|
276
|
-
end
|
277
|
-
|
278
|
-
raise exception
|
279
|
-
end
|
280
|
-
end
|
281
|
-
|
282
254
|
# Internal: Split an Array of multiple Hotels.
|
283
255
|
#
|
284
256
|
# parsed - The parsed JSON of the Hotels.
|
@@ -58,7 +58,7 @@ module Suitcase
|
|
58
58
|
params["apiKey"] = Configuration.hotel_api_key if builder[:include_key]
|
59
59
|
params["cid"] = (Configuration.hotel_cid ||= 55505) if builder[:include_cid]
|
60
60
|
params["sig"] = generate_signature if Configuration.use_signature_auth?
|
61
|
-
|
61
|
+
|
62
62
|
url = main_url(builder[:secure]) + method.to_s + (builder[:as_form] ? "" : "?")
|
63
63
|
|
64
64
|
params.merge!(build_session_params(builder[:session]))
|
@@ -111,13 +111,43 @@ module Suitcase
|
|
111
111
|
e = EANException.new("An unknown error occured: #{response.body}.")
|
112
112
|
e.type = :unknown
|
113
113
|
end
|
114
|
-
|
114
|
+
|
115
115
|
raise e
|
116
116
|
end
|
117
117
|
|
118
118
|
JSON.parse(Net::HTTP.get_response(uri).body)
|
119
119
|
end
|
120
120
|
|
121
|
+
# Internal: Raise the errors returned from the response.
|
122
|
+
#
|
123
|
+
# info - The parsed JSON to get the errors from.
|
124
|
+
#
|
125
|
+
# Returns nothing.
|
126
|
+
def handle_errors(info)
|
127
|
+
key = info.keys.first
|
128
|
+
if info[key] && info[key]["EanWsError"]
|
129
|
+
message = info[key]["EanWsError"]["presentationMessage"]
|
130
|
+
exception = EANException.new(message)
|
131
|
+
if message =~ /Multiple locations/ && (info = info[key]["LocationInfos"])
|
132
|
+
exception.type = :multiple_locations
|
133
|
+
exception.recovery = {
|
134
|
+
alternate_locations: info["LocationInfo"].map do |info|
|
135
|
+
Location.new(
|
136
|
+
destination_id: info["destinationId"],
|
137
|
+
type: info["type"],
|
138
|
+
city: info["city"],
|
139
|
+
province: info["stateProvinceCode"]
|
140
|
+
)
|
141
|
+
end
|
142
|
+
}
|
143
|
+
elsif message =~ /Data in this request could not be validated/
|
144
|
+
exception.type = :invalid_data
|
145
|
+
end
|
146
|
+
|
147
|
+
raise exception
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
121
151
|
# Internal: Get the base URL based on a Hash of info.
|
122
152
|
#
|
123
153
|
# info - A Hash with only one required key:
|
data/lib/suitcase/hotel/room.rb
CHANGED
@@ -10,9 +10,10 @@ module Suitcase
|
|
10
10
|
:average_nightly_rate, :promo, :arrival, :departure, :rooms,
|
11
11
|
:bed_types, :cancellation_policy, :non_refundable,
|
12
12
|
:guarantee_required, :deposit_required, :surcharges,
|
13
|
-
:rate_description, :raw
|
13
|
+
:rate_description, :raw, :rate_change, :guarantee_only
|
14
14
|
|
15
15
|
extend Helpers
|
16
|
+
include Helpers
|
16
17
|
|
17
18
|
# Internal: Create a new Room from within a Room search query.
|
18
19
|
#
|
@@ -50,12 +51,18 @@ module Suitcase
|
|
50
51
|
params["extension"] = info[:work_phone_extension] if info[:work_phone_extension]
|
51
52
|
params["faxPhone"] = info[:fax_phone] if info[:fax_phone]
|
52
53
|
params["companyName"] = info[:company_name] if info[:company_name]
|
53
|
-
|
54
|
+
if info[:additional_emails]
|
55
|
+
params["emailIntineraryList"] = info[:additional_emails].join(",")
|
56
|
+
end
|
54
57
|
params["creditCardType"] = info[:payment_option].code
|
55
58
|
params["creditCardNumber"] = info[:credit_card_number]
|
56
59
|
params["creditCardIdentifier"] = info[:credit_card_verification_code]
|
57
60
|
expiration_date = Date._parse(info[:credit_card_expiration_date])
|
58
|
-
params["creditCardExpirationMonth"] =
|
61
|
+
params["creditCardExpirationMonth"] = if expiration_date[:mon] < 10
|
62
|
+
"0" + expiration_date[:mon].to_s
|
63
|
+
else
|
64
|
+
expiration_date[:mon].to_s
|
65
|
+
end
|
59
66
|
params["creditCardExpirationYear"] = expiration_date[:year].to_s
|
60
67
|
params["address1"] = info[:address1]
|
61
68
|
params["address2"] = info[:address2] if info[:address2]
|
@@ -73,7 +80,13 @@ module Suitcase
|
|
73
80
|
params["countryCode"] = info[:country]
|
74
81
|
params["postalCode"] = info[:postal_code]
|
75
82
|
|
76
|
-
uri = Room.url
|
83
|
+
uri = Room.url(
|
84
|
+
method: "res",
|
85
|
+
params: params,
|
86
|
+
include_key: true,
|
87
|
+
include_cid: true,
|
88
|
+
secure: true
|
89
|
+
)
|
77
90
|
session = Patron::Session.new
|
78
91
|
session.timeout = 30000
|
79
92
|
session.base_url = "https://" + uri.host
|
@@ -81,7 +94,8 @@ module Suitcase
|
|
81
94
|
parsed = JSON.parse res.body
|
82
95
|
|
83
96
|
reservation_res = parsed["HotelRoomReservationResponse"]
|
84
|
-
|
97
|
+
handle_errors(parsed)
|
98
|
+
surcharges = if @supplier_type == "E" && reservation_res["RateInfo"]["ChargeableRateInfo"]["Surcharges"]
|
85
99
|
[reservation_res["RateInfo"]["ChargeableRateInfo"]["Surcharges"]["Surcharge"]].
|
86
100
|
flatten.map { |s| Surcharge.parse(s) }
|
87
101
|
else
|
data/lib/suitcase/version.rb
CHANGED
data/test/hotels/room_test.rb
CHANGED
@@ -41,5 +41,10 @@ describe Suitcase::Hotel::Room do
|
|
41
41
|
reservation = @room.reserve!(@info)
|
42
42
|
reservation.must_be_kind_of(Suitcase::Hotel::Reservation)
|
43
43
|
end
|
44
|
+
|
45
|
+
it "raises errors on invalid info" do
|
46
|
+
lambda { @room.reserve!(@info.merge(credit_card_number: "")) }.must_raise Suitcase::Hotel::EANException
|
47
|
+
end
|
44
48
|
end
|
45
49
|
end
|
50
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: suitcase
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-08-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
@@ -205,7 +205,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
205
205
|
version: '0'
|
206
206
|
segments:
|
207
207
|
- 0
|
208
|
-
hash:
|
208
|
+
hash: -43637358386494450
|
209
209
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
210
210
|
none: false
|
211
211
|
requirements:
|
@@ -214,7 +214,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
214
214
|
version: '0'
|
215
215
|
segments:
|
216
216
|
- 0
|
217
|
-
hash:
|
217
|
+
hash: -43637358386494450
|
218
218
|
requirements: []
|
219
219
|
rubyforge_project:
|
220
220
|
rubygems_version: 1.8.24
|