Hi there,
I’m new to DSLs and wanted to know if someone could tell me some good
and
deep sources (books, long articles, examples, tutorials, etc.) for how
to
write DSLs with Ruby. Of course you get some hits with Google, but I
can’t
distinct between good and bad ones. If you already delt with it, please
give
me a hint.
I’ve seen something which Shoulda is capable of: (that’s a kind of a
DSL,
right?)
class RubyMagic < Test::…
.
.
.
should “be a minor if younger than 18” do
.
this and that
.
end
.
.
.
end
How do you write things like this. I wanted to let the user say
something
like this and then proceed his/her request. Is it possible?Is it not
that
difficult?
I’m new to DSLs and wanted to know if someone could tell me some good and
deep sources (books, long articles, examples, tutorials, etc.) for how to
write DSLs with Ruby. Of course you get some hits with Google, but I can’t
distinct between good and bad ones. If you already delt with it, please give
me a hint.
While I don’t always agree with the details written in http://martinfowler.com/dslwip/
(notably concerning Lisp), I find that presentation quite exhaustive and
interesting.
After reading it, you should be able to write any kind of DSL in any
programming language…
Thank’s guy, looks really cool.
The Pragmatic Programmers have also this here:
Language Design Patterns: Techniques for Implementing Domain-Specific
Languages by Terence Parr
I’ve seen something which Shoulda is capable of: (that’s a kind of a
DSL,
right?)
class RubyMagic < Test::…
.
.
.
should “be a minor if younger than 18” do
.
this and that
.
end
.
.
.
end
How do you write things like this. I wanted to let the user say
something
like this and then proceed his/her request. Is it possible?Is it not
that
difficult?
I’d suggest that a good starting point is to install shoulda and look at
its source code.
Note that
should “be a minor” do
stuff
end
is just a regular method call with a block. Try this:
def should(*args)
puts “Got args: #{args.inspect}”
if block_given?
puts “Got a block”
yield
end
end
should “be a minor” do
puts “I am here”
end
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.