rthbound-suitcase 1.7.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/CHANGELOG.md +17 -0
- data/Gemfile +3 -0
- data/README.md +83 -0
- data/Rakefile +13 -0
- data/examples/hash_adapter.rb +15 -0
- data/examples/hotel_image_db.rb +24 -0
- data/examples/redis_adapter.rb +29 -0
- data/lib/suitcase.rb +16 -0
- data/lib/suitcase/car_rental.rb +57 -0
- data/lib/suitcase/codes.rb +5 -0
- data/lib/suitcase/configuration.rb +29 -0
- data/lib/suitcase/core_ext/string.rb +13 -0
- data/lib/suitcase/hotel.rb +355 -0
- data/lib/suitcase/hotel/amenity.rb +46 -0
- data/lib/suitcase/hotel/bed_type.rb +21 -0
- data/lib/suitcase/hotel/cache.rb +52 -0
- data/lib/suitcase/hotel/ean_exception.rb +35 -0
- data/lib/suitcase/hotel/helpers.rb +198 -0
- data/lib/suitcase/hotel/image.rb +19 -0
- data/lib/suitcase/hotel/location.rb +67 -0
- data/lib/suitcase/hotel/nightly_rate.rb +14 -0
- data/lib/suitcase/hotel/payment_option.rb +41 -0
- data/lib/suitcase/hotel/reservation.rb +15 -0
- data/lib/suitcase/hotel/room.rb +138 -0
- data/lib/suitcase/hotel/session.rb +7 -0
- data/lib/suitcase/hotel/surcharge.rb +23 -0
- data/lib/suitcase/version.rb +3 -0
- data/rthbound-suitcase.gemspec +30 -0
- data/test/car_rentals/car_rental_test.rb +30 -0
- data/test/hotels/amenity_test.rb +23 -0
- data/test/hotels/caching_test.rb +42 -0
- data/test/hotels/ean_exception_test.rb +24 -0
- data/test/hotels/helpers_test.rb +52 -0
- data/test/hotels/hotel_location_test.rb +23 -0
- data/test/hotels/hotel_test.rb +112 -0
- data/test/hotels/image_test.rb +20 -0
- data/test/hotels/payment_option_test.rb +15 -0
- data/test/hotels/reservation_test.rb +15 -0
- data/test/hotels/room_test.rb +50 -0
- data/test/hotels/session_test.rb +14 -0
- data/test/keys.rb +43 -0
- data/test/minitest_helper.rb +29 -0
- data/test/support/fake_response.rb +13 -0
- metadata +220 -0
@@ -0,0 +1,23 @@
|
|
1
|
+
require "minitest_helper"
|
2
|
+
|
3
|
+
describe Suitcase::Hotel::Location do
|
4
|
+
before :each do
|
5
|
+
@location = Suitcase::Hotel::Location.new({})
|
6
|
+
end
|
7
|
+
|
8
|
+
[:destination_id, :province, :country, :country_code, :city, :type,
|
9
|
+
:active].each do |accessor|
|
10
|
+
it "has an accessor for #{accessor}" do
|
11
|
+
@location.must_respond_to(accessor)
|
12
|
+
@location.must_respond_to((accessor.to_s + "=").to_sym)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe ".find" do
|
17
|
+
it "returns an Array of Locations" do
|
18
|
+
locations = Suitcase::Hotel::Location.find(destination_string: "Lond")
|
19
|
+
locations.must_be_kind_of(Array)
|
20
|
+
locations.first.must_be_kind_of(Suitcase::Hotel::Location)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
require "minitest_helper"
|
2
|
+
|
3
|
+
describe Suitcase::Hotel do
|
4
|
+
before :each do
|
5
|
+
@hotel = Suitcase::Hotel.find(id: 123904)
|
6
|
+
end
|
7
|
+
|
8
|
+
[:id, :name, :address, :city, :amenities, :masked_amenities, :country_code,
|
9
|
+
:high_rate, :low_rate, :longitude, :latitude, :rating, :postal_code,
|
10
|
+
:images, :nightly_rate_total, :property_description, :number_of_floors,
|
11
|
+
:number_of_rooms, :deep_link, :tripadvisor_rating].each do |attribute|
|
12
|
+
it "has an attr_accessor for #{attribute}" do
|
13
|
+
@hotel.must_respond_to(attribute)
|
14
|
+
@hotel.must_respond_to((attribute.to_s + "=").to_sym)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe ".find" do
|
19
|
+
it "returns a single Hotel if passed an ID" do
|
20
|
+
@hotel.must_be_kind_of(Suitcase::Hotel)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "returns multiple Hotels if a location is passed in" do
|
24
|
+
hotels = Suitcase::Hotel.find(location: "London, UK")
|
25
|
+
hotels.must_be_kind_of(Array)
|
26
|
+
hotels.first.must_be_kind_of(Suitcase::Hotel)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "returns multiple Hotels if a destination ID is passed in" do
|
30
|
+
hotels = Suitcase::Hotel.find(destination_id: "58870F43-9215-4662-BAA1-CC9A20FEC4F1")
|
31
|
+
hotels.must_be_kind_of(Array)
|
32
|
+
hotels.first.must_be_kind_of(Suitcase::Hotel)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "returns multiple Hotels if multiple ID's are passed in" do
|
36
|
+
hotels = Suitcase::Hotel.find(ids: [123904, 191937, 220166])
|
37
|
+
hotels.must_be_kind_of(Array)
|
38
|
+
hotels.first.must_be_kind_of(Suitcase::Hotel)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "returns an Array with a single Hotel if an Array with a single ID is passed in" do
|
42
|
+
hotels = Suitcase::Hotel.find(ids: [123904])
|
43
|
+
hotels.count.must_equal(1)
|
44
|
+
hotels.first.must_be_kind_of(Suitcase::Hotel)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "sets a recovery attribute on the raised error when the location is not specific enough" do
|
48
|
+
begin
|
49
|
+
Suitcase::Hotel.find(location: "Mexico")
|
50
|
+
rescue Suitcase::Hotel::EANException => e
|
51
|
+
e.recoverable?.must_equal(true) if e.type == :multiple_locations
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
it "sets the error type when the location is not specific enough" do
|
56
|
+
begin
|
57
|
+
Suitcase::Hotel.find(location: "Mexico")
|
58
|
+
rescue Suitcase::Hotel::EANException => e
|
59
|
+
e.type.must_equal(:multiple_locations)
|
60
|
+
e.recovery.must_be_kind_of(Hash)
|
61
|
+
e.recovery[:alternate_locations].must_be_kind_of(Array)
|
62
|
+
e.recovery[:alternate_locations].first.must_be_kind_of(Suitcase::Hotel::Location)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "#images" do
|
68
|
+
it "correctly gets the URLs of the images" do
|
69
|
+
images = @hotel.images
|
70
|
+
images.must_be_kind_of(Array)
|
71
|
+
images.map { |image| URI.parse(image.url) }
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe "#thumbnail_url" do
|
76
|
+
it "returns the first image's thumbnail URL" do
|
77
|
+
@hotel.thumbnail_url.must_equal @hotel.images.first.thumbnail_url
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe "#rooms" do
|
82
|
+
before do
|
83
|
+
@info = {
|
84
|
+
arrival: "1/1/2013",
|
85
|
+
departure: "1/8/2013"
|
86
|
+
}
|
87
|
+
@rooms = @hotel.rooms(@info)
|
88
|
+
end
|
89
|
+
|
90
|
+
it "returns an Array of available Rooms" do
|
91
|
+
@rooms.must_be_kind_of(Array)
|
92
|
+
end
|
93
|
+
|
94
|
+
it "each room must contain a cancellation policy" do
|
95
|
+
@rooms.each do |r|
|
96
|
+
r.cancellation_policy.wont_be_nil
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
it "each room must contain the non_refundable option" do
|
101
|
+
@rooms.each do |r|
|
102
|
+
r.non_refundable.wont_be_nil
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
it "each room must contain the deposit_required" do
|
107
|
+
@rooms.each do |r|
|
108
|
+
r.deposit_required.wont_be_nil
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "minitest_helper"
|
2
|
+
|
3
|
+
describe Suitcase::Image do
|
4
|
+
before :each do
|
5
|
+
@image = Suitcase::Hotel.find(id: 123904).images.first
|
6
|
+
end
|
7
|
+
|
8
|
+
[:url, :id, :caption, :height, :width, :thumbnail_url, :name].each do |meth|
|
9
|
+
it "has an accessor for #{meth}" do
|
10
|
+
@image.must_respond_to(meth)
|
11
|
+
@image.must_respond_to((meth.to_s + "=").to_sym)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#url" do
|
16
|
+
it "returns a valid URL" do
|
17
|
+
URI.parse(@image.url).must_be_kind_of(URI)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require "minitest_helper"
|
2
|
+
|
3
|
+
describe Suitcase::Hotel::PaymentOption do
|
4
|
+
before :each do
|
5
|
+
@info = { currency_code: "USD" }
|
6
|
+
end
|
7
|
+
|
8
|
+
describe ".find" do
|
9
|
+
it "returns an Array of PaymentOption's" do
|
10
|
+
options = Suitcase::Hotel::PaymentOption.find(@info)
|
11
|
+
options.must_be_kind_of(Array)
|
12
|
+
options.first.must_be_kind_of(Suitcase::Hotel::PaymentOption)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require "minitest_helper"
|
2
|
+
|
3
|
+
describe Suitcase::Hotel::Reservation do
|
4
|
+
before :each do
|
5
|
+
@reservation = Suitcase::Hotel::Reservation.new({})
|
6
|
+
end
|
7
|
+
|
8
|
+
it "has a reader for itinerary_id" do
|
9
|
+
@reservation.must_respond_to :itinerary_id
|
10
|
+
end
|
11
|
+
|
12
|
+
it "has a reader for confirmation_numbers" do
|
13
|
+
@reservation.must_respond_to :confirmation_numbers
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require "minitest_helper"
|
2
|
+
|
3
|
+
describe Suitcase::Hotel::Room do
|
4
|
+
before :each do
|
5
|
+
@room = Suitcase::Hotel.find(id: 123904).rooms(arrival: Keys::RESERVATION_START_TIME, departure: Keys::RESERVATION_END_TIME).first
|
6
|
+
end
|
7
|
+
|
8
|
+
%w(arrival departure rate_code room_type_code supplier_type tax_rate
|
9
|
+
non_refundable occupancy quoted_occupancy min_guest_age total surcharge_total
|
10
|
+
average_base_rate average_base_rate average_rate max_nightly_rate
|
11
|
+
currency_code value_adds room_type_description price_breakdown total_price
|
12
|
+
average_nightly_rate promo rate_key hotel_id supplier_type bed_types
|
13
|
+
rooms).each do |attribute|
|
14
|
+
it "has an attr_accessor for #{attribute}" do
|
15
|
+
@room.must_respond_to attribute.to_sym
|
16
|
+
@room.must_respond_to (attribute + "=").to_sym
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#reserve!" do
|
21
|
+
before :each do
|
22
|
+
@info = { email: Keys::SENDING_EMAIL,
|
23
|
+
first_name: "Walter",
|
24
|
+
last_name: "Nelson",
|
25
|
+
home_phone: "3831039402",
|
26
|
+
payment_option: Keys::SUITCASE_PAYMENT_OPTION, # Visa
|
27
|
+
credit_card_number: Keys::CREDIT_CARD_NUMBER_TESTING,
|
28
|
+
credit_card_verification_code: Keys::CREDIT_CARD_CVV_TESTING, # CVV
|
29
|
+
credit_card_expiration_date: Keys::CREDIT_CARD_EXPIRATION_DATE_TESTING,
|
30
|
+
address1: "travelnow", # for testing
|
31
|
+
address2: "Apt. 4A",
|
32
|
+
city: "Boston",
|
33
|
+
province: "MA",
|
34
|
+
country: "US",
|
35
|
+
postal_code: "02111" }
|
36
|
+
@room.rooms[0][:bed_type] = @room.bed_types[0]
|
37
|
+
@room.rooms[0][:smoking_preference] = "NS"
|
38
|
+
end
|
39
|
+
|
40
|
+
it "returns a Suitcase::Reservation" do
|
41
|
+
reservation = @room.reserve!(@info)
|
42
|
+
reservation.must_be_kind_of(Suitcase::Hotel::Reservation)
|
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
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require "minitest_helper"
|
2
|
+
|
3
|
+
describe Suitcase::Hotel::Session do
|
4
|
+
before :each do
|
5
|
+
@session = Suitcase::Hotel::Session.new
|
6
|
+
end
|
7
|
+
|
8
|
+
[:id, :ip_address, :user_agent, :locale, :currency_code].each do |accessor|
|
9
|
+
it "has an accessor for #{accessor}" do
|
10
|
+
@session.must_respond_to(accessor)
|
11
|
+
@session.must_respond_to((accessor.to_s + "=").to_sym)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/test/keys.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# Suitcase::Configuration.hotel_api_key = "your_api_key_here"
|
2
|
+
# Suitcase::Configuration.hotel_cid = "your_cid_here"
|
3
|
+
# Suitcase::Configuration.hotel_shared_secret = "your_shared_secret_here"
|
4
|
+
# Suitcase::Configuration.use_signature_auth = true
|
5
|
+
|
6
|
+
# Or configure with a block:
|
7
|
+
|
8
|
+
Suitcase.configure do |config|
|
9
|
+
config.hotel_api_key = ""
|
10
|
+
config.hotel_cid = ""
|
11
|
+
|
12
|
+
config.hotwire_api_key = ""
|
13
|
+
# config.hotel_shared_secret = "none"
|
14
|
+
# config.use_signature_auth = false
|
15
|
+
end
|
16
|
+
|
17
|
+
module Keys
|
18
|
+
RESERVATION_START_TIME = Chronic.parse("1 week from now").strftime("%m/%d/%Y")
|
19
|
+
RESERVATION_END_TIME = Chronic.parse("2 weeks from now").strftime("%m/%d/%Y")
|
20
|
+
|
21
|
+
SUITCASE_PAYMENT_OPTION = Suitcase::Hotel::PaymentOption.find(currency_code: "USD").find { |po| po.name =~ /Master/ }
|
22
|
+
CREDIT_CARD_NUMBER_TESTING = "5401999999999999"
|
23
|
+
CREDIT_CARD_CVV_TESTING = "123"
|
24
|
+
CREDIT_CARD_EXPIRATION_DATE_TESTING = "2014/03/01"
|
25
|
+
|
26
|
+
SENDING_EMAIL = "testemail@gmail.com"
|
27
|
+
|
28
|
+
VALID_RESERVATION_INFO = {
|
29
|
+
email: "testemail@gmail.com",
|
30
|
+
first_name: "Test Booking",
|
31
|
+
last_name: "Test Booking",
|
32
|
+
home_phone: "1231231234",
|
33
|
+
payment_option: SUITCASE_PAYMENT_OPTION,
|
34
|
+
credit_card_number: CREDIT_CARD_NUMBER_TESTING,
|
35
|
+
credit_card_verification_code: CREDIT_CARD_CVV_TESTING,
|
36
|
+
credit_card_expiration_date: CREDIT_CARD_EXPIRATION_DATE_TESTING,
|
37
|
+
address1: "travelnow",
|
38
|
+
city: "Boston",
|
39
|
+
province: "MA",
|
40
|
+
country: "US",
|
41
|
+
postal_code: "01234",
|
42
|
+
}
|
43
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# Testing frameworks
|
2
|
+
require "turn"
|
3
|
+
require "minitest/spec"
|
4
|
+
require "minitest/autorun"
|
5
|
+
require "mocha"
|
6
|
+
|
7
|
+
# For making sure the dates will be valid
|
8
|
+
require "chronic"
|
9
|
+
|
10
|
+
# Debugger
|
11
|
+
require "pry"
|
12
|
+
|
13
|
+
# The gem
|
14
|
+
$: << File.dirname(__FILE__) + "/../lib"
|
15
|
+
$: << File.dirname(__FILE__)
|
16
|
+
require "suitcase"
|
17
|
+
|
18
|
+
# API keys
|
19
|
+
require "keys"
|
20
|
+
|
21
|
+
# Support files
|
22
|
+
require "support/fake_response"
|
23
|
+
|
24
|
+
# Turn configuration
|
25
|
+
Turn.config do |config|
|
26
|
+
config.format = :pretty
|
27
|
+
# config.trace = true
|
28
|
+
config.natural = true
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,220 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rthbound-suitcase
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.7.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Walter Nelson
|
9
|
+
- Tad Hosford
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2012-09-08 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: minitest
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
23
|
+
type: :development
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '0'
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: mocha
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
type: :development
|
40
|
+
prerelease: false
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: turn
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: chronic
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ! '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
type: :development
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
name: rake
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ! '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
type: :development
|
88
|
+
prerelease: false
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: pry
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
99
|
+
requirements:
|
100
|
+
- - ! '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
type: :development
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: json
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
115
|
+
requirements:
|
116
|
+
- - ! '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
type: :runtime
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
123
|
+
requirements:
|
124
|
+
- - ! '>='
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
- !ruby/object:Gem::Dependency
|
128
|
+
name: patron
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
130
|
+
none: false
|
131
|
+
requirements:
|
132
|
+
- - ! '>='
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
135
|
+
type: :runtime
|
136
|
+
prerelease: false
|
137
|
+
version_requirements: !ruby/object:Gem::Requirement
|
138
|
+
none: false
|
139
|
+
requirements:
|
140
|
+
- - ! '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0'
|
143
|
+
description: Ruby library that utilizes the EAN (Expedia.com) API for locating available
|
144
|
+
hotels and the Hotwire API for rental cars.
|
145
|
+
email:
|
146
|
+
- tad@isotope11.com
|
147
|
+
executables: []
|
148
|
+
extensions: []
|
149
|
+
extra_rdoc_files: []
|
150
|
+
files:
|
151
|
+
- .gitignore
|
152
|
+
- CHANGELOG.md
|
153
|
+
- Gemfile
|
154
|
+
- README.md
|
155
|
+
- Rakefile
|
156
|
+
- examples/hash_adapter.rb
|
157
|
+
- examples/hotel_image_db.rb
|
158
|
+
- examples/redis_adapter.rb
|
159
|
+
- lib/suitcase.rb
|
160
|
+
- lib/suitcase/car_rental.rb
|
161
|
+
- lib/suitcase/codes.rb
|
162
|
+
- lib/suitcase/configuration.rb
|
163
|
+
- lib/suitcase/core_ext/string.rb
|
164
|
+
- lib/suitcase/hotel.rb
|
165
|
+
- lib/suitcase/hotel/amenity.rb
|
166
|
+
- lib/suitcase/hotel/bed_type.rb
|
167
|
+
- lib/suitcase/hotel/cache.rb
|
168
|
+
- lib/suitcase/hotel/ean_exception.rb
|
169
|
+
- lib/suitcase/hotel/helpers.rb
|
170
|
+
- lib/suitcase/hotel/image.rb
|
171
|
+
- lib/suitcase/hotel/location.rb
|
172
|
+
- lib/suitcase/hotel/nightly_rate.rb
|
173
|
+
- lib/suitcase/hotel/payment_option.rb
|
174
|
+
- lib/suitcase/hotel/reservation.rb
|
175
|
+
- lib/suitcase/hotel/room.rb
|
176
|
+
- lib/suitcase/hotel/session.rb
|
177
|
+
- lib/suitcase/hotel/surcharge.rb
|
178
|
+
- lib/suitcase/version.rb
|
179
|
+
- rthbound-suitcase.gemspec
|
180
|
+
- test/car_rentals/car_rental_test.rb
|
181
|
+
- test/hotels/amenity_test.rb
|
182
|
+
- test/hotels/caching_test.rb
|
183
|
+
- test/hotels/ean_exception_test.rb
|
184
|
+
- test/hotels/helpers_test.rb
|
185
|
+
- test/hotels/hotel_location_test.rb
|
186
|
+
- test/hotels/hotel_test.rb
|
187
|
+
- test/hotels/image_test.rb
|
188
|
+
- test/hotels/payment_option_test.rb
|
189
|
+
- test/hotels/reservation_test.rb
|
190
|
+
- test/hotels/room_test.rb
|
191
|
+
- test/hotels/session_test.rb
|
192
|
+
- test/keys.rb
|
193
|
+
- test/minitest_helper.rb
|
194
|
+
- test/support/fake_response.rb
|
195
|
+
homepage: http://github.com/rthbound/suitcase
|
196
|
+
licenses: []
|
197
|
+
post_install_message:
|
198
|
+
rdoc_options: []
|
199
|
+
require_paths:
|
200
|
+
- lib
|
201
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
202
|
+
none: false
|
203
|
+
requirements:
|
204
|
+
- - ! '>='
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: '0'
|
207
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
208
|
+
none: false
|
209
|
+
requirements:
|
210
|
+
- - ! '>='
|
211
|
+
- !ruby/object:Gem::Version
|
212
|
+
version: '0'
|
213
|
+
requirements: []
|
214
|
+
rubyforge_project:
|
215
|
+
rubygems_version: 1.8.24
|
216
|
+
signing_key:
|
217
|
+
specification_version: 3
|
218
|
+
summary: Locates available hotels and rental cars through Expedia and Hotwire. This
|
219
|
+
is a fork of Walter Nelson's gem - suitcase
|
220
|
+
test_files: []
|