lib/descriptors.js
function describe(composer, trailing) {

  return function (method) {

    return new Descriptor(function (key, previousValues) {

      if ( method !== undefined)
        previousValues[trailing ? 'push' : 'unshift' ](method)

      //console.log(previousValues)
      return reduce(previousValues, function(merged, next, idx){
        return trailing
          ? composer(next, merged)
          : composer(merged, next)
      })
    })
  }
}
function describe(composer, trailing) {

  return function (method) {

    return new Descriptor(function (key, previousValues) {

      if ( method !== undefined)
        previousValues[trailing ? 'push' : 'unshift' ](method)

      //console.log(previousValues)
      return reduce(previousValues, function(merged, next, idx){
        return trailing
          ? composer(next, merged)
          : composer(merged, next)
      })
    })
  }
}
function describe ( composer , trailing ) { return function ( method ) { return new Descriptor ( function ( key , previousValues ) { if ( method !== undefined ) previousValues [ trailing ? 'push' : 'unshift' ] ( method ) //console.log(previousValues) return reduce ( previousValues , function ( merged , next , idx ) { return trailing ? composer ( next , merged ) : composer ( merged , next ) } ) } ) } }
turns a normal decorator into a 'descriptor'
@param  {function} composer
@return {function}
turns a normal decorator into a descriptor