Ruby DSL for invoices

Hi DSL fans,

I’ve been playing around with DSLs recently, inspired by the dynamism
you get for free with Ruby, and thought I’d try writing one.

This is my first effort:
http://svn.edendevelopment.co.uk/public/invoice_dsl/

Check out the README.txt for more details. Basically it allows you to
write an invoice in fairly natural language syntax, like this:

new_invoice do
address ‘Test Client, Street, ZIP’
code ‘2006-45’
date ‘3rd Oct’

work_at 50 do
  spent 3.on('Morning meeting')
  spent 0.5.on('Making the coffee for the boss').on('3rd Sept')
end

end

And you end up with
http://svn.edendevelopment.co.uk/public/invoice_dsl/2006-45.pdf

It’s work in progress, so suggestions for improvements are welcome.
Feel free to adapt it for your needs, but please send me any
significant patches or new templates so we can spread the love.

Original blog post is here:
http://blog.edendevelopment.co.uk/articles/2006/10/03/domain-specific-language-for-invoices

Cheers
Chris

[email protected] wrote:

http://svn.edendevelopment.co.uk/public/invoice_dsl/

I’ve updated the DSL to support time and currency:

i = new_invoice do
1.pound | 1.5.euros

work_at 20.pounds / hour do
spent 2.hours.on(‘Some work’)
spent 2.days.on(‘More work’) # Note: assumes a day is 8 hours long
end
end

print i.total.in.pounds # prints ‘360.00’
print i.total.in.euros # prints ‘540.00’

Blog post:
http://blog.edendevelopment.co.uk/articles/2006/10/05/invoice-dsl-now-supports-time-and-currency