Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions lib/cask.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
class Cask; end

require 'download_strategy'
require 'rubygems' # for version comparison

require 'cask/artifact'
require 'cask/audit'
Expand Down Expand Up @@ -86,6 +87,23 @@ def installed?
destination_path.exist?
end

def installed_version?
!installed_version.nil?
end

def installed_version
# returns latest installed version if possible
Pathname.glob(caskroom_path.join('*')).map(&:basename).sort{|x,y|
Gem::Version.new(x) <=> Gem::Version.new(y) # throws exception if invalid version is provided ...
}.last rescue nil # ... return nil in this case
end

def update_available?
Gem::Version.correct?(version) && # we have something to compare against in Cask file ...
installed_version? && # ... we can determine current installed version ...
Gem::Version.new(installed_version) < Gem::Version.new(version) # ... compare
end

def to_s
@title
end
Expand Down
2 changes: 2 additions & 0 deletions lib/cask/cli.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@ class Cask::CLI; end
require 'cask/cli/info'
require 'cask/cli/install'
require 'cask/cli/list'
require 'cask/cli/outdated'
require 'cask/cli/search'
require 'cask/cli/uninstall'
require 'cask/cli/upgrade'

class Cask::CLI
def self.commands
Expand Down
15 changes: 15 additions & 0 deletions lib/cask/cli/outdated.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
class Cask::CLI::Outdated
def self.run(*args)
upgradable = Cask.upgradable

if upgradable.length == 0
puts "All Casks up to date"
else
puts upgradable
end
end

def self.help
"lists all outdated Casks"
end
end
24 changes: 24 additions & 0 deletions lib/cask/cli/upgrade.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
class Cask::CLI::Upgrade
def self.run(*args)
cask_names_cmdline = args.reject { |a| a.chars.first == '-' }

if cask_names_cmdline.length > 0
upgradable_casks = cask_names_cmdline.map{|name| Cask.load(name)}.select(&:update_available?)
else
upgradable_casks = Cask.upgradable
end

odebug "Upgradable casks: #{upgradable_casks}"

puts "No upgrade available" if upgradable_casks.length == 0

upgradable_casks.each do |cask|
puts "Upgrading #{cask} from #{cask.installed_version} to #{cask.version}"
Cask::Installer.new(cask).install()
end
end

def self.help
"upgrades the cask (of the given name if name given)"
end
end
4 changes: 4 additions & 0 deletions lib/cask/scopes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,9 @@ def installed
Cask.load(dir.basename.to_s)
end
end

def upgradable
Cask.installed.select(&:update_available?)
end
end
end