Class: CocoapodsAssetsCleaner::AssetsCleaner

Inherits:
Object
  • Object
show all
Defined in:
lib/cocoapods-assets-cleaner/assets_cleaner.rb

Instance Method Summary collapse

Constructor Details

#initialize(main_project_path_param, assets_path_param) ⇒ AssetsCleaner

Returns a new instance of AssetsCleaner.



6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/cocoapods-assets-cleaner/assets_cleaner.rb', line 6

def initialize(main_project_path_param, assets_path_param)
  @main_project_path = main_project_path_param
  @assets_path = assets_path_param

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

Instance Method Details

#check_and_extact_unsed_images(images, path) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/cocoapods-assets-cleaner/assets_cleaner.rb', line 50

def check_and_extact_unsed_images(images, path)
  unused_images = {}
  count = 0

  images.each do |image_name, image_path|
    command_sh = `grep -R -l --exclude-dir=Assets.xcassets "#{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) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# 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) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# 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_cleanObject



20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/cocoapods-assets-cleaner/assets_cleaner.rb', line 20

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)
  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) ⇒ Object



39
40
41
42
43
44
45
46
47
48
# 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) ⇒ Object



34
35
36
37
# File 'lib/cocoapods-assets-cleaner/assets_cleaner.rb', line 34

def show_indicator_percentage(i)
  printf("\r%d%% %s", i, @spinner.next)
  sleep(0.1)
end