18F/18f.gsa.gov

View on GitHub
check_images.rb

Summary

Maintainability
A
45 mins
Test Coverage
# Find this on Github here: https://gist.github.com/gemfarmer/f3f2e35663b96cd3fa8d90b49e6216a0
require 'colorator' # Comment this out to run the script without colorator

built_path = '_site'
directory_name = 'tmp'
unique_path = 'check_images'
image_path = 'assets/img'
use_relative = false
ignore_removable = false
remove_all = false

if ARGV.include?('-h') || ARGV.include?('--help')
  puts 'Welcome to image_checker'
  puts "\n"
  puts 'Here are a few help flags:'
  puts '  -i, -I, or --image: Change the image path'
  puts '                      This is defaulted to assets/img'
  puts "\n"
  puts '  -b, -B, --built: Change the built project path.'
  puts '                   This is defaulted to _site'
  puts "\n"
  puts '  -d, -D, --dir_temp: Change the data storage path.'
  puts '                      This is defaulted to tmp'
  puts "\n"
  puts '  -r, -R, --use-relative: Use relative path check.'
  puts "\n"
  puts '  --ignore-removable: Don\'t scan files in removable_images.yml.'
  puts "\n"
  puts '  --remove: Remove all files in removable_images.yml.'
  exit
end

ARGV.map.with_index do |a, index|
  # Flags:
  # The image flag allows you to name the image path directory
  if a == '-i' || a == '-I' || a == '--image'
    image_path = ARGV[index + 1] ? ARGV[index + 1] : image_path
  end

  # Set reference for built project
  if a == '-b' || a == '-B' || a == '--built'
    built_path = ARGV[index + 1] ? ARGV[index + 1] : built_path
  end

  # Set folder where images are stored
  if a == '-d' || a == '-D' || a == '--dir_temp'
    directory_name = ARGV[index + 1] ? ARGV[index + 1] : directory_name
  end

  # Use relative file path to scan
  use_relative = true if a == '-r' || a == '-R' || a == '--use_relative'

  # Set folder where images are stored
  ignore_removable = true if a == '--ignore-removable'

  # Remove all files in removeable.yml
  remove_all = true if a == '--remove'
end

full_path = File.join(directory_name, unique_path, image_path)
`mkdir -p #{full_path}` unless File.exist?(full_path)

image_directory = Dir[File.join(image_path, '**', '*')]

if remove_all
  removable_images_file = File.join(full_path, 'removable_images.yml')
  lines = File.readlines(removable_images_file)
  lines.each do |line|
    # No colorator: comment this out and use the following line instead.
    puts "deleting #{line.sub("\n", '')}".red
    # puts "deleting #{line.sub("\n", "")}"
    `rm -rf #{line.sub("\n", '')}`
  end
  # No colorator: comment this out and use the following line instead.
  puts 'deleting contents of removable_images.yml'.red
  # puts "deleting contents of removable_images.yml"
  File.open(removable_images_file, 'w').close
else

  removable_images_file = File.join(full_path, 'removable_images.yml')
  removable_images = if File.exist?(removable_images_file)
                       File.open(removable_images_file, 'r+')
                     else
                       File.open(removable_images_file, 'w')
                     end
  skipped_images_file = File.join(full_path, 'skipped_images.yml')
  skipped_images = if File.exist?(skipped_images_file)
                     File.open(skipped_images_file, 'r+')
                   else
                     File.open(skipped_images_file, 'w')
                   end

  image_directory.map do |image|
    img_array = image.split('/')
    img_relative = "../#{img_array[1...img_array.length].join('/')}"

    ignored_items = [] || File.readlines(skipped_images_file)
    ignored_items += File.readlines(removable_images_file) if ignore_removable
    ignored_items = if ignored_items.any?
                      ignored_items
                    else
                      File.readlines(skipped_images_file)
                    end

    ignore = ignored_items.map do |m|
      image.include?(m.strip)
    end.include? true
    if !ignore
      # No colorator: comment this out and use the following line instead.
      if use_relative
        puts "checking #{img_relative}...".yellow
        # puts "checking #{image_relative}...".yellow
        output = `grep -r "#{img_relative}" #{built_path}`
      else
        puts "checking #{image}...".yellow
        # puts "checking #{image}...".yellow
        output = `grep -r "#{image}" #{built_path}`
      end
      # puts "checking #{image}..."

      if output.empty? || !output
        # No colorator: comment this out and use the following line instead.
        puts "Removeable: #{image}".red
        # puts "Removeable: #{image}"
        removable_images << "#{image}\n"
      else
        skipped_images << "#{image}\n"
      end
    else
      skipped_images << "#{image}\n"
    end
  end
  # No colorator: comment this out and use the following line instead.
  puts 'all checks done!!'.green
  # puts 'all checks done!!'

  removable_images.close
  skipped_images.close
end