From: Drew Olson Date: 2008-03-03T01:31:20+09:00 Subject: [ANN] BlockChainable 0.0.1 released BlockChainable is a module to aid in the creation of Domain Specific Languages using block structure. By including BlockChainable into your classes, you will be able to instantiate that class using the class name itself, followed by any parameters to be passed to initialize, followed by a block to be executed within the instantiated class. BlockChainable also allows methods to search up the chain of classes, meaning that although a block is executed in the scope of the instantiated class, any methods not found in the class but found in a class "up-scope" will be called successfully on the up-scope class. This chaining of method calls allows you to assert values within the blocks as well as calling any other methods from "up-scope" classes. I know, I know, I need a better description :) Take a look at a usage example more some simple ideas on using BlockChainable. And afterwards, install it like so: sudo gem install block-chainable # a simple dsl for creating classroom rosters and printing them out. code can be found in the # example directory of BlockChainable. require 'block_chainable' # first, define our roster class Roster include BlockChainable def initialize(subject) @subject = subject @students = [] end def add_student_to_roster student @students << student end def print_roster puts "Roster for #{@subject}:" @students.each{|s| puts " #{s}"} end end # next, define our student. the only tricky part here is add_to_roster, which calls # the method add_student_to_roster, which is actually defined on the Roster class. # BlockChainable will automatically send this method to the Roster class with the # Student instance as a parameter. class Student include BlockChainable def add_to_roster add_student_to_roster self end def to_s "#{@last_name}, #{@first_name} - age #{@age}" end def first_name name @first_name = name end def last_name name @last_name = name end def age years @age = years end end # we now have all the pieces we need for creating a simple dsl for building # and printing a class roster Roster :Math do Student do first_name "Drew" last_name "Olson" age 25 add_to_roster end Student do first_name "John" last_name "Doe" age 17 add_to_roster end Student do first_name "Jane" last_name "Doe" age 19 add_to_roster end print_roster end -- Posted via http://www.ruby-forum.com/.