echelon 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: db14024c0e3222ac1c609300cbae0f50b895aa5c
4
+ data.tar.gz: a6862271c7b5f01885e74d3bb5f2e6a79d3ed22b
5
+ SHA512:
6
+ metadata.gz: 6e40449b0b6d65d6f737378f0348d828cc63466af9e2a5a050ce9a36d5f5adedcfeba78de2761967d906541cf91dcf1ec8b18e5397d3d41eba691a82a18fae70
7
+ data.tar.gz: f309887fde0eede1b840699ee106eb4d9949806b97104fb7501d4d5b31e84d7e8739ff0ec98e33ed003f1cf641a58875d5992bca9222968bb9363376c42a1dd9
@@ -0,0 +1 @@
1
+ echelon
@@ -0,0 +1 @@
1
+ 2.0.0
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source :rubygems
1
+ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in echelon.gemspec
4
4
  gemspec
@@ -1,17 +1,19 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- echelon (1.0.1)
4
+ echelon (1.0.2)
5
5
  json_pure (= 1.4.6)
6
6
  nokogiri (~> 1.5)
7
7
  zip (= 2.0.2)
8
8
 
9
9
  GEM
10
- remote: http://rubygems.org/
10
+ remote: https://rubygems.org/
11
11
  specs:
12
12
  diff-lcs (1.1.2)
13
13
  json_pure (1.4.6)
14
- nokogiri (1.5.5)
14
+ mini_portile (0.5.2)
15
+ nokogiri (1.6.1)
16
+ mini_portile (~> 0.5.0)
15
17
  rake (0.9.2.2)
16
18
  rspec (2.4.0)
17
19
  rspec-core (~> 2.4.0)
@@ -57,10 +57,11 @@ Currently only the following parks are supported...
57
57
  Echelon::Seaworld::SanDiego.new()
58
58
 
59
59
  # Disney World
60
- Echelon::DisneyWorld::AnimalKingdom.new()
61
- Echelon::DisneyWorld::Epcot.new()
62
- Echelon::DisneyWorld::HollywoodStudios.new()
63
- Echelon::DisneyWorld::MagicKingdom.new()
60
+ wdw = Echelon::DisneyWorld.new()
61
+ wdw.animal_kingdom
62
+ wdw.epcot
63
+ wdw.hollywood_studios
64
+ wdw.magic_kingdom
64
65
 
65
66
  # Disneyland California
66
67
  Echelon::Disneyland::Disneyland.new()
@@ -81,7 +82,7 @@ Currently only the following parks are supported...
81
82
 
82
83
  (The MIT License)
83
84
 
84
- Copyright (c) 2010-2012 Lloyd Pick
85
+ Copyright (c) 2010-2014 Lloyd Pick
85
86
 
86
87
  Permission is hereby granted, free of charge, to any person obtaining
87
88
  a copy of this software and associated documentation files (the
@@ -14,10 +14,11 @@ require "#{File.dirname(__FILE__)}/echelon/parks/seaworld/san_diego.rb"
14
14
  require "#{File.dirname(__FILE__)}/echelon/parks/seaworld/orlando.rb"
15
15
 
16
16
  # Disney World Resort
17
- require "#{File.dirname(__FILE__)}/echelon/parks/disney_world/magic_kingdom.rb"
18
- require "#{File.dirname(__FILE__)}/echelon/parks/disney_world/epcot.rb"
19
- require "#{File.dirname(__FILE__)}/echelon/parks/disney_world/hollywood_studios.rb"
20
- require "#{File.dirname(__FILE__)}/echelon/parks/disney_world/animal_kingdom.rb"
17
+ require "#{File.dirname(__FILE__)}/echelon/parks/disney_world.rb"
18
+ # require "#{File.dirname(__FILE__)}/echelon/parks/disney_world/magic_kingdom.rb"
19
+ # require "#{File.dirname(__FILE__)}/echelon/parks/disney_world/epcot.rb"
20
+ # require "#{File.dirname(__FILE__)}/echelon/parks/disney_world/hollywood_studios.rb"
21
+ # require "#{File.dirname(__FILE__)}/echelon/parks/disney_world/animal_kingdom.rb"
21
22
 
22
23
  # Disneyland Resort California
23
24
  require "#{File.dirname(__FILE__)}/echelon/parks/disneyland/disneyland.rb"
@@ -27,4 +28,9 @@ require "#{File.dirname(__FILE__)}/echelon/parks/disneyland/california_adventure
27
28
  require "#{File.dirname(__FILE__)}/echelon/parks/disneyland_paris.rb"
28
29
 
29
30
  module Echelon
31
+
32
+ def self.parameterize(params)
33
+ URI.escape(params.collect{|k,v| "#{k}=#{v}"}.join('&'))
34
+ end
35
+
30
36
  end
@@ -0,0 +1,122 @@
1
+ require 'rubygems'
2
+ require 'json'
3
+ require 'net/http'
4
+ require 'net/https'
5
+
6
+ module Echelon
7
+ class DisneyWorld
8
+
9
+ attr_reader :access_token, :expires_at
10
+
11
+ def initialize
12
+
13
+ uri = URI.parse("https://authorization.go.com/token")
14
+ http = Net::HTTP.new(uri.host, uri.port)
15
+ http.use_ssl = true
16
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
17
+
18
+ params = Echelon::parameterize({ grant_type: 'assertion', assertion_type: 'public', client_id: 'WDPRO-MOBILE.CLIENT-PROD' })
19
+ resp = http.post(uri.request_uri, params)
20
+
21
+ data = JSON.parse(resp.body)
22
+ @access_token = data['access_token']
23
+ @expires_at = Time.now.to_i + data['expires_in'].to_i
24
+
25
+ end
26
+
27
+ def animal_kingdom
28
+ @animal_kingdom ||= DisneyWorld::AnimalKingdom.new(self.access_token)
29
+ end
30
+
31
+ def magic_kingdom
32
+ @magic_kingdom ||= DisneyWorld::MagicKingdom.new(self.access_token)
33
+ end
34
+
35
+ def hollywood_studios
36
+ @hollywood_studios ||= DisneyWorld::HollywoodStudios.new(self.access_token)
37
+ end
38
+
39
+ def epcot
40
+ @epcot ||= DisneyWorld::Epcot.new(self.access_token)
41
+ end
42
+
43
+ class Park < Echelon::Park
44
+
45
+ attr_reader :json_data
46
+
47
+ def ride_list
48
+ self.json_data['entries'].inject({}) { |r,a| r[a['id'].split(';').first.to_i] = a['name']; r }
49
+ end
50
+
51
+ def initialize(access_token, park_id)
52
+
53
+ uri = URI.parse("https://api.wdpro.disney.go.com/facility-service/theme-parks/#{park_id};entityType=theme-park/wait-times")
54
+ http = Net::HTTP.new(uri.host, uri.port)
55
+ http.use_ssl = true
56
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
57
+
58
+ headers = {
59
+ 'Authorization' => "BEARER #{access_token}",
60
+ 'Accept' => 'application/json;apiversion=1',
61
+ 'X-Conversation-Id' => '~WDPRO-MOBILE.CLIENT-PROD'
62
+ }
63
+
64
+ resp = http.get(uri.request_uri, headers)
65
+ @json_data = JSON.parse(resp.body)
66
+
67
+ end
68
+
69
+ private
70
+
71
+ def create_ride_object(ref)
72
+ self.json_data['entries'].each do |ride|
73
+ if ride['id'].split(';').first.to_i == ref
74
+
75
+ ride_status = ride['waitTime']['status']
76
+ status = 1 if ride_status == 'Operating'
77
+ status = 0 if ride_status == 'Closed'
78
+ status = -1 if ride_status == 'Down'
79
+
80
+ queue_times = {
81
+ actual: ride['waitTime']['actualWaitMinutes'].to_i,
82
+ posted: ride['waitTime']['postedWaitMinutes'].to_i
83
+ }
84
+
85
+ meta = {
86
+ fastpass_available: ride['waitTime']['fastPass']['available'],
87
+ single_rider: ride['waitTime']['singleRider']
88
+ }
89
+
90
+ return Ride.new(:name => self.ride_list[ref], :queue_time => queue_times, :active => status, :meta => meta)
91
+ end
92
+ end
93
+ end
94
+
95
+ end
96
+
97
+ class Epcot < Park
98
+ def initialize(access_token)
99
+ super(access_token, 80007838)
100
+ end
101
+ end
102
+
103
+ class MagicKingdom < Park
104
+ def initialize(access_token)
105
+ super(access_token, 80007944)
106
+ end
107
+ end
108
+
109
+ class HollywoodStudios < Park
110
+ def initialize(access_token)
111
+ super(access_token, 80007998)
112
+ end
113
+ end
114
+
115
+ class AnimalKingdom < Park
116
+ def initialize(access_token)
117
+ super(access_token, 80007823)
118
+ end
119
+ end
120
+
121
+ end
122
+ end
@@ -1,6 +1,6 @@
1
1
  module Echelon
2
2
  class Ride
3
- attr_reader :name, :queue_time, :active, :updated_at
3
+ attr_reader :name, :queue_time, :active, :updated_at, :meta
4
4
 
5
5
  def initialize(*params)
6
6
  params.each do |key|
@@ -1,3 +1,3 @@
1
1
  module Echelon
2
- VERSION = '1.0.2'
2
+ VERSION = '1.0.3'
3
3
  end
metadata CHANGED
@@ -1,52 +1,46 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: echelon
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
5
- prerelease:
4
+ version: 1.0.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Lloyd Pick
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-08-21 00:00:00.000000000 Z
11
+ date: 2014-01-22 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bundler
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: 1.0.0
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: 1.0.0
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rspec
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: 2.4.0
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: 2.4.0
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: json_pure
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - '='
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - '='
60
53
  - !ruby/object:Gem::Version
@@ -62,7 +55,6 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: zip
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - '='
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - '='
76
67
  - !ruby/object:Gem::Version
@@ -78,7 +69,6 @@ dependencies:
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: nokogiri
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - ~>
84
74
  - !ruby/object:Gem::Version
@@ -86,7 +76,6 @@ dependencies:
86
76
  type: :runtime
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
80
  - - ~>
92
81
  - !ruby/object:Gem::Version
@@ -102,6 +91,8 @@ extensions: []
102
91
  extra_rdoc_files: []
103
92
  files:
104
93
  - .gitignore
94
+ - .ruby-gemset
95
+ - .ruby-version
105
96
  - .travis.yml
106
97
  - Gemfile
107
98
  - Gemfile.lock
@@ -113,10 +104,7 @@ files:
113
104
  - lib/echelon.rb
114
105
  - lib/echelon/park.rb
115
106
  - lib/echelon/parks/alton_towers.rb
116
- - lib/echelon/parks/disney_world/animal_kingdom.rb
117
- - lib/echelon/parks/disney_world/epcot.rb
118
- - lib/echelon/parks/disney_world/hollywood_studios.rb
119
- - lib/echelon/parks/disney_world/magic_kingdom.rb
107
+ - lib/echelon/parks/disney_world.rb
120
108
  - lib/echelon/parks/disneyland/california_adventure.rb
121
109
  - lib/echelon/parks/disneyland/disneyland.rb
122
110
  - lib/echelon/parks/disneyland_paris.rb
@@ -133,26 +121,25 @@ files:
133
121
  - spec/thorpe_park_spec.rb
134
122
  homepage: http://github.com/lloydpick/echelon
135
123
  licenses: []
124
+ metadata: {}
136
125
  post_install_message:
137
126
  rdoc_options: []
138
127
  require_paths:
139
128
  - lib
140
129
  required_ruby_version: !ruby/object:Gem::Requirement
141
- none: false
142
130
  requirements:
143
- - - ! '>='
131
+ - - '>='
144
132
  - !ruby/object:Gem::Version
145
133
  version: '0'
146
134
  required_rubygems_version: !ruby/object:Gem::Requirement
147
- none: false
148
135
  requirements:
149
- - - ! '>='
136
+ - - '>='
150
137
  - !ruby/object:Gem::Version
151
138
  version: 1.3.6
152
139
  requirements: []
153
140
  rubyforge_project: echelon
154
- rubygems_version: 1.8.24
141
+ rubygems_version: 2.0.6
155
142
  signing_key:
156
- specification_version: 3
143
+ specification_version: 4
157
144
  summary: RubyGem to give quick access to Theme Park queue times
158
145
  test_files: []
@@ -1,40 +0,0 @@
1
- require 'rubygems'
2
- require 'json'
3
- require 'net/http'
4
-
5
- module Echelon
6
- module DisneyWorld
7
- class AnimalKingdom < Park
8
-
9
- attr_reader :json_data
10
-
11
- def ride_list
12
- self.json_data.keys.inject({}) { |r,k| r[k] = k; r }
13
- end
14
-
15
- def initialize
16
- # fetch the json feed
17
- url = "http://dparks.uiemedia.net/dmm_v2/jsondata/JsonUpdateData?version=14&p=80007823"
18
- resp = Net::HTTP.get_response(URI.parse(url))
19
- data = resp.body
20
-
21
- # were only interested in the ride data, throw everything else away
22
- json_data = JSON.parse(data)
23
- ride_data = json_data["attractions"]["homeLabels"]
24
- queue_data = json_data["attractions"]["homeValues"].map { |v| v.to_i }
25
- @json_data = json_data["attractions"]["homeLabels"].each_with_index.inject({}) { |r,i| r[i.first] = queue_data[i.last]; r }
26
- end
27
-
28
- private
29
-
30
- def create_ride_object(ref)
31
- self.json_data.each do |ride|
32
- if ride[0] == ref
33
- return Ride.new(:name => ride[0], :queue_time => ride[1])
34
- end
35
- end
36
- end
37
-
38
- end
39
- end
40
- end
@@ -1,40 +0,0 @@
1
- require 'rubygems'
2
- require 'json'
3
- require 'net/http'
4
-
5
- module Echelon
6
- module DisneyWorld
7
- class Epcot < Park
8
-
9
- attr_reader :json_data
10
-
11
- def ride_list
12
- self.json_data.keys.inject({}) { |r,k| r[k] = k; r }
13
- end
14
-
15
- def initialize
16
- # fetch the json feed
17
- url = "http://dparks.uiemedia.net/dmm_v2/jsondata/JsonUpdateData?version=14&p=80007838"
18
- resp = Net::HTTP.get_response(URI.parse(url))
19
- data = resp.body
20
-
21
- # were only interested in the ride data, throw everything else away
22
- json_data = JSON.parse(data)
23
- ride_data = json_data["attractions"]["homeLabels"]
24
- queue_data = json_data["attractions"]["homeValues"].map { |v| v.to_i }
25
- @json_data = json_data["attractions"]["homeLabels"].each_with_index.inject({}) { |r,i| r[i.first] = queue_data[i.last]; r }
26
- end
27
-
28
- private
29
-
30
- def create_ride_object(ref)
31
- self.json_data.each do |ride|
32
- if ride[0] == ref
33
- return Ride.new(:name => ride[0], :queue_time => ride[1])
34
- end
35
- end
36
- end
37
-
38
- end
39
- end
40
- end
@@ -1,40 +0,0 @@
1
- require 'rubygems'
2
- require 'json'
3
- require 'net/http'
4
-
5
- module Echelon
6
- module DisneyWorld
7
- class HollywoodStudios < Park
8
-
9
- attr_reader :json_data
10
-
11
- def ride_list
12
- self.json_data.keys.inject({}) { |r,k| r[k] = k; r }
13
- end
14
-
15
- def initialize
16
- # fetch the json feed
17
- url = "http://dparks.uiemedia.net/dmm_v2/jsondata/JsonUpdateData?version=14&p=80007998"
18
- resp = Net::HTTP.get_response(URI.parse(url))
19
- data = resp.body
20
-
21
- # were only interested in the ride data, throw everything else away
22
- json_data = JSON.parse(data)
23
- ride_data = json_data["attractions"]["homeLabels"]
24
- queue_data = json_data["attractions"]["homeValues"].map { |v| v.to_i }
25
- @json_data = json_data["attractions"]["homeLabels"].each_with_index.inject({}) { |r,i| r[i.first] = queue_data[i.last]; r }
26
- end
27
-
28
- private
29
-
30
- def create_ride_object(ref)
31
- self.json_data.each do |ride|
32
- if ride[0] == ref
33
- return Ride.new(:name => ride[0], :queue_time => ride[1])
34
- end
35
- end
36
- end
37
-
38
- end
39
- end
40
- end
@@ -1,40 +0,0 @@
1
- require 'rubygems'
2
- require 'json'
3
- require 'net/http'
4
-
5
- module Echelon
6
- module DisneyWorld
7
- class MagicKingdom < Park
8
-
9
- attr_reader :json_data
10
-
11
- def ride_list
12
- self.json_data.keys.inject({}) { |r,k| r[k] = k; r }
13
- end
14
-
15
- def initialize
16
- # fetch the json feed
17
- url = "http://dparks.uiemedia.net/dmm_v2/jsondata/JsonUpdateData?version=14&p=80007944"
18
- resp = Net::HTTP.get_response(URI.parse(url))
19
- data = resp.body
20
-
21
- # were only interested in the ride data, throw everything else away
22
- json_data = JSON.parse(data)
23
- ride_data = json_data["attractions"]["homeLabels"]
24
- queue_data = json_data["attractions"]["homeValues"].map { |v| v.to_i }
25
- @json_data = json_data["attractions"]["homeLabels"].each_with_index.inject({}) { |r,i| r[i.first] = queue_data[i.last]; r }
26
- end
27
-
28
- private
29
-
30
- def create_ride_object(ref)
31
- self.json_data.each do |ride|
32
- if ride[0] == ref
33
- return Ride.new(:name => ride[0], :queue_time => ride[1])
34
- end
35
- end
36
- end
37
-
38
- end
39
- end
40
- end