Class: XcodeInstall::Simulator
- Inherits:
-
Object
- Object
- XcodeInstall::Simulator
- Defined in:
- lib/xcode/install.rb
Instance Attribute Summary collapse
-
#identifier ⇒ Object
readonly
Returns the value of attribute identifier.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#source ⇒ Object
readonly
Returns the value of attribute source.
-
#version ⇒ Object
readonly
Returns the value of attribute version.
-
#xcode ⇒ Object
readonly
Returns the value of attribute xcode.
Instance Method Summary collapse
- #apply_variables(template) ⇒ Object
- #dmg_path ⇒ Object
- #download ⇒ Object
-
#initialize(downloadable) ⇒ Simulator
constructor
A new instance of Simulator.
- #install ⇒ Object
- #installed? ⇒ Boolean
- #installed_string ⇒ Object
- #pkg_path ⇒ Object
- #prepare_package ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize(downloadable) ⇒ Simulator
Returns a new instance of Simulator.
324 325 326 327 328 329 330 |
# File 'lib/xcode/install.rb', line 324 def initialize(downloadable) @version = Gem::Version.new(downloadable['version']) @install_prefix = apply_variables(downloadable['userInfo']['InstallPrefix']) @name = apply_variables(downloadable['name']) @identifier = apply_variables(downloadable['identifier']) @source = apply_variables(downloadable['source']) end |
Instance Attribute Details
#identifier ⇒ Object (readonly)
Returns the value of attribute identifier.
320 321 322 |
# File 'lib/xcode/install.rb', line 320 def identifier @identifier end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
319 320 321 |
# File 'lib/xcode/install.rb', line 319 def name @name end |
#source ⇒ Object (readonly)
Returns the value of attribute source.
321 322 323 |
# File 'lib/xcode/install.rb', line 321 def source @source end |
#version ⇒ Object (readonly)
Returns the value of attribute version.
318 319 320 |
# File 'lib/xcode/install.rb', line 318 def version @version end |
#xcode ⇒ Object (readonly)
Returns the value of attribute xcode.
322 323 324 |
# File 'lib/xcode/install.rb', line 322 def xcode @xcode end |
Instance Method Details
#apply_variables(template) ⇒ Object
403 404 405 406 407 408 409 410 411 412 413 414 415 |
# File 'lib/xcode/install.rb', line 403 def apply_variables(template) variable_map = { '$(DOWNLOADABLE_VERSION_MAJOR)' => version.to_s.split('.')[0], '$(DOWNLOADABLE_VERSION_MINOR)' => version.to_s.split('.')[1], '$(DOWNLOADABLE_IDENTIFIER)' => identifier, '$(DOWNLOADABLE_VERSION)' => version.to_s }.freeze variable_map.each do |key, value| next unless template.include?(key) template.sub!(key, value) end template end |
#dmg_path ⇒ Object
395 396 397 |
# File 'lib/xcode/install.rb', line 395 def dmg_path CACHE_DIR + Pathname.new(source).basename end |
#download ⇒ Object
353 354 355 356 |
# File 'lib/xcode/install.rb', line 353 def download result = Curl.new.fetch(source, CACHE_DIR) result ? dmg_path : nil end |
#install ⇒ Object
358 359 360 361 362 363 364 365 366 367 368 369 370 |
# File 'lib/xcode/install.rb', line 358 def install download unless dmg_path.exist? prepare_package unless pkg_path.exist? puts "Please authenticate to install #{name}..." `sudo installer -pkg #{pkg_path} -target /` fail Informative, "Could not install #{name}, please try again" unless installed? source_receipts_dir = '/private/var/db/receipts' target_receipts_dir = "#{@install_prefix}/System/Library/Receipts" FileUtils.mkdir_p(target_receipts_dir) FileUtils.cp("#{source_receipts_dir}/#{@identifier}.bom", target_receipts_dir) FileUtils.cp("#{source_receipts_dir}/#{@identifier}.plist", target_receipts_dir) puts "Successfully installed #{name}" end |
#installed? ⇒ Boolean
332 333 334 335 |
# File 'lib/xcode/install.rb', line 332 def installed? # FIXME: use downloadables' `InstalledIfAllReceiptsArePresentOrNewer` key File.directory?(@install_prefix) end |
#installed_string ⇒ Object
337 338 339 |
# File 'lib/xcode/install.rb', line 337 def installed_string installed? ? 'installed' : 'not installed' end |
#pkg_path ⇒ Object
399 400 401 |
# File 'lib/xcode/install.rb', line 399 def pkg_path CACHE_DIR + "#{identifier}.pkg" end |
#prepare_package ⇒ Object
374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 |
# File 'lib/xcode/install.rb', line 374 def prepare_package puts 'Mounting DMG' mount_location = Installer.new.mount(dmg_path) puts 'Expanding pkg' = CACHE_DIR + identifier FileUtils.rm_rf() `pkgutil --expand #{mount_location}/*.pkg #{}` puts "Expanded pkg into #{}" puts 'Unmounting DMG' `umount #{mount_location}` puts 'Setting package installation location' package_info_path = + 'PackageInfo' package_info_contents = File.read(package_info_path) File.open(package_info_path, 'w') do |f| f << package_info_contents.sub('pkg-info', %(pkg-info install-location="#{@install_prefix}")) end puts 'Rebuilding package' `pkgutil --flatten #{} #{pkg_path}` FileUtils.rm_rf() end |
#to_s ⇒ Object
341 342 343 |
# File 'lib/xcode/install.rb', line 341 def to_s "#{name} (#{installed_string})" end |