suitcase 1.1.6 → 1.1.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ module Suitcase
2
+ module Helpers
3
+ def url(method, params, include_key=true, include_cid=true, secure=false, as_form=false)
4
+ params["apiKey"] = Suitcase::Hotel::API_KEY if include_key
5
+ params["cid"] = Suitcase::Hotel::API_KEY if include_cid
6
+ url = "http#{secure ? "s" : ""}://api.ean.com/ean-services/rs/hotel/v3/#{method.to_s}#{as_form ? "" : "?"}"
7
+ url += params.map { |key, value| "#{key}=#{value}"}.join("&")
8
+ URI.parse(URI.escape(url))
9
+ end
10
+
11
+ def parse_response(uri)
12
+ JSON.parse(Net::HTTP.get_response(uri).body)
13
+ end
14
+ end
15
+ end
@@ -6,6 +6,8 @@ module Suitcase
6
6
  end
7
7
 
8
8
  class Hotel
9
+ extend Suitcase::Helpers
10
+
9
11
  AMENITIES = { pool: 1,
10
12
  fitness_center: 2,
11
13
  restaurant: 3,
@@ -24,19 +26,6 @@ module Suitcase
24
26
  end
25
27
  end
26
28
 
27
- def self.url(action, include_key, include_cid, params, method=:get, secure=false)
28
- url = "http#{secure ? "s" : "" }://api.ean.com/ean-services/rs/hotel/v3/" + action.to_s + "?"
29
- include_key ? params["apiKey"] = Suitcase::Hotel::API_KEY : nil
30
- include_cid ? params["cid"] = "55505" : nil
31
- params.each do |k, v|
32
- url += k.to_s + "=" + v.to_s + "&"
33
- end
34
- if url =~ /^(.+)&$/
35
- url = $1
36
- end
37
- URI.parse URI.escape(url)
38
- end
39
-
40
29
  def self.find(info)
41
30
  if info[:id]
42
31
  find_by_id(info[:id])
@@ -46,7 +35,10 @@ module Suitcase
46
35
  end
47
36
 
48
37
  def self.find_by_id(id)
49
- Hotel.new(parse_hotel_information(hit(url(:info, true, true, { hotelId: id }))))
38
+ url = url(:info, { hotelId: id })
39
+ raw = parse_response(url)
40
+ hotel_data = parse_information(raw)
41
+ Hotel.new(hotel_data)
50
42
  end
51
43
 
52
44
  def self.find_by_info(info)
@@ -64,24 +56,15 @@ module Suitcase
64
56
  params["maxRate"] = params[:max_rate] if params[:max_rate]
65
57
  params[:amenities] = amenities
66
58
  hotels = []
67
- raw = hit(url(:list, true, true, params))
68
- handle_errors(JSON.parse raw)
69
- split(raw).each do |hotel_data|
70
- hotels.push Hotel.new(parse_hotel_information(hotel_data.to_json))
59
+ parsed = parse_response(url(:list, params))
60
+ handle_errors(parsed)
61
+ split(parsed).each do |hotel_data|
62
+ hotels.push Hotel.new(parse_information(hotel_data))
71
63
  end
72
64
  hotels
73
65
  end
74
66
 
75
- def self.hit(url)
76
- Net::HTTP.get_response(url).body
77
- end
78
-
79
- def self.shove(url, params)
80
- Net::HTTP.post_form(url, params).body
81
- end
82
-
83
- def self.parse_hotel_information(json)
84
- parsed = JSON.parse json
67
+ def self.parse_information(parsed)
85
68
  handle_errors(parsed)
86
69
  summary = parsed["hotelId"] ? parsed : parsed["HotelInformationResponse"]["HotelSummary"]
87
70
  parsed_info = { id: summary["hotelId"], name: summary["name"], address: summary["address1"], city: summary["city"], postal_code: summary["postalCode"], country_code: summary["countryCode"], rating: summary["hotelRating"], high_rate: summary["highRate"], low_rate: summary["lowRate"], latitude: summary["latitude"].to_f, longitude: summary["longitude"].to_f }
@@ -107,8 +90,7 @@ module Suitcase
107
90
  raise EANException.new(message) if message
108
91
  end
109
92
 
110
- def self.split(data)
111
- parsed = JSON.parse(data)
93
+ def self.split(parsed)
112
94
  hotels = parsed["HotelListResponse"]["HotelList"]
113
95
  hotels["HotelSummary"]
114
96
  end
@@ -123,7 +105,7 @@ module Suitcase
123
105
  params.delete(:arrival)
124
106
  params.delete(:departure)
125
107
  params["hotelId"] = @id
126
- parsed = JSON.parse(Hotel.hit(Hotel.url(:avail, true, true, params)))
108
+ parsed = Hotel.parse_response(Hotel.url(:avail, params))
127
109
  Hotel.handle_errors(parsed)
128
110
  hotel_id = parsed["HotelRoomAvailabilityResponse"]["hotelId"]
129
111
  rate_key = parsed["HotelRoomAvailabilityResponse"]["rateKey"]
@@ -133,7 +115,7 @@ module Suitcase
133
115
 
134
116
  def payment_options
135
117
  options = []
136
- types_raw = JSON.parse Hotel.hit(Hotel.url(:paymentInfo, true, true, {}))
118
+ types_raw = JSON.parse Hotel.hit(url(:paymentInfo, true, true, {}))
137
119
  types_raw["HotelPaymentResponse"].each do |raw|
138
120
  types = raw[0] != "PaymentType" ? [] : raw[1]
139
121
  types.each do |type|
@@ -1,3 +1,3 @@
1
1
  module Suitcase
2
- VERSION = "1.1.6"
2
+ VERSION = "1.1.7"
3
3
  end
data/lib/suitcase.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'json'
2
2
  require 'net/http'
3
3
  require 'suitcase/version'
4
+ require 'suitcase/helpers'
4
5
  require 'suitcase/hotel/room'
5
6
  require 'suitcase/hotel/payment_option'
6
7
  require 'suitcase/hotel/hotel'
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.1.6
4
+ version: 1.1.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-26 00:00:00.000000000 Z
12
+ date: 2011-12-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &15869360 !ruby/object:Gem::Requirement
16
+ requirement: &13140540 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *15869360
24
+ version_requirements: *13140540
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: cucumber
27
- requirement: &15868940 !ruby/object:Gem::Requirement
27
+ requirement: &13140060 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *15868940
35
+ version_requirements: *13140060
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &15868520 !ruby/object:Gem::Requirement
38
+ requirement: &13139260 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *15868520
46
+ version_requirements: *13139260
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: json
49
- requirement: &15867980 !ruby/object:Gem::Requirement
49
+ requirement: &13138520 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *15867980
57
+ version_requirements: *13138520
58
58
  description: Suitcase utilizes the EAN (Expedia.com) API for locating info about hotels,
59
59
  rental cars, and flights.
60
60
  email:
@@ -72,6 +72,7 @@ files:
72
72
  - lib/suitcase.rb
73
73
  - lib/suitcase/airport_codes.rb
74
74
  - lib/suitcase/country_codes.rb
75
+ - lib/suitcase/helpers.rb
75
76
  - lib/suitcase/hotel/hotel.rb
76
77
  - lib/suitcase/hotel/payment_option.rb
77
78
  - lib/suitcase/hotel/room.rb
@@ -95,7 +96,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
95
96
  version: '0'
96
97
  segments:
97
98
  - 0
98
- hash: 2512264335440945833
99
+ hash: -3208530258623277301
99
100
  required_rubygems_version: !ruby/object:Gem::Requirement
100
101
  none: false
101
102
  requirements:
@@ -104,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
105
  version: '0'
105
106
  segments:
106
107
  - 0
107
- hash: 2512264335440945833
108
+ hash: -3208530258623277301
108
109
  requirements: []
109
110
  rubyforge_project: suitcase
110
111
  rubygems_version: 1.8.10