This is not meant to be used for anything serious at this point. It will at least give you a skeleton for your code but not much beyond that at this point. You've been warned. Read more
Divine what code should be written to make a suite of tests pass.
Test code is extremely close to actual code, and a lot of inferences can be made about the nature of the code that would be generated in order to fulfil the tests.
By parsing RSPEC with a secondary DSL, we can formulate an Abstract Syntax Tree from the tests that can be reasonably mapped to working Ruby code.
describe Person do
let(:person) { Person.new('brandon', 23) }
describe '#name' do
expect(person.name).to eq('brandon')
end
describe '#age' do
expect(person.age).to eq(23)
end
end
...would map to the AST:
{
person: {
name: string,
age: integer
}
}
...and can be converted to:
class Person
attr_accessor :name, :age
def initialize(name, age)
@name = name
@age = age
end
end
This is merely an abstract and requires a lot of work though.
Currently it will only work with very basic RSPEC files. This will be tested against later.
builder = Clairvoyant.grok('path/to/rspec/file.rb')
# And there's your class!
puts builder
git checkout -b my-new-feature
)git commit -am 'Add some feature'
)git push origin my-new-feature
)