wwdcdownloader 20.14.1 → 20.15.0
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.
- checksums.yaml +4 -4
- data/Gemfile +1 -4
- data/Gemfile.lock +12 -36
- data/LICENSE.txt +1 -1
- data/Readme.md +6 -6
- data/VERSION +1 -1
- data/lib/wwdcdownloader.rb +63 -156
- data/wwdcdownloader.gemspec +5 -14
- metadata +4 -46
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0fe0443938f3d059a6f274bf211800297bcf90c1
|
4
|
+
data.tar.gz: e7b3467543be7066b09be3d4e6644b1a66ee7210
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fbd64abd2413b12da383cb42b60e24cf510697c94208a7b83dd5471f562fce94b45d6e278489f0a43ea040e71132ad7306d27bfc9bb9328c11b288d2b9de00c1
|
7
|
+
data.tar.gz: f8861a8f33c8cff7f76e53624fd360f7164b97e66c62d77174b22340e855d23d32d85db82d8611ab833d1c418ad46de260eac5089c8c28db0c82fcc9d9be75ca
|
data/Gemfile
CHANGED
@@ -3,14 +3,11 @@ source "https://rubygems.org"
|
|
3
3
|
# If you make any changes in this file, please run `bundle install`.
|
4
4
|
# If new versions of your installed gems are available, run `bundle update`
|
5
5
|
|
6
|
-
gem "mechanize", "~> 2.7.1"
|
7
6
|
gem "json", "~> 1.8.0"
|
8
|
-
gem "highline", "~> 1.6.19"
|
9
|
-
gem "nokogiri", "~> 1.5.0"
|
10
7
|
|
11
8
|
group :development do
|
12
9
|
#gem "shoulda", ">= 0"
|
13
|
-
gem "bundler", "~> 1.
|
10
|
+
gem "bundler", "~> 1.9.0"
|
14
11
|
gem "jeweler", "~> 1.8.0"
|
15
12
|
#gem "rcov", ">= 0"
|
16
13
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,13 +1,11 @@
|
|
1
1
|
GEM
|
2
2
|
remote: https://rubygems.org/
|
3
3
|
specs:
|
4
|
-
addressable (2.3.
|
4
|
+
addressable (2.3.8)
|
5
5
|
builder (3.2.2)
|
6
|
-
domain_name (0.5.18)
|
7
|
-
unf (>= 0.0.5, < 1.0.0)
|
8
6
|
faraday (0.8.9)
|
9
7
|
multipart-post (~> 1.2.0)
|
10
|
-
git (1.2.
|
8
|
+
git (1.2.9.1)
|
11
9
|
github_api (0.10.1)
|
12
10
|
addressable
|
13
11
|
faraday (~> 0.8.1)
|
@@ -15,10 +13,8 @@ GEM
|
|
15
13
|
multi_json (~> 1.4)
|
16
14
|
nokogiri (~> 1.5.2)
|
17
15
|
oauth2
|
18
|
-
hashie (3.
|
19
|
-
highline (1.
|
20
|
-
http-cookie (1.0.2)
|
21
|
-
domain_name (~> 0.5)
|
16
|
+
hashie (3.4.2)
|
17
|
+
highline (1.7.2)
|
22
18
|
jeweler (1.8.8)
|
23
19
|
builder
|
24
20
|
bundler (~> 1.0)
|
@@ -28,47 +24,27 @@ GEM
|
|
28
24
|
nokogiri (= 1.5.10)
|
29
25
|
rake
|
30
26
|
rdoc
|
31
|
-
json (1.8.
|
32
|
-
jwt (1.
|
33
|
-
|
34
|
-
domain_name (~> 0.5, >= 0.5.1)
|
35
|
-
http-cookie (~> 1.0)
|
36
|
-
mime-types (~> 2.0)
|
37
|
-
net-http-digest_auth (~> 1.1, >= 1.1.1)
|
38
|
-
net-http-persistent (~> 2.5, >= 2.5.2)
|
39
|
-
nokogiri (~> 1.4)
|
40
|
-
ntlm-http (~> 0.1, >= 0.1.1)
|
41
|
-
webrobots (>= 0.0.9, < 0.2)
|
42
|
-
mime-types (2.3)
|
43
|
-
multi_json (1.10.1)
|
27
|
+
json (1.8.3)
|
28
|
+
jwt (1.5.0)
|
29
|
+
multi_json (1.11.0)
|
44
30
|
multi_xml (0.5.5)
|
45
31
|
multipart-post (1.2.0)
|
46
|
-
net-http-digest_auth (1.4)
|
47
|
-
net-http-persistent (2.9.4)
|
48
32
|
nokogiri (1.5.10)
|
49
|
-
|
50
|
-
oauth2 (0.9.4)
|
33
|
+
oauth2 (1.0.0)
|
51
34
|
faraday (>= 0.8, < 0.10)
|
52
35
|
jwt (~> 1.0)
|
53
36
|
multi_json (~> 1.3)
|
54
37
|
multi_xml (~> 0.5)
|
55
38
|
rack (~> 1.2)
|
56
|
-
rack (1.
|
57
|
-
rake (10.
|
58
|
-
rdoc (4.
|
39
|
+
rack (1.6.1)
|
40
|
+
rake (10.4.2)
|
41
|
+
rdoc (4.2.0)
|
59
42
|
json (~> 1.4)
|
60
|
-
unf (0.1.4)
|
61
|
-
unf_ext
|
62
|
-
unf_ext (0.0.6)
|
63
|
-
webrobots (0.1.1)
|
64
43
|
|
65
44
|
PLATFORMS
|
66
45
|
ruby
|
67
46
|
|
68
47
|
DEPENDENCIES
|
69
|
-
bundler (~> 1.
|
70
|
-
highline (~> 1.6.19)
|
48
|
+
bundler (~> 1.9.0)
|
71
49
|
jeweler (~> 1.8.0)
|
72
50
|
json (~> 1.8.0)
|
73
|
-
mechanize (~> 2.7.1)
|
74
|
-
nokogiri (~> 1.5.0)
|
data/LICENSE.txt
CHANGED
data/Readme.md
CHANGED
@@ -1,22 +1,22 @@
|
|
1
|
-
# WWDC
|
1
|
+
# WWDC 2015 Sample Code Downloader
|
2
2
|
|
3
3
|

|
4
4
|
|
5
5
|
## Sad days are over
|
6
6
|
|
7
|
-
This script will download all the session material for you if you are a WWDC
|
7
|
+
This script will download all the session material for you if you are a WWDC 2015 attendee OR NOT!
|
8
8
|
You can now simply install WWDC-Downloader as a ruby gem like this:
|
9
9
|
|
10
|
-
gem install wwdcdownloader
|
10
|
+
gem install wwdcdownloader
|
11
11
|
|
12
12
|
or
|
13
13
|
|
14
|
-
sudo gem install wwdcdownloader
|
14
|
+
sudo gem install wwdcdownloader
|
15
15
|
|
16
16
|
Run the script like this:
|
17
17
|
|
18
|
-
wwdcdownloader
|
18
|
+
wwdcdownloader [<target-dir>]
|
19
19
|
|
20
|
-
The script will create a directory called "
|
20
|
+
The script will create a directory called "wwdc2015-assets" (or `target-dir` if given) in the directory you run the script from.
|
21
21
|
|
22
22
|
That's it. Enjoy and see you next year.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
20.
|
1
|
+
20.15.0
|
data/lib/wwdcdownloader.rb
CHANGED
@@ -1,18 +1,16 @@
|
|
1
1
|
# Have fun. Use at your own risk.
|
2
|
-
# Copyright (c)
|
2
|
+
# Copyright (c) 2015 Johannes Fahrenkrug
|
3
3
|
|
4
4
|
require 'rubygems'
|
5
5
|
require 'fileutils'
|
6
6
|
require 'net/http'
|
7
7
|
|
8
8
|
begin
|
9
|
-
require 'mechanize'
|
10
9
|
require 'json'
|
11
|
-
require 'highline/import'
|
12
10
|
rescue LoadError => e
|
13
11
|
puts
|
14
|
-
puts "You need to have the
|
15
|
-
puts "Install
|
12
|
+
puts "You need to have the json gem installed."
|
13
|
+
puts "Install it by running"
|
16
14
|
puts
|
17
15
|
puts " bundle install"
|
18
16
|
puts
|
@@ -26,23 +24,20 @@ end
|
|
26
24
|
class WWDCDownloader
|
27
25
|
#BASE_URI = 'https://developer.apple.com/wwdc-services/cy4p09ns/a4363cb15472b00287b/sessions.json'
|
28
26
|
|
29
|
-
WWDC_LIBRARIES = [{:base => 'https://developer.apple.com/library/prerelease/ios', :lib => '/navigation/library.json'},
|
27
|
+
WWDC_LIBRARIES = [{:base => 'https://developer.apple.com/library/prerelease/ios', :lib => '/navigation/library.json'},
|
30
28
|
{:base => 'https://developer.apple.com/library/prerelease/mac', :lib => '/navigation/library.json'}]
|
31
|
-
|
32
|
-
attr_accessor :downloaded_files, :dl_dir, :
|
33
|
-
|
29
|
+
|
30
|
+
attr_accessor :downloaded_files, :dl_dir, :min_date, :proxy_uri
|
31
|
+
|
34
32
|
def initialize(dl_dir, min_date)
|
35
33
|
self.dl_dir = dl_dir
|
36
34
|
self.min_date = min_date
|
37
|
-
self.mech = Mechanize.new
|
38
|
-
self.mech.agent.http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
39
|
-
self.mech.agent.follow_meta_refresh = true
|
40
35
|
self.downloaded_files = []
|
41
|
-
|
36
|
+
self.proxy_uri = nil
|
37
|
+
|
42
38
|
if ENV['http_proxy'] || ENV['HTTP_PROXY']
|
43
39
|
uri = (ENV['http_proxy']) ? ENV['http_proxy'] : ENV['HTTP_PROXY']
|
44
|
-
|
45
|
-
self.mech.set_proxy parsedUrl.host, parsedUrl.port
|
40
|
+
self.proxy_uri = URI.parse(uri)
|
46
41
|
end
|
47
42
|
end
|
48
43
|
|
@@ -51,76 +46,62 @@ class WWDCDownloader
|
|
51
46
|
if File.exists?(dir)
|
52
47
|
false
|
53
48
|
else
|
54
|
-
Dir.mkdir dir
|
49
|
+
Dir.mkdir dir
|
55
50
|
true
|
56
51
|
end
|
57
52
|
end
|
58
53
|
|
59
|
-
|
60
|
-
|
61
|
-
wrong_password = true
|
54
|
+
def read_url(url)
|
55
|
+
uri = URI.parse(url)
|
62
56
|
|
63
|
-
|
64
|
-
password = ask("Enter your ADC password: ") { |q| q.echo = "*" }
|
57
|
+
http = nil
|
65
58
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
end.click_button
|
71
|
-
|
72
|
-
if my_page.body =~ /incorrect/
|
73
|
-
puts "Wrong password, please try again."
|
74
|
-
else
|
75
|
-
wrong_password = false
|
76
|
-
|
77
|
-
# do we still need to select a team?
|
78
|
-
if my_page.body =~ /saveTeamSelection/
|
79
|
-
team_form = my_page.form_with(:name => 'saveTeamSelection')
|
80
|
-
|
81
|
-
# select first team
|
82
|
-
team_select = team_form.field_with(:id => 'teams')
|
83
|
-
team_option = team_select.options[0]
|
84
|
-
team_select.value = team_option
|
85
|
-
|
86
|
-
puts "Selecting Team #{team_option.text}"
|
87
|
-
|
88
|
-
button = team_form.button_with(:value => "Continue")
|
89
|
-
team_select_result_page = team_form.click_button(button)
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
59
|
+
if self.proxy_uri
|
60
|
+
http = Net::HTTP.new(uri.host, uri.port, self.proxy_uri.host, self.proxy_uri.port, self.proxy_uri.user, self.proxy_uri.password)
|
61
|
+
else
|
62
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
93
63
|
end
|
64
|
+
|
65
|
+
http.use_ssl = true
|
66
|
+
|
67
|
+
http.start do |http|
|
68
|
+
request = Net::HTTP::Get.new(uri.request_uri)
|
69
|
+
response = http.request(request)
|
70
|
+
|
71
|
+
if response.code == '200'
|
72
|
+
yield(response.body)
|
73
|
+
end
|
74
|
+
end
|
94
75
|
end
|
95
|
-
|
76
|
+
|
96
77
|
def download_sample_code_from_book_json(book_json_url, code_base_url, dest_dir, duplicates_ok)
|
97
78
|
did_download = false
|
98
|
-
self.
|
99
|
-
if book_json
|
79
|
+
self.read_url(book_json_url) do |book_json|
|
80
|
+
if book_json[0,1] == '<'
|
100
81
|
puts " Sorry, this samplecode apparently isn't available yet: #{code_base_url}/book.json"
|
101
82
|
else
|
102
|
-
book_res = JSON.parse(book_json
|
83
|
+
book_res = JSON.parse(book_json)
|
103
84
|
filename = book_res["sampleCode"]
|
104
85
|
url = "#{code_base_url}/#{filename}"
|
105
|
-
|
86
|
+
|
106
87
|
did_download = download_file(url, filename, dest_dir, duplicates_ok)
|
107
88
|
end
|
108
89
|
end
|
109
|
-
|
90
|
+
|
110
91
|
did_download
|
111
92
|
end
|
112
|
-
|
93
|
+
|
113
94
|
def download_file(url, filename, dest_dir, duplicates_ok = true)
|
114
95
|
did_download = false
|
115
|
-
if duplicates_ok or !self.downloaded_files.include?(url)
|
96
|
+
if duplicates_ok or !self.downloaded_files.include?(url)
|
116
97
|
# remember what we downloaded
|
117
98
|
self.downloaded_files << url
|
118
99
|
|
119
100
|
puts " Downloading #{url}"
|
120
101
|
begin
|
121
|
-
self.
|
102
|
+
self.read_url(url) do |downloaded_file|
|
122
103
|
open(dest_dir + "/" + filename, 'wb') do |file|
|
123
|
-
file.write(downloaded_file
|
104
|
+
file.write(downloaded_file)
|
124
105
|
end
|
125
106
|
did_download = true
|
126
107
|
end
|
@@ -130,114 +111,44 @@ class WWDCDownloader
|
|
130
111
|
elsif !duplicates_ok
|
131
112
|
puts " Already downloaded this file, skipping."
|
132
113
|
end
|
133
|
-
|
134
|
-
did_download
|
135
|
-
end
|
136
114
|
|
137
|
-
|
138
|
-
self.mech.get(a_page_url) do |page|
|
139
|
-
has_samplecode = false
|
140
|
-
page.links_with(:href => /\.zip/ ).each do |link|
|
141
|
-
has_samplecode = true
|
142
|
-
#code_base_url = File.dirname(link.href)
|
143
|
-
#download_sample_code_from_book_json("#{code_base_url}/book.json", code_base_url, dest_dir, duplicates_ok)
|
144
|
-
if link.href =~ /(\w+\.zip)$/
|
145
|
-
download_file(link.href, $1, dest_dir, duplicates_ok)
|
146
|
-
else
|
147
|
-
has_samplecode = false
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
if !has_samplecode
|
152
|
-
puts " Sorry, this session doesn't have samplecode, cleaning up."
|
153
|
-
begin
|
154
|
-
Dir.delete(dest_dir)
|
155
|
-
rescue
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
end
|
115
|
+
did_download
|
160
116
|
end
|
161
117
|
|
162
118
|
def load
|
163
119
|
mkdir(dl_dir)
|
164
|
-
|
165
|
-
|
166
|
-
#self.mech.get(BASE_URI) do |page|
|
167
|
-
# res = JSON.parse(page.body)
|
168
|
-
#
|
169
|
-
# # Was there an error?
|
170
|
-
# error = res['response']['error']
|
171
|
-
#
|
172
|
-
# if (error)
|
173
|
-
# STDERR.puts " Apple's API returned an error: '#{error}'"
|
174
|
-
# exit
|
175
|
-
# end
|
176
|
-
#
|
177
|
-
# sessions = res['response']['sessions']
|
178
|
-
#
|
179
|
-
# if sessions.size > 0
|
180
|
-
#
|
181
|
-
# sessions.each do |session|
|
182
|
-
# if session['type'] == 'Session'
|
183
|
-
# title = session['title']
|
184
|
-
# session_id = session['id']
|
185
|
-
# puts "Session #{session_id} '#{title}'..."
|
186
|
-
#
|
187
|
-
# # get the files
|
188
|
-
# dirname = "#{dl_dir}/#{session_id}-#{title.gsub(/\/|&|!|:/, '')}"
|
189
|
-
# puts " Creating #{dirname}"
|
190
|
-
# mkdir(dirname)
|
191
|
-
#
|
192
|
-
# begin
|
193
|
-
# download_sample_code_for_page(session['url'], dirname)
|
194
|
-
# rescue Mechanize::ResponseCodeError => e
|
195
|
-
# STDERR.puts " Error retrieving list for session. Proceeding with next session (#{$!})"
|
196
|
-
# next
|
197
|
-
# end
|
198
|
-
# end
|
199
|
-
# end
|
200
|
-
# else
|
201
|
-
# print "No sessions :(.\n"
|
202
|
-
# end
|
203
|
-
#end
|
204
|
-
|
205
|
-
# scrape the WWDC libraries...
|
120
|
+
|
121
|
+
# scrape the WWDC libraries...
|
206
122
|
puts
|
207
|
-
puts "Scraping the WWDC libraries
|
123
|
+
puts "Scraping the WWDC libraries..."
|
208
124
|
WWDC_LIBRARIES.each do |lib_hash|
|
209
125
|
lib = "#{lib_hash[:base]}#{lib_hash[:lib]}"
|
210
|
-
|
211
|
-
|
126
|
+
puts lib
|
127
|
+
self.read_url(lib) do |body|
|
128
|
+
body = body.gsub("''", '""')
|
212
129
|
res = JSON.parse(body)
|
213
|
-
|
130
|
+
|
214
131
|
docs = res['documents']
|
215
|
-
|
216
|
-
if docs.size > 0
|
217
132
|
|
133
|
+
if docs.size > 0
|
218
134
|
docs.each do |doc|
|
219
135
|
if doc[2] == 5 and doc[3] >= self.min_date # sample code and newer or equal to min date
|
220
136
|
title = doc[0]
|
221
|
-
|
137
|
+
|
222
138
|
puts "Sample Code '#{title}'..."
|
223
139
|
|
224
140
|
# get the files
|
225
|
-
dirname = "#{dl_dir}/#{title.gsub(/\/|&|!|:/, '')}"
|
141
|
+
dirname = "#{dl_dir}/#{title.gsub(/\/|&|!|:/, '')}"
|
226
142
|
puts " Creating #{dirname}"
|
227
143
|
did_create_dir = mkdir(dirname)
|
228
|
-
|
144
|
+
|
229
145
|
segments = doc[9].split('/')
|
230
146
|
url = "#{lib_hash[:base]}/samplecode/#{segments[2]}/book.json"
|
231
147
|
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
Dir.delete( dirname )
|
237
|
-
end
|
238
|
-
rescue Mechanize::ResponseCodeError => e
|
239
|
-
STDERR.puts " Error retrieving list for sample code. Proceeding with next one (#{$!})"
|
240
|
-
next
|
148
|
+
puts url
|
149
|
+
did_download = download_sample_code_from_book_json(url, "#{lib_hash[:base]}/samplecode/#{segments[2]}", dirname, false)
|
150
|
+
if !did_download and did_create_dir
|
151
|
+
Dir.delete( dirname )
|
241
152
|
end
|
242
153
|
end
|
243
154
|
end
|
@@ -249,26 +160,22 @@ class WWDCDownloader
|
|
249
160
|
|
250
161
|
puts "Done."
|
251
162
|
end
|
252
|
-
|
163
|
+
|
253
164
|
def self.run!(*args)
|
254
|
-
puts "WWDC
|
165
|
+
puts "WWDC 2015 Session Material Downloader"
|
255
166
|
puts "by Johannes Fahrenkrug, @jfahrenkrug, springenwerk.com"
|
256
167
|
puts "See you next year!"
|
257
168
|
puts
|
169
|
+
puts "Usage: wwdcdownloader [<target-dir>]"
|
170
|
+
puts
|
258
171
|
|
259
|
-
if args.size
|
260
|
-
puts "Usage: wwdcdownloader <your Apple ID> [<target-dir>]"
|
261
|
-
exit
|
262
|
-
end
|
263
|
-
|
264
|
-
dl_dir = if args.size > 1
|
172
|
+
dl_dir = if args.size == 1
|
265
173
|
args.last
|
266
174
|
else
|
267
|
-
'
|
175
|
+
'wwdc2015-assets'
|
268
176
|
end
|
269
|
-
|
270
|
-
w = WWDCDownloader.new(dl_dir, '
|
271
|
-
w.login
|
177
|
+
|
178
|
+
w = WWDCDownloader.new(dl_dir, '2015-06-01')
|
272
179
|
w.load
|
273
180
|
return 0
|
274
181
|
end
|
data/wwdcdownloader.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "wwdcdownloader"
|
8
|
-
s.version = "20.
|
8
|
+
s.version = "20.15.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Johannes Fahrenkrug"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2015-06-10"
|
13
13
|
s.description = "At each year's WWDC, Apple releases great sample projects. Unfortunately it is very tedious to manually download all these treasures through your browser. WWDC-Downloader solves this problem for you!"
|
14
14
|
s.email = "johannes@springenwerk.com"
|
15
15
|
s.executables = ["wwdcdownloader"]
|
@@ -37,26 +37,17 @@ Gem::Specification.new do |s|
|
|
37
37
|
s.specification_version = 4
|
38
38
|
|
39
39
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
40
|
-
s.add_runtime_dependency(%q<mechanize>, ["~> 2.7.1"])
|
41
40
|
s.add_runtime_dependency(%q<json>, ["~> 1.8.0"])
|
42
|
-
s.
|
43
|
-
s.add_runtime_dependency(%q<nokogiri>, ["~> 1.5.0"])
|
44
|
-
s.add_development_dependency(%q<bundler>, ["~> 1.3.0"])
|
41
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.9.0"])
|
45
42
|
s.add_development_dependency(%q<jeweler>, ["~> 1.8.0"])
|
46
43
|
else
|
47
|
-
s.add_dependency(%q<mechanize>, ["~> 2.7.1"])
|
48
44
|
s.add_dependency(%q<json>, ["~> 1.8.0"])
|
49
|
-
s.add_dependency(%q<
|
50
|
-
s.add_dependency(%q<nokogiri>, ["~> 1.5.0"])
|
51
|
-
s.add_dependency(%q<bundler>, ["~> 1.3.0"])
|
45
|
+
s.add_dependency(%q<bundler>, ["~> 1.9.0"])
|
52
46
|
s.add_dependency(%q<jeweler>, ["~> 1.8.0"])
|
53
47
|
end
|
54
48
|
else
|
55
|
-
s.add_dependency(%q<mechanize>, ["~> 2.7.1"])
|
56
49
|
s.add_dependency(%q<json>, ["~> 1.8.0"])
|
57
|
-
s.add_dependency(%q<
|
58
|
-
s.add_dependency(%q<nokogiri>, ["~> 1.5.0"])
|
59
|
-
s.add_dependency(%q<bundler>, ["~> 1.3.0"])
|
50
|
+
s.add_dependency(%q<bundler>, ["~> 1.9.0"])
|
60
51
|
s.add_dependency(%q<jeweler>, ["~> 1.8.0"])
|
61
52
|
end
|
62
53
|
end
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wwdcdownloader
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 20.
|
4
|
+
version: 20.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Johannes Fahrenkrug
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-06-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: mechanize
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ~>
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 2.7.1
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ~>
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 2.7.1
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: json
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,48 +24,20 @@ dependencies:
|
|
38
24
|
- - ~>
|
39
25
|
- !ruby/object:Gem::Version
|
40
26
|
version: 1.8.0
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: highline
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ~>
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 1.6.19
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ~>
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 1.6.19
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: nokogiri
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 1.5.0
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ~>
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: 1.5.0
|
69
27
|
- !ruby/object:Gem::Dependency
|
70
28
|
name: bundler
|
71
29
|
requirement: !ruby/object:Gem::Requirement
|
72
30
|
requirements:
|
73
31
|
- - ~>
|
74
32
|
- !ruby/object:Gem::Version
|
75
|
-
version: 1.
|
33
|
+
version: 1.9.0
|
76
34
|
type: :development
|
77
35
|
prerelease: false
|
78
36
|
version_requirements: !ruby/object:Gem::Requirement
|
79
37
|
requirements:
|
80
38
|
- - ~>
|
81
39
|
- !ruby/object:Gem::Version
|
82
|
-
version: 1.
|
40
|
+
version: 1.9.0
|
83
41
|
- !ruby/object:Gem::Dependency
|
84
42
|
name: jeweler
|
85
43
|
requirement: !ruby/object:Gem::Requirement
|