You’re not receiving notifications from this thread.
How to work with nested methods correctly
I am trying to figure out how to pass parent arguments to child arguments of a nested method block
so I would like to do something like
namespace "top" do namespace "middle" do namespace "bottom" do end end end
what I would like to have is to create a
@namespaces var that stores each concated with its parent
def namespace(path, &block) (@namespaces ||= ) << [parent,path].join('/') instance_exec(block) if block_given? end
I would like the value of @namespaces to be
[ "top", "top/middle", "top/middle/bottom" ]
so the issue ... I can not figure out how to get the parent path of the outer method (or pass it to the child block)
Certainly! You can modify your namespace method to take the parent path as an argument and concatenate it with the current path. Here's a solution:
def namespace(path, parent_path = "", &block)
full_path = [parent_path, path].reject(&:empty?).join('/')
(@namespaces ||= ) << full_path
instance_exec(full_path, &block) if block_given?
namespace "top" do |top_path|
namespace "middle", top_path do |middle_path|
namespace "bottom", middle_path
This code uses the instance_exec method to pass the concatenated path to the next level of the block, which helps you create the desired @namespaces array.