/suitcase

Ruby library that utilizes the EAN (Expedia.com) API for locating available hotels and the Hotwire API for locating rental cars.

Primary LanguageRuby

Suitcase

Ruby library that utilizes the EAN (Expedia.com) API for locating available hotels through their version 3 API. It also uses the Hotwire API to search for rental cars.

Installation

Suitcase is a Ruby gem, meaning it can be installed via a simple gem install suitcase. It can also be added to a project's Gemfile with the following line: gem 'suitcase' (or gem 'suitcase', git: "git://github.com/thoughtfusion/suitcase.git", branch: "develop" for the latest updates).

Usage

Hotels

First, configure the library:

Suitcase.configure do |config|
  config.hotel_api_key = "..." # set the Hotel API key from developer.ean.com
  config.hotel_cid = "..." # set the CID from developer.ean.com
  config.cache = Hash.new # set the caching mechanism (see below)
end

Full example:

# Find Hotels in Boston
hotels = Suitcase::Hotel.find(location: "Boston, MA")
# Pick a specific hotel
hotel = hotels[1]
# Get the rooms for a specific date
rooms = hotel.rooms(arrival: "7/1/2013", departure: "7/8/2013", rooms: [{ adults: 1, children_ages: [2, 3] }, { adults: 1, children_ages: [4] }])
# Find a payment option that is compatible with USD
payment_option = Suitcase::Hotel::PaymentOption.find(currency_code: "USD")
# Pick a specific room
room = rooms.first
# Set the bed type on each of the rooms to be ordered
room.rooms.each { |r| r[:bed_type] = room.bed_types.first }
# Reserve the room, with the reservation_hash described on 'User flow'
room.reserve!(reservation_hash)

Caching requests

You can setup a cache to store all API requests that do not contain secure information (i.e. anything but booking requests). A cache needs to be able store deeply nested Hashes and have a method called #[] to access them. An example of setting the cache is given above. Check the examples/hash_adapter.rb for a trivial example of the required methods. A Redis adapter is also in the examples directory.

Using the downloadable images

EAN provides a downloadable image "database" that doesn't require using the image URLs fetched by the API.For example usage of this database, check out examples/hotel_image_db.rb.

Car rentals

Add the required configuration options:

# Or add to your existing configure block
Suitcase.configure do |config|
  config.hotwire_api_key = "..." # set the Hotwire API key
  config.hotwire_linkshare_id = "..." # optionally set the Hotwire linkshare ID
end

Example usage:

# Find all rental cars from the specified dates/times at LAX
rentals = Suitcase::CarRental.find(destination: "LAX", start_date: "7/14/2012", end_date: "7/21/2012", pickup_time: "6:30", dropoff_time: "11:30")
# => [#<Suitcase::CarRental ...>, ...]

Caching is not recommended for car rentals, because they all change so quickly.

Contributing

Running the tests

To set up for the tests, you need to edit the file test/keys.rb with the proper information. Currently, testing reservations is unsupported. You can run the tests with the default rake task by running rake from the command line.

Pull requests/issues

Please submit any useful pull requests through GitHub, preferably to the develop branch in the repo. If you find any bugs, please report them with the issue tracker! Thanks.