Class: BrewCaskTools::Cask

Inherits:
Thor::Shell::Basic
  • Object
show all
Defined in:
lib/bct/cask.rb

Overview

Cask control class. Implements operations on a single cask.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Cask

Returns a new instance of Cask.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/bct/cask.rb', line 15

def initialize(name)
  super()

  @name = name

  if deprecated?
    info = []
    @name = name.delete(' (!)')
  else
    info = `brew cask info #{name}`.split("\n")
  end

  @info = Info.new(info)
  @deprecated = deprecated?
  @dir = File.join(CASKROOM, @name)
end

Instance Attribute Details

#dirObject (readonly)

Returns the value of attribute dir.



13
14
15
# File 'lib/bct/cask.rb', line 13

def dir
  @dir
end

#infoObject (readonly)

Returns the value of attribute info.



13
14
15
# File 'lib/bct/cask.rb', line 13

def info
  @info
end

#nameObject (readonly)

Returns the value of attribute name.



13
14
15
# File 'lib/bct/cask.rb', line 13

def name
  @name
end

Instance Method Details

#can_cleanup?Boolean

Returns:

  • (Boolean)


60
61
62
63
# File 'lib/bct/cask.rb', line 60

def can_cleanup?
  return true if @deprecated
  (local_versions.length > 1 || .length > 1)
end

#cleanup {|_self, old_versions| ... } ⇒ Object

Yields:

Yield Parameters:



96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/bct/cask.rb', line 96

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_versionObject



36
37
38
# File 'lib/bct/cask.rb', line 36

def current_version
  @info.short_name.sub("#{@name}: ", '')
end

#deprecated?Boolean

Returns:

  • (Boolean)


56
57
58
# File 'lib/bct/cask.rb', line 56

def deprecated?
  @deprecated ||= @name.include?('(!)')
end

#filter_infoObject



32
33
34
# File 'lib/bct/cask.rb', line 32

def filter_info
  @info.info.select! { |i| !i.end_with?('(does not exist)') }
end

#installed_versionObject



40
41
42
# File 'lib/bct/cask.rb', line 40

def installed_version
  local_versions.last
end

#local_metadata_versionsObject



50
51
52
53
54
# File 'lib/bct/cask.rb', line 50

def 
  Dir.entries(File.join(@dir, '.metadata'))
     .reject { |i| DIR_BLACKLIST.include?(i) }
     .sort
end

#local_versionsObject



44
45
46
47
48
# File 'lib/bct/cask.rb', line 44

def local_versions
  Dir.entries(@dir)
     .reject { |i| DIR_BLACKLIST.include?(i) }
     .sort
end

#old(arr) ⇒ Object



91
92
93
94
# File 'lib/bct/cask.rb', line 91

def old(arr)
  _, *previous = arr.reverse
  previous
end

#old_metadataObject



87
88
89
# File 'lib/bct/cask.rb', line 87

def 
  old()
end

#old_versionsObject



83
84
85
# File 'lib/bct/cask.rb', line 83

def old_versions
  old(local_versions)
end

#outdated?Boolean

Returns:

  • (Boolean)


65
66
67
# File 'lib/bct/cask.rb', line 65

def outdated?
  current_version != installed_version
end

#rm(dir) ⇒ Object



124
125
126
# File 'lib/bct/cask.rb', line 124

def rm(dir)
  ::FileUtils.rm_rf(dir, secure: true, verbose: true)
end

#rm_metadata(version) ⇒ Object



120
121
122
# File 'lib/bct/cask.rb', line 120

def (version)
  rm(File.join(@dir, '.metadata', version))
end

#rm_old(versions, method) ⇒ Object



110
111
112
113
114
# File 'lib/bct/cask.rb', line 110

def rm_old(versions, method)
  versions.each do |version|
    method.call(version)
  end
end

#rm_version(version) ⇒ Object



116
117
118
# File 'lib/bct/cask.rb', line 116

def rm_version(version)
  rm(File.join(@dir, version))
end

#upgradeObject



69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/bct/cask.rb', line 69

def upgrade
  return say "You have the most recent version of #{@name}. " \
  'It cannot be upgraded', :green unless outdated?

  say "Installing #{@name} (#{current_version})", :cyan
  cmd = "brew cask install #{@name} --force"
  Open3.popen2e(cmd) do |_stdin, stdout_err, _wait_thr|
    while line = stdout_err.gets
      puts line
    end
  end
  say "Upgraded #{@name} to version #{current_version}", :green
end