2.0 KiB
2.0 KiB
Docile
Definition: Ready to accept control or instruction; submissive [1]
Tired of overly complex DSL libraries and hairy meta-programming? Let's make our Ruby DSLs more docile...
Usage
Let's treat an Array's methods as its own DSL:
Docile.dsl_eval [] do
push 1
push 2
end
#=> [1, 3]
Mutating (changing) the array is fine, but what you probably really want as your DSL is actually a Builder Pattern.
For example, if you have a PizzaBuilder class that can build a pizza:
@sauce_level = :extra
pizza = PizzaBuilder.new.cheese.pepperoni.bacon.sauce(@sauce_level).build
Then you can use this PizzaBuilder class as a DSL:
@sauce_level = :extra
pizza = Docile.dsl_eval PizzaBuilder.new do
cheese
pepperoni
bacon
sauce @sauce_level
end.build
Features
- method lookup falls back from the DSL object to the block's context
- local variable lookup falls back from the DSL object to the block's context
- instance variables are from the block's context only
Installation
$ gem install docile
Documentation
Documentation hosted on rubydoc.info: Docile Documentation Or, read the code hosted on github.com: Docile Code
Note on Patches/Pull Requests
- Fork the project.
- Setup your development environment with: gem install bundler; bundle install
- Make your feature addition or bug fix.
- Add tests for it. This is important so I don't break it in a future version unintentionally.
- Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
- Send me a pull request. Bonus points for topic branches.
Copyright
Copyright (c) 2011 Marc Siegel. See LICENSE for details.