suitcase 1.1.6 → 1.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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