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 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