Sha256: 5d8f3a81f0df049f0bc62efa7e8b4273faab3f148411c7aa3ae5e3e68f9d09cc

Contents?: true

Size: 1.29 KB

Versions: 1

Compression:

Stored size: 1.29 KB

Contents

require "vcr"
require "minispec-metadata"

module MinitestVcr
  module Spec

    def self.configure!
      run_before = lambda do |example|
        if metadata[:vcr]
          options = metadata[:vcr].is_a?(Hash) ? metadata[:vcr] : {}
          VCR.insert_cassette StringHelpers.vcr_path(example.class.name, example, spec_name), options
        end
      end

      run_after = lambda do |example|
        ::VCR.eject_cassette if metadata[:vcr]
      end

      ::MiniTest::Spec.before :each, &run_before
      ::MiniTest::Spec.after :each, &run_after
    end

  end # Spec

  module StringHelpers

    def self.vcr_path(example_class_name, example, spec_name)
      # TODO Refactor!  To tired but this is wack.
      @path = nil

      example_class_name.scan(/^(.*?)::[#a-z]/) do |class_names|

        class_name = class_names.flatten.first

        if class_name.nil?
          @path = prep example.class.name
        else
          @path = prep(example.class.name.gsub(class_name, "")).unshift(class_name)
        end
      end

      if @path.nil?
        @path = prep example.class.name
      end

      @path.push(spec_name).join("/") unless @path.nil?
    end

    protected

    def self.prep string
      string.split("::").map {|e| e.sub(/[^\w]*$/, "")}.reject(&:empty?) - ["vcr"]
    end

  end
end # MinitestVcr

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
minitest-vcr-1.0.1 lib/minitest-vcr/spec.rb