wwdcdownloader 20.14.1 → 20.15.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e4954023386da2a0d4076fe38a3ffbdcadf72c01
4
- data.tar.gz: 6c76eb1955017d4ed8ba9df6438e8804dbd5a030
3
+ metadata.gz: 0fe0443938f3d059a6f274bf211800297bcf90c1
4
+ data.tar.gz: e7b3467543be7066b09be3d4e6644b1a66ee7210
5
5
  SHA512:
6
- metadata.gz: b4f19a3ac402cddb8d93342540d71b06a2f6ca41ab41228d29fe61a4ca6fad060716b2dd5f0da4399bcb9d6801649a2ee544eec1d6388d828b4b6caddedacd71
7
- data.tar.gz: 6ea9fdf08da738b46637dc30eebd693b3d3c3865a4c191bd21878ddb45facb4f2fe77597bd78628c39393a23847703fe698934c7cf7a2249e4842c4e225a3113
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.3.0"
10
+ gem "bundler", "~> 1.9.0"
14
11
  gem "jeweler", "~> 1.8.0"
15
12
  #gem "rcov", ">= 0"
16
13
  end
@@ -1,13 +1,11 @@
1
1
  GEM
2
2
  remote: https://rubygems.org/
3
3
  specs:
4
- addressable (2.3.6)
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.6)
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.0.0)
19
- highline (1.6.21)
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.1)
32
- jwt (1.0.0)
33
- mechanize (2.7.3)
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
- ntlm-http (0.1.1)
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.5.2)
57
- rake (10.3.2)
58
- rdoc (4.1.1)
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.3.0)
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)
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014 Johannes Fahrenkrug
1
+ Copyright (c) 2015 Johannes Fahrenkrug
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/Readme.md CHANGED
@@ -1,22 +1,22 @@
1
- # WWDC 2014 Sample Code Downloader
1
+ # WWDC 2015 Sample Code Downloader
2
2
 
3
3
  ![First World WWDC Sample Code Problem](http://cdn.memegenerator.net/instances/400x/21928207.jpg)
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 2014 attendee OR NOT! This year you only need to have an Apple Developer account, that's it!
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 --no-rdoc --no-ri
10
+ gem install wwdcdownloader
11
11
 
12
12
  or
13
13
 
14
- sudo gem install wwdcdownloader --no-rdoc --no-ri
14
+ sudo gem install wwdcdownloader
15
15
 
16
16
  Run the script like this:
17
17
 
18
- wwdcdownloader <your Apple ID> [<target-dir>]
18
+ wwdcdownloader [<target-dir>]
19
19
 
20
- The script will create a directory called "wwdc2014-assets" (or `target-dir` if given) in the directory you run the script from.
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.14.1
1
+ 20.15.0
@@ -1,18 +1,16 @@
1
1
  # Have fun. Use at your own risk.
2
- # Copyright (c) 2014 Johannes Fahrenkrug
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 mechanize, json and highline gems installed."
15
- puts "Install them by running"
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, :mech, :min_date
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
- parsedUrl = URI.parse(uri)
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
- # Login
60
- def login
61
- wrong_password = true
54
+ def read_url(url)
55
+ uri = URI.parse(url)
62
56
 
63
- while wrong_password do
64
- password = ask("Enter your ADC password: ") { |q| q.echo = "*" }
57
+ http = nil
65
58
 
66
- self.mech.get('https://developer.apple.com/membercenter/') do |page|
67
- my_page = page.form_with(:name => 'form2') do |f|
68
- f.appleId = ARGV[0]
69
- f.accountPassword = password
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.mech.get(book_json_url) do |book_json|
99
- if book_json.body[0,1] == '<'
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.body)
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.mech.get(url) do |downloaded_file|
102
+ self.read_url(url) do |downloaded_file|
122
103
  open(dest_dir + "/" + filename, 'wb') do |file|
123
- file.write(downloaded_file.body)
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
- def download_sample_code_for_page(a_page_url, dest_dir, duplicates_ok = true)
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
- # get the sessions JSON
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 (not all sample code might be linked up correctly yet)"
123
+ puts "Scraping the WWDC libraries..."
208
124
  WWDC_LIBRARIES.each do |lib_hash|
209
125
  lib = "#{lib_hash[:base]}#{lib_hash[:lib]}"
210
- self.mech.get(lib) do |page|
211
- body = page.body.gsub("''", '""')
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
- begin
233
- puts url
234
- did_download = download_sample_code_from_book_json(url, "#{lib_hash[:base]}/samplecode/#{segments[2]}", dirname, false)
235
- if !did_download and did_create_dir
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 2014 Session Material Downloader"
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 < 1
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
- 'wwdc2014-assets'
175
+ 'wwdc2015-assets'
268
176
  end
269
-
270
- w = WWDCDownloader.new(dl_dir, '2014-05-28')
271
- w.login
177
+
178
+ w = WWDCDownloader.new(dl_dir, '2015-06-01')
272
179
  w.load
273
180
  return 0
274
181
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "wwdcdownloader"
8
- s.version = "20.14.1"
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 = "2014-07-23"
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.add_runtime_dependency(%q<highline>, ["~> 1.6.19"])
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<highline>, ["~> 1.6.19"])
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<highline>, ["~> 1.6.19"])
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.14.1
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: 2014-07-23 00:00:00.000000000 Z
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.3.0
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.3.0
40
+ version: 1.9.0
83
41
  - !ruby/object:Gem::Dependency
84
42
  name: jeweler
85
43
  requirement: !ruby/object:Gem::Requirement