Class: Cask
- Inherits:
-
Thor::Shell::Basic
- Object
- Thor::Shell::Basic
- Cask
- Defined in:
- lib/bct/cask.rb
Overview
Cask control class. Implements operations on a single cask.
Instance Attribute Summary collapse
-
#dir ⇒ Object
readonly
Returns the value of attribute dir.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Instance Method Summary collapse
- #can_cleanup? ⇒ Boolean
- #cleanup {|_self, old_versions| ... } ⇒ Object
- #current_version ⇒ Object
- #deprecated? ⇒ Boolean
- #filter_info ⇒ Object
-
#initialize(name) ⇒ Cask
constructor
A new instance of Cask.
- #installed_version ⇒ Object
- #local_metadata_versions ⇒ Object
- #local_versions ⇒ Object
- #old_metadata ⇒ Object
- #old_versions ⇒ Object
- #outdated? ⇒ Boolean
- #rm(dir) ⇒ Object
- #rm_metadata(version) ⇒ Object
- #rm_old(versions, method) ⇒ Object
- #rm_version(version) ⇒ Object
- #upgrade ⇒ Object
Constructor Details
#initialize(name) ⇒ Cask
Returns a new instance of Cask.
12 13 14 15 16 17 18 19 20 |
# File 'lib/bct/cask.rb', line 12 def initialize(name) super() @name = name @info = deprecated? ? [] : `brew cask info #{name}`.split("\n") @name = @name.delete(' (!)') if deprecated? @deprecated = deprecated? @dir = File.join(CASKROOM, @name) # filter_info end |
Instance Attribute Details
#dir ⇒ Object (readonly)
Returns the value of attribute dir.
10 11 12 |
# File 'lib/bct/cask.rb', line 10 def dir @dir end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
10 11 12 |
# File 'lib/bct/cask.rb', line 10 def name @name end |
Instance Method Details
#can_cleanup? ⇒ Boolean
48 49 50 51 |
# File 'lib/bct/cask.rb', line 48 def can_cleanup? return if @deprecated (local_versions.length > 1 || .length > 1) end |
#cleanup {|_self, old_versions| ... } ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/bct/cask.rb', line 82 def cleanup return unless can_cleanup? if @deprecated == true yield self, local_versions # Delete the whole cask rm(@dir) return end yield self, old_versions rm_old(old_versions, method(:rm_version)) rm_old(, method(:rm_metadata)) end |
#current_version ⇒ Object
26 27 28 |
# File 'lib/bct/cask.rb', line 26 def current_version @info[0].sub("#{@name}: ", '') end |
#deprecated? ⇒ Boolean
44 45 46 |
# File 'lib/bct/cask.rb', line 44 def deprecated? @deprecated ||= @name.include?('(!)') end |
#filter_info ⇒ Object
22 23 24 |
# File 'lib/bct/cask.rb', line 22 def filter_info @info.select! { |i| !i.end_with?('(does not exist)') } end |
#installed_version ⇒ Object
30 31 32 |
# File 'lib/bct/cask.rb', line 30 def installed_version local_versions.last end |
#local_metadata_versions ⇒ Object
38 39 40 41 42 |
# File 'lib/bct/cask.rb', line 38 def Dir.entries(File.join(@dir, '.metadata')).reject do |i| DIR_BLACKLIST.include?(i) end.sort end |
#local_versions ⇒ Object
34 35 36 |
# File 'lib/bct/cask.rb', line 34 def local_versions Dir.entries(@dir).reject { |i| DIR_BLACKLIST.include?(i) }.sort end |
#old_metadata ⇒ Object
77 78 79 80 |
# File 'lib/bct/cask.rb', line 77 def _, *previous = .reverse previous end |
#old_versions ⇒ Object
72 73 74 75 |
# File 'lib/bct/cask.rb', line 72 def old_versions _, *previous = local_versions.reverse previous end |
#outdated? ⇒ Boolean
53 54 55 |
# File 'lib/bct/cask.rb', line 53 def outdated? current_version != installed_version end |
#rm(dir) ⇒ Object
110 111 112 |
# File 'lib/bct/cask.rb', line 110 def rm(dir) ::FileUtils.rm_rf(dir, secure: true, verbose: true) end |
#rm_metadata(version) ⇒ Object
106 107 108 |
# File 'lib/bct/cask.rb', line 106 def (version) rm(File.join(@dir, '.metadata', version)) end |
#rm_old(versions, method) ⇒ Object
96 97 98 99 100 |
# File 'lib/bct/cask.rb', line 96 def rm_old(versions, method) versions.each do |version| method.call(version) end end |
#rm_version(version) ⇒ Object
102 103 104 |
# File 'lib/bct/cask.rb', line 102 def rm_version(version) rm(File.join(@dir, version)) end |
#upgrade ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/bct/cask.rb', line 57 def upgrade if outdated? say "Installing #{@name} (#{current_version})", :cyan cmd = "brew cask install #{@name} --force" Open3.popen2e(cmd) do |_stdin, stdout_err, _wait_thr| line = stdout_err.gets puts line while line end say "Upgraded #{@name} to version #{current_version}", :green else say "You have the most recent version of #{@name}. " \ 'It cannot be upgraded', :green end end |