All threads / How do I use nested blocks passed to a method? (metaprogramming?)
Ask A Question


You’re not receiving notifications from this thread.

How do I use nested blocks passed to a method? (metaprogramming?)

Miguel Ricardo Gomez asked in Ruby

Hi guys! So i am totally lost with something: I need a class that creates a pseudo xml output (only nodes). This class has a builder method (a class level method) which receives a block, and according to the block it generates an output.
For example: { |doc| doc.my_node "2" }

returns this string:


and do |doc| 
  doc.outer_node do |outer_node_builder|
    outer_node_builder.inner "2"


<outer_node><inner> 2</inner></outer_node>

I think I should override method_missing to get the name of the method (in the 1st example wuold be "my_node" and the args ("2" in the same example), but I cannot do override it.
And more important, I have no idea how to loop through the "nested" block in example 2.
If anyone has a clue, I would really appreciate your insight.
Oh, my class is written like this:

class DocumentBuilder
    if block_given? 
      "A block should be passed to the builder"

  def method_missing(m, *args, &block)
    puts "override method missing"
    puts m
    puts args
    puts block
Join the discussion

Want to stay up-to-date with Ruby on Rails?

Join 68,326+ developers who get early access to new tutorials, screencasts, articles, and more.

    We care about the protection of your data. Read our Privacy Policy.

    logo Created with Sketch.

    Screencast tutorials to help you learn Ruby on Rails, Javascript, Hotwire, Turbo, Stimulus.js, PostgreSQL, MySQL, Ubuntu, and more. Icons by Icons8

    © 2022 GoRails, LLC. All rights reserved.