def before(name, *args, &block)
        name = chain_name(name)
        e = chain_element(args, block)
        chain.map! {|f| name === f.first ? [e, f] : [f] }.flatten!(1)
        raise "#{name} not found" unless chain.include?(e)