forked from vcr/vcr
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Rakefile
135 lines (105 loc) · 3.37 KB
/
Rakefile
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
135
#!/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)
desc "Default: run tests"
task default: :spec
using_git = File.exist?(File.expand_path('../.git/', __FILE__))
require 'cucumber/rake/task'
Cucumber::Rake::Task.new
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