Ruby Metaprogramming

Posted by VP on Stack Overflow See other posts from Stack Overflow or by VP
Published on 2010-05-29T17:00:48Z Indexed on 2010/05/29 17:02 UTC
Read the original article Hit count: 308

Filed under:
|
|

I'm trying to write a DSL that allows me to do

Policy.name do
 author "Foo"
 reviewed_by "Bar"
end

The following code can almost process it:

class Policy
  include Singleton
  def self.method_missing(name,&block)
      puts name
      puts "#{yield}"
  end
  def self.author(name)
   puts name
  end
  def self.reviewed_by(name)
   puts name
  end
end

Defining my method as class methods (self.method_name) i can access it using the following syntax:

Policy.name do
 Policy.author "Foo"
 Policy.reviewed_by "Bar"
end

If i remove the "self" from the method names, and try to use my desired syntax, then i receive an error "Method not Found" in the Main so it could not find my function until the module Kernel. Its ok, i understand the error. But how can i fix it? How can i fix my class to make it work with my desired syntax that?

© Stack Overflow or respective owner

Related posts about ruby

Related posts about metaprogramming