DSL Build Status

Description

Helpers for the creation of Domain Specific Languages within your libraries and gems.

Install

Bundler

gem 'dsl'

RubyGems

gem install dsl

Usage

Simple

class Character

  class AttrDSL < DSL
    def_dsl_delegator :name, :age
  end

  def initialize(&blk)
    @dsl = AttrDSL.call(self, &blk)
  end

  def name=(value)
    @name = value.to_s.split(/\s+/).first.upcase
  end

  def age=(value)
    @age = value.to_i
  end

end

char = Character.new do
  name 'john doe'
  p name # => "JOHN"
  age '21'
  p age # => 21
end

char.name # => "JOHN"
char.age # => 21

def_dsl_delegator defines a method that accepts a variable number of arguments that will delegate to the parent. This will attempt to call the setter/getter method before attempting to access the instance variable directly.

This way, any modifications you do to the instance variables in those methods will be used. Try adding a custom getter to the example above and you will get the expected outcome.

License

Copyright (c) 2010-2012 Ryan Lewis. See LICENSE for details.