suitcase 1.3.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -43,7 +43,7 @@ room.reserve!(reservation_hash)
43
43
 
44
44
  #### Caching requests
45
45
 
46
- 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 should be coming soon.
46
+ 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.
47
47
 
48
48
 
49
49
  ### Car rentals
@@ -66,6 +66,8 @@ rentals = Suitcase::CarRental.find(destination: "LAX", start_date: "7/14/2012",
66
66
  # => [#<Suitcase::CarRental ...>, ...]
67
67
  ```
68
68
 
69
+ Caching is not recommended for car rentals, because they all change so quickly.
70
+
69
71
  Contributing
70
72
  ------------
71
73
 
@@ -75,4 +77,4 @@ To set up for the specs, you need to edit the file `spec/keys.rb` with the prope
75
77
 
76
78
  ### Pull requests/issues
77
79
 
78
- Please submit any useful pull requests through GitHub. If you find any bugs, please report them with the issue tracker! Thanks.
80
+ 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.
@@ -1,9 +1,43 @@
1
1
  module Suitcase
2
2
  class Amenity
3
3
  attr_accessor :id, :description
4
-
4
+
5
+ BITS = { :business_services => 1,
6
+ :fitness_center => 2,
7
+ :hot_tub => 4,
8
+ :internet_access => 8,
9
+ :kids_activities => 16,
10
+ :kitchen => 32,
11
+ :pets_allowed => 64,
12
+ :swimming_pool => 128,
13
+ :restaurant => 256,
14
+ :whirlpool_bath => 1024,
15
+ :breakfast => 2048,
16
+ :babysitting => 4096,
17
+ :jacuzzi => 8192,
18
+ :parking => 16384,
19
+ :room_service => 32768,
20
+ :accessible_path => 65536,
21
+ :accessible_bathroom => 131072,
22
+ :roll_in_shower => 262144,
23
+ :handicapped_parking => 524288,
24
+ :in_room_accessibility => 1048576,
25
+ :deaf_accessiblity => 2097152,
26
+ :braille_or_signage => 4194304,
27
+ :free_airport_shuttle => 8388608,
28
+ :indoor_pool => 16777216,
29
+ :outdoor_pool => 33554432,
30
+ :extended_parking => 67108864,
31
+ :free_parking => 134217728 }
32
+
5
33
  def initialize(info)
6
34
  @id, @description = info[:id], info[:description]
7
35
  end
36
+
37
+ def self.parse_mask(bitmask)
38
+ return nil unless bitmask
39
+
40
+ BITS.select {|amenity, bit| (bitmask & bit) > 0 }.keys
41
+ end
8
42
  end
9
43
  end
@@ -30,8 +30,8 @@ module Suitcase
30
30
  pets: 7,
31
31
  wheelchair_accessible: 8,
32
32
  kitchen: 9 }
33
-
34
- attr_accessor :id, :name, :address, :city, :province, :amenities, :country_code, :high_rate, :low_rate, :longitude, :latitude, :rating, :postal_code, :supplier_type, :images, :nightly_rate_total, :airport_code, :property_category, :confidence_rating, :amenity_mask, :location_description, :short_description, :hotel_in_destination, :proximity_distance, :property_description, :number_of_floors, :number_of_rooms, :deep_link, :tripadvisor_rating
33
+
34
+ attr_accessor :id, :name, :address, :city, :province, :amenities, :masked_amenities, :country_code, :high_rate, :low_rate, :longitude, :latitude, :rating, :postal_code, :supplier_type, :images, :nightly_rate_total, :airport_code, :property_category, :confidence_rating, :amenity_mask, :location_description, :short_description, :hotel_in_destination, :proximity_distance, :property_description, :number_of_floors, :number_of_rooms, :deep_link, :tripadvisor_rating
35
35
 
36
36
  # Public: Initialize a new hotel
37
37
  #
@@ -111,10 +111,14 @@ module Suitcase
111
111
  params.delete(:results)
112
112
  params["destinationString"] = params[:location]
113
113
  params.delete(:location)
114
- amenities = params[:amenities] ? params[:amenities].map { |amenity| AMENITIES[amenity] }.join(",") : nil
114
+
115
+ amenities = params[:amenities] ? params[:amenities].map {|amenity|
116
+ AMENITIES[amenity]
117
+ }.join(",") : nil
118
+ params[:amenities] = amenities if amenities
119
+
115
120
  params["minRate"] = params[:min_rate] if params[:min_rate]
116
121
  params["maxRate"] = params[:max_rate] if params[:max_rate]
117
- params[:amenities] = amenities if amenities
118
122
  hotels = []
119
123
  if Configuration.cache? and Configuration.cache.cached?(:list, params)
120
124
  parsed = Configuration.cache.get_query(:list, params)
@@ -146,6 +150,8 @@ module Suitcase
146
150
  parsed_info[:number_of_rooms] = parsed["HotelInformationResponse"]["HotelDetails"]["numberOfRooms"] if parsed["HotelInformationResponse"]
147
151
  parsed_info[:number_of_floors] = parsed["HotelInformationResponse"]["HotelDetails"]["numberOfFloors"] if parsed["HotelInformationResponse"]
148
152
  parsed_info[:short_description] = summary["shortDescription"]
153
+ parsed_info[:amenity_mask] = summary["amenityMask"]
154
+ parsed_info[:masked_amenities] = Amenity.parse_mask(parsed_info[:amenity_mask])
149
155
  parsed_info
150
156
  end
151
157
 
@@ -52,6 +52,7 @@ module Suitcase
52
52
  params["postalCode"] = info[:postal_code]
53
53
  uri = Room.url :method => "res", :params => params, :include_key => true, :include_cid => true, :secure => true
54
54
  session = Patron::Session.new
55
+ session.timeout = 30000
55
56
  session.base_url = "https://" + uri.host
56
57
  res = session.post uri.request_uri, {}
57
58
  parsed = JSON.parse res.body
@@ -1,3 +1,3 @@
1
1
  module Suitcase
2
- VERSION = "1.3.0"
2
+ VERSION = "1.3.1"
3
3
  end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ module Suitcase
4
+ describe Amenity do
5
+ describe ".parse_mask" do
6
+ context "when provided bitmask is not nil or 0" do
7
+ it "returns an array of symbols representing given amenities" do
8
+ Amenity.parse_mask(5).should == [:business_services, :hot_tub]
9
+ end
10
+ end
11
+
12
+ context "when provided bitmask is 0" do
13
+ it "returns an empty array" do
14
+ Amenity.parse_mask(0).should == []
15
+ end
16
+ end
17
+
18
+ context "when provided bitmask is nil" do
19
+ it "returns nil" do
20
+ Amenity.parse_mask(nil).should == nil
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -38,6 +38,7 @@ describe Suitcase::Hotel do
38
38
  it { should respond_to :address }
39
39
  it { should respond_to :city }
40
40
  it { should respond_to :amenities }
41
+ it { should respond_to :masked_amenities }
41
42
  it { should respond_to :country_code }
42
43
  it { should respond_to :high_rate }
43
44
  it { should respond_to :low_rate }
data/suitcase.gemspec CHANGED
@@ -8,10 +8,8 @@ Gem::Specification.new do |s|
8
8
  s.authors = ["Walter Nelson"]
9
9
  s.email = ["walter.john.nelson@gmail.com"]
10
10
  s.homepage = "http://github.com/thoughtfusion/suitcase"
11
- s.summary = %q{Locates available hotels with the Expedia API}
12
- s.description = %q{Ruby library that utilizes the EAN (Expedia.com) API for locating available hotels (and maybe rental cars and flights someday, too).}
13
-
14
- s.rubyforge_project = "suitcase"
11
+ s.summary = %q{Locates available hotels and rental cars through Expedia and Hotwire}
12
+ s.description = %q{Ruby library that utilizes the EAN (Expedia.com) API for locating available hotels and the Hotwire API for rental cars.}
15
13
 
16
14
  s.files = `git ls-files`.split("\n")
17
15
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -22,6 +20,7 @@ Gem::Specification.new do |s|
22
20
  s.add_development_dependency "rake"
23
21
  s.add_development_dependency "factory_girl"
24
22
  s.add_development_dependency "pry"
23
+
25
24
  s.add_runtime_dependency "json"
26
25
  s.add_runtime_dependency "patron"
27
26
  end
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.3.0
4
+ version: 1.3.1
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-04-25 00:00:00.000000000 Z
12
+ date: 2012-04-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -108,7 +108,7 @@ dependencies:
108
108
  - !ruby/object:Gem::Version
109
109
  version: '0'
110
110
  description: Ruby library that utilizes the EAN (Expedia.com) API for locating available
111
- hotels (and maybe rental cars and flights someday, too).
111
+ hotels and the Hotwire API for rental cars.
112
112
  email:
113
113
  - walter.john.nelson@gmail.com
114
114
  executables: []
@@ -141,17 +141,18 @@ files:
141
141
  - lib/suitcase/hotel/room.rb
142
142
  - lib/suitcase/session.rb
143
143
  - lib/suitcase/version.rb
144
- - spec/caching_spec.rb
145
- - spec/car_rental_spec.rb
146
- - spec/helpers_spec.rb
147
- - spec/hotel_location_spec.rb
148
- - spec/hotels_spec.rb
149
- - spec/images_spec.rb
144
+ - spec/amenity_spec.rb
145
+ - spec/car_rentals/car_rental_spec.rb
146
+ - spec/hotels/caching_spec.rb
147
+ - spec/hotels/helpers_spec.rb
148
+ - spec/hotels/hotel_location_spec.rb
149
+ - spec/hotels/hotels_spec.rb
150
+ - spec/hotels/images_spec.rb
151
+ - spec/hotels/payment_options_spec.rb
152
+ - spec/hotels/reservation_spec.rb
153
+ - spec/hotels/rooms_spec.rb
154
+ - spec/hotels/sessions_spec.rb
150
155
  - spec/keys.rb
151
- - spec/payment_options_spec.rb
152
- - spec/reservation_spec.rb
153
- - spec/rooms_spec.rb
154
- - spec/sessions_spec.rb
155
156
  - spec/spec_helper.rb
156
157
  - suitcase.gemspec
157
158
  homepage: http://github.com/thoughtfusion/suitcase
@@ -173,21 +174,23 @@ required_rubygems_version: !ruby/object:Gem::Requirement
173
174
  - !ruby/object:Gem::Version
174
175
  version: '0'
175
176
  requirements: []
176
- rubyforge_project: suitcase
177
- rubygems_version: 1.8.21
177
+ rubyforge_project:
178
+ rubygems_version: 1.8.19
178
179
  signing_key:
179
180
  specification_version: 3
180
- summary: Locates available hotels with the Expedia API
181
+ summary: Locates available hotels and rental cars through Expedia and Hotwire
181
182
  test_files:
182
- - spec/caching_spec.rb
183
- - spec/car_rental_spec.rb
184
- - spec/helpers_spec.rb
185
- - spec/hotel_location_spec.rb
186
- - spec/hotels_spec.rb
187
- - spec/images_spec.rb
183
+ - spec/amenity_spec.rb
184
+ - spec/car_rentals/car_rental_spec.rb
185
+ - spec/hotels/caching_spec.rb
186
+ - spec/hotels/helpers_spec.rb
187
+ - spec/hotels/hotel_location_spec.rb
188
+ - spec/hotels/hotels_spec.rb
189
+ - spec/hotels/images_spec.rb
190
+ - spec/hotels/payment_options_spec.rb
191
+ - spec/hotels/reservation_spec.rb
192
+ - spec/hotels/rooms_spec.rb
193
+ - spec/hotels/sessions_spec.rb
188
194
  - spec/keys.rb
189
- - spec/payment_options_spec.rb
190
- - spec/reservation_spec.rb
191
- - spec/rooms_spec.rb
192
- - spec/sessions_spec.rb
193
195
  - spec/spec_helper.rb
196
+ has_rdoc:
File without changes
File without changes
File without changes
File without changes
File without changes