class VcrBetterBinary::Pruner

Public Instance Methods

prune_bin_data(bin_data_dir:, cassette_http_bodies:) click to toggle source
# File lib/vcr_better_binary/pruner.rb, line 5
def prune_bin_data(bin_data_dir:, cassette_http_bodies:)
  if in_git_repo? && no_cassette_changes?
    return
  end

  in_use_keys = find_in_use_keys(cassette_http_bodies)

  Dir.glob(File.expand_path("*", bin_data_dir)).each do |bin_file|
    unless in_use_keys.include?(File.basename(bin_file))
      File.delete(bin_file)
    end
  end
end

Private Instance Methods

cassette_dir() click to toggle source
# File lib/vcr_better_binary/pruner.rb, line 37
def cassette_dir
  VCR.configuration.cassette_library_dir
end
find_in_use_keys(cassette_http_bodies) click to toggle source
# File lib/vcr_better_binary/pruner.rb, line 21
def find_in_use_keys(cassette_http_bodies)
  cassette_http_bodies.each_with_object(Set.new) do |http_body, in_use_keys|
    if http_body.key?(Serializer::BIN_KEY)
      in_use_keys << http_body[Serializer::BIN_KEY]
    end
  end
end
in_git_repo?() click to toggle source
# File lib/vcr_better_binary/pruner.rb, line 29
def in_git_repo?
  system("git -C '#{cassette_dir}' rev-parse --is-inside-work-tree > /dev/null 2>&1")
end
no_cassette_changes?() click to toggle source
# File lib/vcr_better_binary/pruner.rb, line 33
def no_cassette_changes?
  `git -C '#{cassette_dir}' status --porcelain -- '#{cassette_dir}'`.empty?
end