Vcr: рдЕрдкреНрд░рдпреБрдХреНрдд рдХреИрд╕реЗрдЯ рдХреЛ рд╕рд╛рдл рдХрд░рдирд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 19 рдорд╛рд░реНрдЪ 2013  ┬╖  13рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: vcr/vcr

рдХрд┐рд╕реА рдХреЛ рдХреИрд╕реЗрдЯ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдкрддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдЪрд╢реНрдореЗ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ? рдЕрдХреНрд╕рд░, рдореИрдВ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдХреИрд╕реЗрдЯ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдХреА рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рдкрд╛рддрд╛ рд╣реВрдВ рдФрд░ рдЯреНрд░реИрдХ рдЦреЛ рджреЗрддрд╛ рд╣реВрдВ рдЬреЛ рдЕрдм рдЙрдкрдпреЛрдЧ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@dideler рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд╕реНрдХрд░рдг рдпрд╣рд╛рдБред
рдпрд╣ рдлрд┐рдХреНрд╕реНрдЪрд░ рдХреЗ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рднреА рдХреИрд╕реЗрдЯ рдвреВрдВрдврддрд╛ рд╣реИ, рдФрд░ рдХреИрд╕реЗрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рд╡реАрд╕реАрдЖрд░ рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЗрдирдкреБрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

require 'set'
USED_CASSETTES = Set.new

RSpec.configure do |config|
  config.after(:suite) do
    cassettes = Dir[File.join(VCR.configuration.cassette_library_dir, '**/*.yml')].map { |d| File.expand_path(d) } - USED_CASSETTES.to_a
    if cassettes.any?
      puts "\nUnused cassettes:"
      puts cassettes.map { |f| f.sub(Rails.root.to_s, '') }
    end
  end
end

module CassetteReporter
  def insert_cassette(name, options = {})
    USED_CASSETTES << VCR::Cassette.new(name, options).file
    super
  end
end
VCR.extend(CassetteReporter)

рд╕рднреА 13 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╢реНрдиред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдЬрдм рдореИрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдХреИрд╕реЗрдЯ рдХрд╛ рдирд╛рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╡рд░рдг рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ-рдШреЛрдВрд╕рд▓реЗ рдпрд╛ рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкрд░рд┐рд╡рд░реНрддрди рдЙрдиреНрд╣реЗрдВ рдкреНрд░рднрд╛рд╡рд┐рдд рди рдХрд░реЗрдВред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдкреНрд░рдпреБрдХреНрдд рдХреИрд╕реЗрдЯ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рд╛рдзрди рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рддрд░реАрдХреЗ рд╕реЗ рдЙрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╢рд╛рдпрдж рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЕрдкрдирд╛ рдкреВрд░рд╛ рд╕реВрдЯ рдЪрд▓рд╛рдпрд╛ рдпрд╛ рдирд╣реАрдВ рдФрд░ рдХреНрдпрд╛ рдкрд┐рдЫрд▓реЗ рд░рди рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рд╕рд╢рд░реНрдд (рдпрд╛ рдЖрд░рдПрд╕рдкреАрд╕реА рдлрд┐рд▓реНрдЯрд░) рдЪрд▓ рд░рд╣рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд▓реЛрдб рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ / рдкреНрд░рдпреБрдХреНрдд рдХреИрд╕реЗрдЯред

рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

# In spec_helper.rb, for example:

require 'set'
USED_CASSETTES = Set.new

module CassetteReporter
  def insert_cassette(name, options = {})
    USED_CASSETTES << VCR::Cassette.new(name, options).file
    super
  end
end
VCR.extend(CassetteReporter)

RSpec.configure do |config|
  config.after(:all) {
    puts (Dir['spec/cassettes/**/*.yml'].map { |d| File.expand_path(d) } - USED_CASSETTES.to_a).inspect
  }
end

рдФрд░ рдлрд┐рд░ рдЕрдкрдирд╛ рдкреВрд░рд╛ рд╕реБрдЗрдЯ рдЪрд▓рд╛рдПрдВред рдпрд╣ рдЙрди рд╕рднреА рдХреИрд╕реЗрдЯреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдЧрд╛ рдЬреЛ рдЖрдкрдХреА spec/cassettes рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рдереЗ рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реВрдЯ рджреНрд╡рд╛рд░рд╛ рдХрднреА рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдереЗред

рдХреНрдпрд╛ рдЙрд╕рд╕реЗ рдорджрдж рд╣реБрдИ?

@nbibler рдХрд╛ рдЙрдкрд░реЛрдХреНрдд рд╕реБрдЭрд╛рд╡ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╣реИред

рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред

@nbibler рдмрдврд╝рд┐рдпрд╛, рд╕реБрдЭрд╛рд╡ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж :) рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд░реЗрдХ рдЯрд╛рд╕реНрдХ рдпрд╛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдирдпрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ?

рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдорд╛рдзрд╛рди: https://gist.github.com/dmitry/f4c7e4dbcf89673f5ede

@dmitry рдХреНрдпрд╛ рдЖрдк рд╡реАрд╕реАрдЖрд░ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЗрд╕ рдХрд╛рдо рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреГрдкрдпрд╛?

@douglascamata рд╣рд╛рдБ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдмрджрд▓рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдХреИрд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬрддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ @dmitry рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЖрдкрдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдореЗрд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ: https://gist.github.com/dideler/062a6d6722e137db55b2

рдореИрдВ рдХрднреА-рдХрднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рдмрд╕реЗрдЯ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ - рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рд╣рдо 'рдЕрдкреНрд░рдпреБрдХреНрдд' рдХреИрд╕реЗрдЯ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрди рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИ?

@dideler рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд╕реНрдХрд░рдг рдпрд╣рд╛рдБред
рдпрд╣ рдлрд┐рдХреНрд╕реНрдЪрд░ рдХреЗ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рднреА рдХреИрд╕реЗрдЯ рдвреВрдВрдврддрд╛ рд╣реИ, рдФрд░ рдХреИрд╕реЗрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рд╡реАрд╕реАрдЖрд░ рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЗрдирдкреБрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

require 'set'
USED_CASSETTES = Set.new

RSpec.configure do |config|
  config.after(:suite) do
    cassettes = Dir[File.join(VCR.configuration.cassette_library_dir, '**/*.yml')].map { |d| File.expand_path(d) } - USED_CASSETTES.to_a
    if cassettes.any?
      puts "\nUnused cassettes:"
      puts cassettes.map { |f| f.sub(Rails.root.to_s, '') }
    end
  end
end

module CassetteReporter
  def insert_cassette(name, options = {})
    USED_CASSETTES << VCR::Cassette.new(name, options).file
    super
  end
end
VCR.extend(CassetteReporter)

рдЗрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╡рд┐рдЪрд╛рд░ рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ рдЬрдм рд╕рдВрдкреВрд░реНрдг рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рд╣рд░ рдмрд╛рд░ рд╣рдорд╛рд░реЗ рд╕реАрдЖрдИ рдХреЗ рдЪрд▓рдиреЗ рдкрд░ рдирд┐рд░реНрднрд░ рд░реВрдк рд╕реЗ рдЪрд▓ рд╕рдХреЗ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рд╕рд╣рдорддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╣реЛрдЧрд╛ред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдВ рдЗрд╕ рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

@BenAkroyd рдбреЗрдЯрд╛рдмреЗрд╕/рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдм рдХреБрдЫ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдПрдХ рдмрд╛рд░ рд╕рднреА рд╕рдорд╛рдирд╛рдВрддрд░ рд╕рдорд╡рд░реНрддреА рдЪрд╢реНрдорд╛/рдкрд░реАрдХреНрд╖рдг рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдмрд╕ рд╕рдм рдХреБрдЫ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВ рдФрд░ рдЬрд╛рдВрдЪреЗрдВред рдпрд╛ рдЖрдк рдПрдХ рд╣реБрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ on_all_specs_finished рдЬрд╣рд╛рдВ рдЖрдк рдЪрд╢реНрдореЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рд▓рд┐рдЦрд┐рдд рдлрд╛рдЗрд▓реЗрдВ (рд╕рдорд╛рдирд╛рдВрддрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ) рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╕рднреА рд╡реАрд╕реАрдЖрд░ рдлрд┐рдХреНрд╕реНрдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рд╕рднреА рд╕реНрдкреЗрдХреНрд╕ рдХреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдПрдВ (рдорд╣реАрдиреЗ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╛рд░ рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рдФрд░ рдЕрдкреНрд░рдпреБрдХреНрдд рдХреЛ рд╣рдЯрд╛ рджреЗрдВред

@BookOfGreg рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдгред
рдкрд░рд┐рд╡рд░реНрддрди рд╣реИрдВ;

  • рдпрджрд┐ RSpec рдХреЛ рдЕрдиреНрдп рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреИрд╕реЗрдЯреЛрдВ рдХреА рд▓рдВрдмреА рд╕реВрдЪреА рдХреЛ рдореНрдпреВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд░рд┐рдкреЛрд░реНрдЯ рдЫреЛрдбрд╝реЗрдВред
  • рдЖрд░рдПрд╕рдкреАрдИрд╕реА рдХреЗ рдлреЙрд░реНрдореЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ рддрд╛рдХрд┐ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рддрд╣рдд рдЖрдЙрдЯрдкреБрдЯ рд╣реЛред
class UnusedCassetteFormatter
  def initialize(output)
    <strong i="11">@output</strong> = output
  end

  def dump_profile(_)
    return if (unused = list_unused).blank?

    print unused
  end

  def self.use(cassette_name, options = {})
    used_cassettes << VCR::Cassette.new(cassette_name, options).file
  end

  def self.used_cassettes
    <strong i="12">@used_cassettes</strong> ||= Set.new
  end

  private

  def print(unused)
    @output.puts "\nUnused cassettes:"
    unused.each do |f|
      @output.puts f.sub(Rails.root.to_s, "")
    end
  end

  def list_unused
    all = Dir[File.join(VCR.configuration.cassette_library_dir, "**/*.yml")].map do |d|
      File.expand_path(d)
    end

    all - self.class.used_cassettes.to_a
  end
end

RSpec.configure do |config|
  unless config.files_to_run.one?
    config.reporter.register_listener(UnusedCassetteFormatter.new(config.output_stream), :dump_profile)
  end
end

module CassetteReporter
  def insert_cassette(name, options = {})
    UnusedCassetteFormatter.use name, options
    super
  end
end

VCR.extend(CassetteReporter)
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

mpalmujoki picture mpalmujoki  ┬╖  11рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

krainboltgreene picture krainboltgreene  ┬╖  16рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

richardfontana picture richardfontana  ┬╖  23рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ce-walalang picture ce-walalang  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

superplussed picture superplussed  ┬╖  16рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ