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.