Module: Bcupgrade

Defined in:
lib/bcupgrade.rb,
lib/bcupgrade/version.rb,
lib/bcupgrade/brew_cask.rb

Constant Summary collapse

VERSION =
'0.2.0'.freeze
CASKROOM_PATH =
'/usr/local/Caskroom'.freeze

Class Method Summary collapse

Class Method Details

.brew_cask_info(cask) ⇒ Object



8
9
10
# File 'lib/bcupgrade/brew_cask.rb', line 8

def self.brew_cask_info(cask)
  `brew cask info #{cask}`
end

.brew_cask_install(cask) ⇒ Object



16
17
18
# File 'lib/bcupgrade/brew_cask.rb', line 16

def self.brew_cask_install(cask)
  system "brew cask install --force #{cask}"
end

.brew_cask_listObject



4
5
6
# File 'lib/bcupgrade/brew_cask.rb', line 4

def self.brew_cask_list
  `brew cask list`
end

.brew_cask_remove(cask) ⇒ Object



12
13
14
# File 'lib/bcupgrade/brew_cask.rb', line 12

def self.brew_cask_remove(cask)
  system "rm -rf #{CASKROOM_PATH}/#{cask}"
end

.check_listObject



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/bcupgrade.rb', line 19

def self.check_list
  cask_list = Bcupgrade.brew_cask_list.split("\n")

  installed_casks = []
  error_casks = []
  cask_list.each do |cask|
    if cask.include?(' (!)')
      error_casks.push(cask.delete(' (!)'))
    else
      installed_casks.push(cask)
    end
  end

  [installed_casks, error_casks]
end

.check_version(cask) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/bcupgrade.rb', line 35

def self.check_version(cask)
  cask_info = Bcupgrade.brew_cask_info(cask)
  lines = cask_info.split(/\n/)
  latest_version = if lines[0].nil?
                     'error'
                   else
                     lines[0].gsub(/.+: (.+)/, '\1')
                   end
  installed_path = "#{Bcupgrade::CASKROOM_PATH}/#{cask}/#{latest_version}"

  cask_info.include?(installed_path) ? nil : latest_version
end

.installed_casks(casks, config) ⇒ Object



11
12
13
14
15
16
17
# File 'lib/bcupgrade.rb', line 11

def self.installed_casks(casks, config)
  if config.nil?
    casks
  else
    casks - Array(config['ignore'])
  end
end

.load_configObject



6
7
8
9
# File 'lib/bcupgrade.rb', line 6

def self.load_config
  file = File.join(ENV['HOME'], '.bcupgrade')
  YAML.load_file(file) if File.exist?(file)
end

.run(option = false) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/bcupgrade.rb', line 59

def self.run(option = false)
  config = Bcupgrade.load_config

  # Check cask list
  puts "\n==> Check 'brew cask list'...\n"

  cask_list = Bcupgrade.check_list
  installed_casks = Bcupgrade.installed_casks(cask_list[0], config)
  error_casks = cask_list[1]

  puts "#{installed_casks}\n"

  unless error_casks == []
    puts "\nSkip re-install: can't found brew cask info\n#{error_casks}\n"
  end

  # Check cask version
  puts "\n==> Check 'brew cask info' for the latest available version...\n"

  update_casks = []
  installed_casks.each do |cask|
    latest_version = Bcupgrade.check_version(cask)
    if latest_version
      puts "#{cask} / #{latest_version}"
      update_casks.push(cask)
    end
  end

  # Upgrade cask
  if update_casks.any?
    Bcupgrade.upgrade(update_casks) if option
  else
    puts "\nAlready up-to-date."
  end
end

.upgrade(casks) ⇒ Object



48
49
50
51
52
53
54
55
56
57
# File 'lib/bcupgrade.rb', line 48

def self.upgrade(casks)
  casks.each do |cask|
    input = Readline.readline("\nUpgrade #{cask}? [y/n] ")
    next unless input == 'y'
    puts "remove #{cask}"
    Bcupgrade.brew_cask_remove(cask)
    puts "install #{cask}"
    Bcupgrade.brew_cask_install(cask)
  end
end