Class: 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.



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

#dirObject (readonly)

Returns the value of attribute dir.



10
11
12
# File 'lib/bct/cask.rb', line 10

def dir
  @dir
end

#nameObject (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

Returns:

  • (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

Yields:

Yield Parameters:

  • _self (Cask)

    the object that the method was called on



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_versionObject



26
27
28
# File 'lib/bct/cask.rb', line 26

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

#deprecated?Boolean

Returns:

  • (Boolean)


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

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

#filter_infoObject



22
23
24
# File 'lib/bct/cask.rb', line 22

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

#installed_versionObject



30
31
32
# File 'lib/bct/cask.rb', line 30

def installed_version
  local_versions.last
end

#local_metadata_versionsObject



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_versionsObject



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_metadataObject



77
78
79
80
# File 'lib/bct/cask.rb', line 77

def 
  _, *previous = .reverse
  previous
end

#old_versionsObject



72
73
74
75
# File 'lib/bct/cask.rb', line 72

def old_versions
  _, *previous = local_versions.reverse
  previous
end

#outdated?Boolean

Returns:

  • (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

#upgradeObject



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