1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
#!/usr/bin/env rake
require "bundler/gem_tasks"
require "rspec/core/rake_task"
desc "Run all the tests in spec"
RSpec::Core::RakeTask.new(:spec)
using_git = File.exist?(File.expand_path('../.git/', __FILE__))
require "cucumber/rake/task"
Cucumber::Rake::Task.new
desc "Default: run tests"
task default: [:spec, :cucumber]
def ensure_relish_doc_symlinked(filename)
from_filename = filename.dup
from_filename << '.md' unless filename =~ /\.md$/
from = File.expand_path("../features/#{from_filename}", __FILE__)
to = File.expand_path("../#{filename}", __FILE__)
if File.symlink?(from)
return if File.readlink(from) == to
# delete the old symlink
File.unlink(from)
end
FileUtils.ln_s to, from
end
desc "Push cukes to relishapp using the relish-client-gem"
task :relish do
unless ENV['SKIP_RELISH']
%w[ README.md CHANGELOG.md Upgrade.md LICENSE CONTRIBUTING.md].each do |file|
ensure_relish_doc_symlinked(file)
end
require 'vcr/version'
sh "relish versions:add vcr/vcr:#{VCR.version}" if ENV['NEW_RELISH_RELEASE'] == 'true'
sh "relish push vcr/vcr:#{VCR.version}"
end
end
task :prep_relish_release do
ENV['NEW_RELISH_RELEASE'] ||= 'true'
end
task :release => [:prep_relish_release, :relish]
load './lib/vcr/tasks/vcr.rake'
namespace :vcr do
task :reset_spec_cassettes do
ENV['DIR'] = 'spec/fixtures'
def VCR.version; "2.0.0"; end
sh "git checkout v2.0.0.beta1 -- spec/fixtures"
end
task :migrate_cassettes => :reset_spec_cassettes
end
desc "Migrate cucumber cassettes"
task :migrate_cucumber_cassettes do
require 'vcr'
require 'ruby-debug'
VCR.configure do |c|
c.cassette_library_dir = 'tmp/migrate'
c.default_cassette_options = { :serialize_with => :syck }
end
# We want 2.0.0 in the cucumber cassettes instead of 2.0.0.rc1
def VCR.version
"2.0.0"
end
Dir["features/**/*.feature"].each do |feature_file|
# The ERB cassettes can't be migrated automatically.
next if feature_file.include?('dynamic_erb')
puts " - Migrating #{feature_file}"
contents = File.read(feature_file)
# http://rubular.com/r/gjzkoaYX2O
contents.scan(/:\n^\s+"""\n([\s\S]+?)"""/).each do |captures|
capture = captures.first
indentation = capture[/^ +/]
cassette_yml = capture.gsub(/^#{indentation}/, '')
new_yml = nil
file_name = "tmp/migrate/cassette.yml"
File.open(file_name, 'w') { |f| f.write(cassette_yml) }
cassette = VCR::Cassette.new('cassette')
hash = begin
cassette.serializable_hash
rescue => e
puts " Skipping #{capture[0, 80]}"
next
end
new_yml = VCR::Cassette::Serializers::Syck.serialize(hash)
new_yml.gsub!(/^/, indentation)
new_yml << indentation
new_yml.gsub!(/^\s+\n(\s+response:)/, '\1')
contents.gsub!(capture, new_yml)
end
File.open(feature_file, 'w') { |f| f.write(contents) }
end
end
desc "Run the last cuke directly"
task :run_last_cuke do
command = ENV.fetch('CMD') do
raise "Must pass CMD"
end
Dir.chdir("tmp/aruba") do
sh "RUBYOPT='-I.:../../lib -r../../features/support/vcr_cucumber_helpers' ruby #{command}"
end
end
desc "Boot test app"
task :boot_test_app do
require './spec/support/vcr_localhost_server'
require './spec/support/sinatra_app'
VCR::SinatraApp.boot
puts "Booted sinatra app on port: #{VCR::SinatraApp.port}"
loop { }
puts "Shutting down."
end
|