Class: VCR::UnusedCassettes::Runner

Inherits:
Object
  • Object
show all
Defined in:
lib/vcr/unused_cassettes/runner.rb

Instance Method Summary collapse

Instance Method Details

#all_vcr_persistersObject



74
75
76
77
# File 'lib/vcr/unused_cassettes/runner.rb', line 74

def all_vcr_persisters
  # dirty, but VCR::Cassette::Persisters does not expose the persisters
  VCR.cassette_persisters.instance_variable_get(:@persisters)
end

#cassette_path_with_wildcard(name, persister) ⇒ Object



47
48
49
50
51
# File 'lib/vcr/unused_cassettes/runner.rb', line 47

def cassette_path_with_wildcard(name, persister)
  placeholder = "a_placeholder_that_should_not_exist"
  full_path = path_for_cassette(name.gsub("*", placeholder), persister)
  full_path.sub(placeholder, "*")
end

#default_or_option(type, option_name, cassette_use) ⇒ Object



60
61
62
# File 'lib/vcr/unused_cassettes/runner.rb', line 60

def default_or_option(type, option_name, cassette_use)
  cassette_use[type] || VCR.configuration.default_cassette_options[option_name]
end

#default_persisterObject



53
54
55
56
57
58
# File 'lib/vcr/unused_cassettes/runner.rb', line 53

def default_persister
  @default_persister ||= begin
    default_persister = VCR.configuration.default_cassette_options[:persist_with]
    VCR.configuration.cassette_persisters[default_persister]
  end
end

#find_existing_cassettesObject



33
34
35
36
37
38
39
# File 'lib/vcr/unused_cassettes/runner.rb', line 33

def find_existing_cassettes
  cassettes = []
  all_vcr_persisters.each do |_name, persister|
    cassettes += Dir.glob(cassette_path_with_wildcard("*", persister))
  end
  cassettes.uniq
end

#find_unused_cassettesObject



5
6
7
8
9
10
11
12
13
14
15
# File 'lib/vcr/unused_cassettes/runner.rb', line 5

def find_unused_cassettes
  existing_cassettes = find_existing_cassettes
  cassette_uses, warnings = used_cassettes_names_patterns
  cassette_uses.map! { |cassette_use| path_for_cassette_use(cassette_use) }

  unused_cassettes = existing_cassettes.select do |existing_cassette_name|
    !cassette_uses.any? { |used_cassette_name| File.fnmatch?(used_cassette_name, existing_cassette_name) }
  end

  [unused_cassettes, warnings]
end

#path_for_cassette(cassette_name, persister) ⇒ Object

Raises:



41
42
43
44
45
# File 'lib/vcr/unused_cassettes/runner.rb', line 41

def path_for_cassette(cassette_name, persister)
  result = persister.absolute_path_to_file(cassette_name)
  return result.to_s if result
  raise Error, "Could not determine path for cassette #{cassette_name}"
end

#path_for_cassette_use(cassette_use) ⇒ Object



64
65
66
67
68
69
70
71
72
# File 'lib/vcr/unused_cassettes/runner.rb', line 64

def path_for_cassette_use(cassette_use)
  persister_name = default_or_option(:persister, :persist_with, cassette_use)
  persister = VCR.configuration.cassette_persisters[persister_name]

  serializer_name = default_or_option(:serializer, :serialize_with, cassette_use)
  serializer = VCR.cassette_serializers[serializer_name]
  cassette_storage_key = "#{cassette_use[:pattern]}.#{serializer.file_extension}"
  cassette_path_with_wildcard(cassette_storage_key, persister)
end

#used_cassettes_names_patternsObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/vcr/unused_cassettes/runner.rb', line 17

def used_cassettes_names_patterns
  used_cassettes = []
  warnings = []

  file_list = `grep -r -l "VCR.use_cassette" test/`.split("\n")
  return [[], []] if file_list.empty? || $? != 0

  file_list.each do |file|
    found_usages, found_warnings = CassetteUsageFinder.new(file).find_cassette_usages
    used_cassettes += found_usages
    warnings += found_warnings
  end

  [used_cassettes, warnings]
end