module OneGadget::Update

For automatically check update.

Constants

CACHE_FILE

Path to cache file.

FREQUENCY

At least 30 days between check for new version.

Public Class Methods

check!() click to toggle source

Check if new releases have been drafted.

@return [void]

# File lib/one_gadget/update.rb, line 21
def check!
  return unless need_check?

  FileUtils.touch(cache_file)
  OneGadget::Logger.info("Checking for new versions of OneGadget\n" \
                         "To disable this functionality, do\n$ echo never > #{CACHE_FILE}\n\n")
  latest = Helper.latest_tag[1..-1] # remove 'v'
  if Gem::Version.new(latest) <= Gem::Version.new(OneGadget::VERSION)
    return OneGadget::Logger.info("You have the latest version of OneGadget (#{latest})!\n\n")
  end

  # show update message
  msg = format('A newer version of OneGadget is available (%s --> %s).', OneGadget::VERSION, latest)
  OneGadget::Logger.ask_update(msg: msg)
end

Private Class Methods

cache_file() click to toggle source
# File lib/one_gadget/update.rb, line 57
def cache_file
  dir = File.dirname(CACHE_FILE)
  FileUtils.mkdir_p(dir) unless File.directory?(dir)
  File.binwrite(CACHE_FILE, '') unless File.exist?(CACHE_FILE)
  CACHE_FILE
rescue Errno::EACCES # prevent dir is not writable
  nil
end
last_check() click to toggle source
# File lib/one_gadget/update.rb, line 50
def last_check
  cache = cache_file
  return Time.now if cache.nil?

  File.open(cache, &:mtime)
end
need_check?() click to toggle source

check ~/.cache/one_gadget/update

# File lib/one_gadget/update.rb, line 40
def need_check?
  cache = cache_file
  # don't check if not CLI
  return false unless $stdout.tty?
  return false if cache.nil? # cache file fails, no update check.
  return false if File.binread(cache).strip == 'never'

  Time.now >= last_check + FREQUENCY
end