All files tree.js

100% Statements 17/17
100% Branches 4/4
100% Functions 5/5
100% Lines 17/17
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55            1x           1x                 12x     38x           19x       19x     12x 22x 22x 22x   22x 26x 26x 26x     22x     12x 12x    
'use strict'
 
/**
 * Module Dependencies
 */
 
var split = require('split-string')
 
/**
 * Export `Tree`
 */
 
module.exports = Tree
 
/**
 * Create a tree of references
 *
 * @return {Function}
 */
 
function Tree () {
  var data = {}
 
  function tree (key, value) {
    return arguments.length === 2
      ? set(key, value)
      : get(key)
  }
 
  function set (key, value) {
    data[key] = value
  }
 
  function get (key) {
    return data[key]
  }
 
  tree.up = function up (key) {
    var parts = split(key, ':')
    var parent = key
    var keys = []
 
    while (parts.length) {
      data[parent] && keys.push(data[parent])
      parts.pop()
      parent = parts.join(':')
    }
 
    return keys.reverse()
  }
 
  tree.data = data
  return tree
}