xcode-install 1.1.0 → 1.2.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: 6400b83c001ff5429ba066cb709c7c48a3ee52d3
4
- data.tar.gz: d03b8a2ca220319f47e47883cff2b240bcdd6697
3
+ metadata.gz: 43d37a17db67d22edd50424ccf56a2e88fdfe46a
4
+ data.tar.gz: 5a5adb23dc67519d513176a1ed796c9aa54e5c1f
5
5
  SHA512:
6
- metadata.gz: 7f670c8560447440ae2b048c481a91addf64752bbc083c0f849a92bc46a403eb09f7d58c05eaaa2714a9d7b005287821d01340bf78a4cc91f89be8e0875687b1
7
- data.tar.gz: 1c116c302f03f011a924f6bd764967703fcc00af5578554318be11bc96045e28ec210a6e310e8059d04c20473d26af21e763e3b1e57a28986077a92f76f14549
6
+ metadata.gz: 4dc978f5f136e1a621e3a7cbf293d2292dc0e9e00d20f9b0338daa28c37c849742a5c3b8d7f7a9e831f12eca4ac892faacdf938117d8a8100446b42c1467b5a8
7
+ data.tar.gz: 39ed9aa06b63e5d65c357752898783a80095eb6e1f3311079371a650c6e37e959d5f27575ab9f21b781c5f853af1d21470dbf3fcd670dbce2f623a906b5f3bd8
@@ -1,20 +1,21 @@
1
- Metrics/AbcSize:
2
- Max: 18
3
-
4
- Metrics/ClassLength:
5
- Max: 130
6
-
7
- Metrics/CyclomaticComplexity:
8
- Max: 7
1
+ inherit_from: .rubocop_todo.yml
9
2
 
10
3
  Metrics/LineLength:
11
4
  Max: 215
12
5
 
13
- Metrics/MethodLength:
14
- Max: 20
6
+ Style/AsciiComments:
7
+ Enabled: false
15
8
 
16
9
  Style/Documentation:
17
10
  Enabled: false
18
11
 
12
+ Style/FileName:
13
+ Exclude:
14
+ - bin/🎉
15
+ - bin/xcode-install
16
+
17
+ Style/SpecialGlobalVars:
18
+ Enabled: false
19
+
19
20
  Lint/Void:
20
21
  Enabled: false
@@ -0,0 +1,30 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2015-11-04 13:49:25 +0100 using RuboCop version 0.34.2.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 11
10
+ Metrics/AbcSize:
11
+ Max: 36
12
+
13
+ # Offense count: 1
14
+ # Configuration parameters: CountComments.
15
+ Metrics/ClassLength:
16
+ Max: 250
17
+
18
+ # Offense count: 1
19
+ Metrics/CyclomaticComplexity:
20
+ Max: 7
21
+
22
+ # Offense count: 10
23
+ # Configuration parameters: CountComments.
24
+ Metrics/MethodLength:
25
+ Max: 30
26
+
27
+ # Offense count: 1
28
+ # Configuration parameters: CountKeywordArgs.
29
+ Metrics/ParameterLists:
30
+ Max: 6
@@ -1,4 +1,6 @@
1
1
  language: ruby
2
2
  rvm: 2.0.0-p598
3
3
  cache: bundler
4
- script: bundle exec rake spec
4
+ script:
5
+ - bundle exec rake spec
6
+ - bundle exec rake rubocop
data/Gemfile CHANGED
@@ -7,5 +7,6 @@ group :development do
7
7
  gem 'mocha-on-bacon'
8
8
  gem 'mocha', '~> 0.11.4'
9
9
  gem 'prettybacon'
10
+ gem 'rubocop'
10
11
  gem 'coveralls', require: false
11
12
  end
data/README.md CHANGED
@@ -7,15 +7,15 @@
7
7
 
8
8
  Install and update your Xcodes automatically.
9
9
 
10
- ```bash
10
+ ```
11
11
  $ gem install xcode-install
12
12
  $ xcversion install 6.3
13
13
  ```
14
14
 
15
15
  ## Installation
16
16
 
17
- ```bash
18
- $ gem install xcversion
17
+ ```
18
+ $ gem install xcode-install
19
19
  ```
20
20
 
21
21
  ## Usage
@@ -30,7 +30,7 @@ XCODE_INSTALL_PASSWORD
30
30
 
31
31
  To list available versions:
32
32
 
33
- ```bash
33
+ ```
34
34
  $ xcversion list
35
35
  6.0.1
36
36
  6.1
@@ -43,7 +43,7 @@ By default, only the latest major version is listed.
43
43
 
44
44
  To install a certain version, simply:
45
45
 
46
- ```bash
46
+ ```
47
47
  $ xcversion install 6.3
48
48
  ########################################################### 82.1%
49
49
  ######################################################################## 100.0%
@@ -57,7 +57,7 @@ This will download and install that version of Xcode. It will also be automatica
57
57
 
58
58
  Note: GMs and beta versions usually have special names, e.g.
59
59
 
60
- ```bash
60
+ ```
61
61
  $ xcversion list
62
62
  7 GM seed
63
63
  7.1 beta
@@ -73,8 +73,8 @@ XcodeInstall can also install Xcode's Command Line Tools by calling `xcversion i
73
73
 
74
74
  XcodeInstall can also manage your local simulators using the `simulators` command.
75
75
 
76
- ```bash
77
- $ xcode-install simulators
76
+ ```
77
+ $ xcversion simulators
78
78
  Xcode 6.4.0 (/Applications/Xcode.app)
79
79
  iOS 7.1 Simulator (installed)
80
80
  iOS 8.1 Simulator (not installed)
@@ -89,8 +89,8 @@ iOS 8.4 Simulator (installed)
89
89
 
90
90
  To install a simulator, simply:
91
91
 
92
- ```bash
93
- $ xcode-install simulators --install=8.4
92
+ ```
93
+ $ xcversion simulators --install=8.4
94
94
  ########################################################### 82.1%
95
95
  ######################################################################## 100.0%
96
96
  Please authenticate to install iOS 8.4 Simulator...
data/Rakefile CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'bundler/gem_tasks'
2
+ require 'rubocop/rake_task'
2
3
 
3
4
  def specs(dir)
4
5
  FileList["spec/#{dir}/*_spec.rb"].shuffle.join(' ')
@@ -9,4 +10,7 @@ task :spec do
9
10
  sh "bundle exec bacon #{specs('**')}"
10
11
  end
11
12
 
12
- task default: :spec
13
+ desc 'Lints all the files'
14
+ RuboCop::RakeTask.new(:rubocop)
15
+
16
+ task default: [:spec, :rubocop]
@@ -1,5 +1,6 @@
1
1
  require 'fileutils'
2
2
  require 'pathname'
3
+ require 'rexml/document'
3
4
  require 'spaceship'
4
5
  require 'json'
5
6
  require 'rubygems/version'
@@ -12,19 +13,20 @@ module XcodeInstall
12
13
  COOKIES_PATH = Pathname.new('/tmp/curl-cookies.txt')
13
14
 
14
15
  def fetch(url, directory = nil, cookies = nil, output = nil, progress = true)
15
- options = cookies.nil? ? '' : "-b '#{cookies}' -c #{COOKIES_PATH}"
16
- # options += ' -vvv'
16
+ options = cookies.nil? ? [] : ['--cookie', cookies, '--cookie-jar', COOKIES_PATH]
17
+ # options << ' -vvv'
17
18
 
18
19
  uri = URI.parse(url)
19
20
  output ||= File.basename(uri.path)
20
21
  output = (Pathname.new(directory) + Pathname.new(output)) if directory
21
22
 
22
- progress = progress ? '-#' : '-s'
23
- command = "curl #{options} -L -C - #{progress} -o #{output} #{url}"
24
- IO.popen(command).each do |fd|
25
- puts(fd)
26
- end
27
- result = $CHILD_STATUS.to_i == 0
23
+ progress = progress ? '--progress-bar' : '--silent'
24
+ command = ['curl', *options, '--location', '--continue-at', '-', progress, '--output', output, url].map(&:to_s)
25
+ io = IO.popen(command)
26
+ io.each { |line| puts line }
27
+ io.close
28
+
29
+ result = $?.exitstatus == 0
28
30
 
29
31
  FileUtils.rm_f(COOKIES_PATH)
30
32
  result
@@ -69,27 +71,27 @@ module XcodeInstall
69
71
  end
70
72
  end
71
73
 
72
- def install_dmg(dmgPath, suffix = '', switch = true, clean = true)
74
+ def install_dmg(dmg_path, suffix = '', switch = true, clean = true)
73
75
  xcode_path = "/Applications/Xcode#{suffix}.app"
74
76
 
75
- `hdiutil mount -nobrowse -noverify #{dmgPath}`
77
+ mount_dir = mount(dmg_path)
76
78
  puts 'Please authenticate for Xcode installation...'
77
- source = Dir.glob('/Volumes/Xcode/Xcode*.app').first
79
+ source = Dir.glob(File.join(mount_dir, 'Xcode*.app')).first
78
80
 
79
81
  if source.nil?
80
- out <<-HELP
81
- No `Xcode.app` found in DMG. Please remove #{dmgPath} if you suspect a corrupted
82
+ out = <<-HELP
83
+ No `Xcode.app` found in DMG. Please remove #{dmg_path} if you suspect a corrupted
82
84
  download or run `xcversion update` to see if the version you tried to install
83
85
  has been pulled by Apple. If none of this is true, please open a new GH issue.
84
86
  HELP
85
- $stderr.puts out.gsub("\n", ' ')
87
+ $stderr.puts out.tr("\n", ' ')
86
88
  return
87
89
  end
88
90
 
89
91
  `sudo ditto "#{source}" "#{xcode_path}"`
90
92
  `umount "/Volumes/Xcode"`
91
93
 
92
- if not verify_integrity(xcode_path)
94
+ unless verify_integrity(xcode_path)
93
95
  `sudo rm -f #{xcode_path}`
94
96
  return
95
97
  end
@@ -107,7 +109,7 @@ HELP
107
109
  puts `xcodebuild -version`
108
110
  end
109
111
 
110
- FileUtils.rm_f(dmgPath) if clean
112
+ FileUtils.rm_f(dmg_path) if clean
111
113
  end
112
114
 
113
115
  def install_version(version, switch = true, clean = true, install = true, progress = true, url = nil)
@@ -154,7 +156,7 @@ HELP
154
156
  def spaceship
155
157
  @spaceship ||= begin
156
158
  begin
157
- Spaceship.login(ENV["XCODE_INSTALL_USER"], ENV["XCODE_INSTALL_PASSWORD"])
159
+ Spaceship.login(ENV['XCODE_INSTALL_USER'], ENV['XCODE_INSTALL_PASSWORD'])
158
160
  rescue Spaceship::Client::InvalidUserCredentialsError
159
161
  $stderr.puts 'The specified Apple developer account credentials are incorrect.'
160
162
  exit(1)
@@ -166,8 +168,8 @@ HELP
166
168
  exit(1)
167
169
  end
168
170
 
169
- if ENV.key?("XCODE_INSTALL_TEAM_ID")
170
- Spaceship.client.team_id = ENV["XCODE_INSTALL_TEAM_ID"]
171
+ if ENV.key?('XCODE_INSTALL_TEAM_ID')
172
+ Spaceship.client.team_id = ENV['XCODE_INSTALL_TEAM_ID']
171
173
  end
172
174
  Spaceship.client
173
175
  end
@@ -196,15 +198,15 @@ HELP
196
198
  end
197
199
 
198
200
  def fetch_seedlist
199
- @xcodes = parse_seedlist(spaceship.send(:request, :get, '/services-account/QH65B2/downloadws/listDownloads.action', {
200
- start: "0",
201
- limit: "1000",
202
- sort: "dateModified",
203
- dir: "DESC",
204
- searchTextField: "",
205
- searchCategories: "",
206
- search: "false",
207
- }).body)
201
+ @xcodes = parse_seedlist(spaceship.send(:request, :get,
202
+ '/services-account/QH65B2/downloadws/listDownloads.action',
203
+ start: '0',
204
+ limit: '1000',
205
+ sort: 'dateModified',
206
+ dir: 'DESC',
207
+ searchTextField: '',
208
+ searchCategories: '',
209
+ search: 'false').body)
208
210
 
209
211
  names = @xcodes.map(&:name)
210
212
  @xcodes += prereleases.reject { |pre| names.include?(pre.name) }
@@ -243,15 +245,15 @@ HELP
243
245
  end
244
246
 
245
247
  def prereleases
246
- body=spaceship.send(:request, :get, '/xcode/download/').body
247
- links=body.scan(/<a.+?href="(.+?.dmg)".*>(.*)<\/a>/)
248
+ body = spaceship.send(:request, :get, '/xcode/download/').body
249
+ links = body.scan(%r{<a.+?href="(.+?.dmg)".*>(.*)</a>})
248
250
  links = links.map do |link|
249
- parent = link[0].scan(/path=(\/.*\/.*\/)/).first.first
251
+ parent = link[0].scan(%r{path=(/.*/.*/)}).first.first
250
252
  match = body.scan(/#{Regexp.quote(parent)}(.+?.pdf)/).first
251
253
  if match
252
- link += [parent + match.first]
254
+ link + [parent + match.first]
253
255
  else
254
- link += [nil]
256
+ link + [nil]
255
257
  end
256
258
  end
257
259
  links.map { |pre| Xcode.new_prerelease(pre[1].strip.gsub(/.*Xcode /, ''), pre[0], pre[2]) }
@@ -266,6 +268,22 @@ HELP
266
268
  puts `/usr/sbin/spctl --assess --verbose=4 --type execute #{path}`
267
269
  $?.exitstatus == 0
268
270
  end
271
+
272
+ def hdiutil(*args)
273
+ io = IO.popen(['hdiutil', *args])
274
+ result = io.read
275
+ io.close
276
+ fail Informative, 'Failed to invoke hdiutil.' unless $?.exitstatus == 0
277
+ result
278
+ end
279
+
280
+ def mount(dmg_path)
281
+ plist = hdiutil('mount', '-plist', '-nobrowse', '-noverify', dmg_path.to_s)
282
+ document = REXML::Document.new(plist)
283
+ node = REXML::XPath.first(document, "//key[.='mount-point']/following-sibling::*[1]")
284
+ fail Informative, 'Failed to mount image.' unless node
285
+ node.text
286
+ end
269
287
  end
270
288
 
271
289
  class Simulator
@@ -327,7 +345,7 @@ HELP
327
345
 
328
346
  def prepare_package
329
347
  puts 'Mounting DMG'
330
- mount_location = `hdiutil mount -nobrowse -noverify #{dmg_path}`.scan(/\/Volumes.*\n/).first.chomp
348
+ mount_location = mount(dmg_path)
331
349
  puts 'Expanding pkg'
332
350
  expanded_pkg_path = CACHE_DIR + identifier
333
351
  FileUtils.rm_rf(expanded_pkg_path)
@@ -382,7 +400,7 @@ HELP
382
400
  end
383
401
 
384
402
  def version
385
- @version ||= get_version
403
+ @version ||= fetch_version
386
404
  end
387
405
 
388
406
  def bundle_version
@@ -426,7 +444,7 @@ HELP
426
444
  `/usr/libexec/PlistBuddy -c "Print :#{keypath}" "#{path}/Contents/Info.plist"`.chomp
427
445
  end
428
446
 
429
- def get_version
447
+ def fetch_version
430
448
  output = `DEVELOPER_DIR='' "#{@path}/Contents/Developer/usr/bin/xcodebuild" -version`
431
449
  return '0.0' if output.nil? # ¯\_(ツ)_/¯
432
450
  output.split("\n").first.split(' ')[1]
@@ -467,7 +485,6 @@ HELP
467
485
 
468
486
  def self.new_prerelease(version, url, release_notes_path)
469
487
  new('name' => version,
470
- 'dateModified' => Time.now.to_i,
471
488
  'files' => [{ 'remotePath' => url.split('=').last }],
472
489
  'release_notes_path' => release_notes_path)
473
490
  end
@@ -35,15 +35,12 @@ module XcodeInstall
35
35
  return if @version.nil?
36
36
  fail Informative, "Version #{@version} already installed." if @installer.installed?(@version)
37
37
  fail Informative, "Version #{@version} doesn't exist." unless @installer.exist?(@version)
38
-
39
- if @url
40
- fail Informative, "Invalid URL: `#{@url}`" unless @url =~ /\A#{URI::regexp}\z/
41
- end
38
+ fail Informative, "Invalid URL: `#{@url}`" unless !@url || @url =~ /\A#{URI.regexp}\z/
42
39
  end
43
40
 
44
41
  def run
45
42
  @installer.install_version(@version, @should_switch, @should_clean, @should_install,
46
- @progress, @url)
43
+ @progress, @url)
47
44
  end
48
45
  end
49
46
  end
@@ -17,7 +17,7 @@ module XcodeInstall
17
17
  def validate!
18
18
  super
19
19
 
20
- fail Informative, "Please specify a version to select." if @version.nil?
20
+ fail Informative, 'Please specify a version to select.' if @version.nil?
21
21
  fail Informative, "Version #{@version} not installed." unless @installer.installed?(@version)
22
22
  end
23
23
 
@@ -24,23 +24,24 @@ module XcodeInstall
24
24
  :private
25
25
 
26
26
  def install
27
- filtered_simulators = @installed_xcodes.map { |x| x.available_simulators }.flatten.select do |sim|
27
+ filtered_simulators = @installed_xcodes.map(&:available_simulators).flatten.select do |sim|
28
28
  sim.version.to_s.start_with?(@install)
29
29
  end
30
- if filtered_simulators.count == 0
30
+ case filtered_simulators.count
31
+ when 0
31
32
  puts "[!] No simulator matching #{@install} was found. Please specify a version from the following available simulators:".ansi.red
32
33
  list
33
34
  exit 1
34
- elsif filtered_simulators.count == 1
35
+ when 1
35
36
  simulator = filtered_simulators.first
36
37
  fail Informative, "#{simulator.name} is already installed." if simulator.installed?
37
38
  puts "Installing #{simulator.name} for Xcode #{simulator.xcode.bundle_version}..."
38
39
  simulator.install
39
40
  else
40
41
  puts "[!] More than one simulator matching #{@install} was found. Please specify the full version.".ansi.red
41
- filtered_simulators.each do |simulator|
42
- puts "Xcode #{simulator.xcode.bundle_version} (#{simulator.xcode.path})".ansi.green
43
- puts "xcode-install simulator --install=#{simulator.version}"
42
+ filtered_simulators.each do |candidate|
43
+ puts "Xcode #{candidate.xcode.bundle_version} (#{candidate.xcode.path})".ansi.green
44
+ puts "xcode-install candidate --install=#{candidate.version}"
44
45
  end
45
46
  exit 1
46
47
  end
@@ -25,10 +25,9 @@ module XcodeInstall
25
25
 
26
26
  `sudo rm -rf #{installed_path.path}`
27
27
 
28
- if @installer.symlinks_to == installed_path.path
29
- newest_version = @installer.installed_versions.last
30
- @installer.symlink(newest_version)
31
- end
28
+ return unless @installer.symlinks_to == installed_path.path
29
+ newest_version = @installer.installed_versions.last
30
+ @installer.symlink(newest_version)
32
31
  end
33
32
  end
34
33
  end
@@ -1,3 +1,3 @@
1
1
  module XcodeInstall
2
- VERSION = '1.1.0'
2
+ VERSION = '1.2.0'
3
3
  end
@@ -4,7 +4,7 @@ module XcodeInstall
4
4
  describe Command::InstallCLITools do
5
5
  it 'fails if tools are already installed' do
6
6
  Command::InstallCLITools.any_instance.expects(:installed?).returns(true)
7
- lambda { Command::InstallCLITools.run }.should.raise(SystemExit)
7
+ -> { Command::InstallCLITools.run }.should.raise(SystemExit)
8
8
  end
9
9
 
10
10
  it 'runs if tools are not installed' do
@@ -0,0 +1,26 @@
1
+ require File.expand_path('../spec_helper', __FILE__)
2
+
3
+ module XcodeInstall
4
+ def self.silence_stderr
5
+ begin
6
+ orig_stderr = $stderr.clone
7
+ $stderr.reopen File.new('/dev/null', 'w')
8
+ retval = yield
9
+ ensure
10
+ $stderr.reopen orig_stderr
11
+ end
12
+ retval
13
+ end
14
+
15
+ describe Curl do
16
+ it 'reports failure' do
17
+ `true`
18
+ curl = XcodeInstall::Curl.new
19
+ result = nil
20
+ XcodeInstall.silence_stderr do
21
+ result = curl.fetch('http://0.0.0.0/test')
22
+ end
23
+ result.should == false
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,31 @@
1
+ <plist version="1.0">
2
+ <dict>
3
+ <key>system-entities</key>
4
+ <array>
5
+ <dict>
6
+ <key>content-hint</key>
7
+ <string>GUID_partition_scheme</string>
8
+ <key>dev-entry</key>
9
+ <string>/dev/disk2</string>
10
+ <key>potentially-mountable</key>
11
+ <false/>
12
+ <key>unmapped-content-hint</key>
13
+ <string>GUID_partition_scheme</string>
14
+ </dict>
15
+ <dict>
16
+ <key>content-hint</key>
17
+ <string>Apple_HFS</string>
18
+ <key>dev-entry</key>
19
+ <string>/dev/disk2s1</string>
20
+ <key>mount-point</key>
21
+ <string>/Volumes/XcodeME</string>
22
+ <key>potentially-mountable</key>
23
+ <true/>
24
+ <key>unmapped-content-hint</key>
25
+ <string>48465300-0000-11AA-AA11-00306543ECAC</string>
26
+ <key>volume-kind</key>
27
+ <string>hfs</string>
28
+ </dict>
29
+ </array>
30
+ </dict>
31
+ </plist>
@@ -2,37 +2,47 @@ require File.expand_path('../spec_helper', __FILE__)
2
2
 
3
3
  module XcodeInstall
4
4
  describe Command::Install do
5
- before do
6
- Installer.any_instance.stubs(:exists).returns(true)
7
- Installer.any_instance.stubs(:installed).returns([])
8
- fixture = Pathname.new('spec/fixtures/xcode_63.json').read
9
- xcode = Xcode.new(JSON.parse(fixture))
10
- Installer.any_instance.stubs(:seedlist).returns([xcode])
11
- end
5
+ describe 'when invoked' do
6
+ before do
7
+ Installer.any_instance.stubs(:exists).returns(true)
8
+ Installer.any_instance.stubs(:installed).returns([])
9
+ fixture = Pathname.new('spec/fixtures/xcode_63.json').read
10
+ xcode = Xcode.new(JSON.parse(fixture))
11
+ Installer.any_instance.stubs(:seedlist).returns([xcode])
12
+ end
12
13
 
13
- it 'downloads and installs' do
14
- Installer.any_instance.expects(:download).with('6.3', true, nil).returns('/some/path')
15
- Installer.any_instance.expects(:install_dmg).with('/some/path', '-6.3', true, true)
16
- Command::Install.run(['6.3'])
17
- end
14
+ it 'downloads and installs' do
15
+ Installer.any_instance.expects(:download).with('6.3', true, nil).returns('/some/path')
16
+ Installer.any_instance.expects(:install_dmg).with('/some/path', '-6.3', true, true)
17
+ Command::Install.run(['6.3'])
18
+ end
18
19
 
19
- it 'downloads and installs with custom HTTP URL' do
20
- url = 'http://yolo.com/xcode.dmg'
21
- Installer.any_instance.expects(:download).with('6.3', true, url).returns('/some/path')
22
- Installer.any_instance.expects(:install_dmg).with('/some/path', '-6.3', true, true)
23
- Command::Install.run(['6.3', "--url=#{url}"])
24
- end
20
+ it 'downloads and installs with custom HTTP URL' do
21
+ url = 'http://yolo.com/xcode.dmg'
22
+ Installer.any_instance.expects(:download).with('6.3', true, url).returns('/some/path')
23
+ Installer.any_instance.expects(:install_dmg).with('/some/path', '-6.3', true, true)
24
+ Command::Install.run(['6.3', "--url=#{url}"])
25
+ end
26
+
27
+ it 'downloads and installs and does not switch if --no-switch given' do
28
+ Installer.any_instance.expects(:download).with('6.3', true, nil).returns('/some/path')
29
+ Installer.any_instance.expects(:install_dmg).with('/some/path', '-6.3', false, true)
30
+ Command::Install.run(['6.3', '--no-switch'])
31
+ end
25
32
 
26
- it 'downloads and installs and does not switch if --no-switch given' do
27
- Installer.any_instance.expects(:download).with('6.3', true, nil).returns('/some/path')
28
- Installer.any_instance.expects(:install_dmg).with('/some/path', '-6.3', false, true)
29
- Command::Install.run(['6.3', '--no-switch'])
33
+ it 'downloads without progress if switch --no-progress is given' do
34
+ Installer.any_instance.expects(:download).with('6.3', false, nil).returns('/some/path')
35
+ Installer.any_instance.expects(:install_dmg).with('/some/path', '-6.3', true, true)
36
+ Command::Install.run(['6.3', '--no-progress'])
37
+ end
30
38
  end
31
39
 
32
- it 'downloads without progress if switch --no-progress is given' do
33
- Installer.any_instance.expects(:download).with('6.3', false, nil).returns('/some/path')
34
- Installer.any_instance.expects(:install_dmg).with('/some/path', '-6.3', true, true)
35
- Command::Install.run(['6.3', '--no-progress'])
40
+ it 'parses hdiutil output' do
41
+ installer = Installer.new
42
+ fixture = Pathname.new('spec/fixtures/hdiutil.plist').read
43
+ installer.expects(:hdiutil).with('mount', '-plist', '-nobrowse', '-noverify', '/some/path').returns(fixture)
44
+ location = installer.send(:mount, Pathname.new('/some/path'))
45
+ location.should == '/Volumes/XcodeME'
36
46
  end
37
47
  end
38
48
  end
@@ -13,6 +13,8 @@ Gem::Specification.new do |spec|
13
13
  spec.homepage = 'https://github.com/neonichu/xcode-install'
14
14
  spec.license = 'MIT'
15
15
 
16
+ spec.required_ruby_version = '>= 2.0.0'
17
+
16
18
  spec.files = `git ls-files -z`.split("\x0")
17
19
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
20
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xcode-install
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Boris Bügling
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-02 00:00:00.000000000 Z
11
+ date: 2015-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: claide
@@ -76,7 +76,6 @@ description: Download, install and upgrade Xcodes with ease.
76
76
  email:
77
77
  - boris@icculus.org
78
78
  executables:
79
- - xcode-install
80
79
  - xcversion
81
80
  - "\U0001F389"
82
81
  extensions: []
@@ -85,12 +84,12 @@ files:
85
84
  - ".gitattributes"
86
85
  - ".gitignore"
87
86
  - ".rubocop.yml"
87
+ - ".rubocop_todo.yml"
88
88
  - ".travis.yml"
89
89
  - Gemfile
90
90
  - LICENSE.txt
91
91
  - README.md
92
92
  - Rakefile
93
- - bin/xcode-install
94
93
  - bin/xcversion
95
94
  - "bin/\U0001F389"
96
95
  - lib/xcode/install.rb
@@ -107,6 +106,7 @@ files:
107
106
  - lib/xcode/install/update.rb
108
107
  - lib/xcode/install/version.rb
109
108
  - spec/cli_spec.rb
109
+ - spec/curl_spec.rb
110
110
  - spec/fixtures/devcenter/xcode-20150414.html
111
111
  - spec/fixtures/devcenter/xcode-20150427.html
112
112
  - spec/fixtures/devcenter/xcode-20150508.html
@@ -114,6 +114,7 @@ files:
114
114
  - spec/fixtures/devcenter/xcode-20150608.html
115
115
  - spec/fixtures/devcenter/xcode-20150624.html
116
116
  - spec/fixtures/devcenter/xcode-20150909.html
117
+ - spec/fixtures/hdiutil.plist
117
118
  - spec/fixtures/xcode.json
118
119
  - spec/fixtures/xcode_63.json
119
120
  - spec/fixtures/yolo.json
@@ -136,7 +137,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
136
137
  requirements:
137
138
  - - ">="
138
139
  - !ruby/object:Gem::Version
139
- version: '0'
140
+ version: 2.0.0
140
141
  required_rubygems_version: !ruby/object:Gem::Requirement
141
142
  requirements:
142
143
  - - ">="
@@ -150,6 +151,7 @@ specification_version: 4
150
151
  summary: Xcode installation manager.
151
152
  test_files:
152
153
  - spec/cli_spec.rb
154
+ - spec/curl_spec.rb
153
155
  - spec/fixtures/devcenter/xcode-20150414.html
154
156
  - spec/fixtures/devcenter/xcode-20150427.html
155
157
  - spec/fixtures/devcenter/xcode-20150508.html
@@ -157,6 +159,7 @@ test_files:
157
159
  - spec/fixtures/devcenter/xcode-20150608.html
158
160
  - spec/fixtures/devcenter/xcode-20150624.html
159
161
  - spec/fixtures/devcenter/xcode-20150909.html
162
+ - spec/fixtures/hdiutil.plist
160
163
  - spec/fixtures/xcode.json
161
164
  - spec/fixtures/xcode_63.json
162
165
  - spec/fixtures/yolo.json
@@ -1,5 +0,0 @@
1
- #!/bin/bash
2
- set -euo pipefail
3
- >&2 echo 'DEPRECATED: `xcode-install` is now named `🎉` (or `xcversion`)'
4
- DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
5
- exec $DIR/xcversion $@