path.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. 'use strict';
  2. angular.module('etcd.module')
  3. .factory('pathSvc', function() {
  4. var keyPrefix = '/v2/keys/',
  5. statsPrefix = '/v2/stats/';
  6. return {
  7. clean: function(path) {
  8. var parts = this.explode(path);
  9. if (parts.length === 0) {
  10. return '';
  11. }
  12. return parts.join('/');
  13. },
  14. make: function(arr) {
  15. return '/' + arr.join('/');
  16. },
  17. explode: function(str) {
  18. var parts = str.split('/');
  19. parts = parts.filter(function(v) {
  20. return v !== '';
  21. });
  22. return parts;
  23. },
  24. /**
  25. * Get the last segment of a path.
  26. */
  27. tail: function(path) {
  28. var parts = this.explode(path);
  29. if (parts.length) {
  30. return parts[parts.length-1];
  31. }
  32. return '/';
  33. },
  34. truncate: function(path, maxlen) {
  35. var prefix = '/..';
  36. maxlen = maxlen || 10;
  37. if (!path || !path.length) {
  38. return '';
  39. }
  40. if (path.length <= maxlen) {
  41. return path;
  42. }
  43. return prefix +
  44. path.substring(path.length - maxlen + prefix.length, path.length);
  45. },
  46. getFullKeyPath: function(key) {
  47. var path = '/' + this.clean(keyPrefix + key);
  48. if (path === keyPrefix.substring(0, keyPrefix.length - 1)) {
  49. return keyPrefix;
  50. }
  51. return path;
  52. },
  53. getStatFullKeyPath: function(name) {
  54. return '/' + this.clean(statsPrefix + name);
  55. },
  56. getParent: function(path) {
  57. var parts = path.split('/');
  58. if (parts.length === 0) {
  59. return '/';
  60. }
  61. parts.pop();
  62. return '/' + parts.join('/');
  63. }
  64. };
  65. });