On 2015-04-02 21:11, Ary Borenszweig wrote:
We can. But then it becomes harder to understand what's going on. In
RSpec I don't quite understand what's going on really, and I like a bit
of magic but not too much of it.
It's quite straightforward to implement, in Ruby as least. Something
like this:
module DSL
def describe(name, &block)
context = Class.new(self)
context.send(:extend, DSL)
context.instance_eval(&block)
end
def it(name, &block)
send(:define_method, name, &block)
end
end
class Foo
extend DSL
describe 'foo' do
it 'bar' do
p 'asd'
end
end
end
You need to register the tests somehow also but be able to run them, but
this is the basic idea. I cheated here and used a class to start with to
simplify the example.
In fact with macros it's not that simple because you need to remember
the context where you are defining stuff, so that might need adding that
capabilities to macros, which will complicate the language.
Yeah, I don't really now how macros work in Cyrstal.
--
/Jacob Carlborg