class ImageOptim::Runner
Handling optimization using image_optim binary
Public Class Methods
new(options)
click to toggle source
# File lib/image_optim/runner.rb, line 48 def initialize(options) options = HashHelpers.deep_symbolise_keys(options) @recursive = options.delete(:recursive) @progress = options.delete(:show_progress) != false @exclude_dir_globs, @exclude_file_globs = %w[dir file].map do |type| glob = options.delete(:"exclude_#{type}_glob") || '.*' GlobHelpers.expand_braces(glob) end @image_optim = ImageOptim.new(options) end
Public Instance Methods
run!(args)
click to toggle source
# File lib/image_optim/runner.rb, line 59 def run!(args) to_optimize = find_to_optimize(args) unless to_optimize.empty? results = Results.new optimize_images!(to_optimize).each do |original, optimized| results.add(original, optimized) end results.print end !@warnings end
Private Instance Methods
exclude?(dir, path, globs)
click to toggle source
Check if any of globs matches either part of path relative from dir or just basename
# File lib/image_optim/runner.rb, line 128 def exclude?(dir, path, globs) relative_path = Pathname(path).relative_path_from(Pathname(dir)).to_s basename = File.basename(path) globs.any? do |glob| File.fnmatch(glob, relative_path, File::FNM_PATHNAME) || File.fnmatch(glob, basename, File::FNM_PATHNAME) end end
exclude_dir?(dir, path)
click to toggle source
# File lib/image_optim/runner.rb, line 118 def exclude_dir?(dir, path) exclude?(dir, path, @exclude_dir_globs) end
exclude_file?(dir, path)
click to toggle source
# File lib/image_optim/runner.rb, line 122 def exclude_file?(dir, path) exclude?(dir, path, @exclude_file_globs) end
find_to_optimize(paths)
click to toggle source
# File lib/image_optim/runner.rb, line 81 def find_to_optimize(paths) to_optimize = [] paths.each do |path| if File.file?(path) if @image_optim.optimizable?(path) to_optimize << path else warning "#{path} is not an image or there is no optimizer for it" end elsif File.directory?(path) if @recursive to_optimize += find_to_optimize_recursive(path) else warning "#{path} is a directory, use --recursive option" end else warning "#{path} is not a file or a directory or does not exist" end end to_optimize end
find_to_optimize_recursive(dir)
click to toggle source
# File lib/image_optim/runner.rb, line 103 def find_to_optimize_recursive(dir) to_optimize = [] Find.find(dir) do |path| if File.file?(path) next if exclude_file?(dir, path) next unless @image_optim.optimizable?(path) to_optimize << path elsif File.directory?(path) Find.prune if dir != path && exclude_dir?(dir, path) end end to_optimize end
optimize_images!(to_optimize, &block)
click to toggle source
# File lib/image_optim/runner.rb, line 76 def optimize_images!(to_optimize, &block) to_optimize = to_optimize.with_progress('optimizing') if @progress @image_optim.optimize_images!(to_optimize, &block) end
warning(message)
click to toggle source
# File lib/image_optim/runner.rb, line 137 def warning(message) @warnings = true warn message end