code: function (context, interfaceName) {
          if (typeof arguments[0] === 'string') {
              interfaceName = arguments[0];
              context = undefined;
          }
  
          context = context || {};
  
          if (this.context) {
              // inherit from existing context if any
              var self = this;
              Object.keys(this.context).forEach(function forEach(name) {
                  if (name.charAt(0) !== '$' && !context[name]) {
                      context[name] = self.context[name];
                  }
              });
          }
  
          // bind context to the points
          var head = this.copy(context);
  
          var current = head;
          while(current) {
              var ret = current.handler(current, current.config);
              if (ret && !ret._handlersConfigured) {
                  if (ret instanceof PipePoint) {
                      // if pipe is returned, let's attach it to the existing one
                      current.link(ret);
                  }
                  else {
                      current.handler = ret;
                      current.handler(current, current.config);
                  }
              }
              current = current._next$ ?
                  current._next$.copy(context) : undefined;
          }
          context.$inited = true;
  
          if (!interfaceName) {
              return head;
          }
  
          var api = head.get(interfaceName);
          if (!api) {
              throw new Error('Cannot find requested API: ' + interfaceName);
          }
          return api(head);
      }
docs: /*
  Create contextual channel
  context method is a sync method that runs through all handlers
  to allow them to hook to events they are interested in
  The context will be attached to every message and bound to pipe