我正在尝试在.rb文件中找到某段代码,一旦找到我想从当前文件中删除它,然后将其粘贴到另一个现有文件中。这是一个例子:
file1.rb具有以下内容:
RSpec.describe 'Get Test Data' do
it "should get test data for build" do |example|
log_start_test("#{example.description}")
get_test_data
log_complete_test("#{example.description}")
end
end
我想找it "should get test data for build" do |example|
,然后剪下这段代码:
it "should get test data for build" do |example|
log_start_test("#{example.description}")
get_test_data
log_complete_test("#{example.description}")
end
并将其粘贴到另一个文件中。 到目前为止,我已经能够使用类似的东西找到所需的字符串:
File.open("#{Dir.pwd}/spec/api/test_data_search_spec.rb") do |f|
f.each_line do |line|
if line =~ /do |example|/
puts "Found root #{line}"
end
end
end
无法弄清楚确切的正则表达式以找到所需的块,然后如何从文件中剪切并粘贴到另一个文件中?任何想法都会很棒。
答案 0 :(得分:0)
正则表达式不适合解析代码。
您可以使用method_source作为问题的现有解决方案。
答案 1 :(得分:0)
谢谢@phoet。这本来适用于特定的方法,但我更多的是寻找移动rspec示例代码块。但这是我最终使用的例子:
def move_example_block(example_description, source_file,destination_file)
lines = File.readlines("#{Dir.pwd}/spec/api/#{source_file}_spec.rb")
desired_block = lines.join[/it "should get test data for build" do(.*)end/m]
temp = desired_block.freeze
puts temp
filename = "#{Dir.pwd}/spec/api/#{source_file}_spec.rb"
text = File.read(filename)
puts = text.gsub(/it "#{example_description}" do(.*)end/m, "end")
File.open(filename, "w") { |file| file << puts }
filename = "#{Dir.pwd}/spec/api/#{destination_file}_spec.rb"
text = File.read(filename)
puts = text.gsub(/end/, temp)
File.open(filename, "w") { |file| file << puts }
end