diff options
author | Benoit Daloze <eregontp@gmail.com> | 2020-12-05 11:36:22 +0100 |
---|---|---|
committer | Benoit Daloze <eregontp@gmail.com> | 2020-12-05 11:39:33 +0100 |
commit | bb3d70581972969a01c8ba7f2f3477ec92224f97 (patch) | |
tree | 4914e74ac655aa4e7933602262a9f248db1d8145 | |
parent | d0bd43c332f95e5f227ffcd4eb0e6f7bfa942b2a (diff) |
Add MSpec tool to automatically wrap spec files with a guard
-rwxr-xr-x | spec/mspec/tool/wrap_with_guard.rb | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/spec/mspec/tool/wrap_with_guard.rb b/spec/mspec/tool/wrap_with_guard.rb new file mode 100755 index 0000000000..5b1bf4d7f7 --- /dev/null +++ b/spec/mspec/tool/wrap_with_guard.rb @@ -0,0 +1,28 @@ +#!/usr/bin/env ruby +# Wrap the passed the files with a guard (e.g., `ruby_version_is ""..."3.0"`). +# Notably if some methods are removed, this is a convenient way to skip such file from a given version. +# Example usage: +# $ spec/mspec/tool/wrap_with_guard.rb 'ruby_version_is ""..."3.0"' spec/ruby/library/set/sortedset/**/*_spec.rb + +guard, *files = ARGV +abort "Usage: #{$0} GUARD FILES..." if files.empty? + +files.each do |file| + contents = File.binread(file) + lines = contents.lines.to_a + + lines = lines.map { |line| line.chomp.empty? ? line : " #{line}" } + + version_line = "#{guard} do\n" + if lines[0] =~ /^\s*require.+spec_helper/ + lines[0] = lines[0].sub(/^ /, '') + lines.insert 1, "\n", version_line + else + warn "Could not find 'require spec_helper' line in #{file}" + lines.insert 0, version_line + end + + lines << "end\n" + + File.binwrite file, lines.join +end |