suitcase 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +6 -0
- data/Gemfile +4 -0
- data/README.md +34 -0
- data/Rakefile +1 -0
- data/lib/suitcase/air/air.rb +86 -0
- data/lib/suitcase/airport_codes.rb +3 -0
- data/lib/suitcase/country_codes.rb +3 -0
- data/lib/suitcase/hotel/hotel.rb +49 -0
- data/lib/suitcase/version.rb +3 -0
- data/lib/suitcase.rb +7 -0
- data/spec/hotel_spec.rb +23 -0
- data/spec/spec_helper.rb +4 -0
- data/suitcase.gemspec +24 -0
- metadata +92 -0
@@ -0,0 +1,3 @@
|
|
1
|
+
module Suitcase
|
2
|
+
COUNTRY_CODES = {"AF"=>"Afghanistan", "AX"=>"Aland Islands", "AL"=>"Albania", "DZ"=>"Algeria", "AS"=>"American Samoa", "AD"=>"Andorra", "AO"=>"Angola", "AI"=>"Anguilla", "AQ"=>"Antarctica", "AG"=>"Antigua and Barbuda", "AR"=>"Argentina", "AM"=>"Armenia", "AW"=>"Aruba", "AC"=>"Ascension Island", "AU"=>"Australia", "AT"=>"Austria", "AZ"=>"Azerbaijan", "BS"=>"Bahamas", "BH"=>"Bahrain", "BB"=>"Barbados", "BD"=>"Bangladesh", "BY"=>"Belarus", "BE"=>"Belgium", "BZ"=>"Belize", "BJ"=>"Benin", "BM"=>"Bermuda", "BT"=>"Bhutan", "BW"=>"Botswana", "BO"=>"Bolivia", "BA"=>"Bosnia and Herzegovina", "BV"=>"Bouvet Island", "BR"=>"Brazil", "IO"=>"British Indian Ocean Territory", "BN"=>"Brunei Darussalam", "BG"=>"Bulgaria", "BF"=>"Burkina Faso", "BI"=>"Burundi", "KH"=>"Cambodia", "CM"=>"Cameroon", "CA"=>"Canada", "CV"=>"Cape Verde", "KY"=>"Cayman Islands", "CF"=>"Central African Republic", "TD"=>"Chad", "CL"=>"Chile", "CN"=>"China", "CX"=>"Christmas Island", "CC"=>"Cocos (Keeling) Islands", "CO"=>"Colombia", "KM"=>"Comoros", "CG"=>"Congo", "CD"=>"Congo, Democratic Republic", "CK"=>"Cook Islands", "CR"=>"Costa Rica", "CI"=>"Cote D'Ivoire (Ivory Coast)", "HR"=>"Croatia (Hrvatska)", "CU"=>"Cuba", "CY"=>"Cyprus", "CZ"=>"Czech Republic", "CS"=>"Czechoslovakia (former)", "DK"=>"Denmark", "DJ"=>"Djibouti", "DM"=>"Dominica", "DO"=>"Dominican Republic", "TP"=>"East Timor", "EC"=>"Ecuador", "EG"=>"Egypt", "SV"=>"El Salvador", "GQ"=>"Equatorial Guinea", "ER"=>"Eritrea", "EE"=>"Estonia", "ET"=>"Ethiopia", "EU"=>"European Union", "FK"=>"Falkland Islands (Malvinas)", "FO"=>"Faroe Islands", "FJ"=>"Fiji", "FI"=>"Finland", "FR"=>"France", "FX"=>"France, Metropolitan", "GF"=>"French Guiana", "PF"=>"French Polynesia", "TF"=>"French Southern Territories", "MK"=>"F.Y.R.O.M. (Macedonia)", "GA"=>"Gabon", "GM"=>"Gambia", "GE"=>"Georgia", "DE"=>"Germany", "GH"=>"Ghana", "GI"=>"Gibraltar", "GB"=>"Great Britain (UK)", "GR"=>"Greece", "GL"=>"Greenland", "GD"=>"Grenada", "GP"=>"Guadeloupe", "GU"=>"Guam", "GT"=>"Guatemala", "GG"=>"Guernsey", "GN"=>"Guinea", "GW"=>"Guinea-Bissau", "GY"=>"Guyana", "HT"=>"Haiti", "HM"=>"Heard and McDonald Islands", "HN"=>"Honduras", "HK"=>"Hong Kong", "HU"=>"Hungary", "IS"=>"Iceland", "IN"=>"India", "ID"=>"Indonesia", "IR"=>"Iran", "IQ"=>"Iraq", "IE"=>"Ireland", "IL"=>"Israel", "IM"=>"Isle of Man", "IT"=>"Italy", "JE"=>"Jersey", "JM"=>"Jamaica", "JP"=>"Japan", "JO"=>"Jordan", "KZ"=>"Kazakhstan", "KE"=>"Kenya", "KI"=>"Kiribati", "KP"=>"Korea (North)", "KR"=>"Korea (South)", "XK"=>"Kosovo*", "KW"=>"Kuwait", "KG"=>"Kyrgyzstan", "LA"=>"Laos", "LV"=>"Latvia", "LB"=>"Lebanon", "LI"=>"Liechtenstein", "LR"=>"Liberia", "LY"=>"Libya", "LS"=>"Lesotho", "LT"=>"Lithuania", "LU"=>"Luxembourg", "MO"=>"Macau", "MG"=>"Madagascar", "MW"=>"Malawi", "MY"=>"Malaysia", "MV"=>"Maldives", "ML"=>"Mali", "MT"=>"Malta", "MH"=>"Marshall Islands", "MQ"=>"Martinique", "MR"=>"Mauritania", "MU"=>"Mauritius", "YT"=>"Mayotte", "MX"=>"Mexico", "FM"=>"Micronesia", "MC"=>"Monaco", "MD"=>"Moldova", "MN"=>"Mongolia", "ME"=>"Montenegro", "MS"=>"Montserrat", "MA"=>"Morocco", "MZ"=>"Mozambique", "MM"=>"Myanmar", "NA"=>"Namibia", "NR"=>"Nauru", "NP"=>"Nepal", "NL"=>"Netherlands", "AN"=>"Netherlands Antilles", "NT"=>"Neutral Zone", "NC"=>"New Caledonia", "NZ"=>"New Zealand (Aotearoa)", "NI"=>"Nicaragua", "NE"=>"Niger", "NG"=>"Nigeria", "NU"=>"Niue", "NF"=>"Norfolk Island", "MP"=>"Northern Mariana Islands", "NO"=>"Norway", "OM"=>"Oman", "PK"=>"Pakistan", "PW"=>"Palau", "PS"=>"Palestinian Territory, Occupied", "PA"=>"Panama", "PG"=>"Papua New Guinea", "PY"=>"Paraguay", "PE"=>"Peru", "PH"=>"Philippines", "PN"=>"Pitcairn", "PL"=>"Poland", "PT"=>"Portugal", "PR"=>"Puerto Rico", "QA"=>"Qatar", "RE"=>"Reunion", "RO"=>"Romania", "RU"=>"Russian Federation", "RW"=>"Rwanda", "GS"=>"S. Georgia and S. Sandwich Isls.", "SH"=>"Saint Helena", "KN"=>"Saint Kitts and Nevis", "LC"=>"Saint Lucia", "MF"=>"Saint Martin", "VC"=>"Saint Vincent & the Grenadines", "WS"=>"Samoa", "SM"=>"San Marino", "ST"=>"Sao Tome and Principe", "SA"=>"Saudi Arabia", "SN"=>"Senegal", "RS"=>"Serbia", "YU"=>"Serbia and Montenegro (former)", "SC"=>"Seychelles", "SL"=>"Sierra Leone", "SG"=>"Singapore", "SI"=>"Slovenia", "SK"=>"Slovak Republic", "SB"=>"Solomon Islands", "SO"=>"Somalia", "ZA"=>"South Africa", "SS"=>"South Sudan", "ES"=>"Spain", "LK"=>"Sri Lanka", "SD"=>"Sudan", "SR"=>"Suriname", "SJ"=>"Svalbard & Jan Mayen Islands", "SZ"=>"Swaziland", "SE"=>"Sweden", "CH"=>"Switzerland", "SY"=>"Syria", "TW"=>"Taiwan", "TJ"=>"Tajikistan", "TZ"=>"Tanzania", "TH"=>"Thailand", "TG"=>"Togo", "TK"=>"Tokelau", "TO"=>"Tonga", "TT"=>"Trinidad and Tobago", "TN"=>"Tunisia", "TR"=>"Turkey", "TM"=>"Turkmenistan", "TC"=>"Turks and Caicos Islands", "TV"=>"Tuvalu", "UG"=>"Uganda", "UA"=>"Ukraine", "AE"=>"United Arab Emirates", "UK"=>"United Kingdom", "US"=>"United States", "UM"=>"US Minor Outlying Islands", "UY"=>"Uruguay", "SU"=>"USSR (former)", "UZ"=>"Uzbekistan", "VU"=>"Vanuatu", "VA"=>"Vatican City State (Holy See)", "VE"=>"Venezuela", "VN"=>"Viet Nam", "VG"=>"British Virgin Islands", "VI"=>"Virgin Islands (U.S.)", "WF"=>"Wallis and Futuna Islands", "EH"=>"Western Sahara", "YE"=>"Yemen", "ZM"=>"Zambia", "ZW"=>"Zimbabwe"}
|
3
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'uri'
|
3
|
+
require 'json'
|
4
|
+
require File.dirname(__FILE__) + '/../country_codes'
|
5
|
+
|
6
|
+
module Suitcase
|
7
|
+
class Hotel
|
8
|
+
attr_accessor :id, :name, :address, :city, :postal_code, :country, :airport_code, :rating, :confidence_rating, :description, :high_rate, :low_rate, :tripadvisor_rating, :currency_code, :latitude, :longitude
|
9
|
+
|
10
|
+
def self.find(hash)
|
11
|
+
hotels = []
|
12
|
+
json = JSON.parse Net::HTTP.get_response(URI.parse(URI.escape("http://api.ean.com/ean-services/rs/hotel/v3/list?apiKey=#{Suitcase::Hotel::API_KEY}&city=#{hash[:near]}&numberOfResults=#{hash[:results]}"))).body
|
13
|
+
if json["HotelListResponse"]["HotelList"]
|
14
|
+
json["HotelListResponse"]["HotelList"]["HotelSummary"].each do |hotel_data|
|
15
|
+
h = Hotel.new
|
16
|
+
h.id = hotel_data["hotelId"]
|
17
|
+
h.name = hotel_data["name"]
|
18
|
+
h.address = hotel_data["address1"]
|
19
|
+
h.city = hotel_data["city"]
|
20
|
+
h.postal_code = hotel_data["postalCode"]
|
21
|
+
h.country = COUNTRY_CODES[hotel_data["countryCode"]]
|
22
|
+
h.airport_code = hotel_data["airportCode"]
|
23
|
+
h.rating = hotel_data["hotelRating"]
|
24
|
+
h.confidence_rating = hotel_data["confidenceRating"]
|
25
|
+
h.tripadvisor_rating = hotel_data["tripAdvisorRating"]
|
26
|
+
h.currency_code = hotel_data["rateCurrencyCode"]
|
27
|
+
h.latitude = hotel_data["latitude"]
|
28
|
+
h.longitude = hotel_data["longitude"]
|
29
|
+
h.high_rate = hotel_data["highRate"]
|
30
|
+
h.low_rate = hotel_data["lowRate"]
|
31
|
+
hotels.push(h)
|
32
|
+
end
|
33
|
+
hotels[0..hash[:results]-1]
|
34
|
+
else
|
35
|
+
if json["HotelListResponse"]["EanWsError"]
|
36
|
+
raise "An error occured. Check data."
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def geolocation
|
42
|
+
latitude + ", " + longitude
|
43
|
+
end
|
44
|
+
|
45
|
+
def complete_address
|
46
|
+
address + " " + city + ", " + country + " " + postal_code
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/suitcase.rb
ADDED
data/spec/hotel_spec.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
include Suitcase
|
4
|
+
|
5
|
+
describe Hotel do
|
6
|
+
before(:each) do
|
7
|
+
@attr = { :near => "Boston", :results => 50 }
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "find method" do
|
11
|
+
it "should return the correct number of results" do
|
12
|
+
Hotel.find(@attr).count.should eq(50)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should return an array of hotels" do
|
16
|
+
Hotel.find(@attr).class.should eq(Array)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should return all hotels" do
|
20
|
+
Hotel.find(@attr).map { |x| x.class }.should eq([Hotel] * 50)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/spec/spec_helper.rb
ADDED
data/suitcase.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "suitcase/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "suitcase"
|
7
|
+
s.version = Suitcase::VERSION
|
8
|
+
s.authors = ["Walter Nelson"]
|
9
|
+
s.email = ["walter.john.nelson@gmail.com"]
|
10
|
+
s.homepage = "http://github.com/thoughtfusion/suitcase"
|
11
|
+
s.summary = %q{Locates available hotels, rental cars, and flights}
|
12
|
+
s.description = %q{Suitcase utilizes the EAN API for locating available hotels, rental cars, and flights.}
|
13
|
+
|
14
|
+
s.rubyforge_project = "suitcase"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_development_dependency "rspec"
|
22
|
+
s.add_runtime_dependency "json"
|
23
|
+
s.add_runtime_dependency "nokogiri"
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: suitcase
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Walter Nelson
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-11-05 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: &11887140 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *11887140
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: json
|
27
|
+
requirement: &11886720 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *11886720
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: nokogiri
|
38
|
+
requirement: &11886300 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *11886300
|
47
|
+
description: Suitcase utilizes the EAN API for locating available hotels, rental cars,
|
48
|
+
and flights.
|
49
|
+
email:
|
50
|
+
- walter.john.nelson@gmail.com
|
51
|
+
executables: []
|
52
|
+
extensions: []
|
53
|
+
extra_rdoc_files: []
|
54
|
+
files:
|
55
|
+
- .gitignore
|
56
|
+
- Gemfile
|
57
|
+
- README.md
|
58
|
+
- Rakefile
|
59
|
+
- lib/suitcase.rb
|
60
|
+
- lib/suitcase/air/air.rb
|
61
|
+
- lib/suitcase/airport_codes.rb
|
62
|
+
- lib/suitcase/country_codes.rb
|
63
|
+
- lib/suitcase/hotel/hotel.rb
|
64
|
+
- lib/suitcase/version.rb
|
65
|
+
- spec/hotel_spec.rb
|
66
|
+
- spec/spec_helper.rb
|
67
|
+
- suitcase.gemspec
|
68
|
+
homepage: http://github.com/thoughtfusion/suitcase
|
69
|
+
licenses: []
|
70
|
+
post_install_message:
|
71
|
+
rdoc_options: []
|
72
|
+
require_paths:
|
73
|
+
- lib
|
74
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ! '>='
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
requirements: []
|
87
|
+
rubyforge_project: suitcase
|
88
|
+
rubygems_version: 1.8.6
|
89
|
+
signing_key:
|
90
|
+
specification_version: 3
|
91
|
+
summary: Locates available hotels, rental cars, and flights
|
92
|
+
test_files: []
|