class CocoapodsAssetsCleaner::AssetsCleaner

Public Class Methods

new(main_project_path_param, assets_path_param, excluded_dir_param) click to toggle source
# File lib/cocoapods-assets-cleaner/assets_cleaner.rb, line 6
def initialize(main_project_path_param, assets_path_param, excluded_dir_param)
  @main_project_path = main_project_path_param
  @assets_path = assets_path_param
  @excluded_dir = excluded_dir_param

  @spinner = Enumerator.new do |e|
    loop do
      e.yield "|"
      e.yield "/"
      e.yield "-"
      e.yield '\\'
    end
  end
end

Public Instance Methods

check_and_extact_unsed_images(images, path, excluded_dir) click to toggle source
# File lib/cocoapods-assets-cleaner/assets_cleaner.rb, line 50
def check_and_extact_unsed_images(images, path, excluded_dir)
  unused_images = {}
  count = 0

  images.each do |image_name, image_path|
    command_sh = `grep -R -l --exclude-dir=#{excluded_dir} "#{image_name}" #{path}`
    if command_sh == ""
      Pod::UI.puts "\r#{image_name} is not used.".yellow
      unused_images[image_name] = image_path
    else
      Pod::UI.puts "\r#{image_name} is used.".green
    end

    percentage = (100 * count) / images.count
    show_indicator_percentage(percentage)
    count += 1
  end
  return unused_images
end
get_images_directories_from_path(path) click to toggle source
# File lib/cocoapods-assets-cleaner/assets_cleaner.rb, line 89
def get_images_directories_from_path(path)
  all_dir = Dir.entries(path)
    .select { |entry| File.directory? File.join(path, entry) and !(entry == "." || entry == "..") }

  images = {}
  all_non_images_dir = []
  all_dir.each do |directory|
    new_path = File.join(path, directory)
    if directory.include? ".imageset"
      images[directory.gsub(".imageset", "")] = new_path
    else
      all_non_images_dir.push(new_path)
    end
  end

  return {
           :images => images,
           :directories => all_non_images_dir,
         }
end
get_images_from_path(path) click to toggle source
# File lib/cocoapods-assets-cleaner/assets_cleaner.rb, line 70
def get_images_from_path(path)
  result = get_images_directories_from_path(path)
  imagesets = result[:images]
  directories = result[:directories]

  while directories.count > 0
    current_directories = directories
    directories = []

    current_directories.each do |directory|
      new_result = get_images_directories_from_path(directory)
      new_result[:images].each { |key, value| imagesets[key] = value }
      directories += new_result[:directories] || []
    end
  end

  return imagesets
end
init_clean() click to toggle source
# File lib/cocoapods-assets-cleaner/assets_cleaner.rb, line 21
def init_clean
  Pod::UI.puts "Getting images from assets...".yellow
  imagesets = get_images_from_path(@assets_path)
  Pod::UI.puts "#{imagesets.count} images founded"

  Pod::UI.puts "Searching for unused images...".yellow
  unused_imagesets = check_and_extact_unsed_images(imagesets, @main_project_path, @excluded_dir)
  Pod::UI.puts "#{unused_imagesets.count} unused images founded"

  Pod::UI.puts "Removing unused images...".yellow
  removed_imagesets = unused_imagesets.map { |image_name, image_path| remove_unused_image(image_name, image_path) }
  Pod::UI.puts "Removed #{removed_imagesets.count} from #{unused_imagesets.count} unused images."
end
remove_unused_image(image_name, image_path) click to toggle source
# File lib/cocoapods-assets-cleaner/assets_cleaner.rb, line 39
def remove_unused_image(image_name, image_path)
  FileUtils.remove_dir(image_path)

  if File.directory?(image_path)
    Pod::UI.puts "Failure on removing #{image_name} Asset".red
    return false
  else
    return true
  end
end
show_indicator_percentage(i) click to toggle source
# File lib/cocoapods-assets-cleaner/assets_cleaner.rb, line 35
def show_indicator_percentage(i)
  printf("\r%d%% %s", i, @spinner.next)
end