Guest User

Untitled

a guest
Sep 18th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.03 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta name="description" content="Hierarchical Config">
  5. <meta charset="utf-8">
  6. <meta name="viewport" content="width=device-width">
  7. <title>JS Bin</title>
  8. </head>
  9. <body>
  10.  
  11. <script id="jsbin-javascript">
  12. console.clear();
  13.  
  14. const org = {
  15. name: "NewOrbit",
  16. parents: [0, 4, 27]
  17. };
  18.  
  19. const userName = getSetting("UserName", org.parents);
  20. console.log ("username: " + userName);
  21.  
  22. const password = getSetting("Password", org.parents);
  23. console.log ("password: " + password);
  24.  
  25. function getSetting(name, ctx) {
  26. const documents = [
  27. { setting: "UserName", parents: [0], value: "demodrivercheck" },
  28. { setting: "UserName", parents: [0, 4], value: "override" },
  29. { setting: "UserName", parents: [0, 4, 27], value: "override an override" },
  30. { setting: "UserName", parents: [0, 4, 27, 28], value: "bug" },
  31. { setting: "UserName", parents: [0, 4, 43], value: "bug" },
  32. { setting: "Password", parents: [0], value: null },
  33. { setting: "Password", parents: [0, 4], value: "******" },
  34. { setting: "Unrelated", parents: [0, 4], value: "bug" },
  35. { setting: "Unrelated2", parents: [0], value: "bug" },
  36. { setting: "Unrelated3", parents: [0], value: "bug" },
  37. { setting: "Unrelated3", parents: [0,4], value: "bug" },
  38. { setting: "Unrelated3", parents: [0, 4, 27], value: "bug" },
  39. { setting: "Unrelated3", parents: [0, 4, 27, 28], value: "bug" },
  40. { setting: "Unrelated3", parents: [0, 4, 27, 29], value: "bug" },
  41. { setting: "Unrelated3", parents: [0, 4, 43], value: "bug" },
  42. { setting: "Unrelated3", parents: [0, 5], value: "bug" },
  43. ];
  44.  
  45. // match on setting name
  46. const settings = documents.filter(a => a.setting === name);
  47.  
  48. // then for [0, 4, 27] this will filter ...28 & ...43 as too specific & inapproriate respectively:
  49. const inContext = settings.filter((a) => match(a.parents, ctx));
  50.  
  51. // now grab the most specific value for this org.
  52. const mostSpecific = inContext.sort((a,b) => b.parents.length - a.parents.length)[0];
  53. return mostSpecific.value;
  54. }
  55.  
  56. function match(a,b) {
  57. let a1 = a.join('/');
  58. let b1 = b.join('/');
  59. return b1.startsWith(a1);
  60. }
  61. </script>
  62.  
  63.  
  64.  
  65. <script id="jsbin-source-javascript" type="text/javascript">console.clear();
  66.  
  67. const org = {
  68. name: "NewOrbit",
  69. parents: [0, 4, 27]
  70. };
  71.  
  72. const userName = getSetting("UserName", org.parents);
  73. console.log ("username: " + userName);
  74.  
  75. const password = getSetting("Password", org.parents);
  76. console.log ("password: " + password);
  77.  
  78. function getSetting(name, ctx) {
  79. const documents = [
  80. { setting: "UserName", parents: [0], value: "demodrivercheck" },
  81. { setting: "UserName", parents: [0, 4], value: "override" },
  82. { setting: "UserName", parents: [0, 4, 27], value: "override an override" },
  83. { setting: "UserName", parents: [0, 4, 27, 28], value: "bug" },
  84. { setting: "UserName", parents: [0, 4, 43], value: "bug" },
  85. { setting: "Password", parents: [0], value: null },
  86. { setting: "Password", parents: [0, 4], value: "******" },
  87. { setting: "Unrelated", parents: [0, 4], value: "bug" },
  88. { setting: "Unrelated2", parents: [0], value: "bug" },
  89. { setting: "Unrelated3", parents: [0], value: "bug" },
  90. { setting: "Unrelated3", parents: [0,4], value: "bug" },
  91. { setting: "Unrelated3", parents: [0, 4, 27], value: "bug" },
  92. { setting: "Unrelated3", parents: [0, 4, 27, 28], value: "bug" },
  93. { setting: "Unrelated3", parents: [0, 4, 27, 29], value: "bug" },
  94. { setting: "Unrelated3", parents: [0, 4, 43], value: "bug" },
  95. { setting: "Unrelated3", parents: [0, 5], value: "bug" },
  96. ];
  97.  
  98. // match on setting name
  99. const settings = documents.filter(a => a.setting === name);
  100.  
  101. // then for [0, 4, 27] this will filter ...28 & ...43 as too specific & inapproriate respectively:
  102. const inContext = settings.filter((a) => match(a.parents, ctx));
  103.  
  104. // now grab the most specific value for this org.
  105. const mostSpecific = inContext.sort((a,b) => b.parents.length - a.parents.length)[0];
  106. return mostSpecific.value;
  107. }
  108.  
  109. function match(a,b) {
  110. let a1 = a.join('/');
  111. let b1 = b.join('/');
  112. return b1.startsWith(a1);
  113. }
  114. </script></body>
  115. </html>
Add Comment
Please, Sign In to add comment