echelon 0.0.1 → 0.0.2

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.
@@ -1,3 +1,7 @@
1
+ === 0.0.2 2010-11-27
2
+
3
+ * Added Disneyland Paris
4
+
1
5
  === 0.0.1 2010-10-20
2
6
 
3
7
  * Initial release
@@ -5,5 +5,6 @@ Rakefile
5
5
  lib/echelon.rb
6
6
  lib/echelon/ride.rb
7
7
  lib/echelon/thorpe_park.rb
8
+ lib/echelon/disneyland_paris.rb
8
9
  test/test_echelon.rb
9
10
  test/test_helper.rb
@@ -11,6 +11,7 @@ RubyGem to give quick access to Theme Park queue times
11
11
  Currently only the following parks are supported...
12
12
 
13
13
  * Thorpe Park
14
+ * Disneyland Paris
14
15
 
15
16
  == SYNOPSIS:
16
17
 
@@ -3,7 +3,8 @@ $:.unshift(File.dirname(__FILE__)) unless
3
3
 
4
4
  require "#{File.dirname(__FILE__)}/echelon/ride.rb"
5
5
  require "#{File.dirname(__FILE__)}/echelon/thorpe_park.rb"
6
+ require "#{File.dirname(__FILE__)}/echelon/disneyland_paris.rb"
6
7
 
7
8
  module Echelon
8
- VERSION = '0.0.1'
9
+ VERSION = '0.0.2'
9
10
  end
@@ -0,0 +1,118 @@
1
+ require 'rubygems'
2
+ require 'json'
3
+ require 'net/http'
4
+ require 'net/https'
5
+ require 'zip/zip'
6
+
7
+ module Echelon
8
+ class DisneylandParis
9
+
10
+ attr_reader :json_data
11
+
12
+ RIDES = {
13
+ 'P1AA01' => 'La Cabane des Robinson',
14
+ 'P1AA02' => 'Indiana Jones and the Temple of Peril',
15
+ 'P1AA04' => 'Pirates of the Caribbean',
16
+ 'P1DA03' => 'Autopia',
17
+ 'P1DA04' => 'Buzz Lightyear Laser Blast',
18
+ 'P1DA06' => 'Les Mystères du Nautilus',
19
+ 'P1DA07' => 'Orbitron',
20
+ 'P1DA08' => 'Space Mountain: Mission 2',
21
+ 'P1DA09' => 'Star Tours',
22
+ 'P1DA12' => 'Captain EO',
23
+ 'P1NA00' => 'Alice\'s Curious Labyrinth',
24
+ 'P1NA01' => 'Blanche-Neige et les Sept Nains',
25
+ 'P1NA02' => 'Le Carrousel de Lancelot',
26
+ 'P1NA03' => 'Casey Jr. - le Petit Train du Cirque',
27
+ 'P1NA05' => 'Dumbo the Flying Elephant',
28
+ 'P1NA07' => '"it\'s a small world" Celebration',
29
+ 'P1NA08' => 'Mad Hatter\'s Tea Cups',
30
+ 'P1NA09' => 'Le Pays des Contes de Fées',
31
+ 'P1NA10' => 'Peter Pan\'s Flight',
32
+ 'P1NA13' => 'Les Voyages de Pinocchio',
33
+ 'P1RA00' => 'Big Thunder Mountain',
34
+ 'P1RA03' => 'Phantom Manor',
35
+ 'P1RA04' => 'River Rogue Keelboats',
36
+ 'P2XA00' => 'Studio Tram Tour: Behind the Magic',
37
+ 'P2XA01' => 'CinéMagique',
38
+ 'P2XA02' => 'Cars Quatre Roues Rallye',
39
+ 'P2XA03' => 'Crush\'s Coaster',
40
+ 'P2XA05' => 'Flying Carpets Over Agrabah',
41
+ 'P2XA06' => 'RC Racer',
42
+ 'P2XA07' => 'Toy Soldiers Parachute Drop',
43
+ 'P2XA08' => 'Slinky Dog Zigzag Spin',
44
+ 'P2ZA00' => 'Armageddon : les Effets Spéciaux',
45
+ 'P2ZA01' => 'Rock\'n\'Roller Coaster starring Aerosmith',
46
+ 'P2ZA02' => 'The Twilight Zone Tower of Terror'
47
+ }
48
+
49
+ def initialize
50
+ # fetch the zipped json feed from the same url as the disney iphone app
51
+ # (you have no idea how long this took to work out)
52
+
53
+ http = Net::HTTP.new('disney.cms.pureagency.com', 443)
54
+ http.use_ssl = true
55
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
56
+
57
+ data = 'key=Ajjjsh;Uj'
58
+ headers = {
59
+ 'User-Agent' => 'Disneyland 1.0 (iPhone; iPhone OS 4.1; en_GB)',
60
+ 'Content-Type' => 'application/x-www-form-urlencoded;charset=UTF-8'
61
+ }
62
+ resp, data = http.post('/cms/ProxyTempsAttente', data, headers)
63
+
64
+ tmp = Tempfile.new('disneyland_paris_zip')
65
+ tmp << resp.body
66
+ tmp.close
67
+
68
+ json_data = nil
69
+ Zip::ZipFile.open(tmp.path) { |zipfile|
70
+ json_data = JSON.parse(zipfile.read("temps_attente.json"))
71
+ json_data = json_data["l"]
72
+ }
73
+
74
+ i = 0
75
+ rides = []
76
+ while i < json_data.count
77
+ ride = []
78
+ ride << json_data[i]
79
+ ride << json_data[i + 1]
80
+ ride << json_data[i + 2]
81
+ ride << json_data[i + 3]
82
+ ride << json_data[i + 4]
83
+ rides << ride
84
+ i += 5
85
+ end
86
+
87
+ @json_data = rides
88
+ end
89
+
90
+ def rides
91
+ all_rides = []
92
+ RIDES.each do |ride| all_rides << create_ride_object(ride[0]) end
93
+ all_rides
94
+ end
95
+
96
+ def find_by_name(ride)
97
+ raise ArgumentError, "Unknown ride name" unless RIDES.has_value?(ride)
98
+ ref = RIDES.index(ride)
99
+ create_ride_object(ref)
100
+ end
101
+
102
+ def find_by_id(ref)
103
+ raise ArgumentError, "Unknown ride name" unless RIDES.has_key?(ref)
104
+ create_ride_object(ref)
105
+ end
106
+
107
+ private
108
+
109
+ def create_ride_object(ref)
110
+ self.json_data.each do |ride|
111
+ if ride[0] == ref
112
+ return Ride.new(:name => RIDES[ref], :queue_time => ride[4].to_i, :active => ride[3].to_i)
113
+ end
114
+ end
115
+ end
116
+
117
+ end
118
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: echelon
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Lloyd Pick
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-20 00:00:00 +01:00
18
+ date: 2010-11-27 00:00:00 +00:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -61,9 +61,9 @@ dependencies:
61
61
  hash: 19
62
62
  segments:
63
63
  - 2
64
- - 6
65
- - 2
66
- version: 2.6.2
64
+ - 7
65
+ - 0
66
+ version: 2.7.0
67
67
  type: :development
68
68
  version_requirements: *id003
69
69
  description: RubyGem to give quick access to Theme Park queue times
@@ -84,6 +84,7 @@ files:
84
84
  - lib/echelon.rb
85
85
  - lib/echelon/ride.rb
86
86
  - lib/echelon/thorpe_park.rb
87
+ - lib/echelon/disneyland_paris.rb
87
88
  - test/test_echelon.rb
88
89
  - test/test_helper.rb
89
90
  has_rdoc: true