Skip to content

Instantly share code, notes, and snippets.

@gazay
Created December 16, 2013 15:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gazay/7989108 to your computer and use it in GitHub Desktop.
Save gazay/7989108 to your computer and use it in GitHub Desktop.
"require 'spec_helper'\n\ndescribe 't34' do\n let(:target) {\n\"class X\n def test_method(arg1)\n end\nend # X\"\n }\n\n let(:target2) {\n\"class X\n def test_method(xxx, arg2)\n end\nend # X\"\n }\n\n let(:source) {\n\"class X\n def test_method(arg1, arg2)\n end\nend\"\n }\n\n let(:rewriter) {\n T34::Rewriter.new source\n }\n\n it 'finds methods' do\n expect(rewriter.methods(:test_method)).to be_kind_of Array\n end\n\n it 'finds method nodes' do\n expect(rewriter.methods(:test_method).map(&:class).compact).to eq [T34::Rewriter::API::MethodNode]\n end\n\n it 'manipulates methods' do\n res = rewriter.methods(:test_method) do |method_node|\n method_node.args = method_node.args[0...-1]\n end\n expect(res[0].args.size).to eq 1\n end\n\n it 'manipulates arguments by name' do\n res = rewriter.methods(:test_method) do |method_node|\n method_node.args = method_node.args.select { |it| it.name != 'arg2' }\n end\n expect(res[0].args.size).to eq 1\n expect(rewriter.target).to eq target\n end\n\n it 'manipulates arguments by name with select!' do\n res = rewriter.methods(:test_method) do |method_node|\n method_node.args.select! { |it| it.name != 'arg2' }\n end\n expect(res[0].args.size).to eq 1\n expect(rewriter.target).to eq target\n end\n\n it 'renames arguments' do\n res = rewriter.methods(:test_method) do |method_node|\n method_node.args = method_node.args.map do |it|\n if it.name == 'arg1'\n it.name = 'xxx'\n end\n it\n end\n end\n expect(rewriter.target).to eq target2\n end\n\n it 'generates code back' do\n rewriter.rewrite do\n methods(:test_method) do |method_node|\n method_node.args = method_node.args[0...-1]\n end\n end\n\n expect(rewriter.target).to eq target\n end\nend\n"
require 'spec_helper'
describe 't34' do
let(:target) {
"class X
def test_method(arg1)
end
end # X"
}
let(:target2) {
"class X
def test_method(xxx, arg2)
end
end # X"
}
let(:source) {
"class X
def test_method(arg1, arg2)
end
end"
}
let(:rewriter) {
T34::Rewriter.new source
}
it 'finds methods' do
expect(rewriter.methods(:test_method)).to be_kind_of Array
end
it 'finds method nodes' do
expect(rewriter.methods(:test_method).map(&:class).compact).to eq [T34::Rewriter::API::MethodNode]
end
it 'manipulates methods' do
res = rewriter.methods(:test_method) do |method_node|
method_node.args = method_node.args[0...-1]
end
expect(res[0].args.size).to eq 1
end
it 'manipulates arguments by name' do
res = rewriter.methods(:test_method) do |method_node|
method_node.args = method_node.args.select { |it| it.name != 'arg2' }
end
expect(res[0].args.size).to eq 1
expect(rewriter.target).to eq target
end
it 'manipulates arguments by name with select!' do
res = rewriter.methods(:test_method) do |method_node|
method_node.args.select! { |it| it.name != 'arg2' }
end
expect(res[0].args.size).to eq 1
expect(rewriter.target).to eq target
end
it 'renames arguments' do
res = rewriter.methods(:test_method) do |method_node|
method_node.args = method_node.args.map do |it|
if it.name == 'arg1'
it.name = 'xxx'
end
it
end
end
expect(rewriter.target).to eq target2
end
it 'generates code back' do
rewriter.rewrite do
methods(:test_method) do |method_node|
method_node.args = method_node.args[0...-1]
end
end
expect(rewriter.target).to eq target
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment