class Lolcommits::CLI::TimelapseGif

Creates an animated timeline GIF of lolcommits history.

Attributes

loldir[RW]

Public Class Methods

new(loldir) click to toggle source

param loldir [String] path to loldir

# File lib/lolcommits/cli/timelapse_gif.rb, line 11
def initialize(loldir)
  self.loldir = loldir
end

Public Instance Methods

run(args = nil) click to toggle source

Runs the history timeline animator task thingy param args [String] the arg passed to the gif command on CLI (optional)

# File lib/lolcommits/cli/timelapse_gif.rb, line 17
def run(args = nil)
  case args
  when 'today'
    lolimages = jpg_images_today
    filename  = Date.today.to_s
  else
    lolimages = jpg_images
    filename  = "all-until-#{Time.now.strftime('%d-%b-%Y--%Hh%Mm%Ss')}"
  end

  if lolimages.empty?
    warn 'No lolcommits have been captured for this time yet.'
    exit 1
  end

  puts '*** Generating animated timelapse gif.'

  gif = MiniMagick::Image.new(File.join(timelapses_dir_path, "#{filename}.gif"))
  gif.run_command('convert', *['-delay', '50', '-loop', '0', lolimages, gif.path].flatten)

  puts "*** Done, generated at #{gif.path}"
end

Private Instance Methods

jpg_images() click to toggle source
# File lib/lolcommits/cli/timelapse_gif.rb, line 44
def jpg_images
  Dir.glob(File.join(loldir, '*.jpg')).sort_by { |f| File.mtime(f) }
end
jpg_images_today() click to toggle source
# File lib/lolcommits/cli/timelapse_gif.rb, line 48
def jpg_images_today
  jpg_images.select { |f| Date.parse(File.mtime(f).to_s) == Date.today }
end
timelapses_dir_path() click to toggle source
# File lib/lolcommits/cli/timelapse_gif.rb, line 52
def timelapses_dir_path
  dir = File.join(loldir, 'timelapses')
  FileUtils.mkdir_p(dir)
  dir
end