yellow-brick-road 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. data/README.rst +148 -0
  2. data/Rakefile +37 -0
  3. data/lib/tasks/yellow-brick-road_tasks.rake +4 -0
  4. data/lib/yellow-brick-road.rb +6 -0
  5. data/lib/yellow-brick-road/config.rb +15 -0
  6. data/lib/yellow-brick-road/directive_processor.rb +68 -0
  7. data/lib/yellow-brick-road/engine.rb +22 -0
  8. data/lib/yellow-brick-road/soy_processor.rb +56 -0
  9. data/lib/yellow-brick-road/utils.rb +38 -0
  10. data/lib/yellow-brick-road/version.rb +3 -0
  11. data/test/dummy/Rakefile +7 -0
  12. data/test/dummy/app/assets/javascripts/application.js +12 -0
  13. data/test/dummy/app/assets/javascripts/closure-deps.js +4 -0
  14. data/test/dummy/app/assets/javascripts/my-closure/simple.js.soy +14 -0
  15. data/test/dummy/app/assets/javascripts/my-closure/start.js +25 -0
  16. data/test/dummy/app/assets/stylesheets/application.css +7 -0
  17. data/test/dummy/app/controllers/application_controller.rb +7 -0
  18. data/test/dummy/app/helpers/application_helper.rb +2 -0
  19. data/test/dummy/app/views/application/index.html.erb +0 -0
  20. data/test/dummy/app/views/layouts/application.html.erb +18 -0
  21. data/test/dummy/config.ru +4 -0
  22. data/test/dummy/config/application.rb +51 -0
  23. data/test/dummy/config/boot.rb +10 -0
  24. data/test/dummy/config/environment.rb +5 -0
  25. data/test/dummy/config/environments/development.rb +30 -0
  26. data/test/dummy/config/environments/production.rb +60 -0
  27. data/test/dummy/config/environments/test.rb +39 -0
  28. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  29. data/test/dummy/config/initializers/inflections.rb +10 -0
  30. data/test/dummy/config/initializers/mime_types.rb +5 -0
  31. data/test/dummy/config/initializers/secret_token.rb +7 -0
  32. data/test/dummy/config/initializers/session_store.rb +8 -0
  33. data/test/dummy/config/initializers/wrap_parameters.rb +10 -0
  34. data/test/dummy/config/initializers/yellow_brick_road.rb +2 -0
  35. data/test/dummy/config/locales/en.yml +5 -0
  36. data/test/dummy/config/routes.rb +58 -0
  37. data/test/dummy/log/development.log +13924 -0
  38. data/test/dummy/log/test.log +0 -0
  39. data/test/dummy/public/404.html +26 -0
  40. data/test/dummy/public/422.html +26 -0
  41. data/test/dummy/public/500.html +26 -0
  42. data/test/dummy/public/favicon.ico +0 -0
  43. data/test/dummy/script/rails +6 -0
  44. data/test/dummy/tmp/cache/assets/BE0/120/sprockets%2F751842b8c6750008c7310d182600d173 +142 -0
  45. data/test/dummy/tmp/cache/assets/C19/950/sprockets%2F142437f1d8d9424007b4a882a5429333 +1372 -0
  46. data/test/dummy/tmp/cache/assets/C4B/D00/sprockets%2F400f22c081529179ce3d079457de3009 +806 -0
  47. data/test/dummy/tmp/cache/assets/C5A/EE0/sprockets%2Fb711429ed948c503b718d077037780f8 +0 -0
  48. data/test/dummy/tmp/cache/assets/C5B/A80/sprockets%2F508569b474262724c61a461f7777dab7 +1118 -0
  49. data/test/dummy/tmp/cache/assets/C6C/660/sprockets%2F2c298b3b02232a21527680685a3efc30 +9289 -0
  50. data/test/dummy/tmp/cache/assets/C72/8A0/sprockets%2F167b265129e30d87d253c406db305c60 +293 -0
  51. data/test/dummy/tmp/cache/assets/C7E/9F0/sprockets%2F89862076204c62c4593ac20de32da909 +9 -0
  52. data/test/dummy/tmp/cache/assets/C8B/5F0/sprockets%2Fc6a4470b5c21e285e829a99365839b24 +0 -0
  53. data/test/dummy/tmp/cache/assets/C92/D20/sprockets%2F2e618f7805f445889aec94885a500f03 +457 -0
  54. data/test/dummy/tmp/cache/assets/C98/FD0/sprockets%2Fb11442af041f96e87a43a1dc11231745 +283 -0
  55. data/test/dummy/tmp/cache/assets/CA3/520/sprockets%2F5379d7143c6c52b11b88dc0ab5436133 +277 -0
  56. data/test/dummy/tmp/cache/assets/CA5/450/sprockets%2F6bb727c9312a749134ad67323a317f0d +73 -0
  57. data/test/dummy/tmp/cache/assets/CA5/4F0/sprockets%2Feeb7de7771527700af194c0441d29101 +709 -0
  58. data/test/dummy/tmp/cache/assets/CA6/E90/sprockets%2F611f68180f43c4181f06ae5c5f8201e2 +1546 -0
  59. data/test/dummy/tmp/cache/assets/CA7/310/sprockets%2F45664cf816315200b574e029fde6f10a +0 -0
  60. data/test/dummy/tmp/cache/assets/CA9/9D0/sprockets%2F2672e32464cf7267c4ba3d028f54b153 +224 -0
  61. data/test/dummy/tmp/cache/assets/CAB/5A0/sprockets%2F7f50e0289f150c8636ac9253129bc13c +2556 -0
  62. data/test/dummy/tmp/cache/assets/CB5/7E0/sprockets%2F42ff6672683b2029233a800e7539eeee +474 -0
  63. data/test/dummy/tmp/cache/assets/CB6/DC0/sprockets%2F2f9882155bb2d4d3ab5d708951857c60 +494 -0
  64. data/test/dummy/tmp/cache/assets/CBB/680/sprockets%2F1dc336d96fb52df34b458185559922b5 +1018 -0
  65. data/test/dummy/tmp/cache/assets/CBC/640/sprockets%2F67d2e0d9e5129d237e575d2780c64b47 +1260 -0
  66. data/test/dummy/tmp/cache/assets/CBE/550/sprockets%2Fd680cac830e0b3408ba910f0b0421147 +25 -0
  67. data/test/dummy/tmp/cache/assets/CC7/790/sprockets%2F69941f32a12e4f99d4a57f65386d870d +608 -0
  68. data/test/dummy/tmp/cache/assets/CCB/F80/sprockets%2Fa865701ef2ec41155e524772c31a1a2b +1088 -0
  69. data/test/dummy/tmp/cache/assets/CCE/580/sprockets%2F879411ed27ed1c557d57853d8f579b56 +0 -0
  70. data/test/dummy/tmp/cache/assets/CD0/070/sprockets%2F6748fe8481965f260d9c56b7f9f508a2 +1530 -0
  71. data/test/dummy/tmp/cache/assets/CD4/750/sprockets%2Faf3505141ecb3169ce41ce519d136924 +0 -0
  72. data/test/dummy/tmp/cache/assets/CD6/A90/sprockets%2F3f55ac75b9fb8426312116bcb940a580 +2539 -0
  73. data/test/dummy/tmp/cache/assets/CD9/6C0/sprockets%2F5e2458bc52da90ba349a66035e3b6752 +0 -0
  74. data/test/dummy/tmp/cache/assets/CD9/F50/sprockets%2F9008bf696500cfae1d61f045f209181e +256 -0
  75. data/test/dummy/tmp/cache/assets/CDB/B40/sprockets%2F53529a22c994570a0df4742c0bfe61f4 +0 -0
  76. data/test/dummy/tmp/cache/assets/CDC/D10/sprockets%2F1e775b4ff06b4401c07503ce95a839b5 +75 -0
  77. data/test/dummy/tmp/cache/assets/CDE/CD0/sprockets%2F141066798b4acf07053f7e3a6cb4e555 +1613 -0
  78. data/test/dummy/tmp/cache/assets/CE1/760/sprockets%2F245fe11803630fe30d0cf8a869886ab5 +357 -0
  79. data/test/dummy/tmp/cache/assets/CE1/FA0/sprockets%2F863d1650ef066e4a2168bc57c7c0e096 +0 -0
  80. data/test/dummy/tmp/cache/assets/CE2/310/sprockets%2Fd38075d5592ecaf82e43526c03b467c4 +1545 -0
  81. data/test/dummy/tmp/cache/assets/CE2/420/sprockets%2F30f2e8f30477e80cf6416dfe27307c07 +204 -0
  82. data/test/dummy/tmp/cache/assets/CE2/D70/sprockets%2F467c44b63644e0f44dd06a585f36f1a6 +522 -0
  83. data/test/dummy/tmp/cache/assets/CE3/670/sprockets%2Fddd11860b444cd0f9996be0c46762318 +796 -0
  84. data/test/dummy/tmp/cache/assets/CE4/0B0/sprockets%2Ff11535d785c0d34349c64d673bd4b28f +1105 -0
  85. data/test/dummy/tmp/cache/assets/CE4/590/sprockets%2Fd68edcc87a4ae302794093081b45b819 +10 -0
  86. data/test/dummy/tmp/cache/assets/CE4/D60/sprockets%2F61772e4a60b616f74da91b838a2f4f82 +0 -0
  87. data/test/dummy/tmp/cache/assets/CE6/DD0/sprockets%2F2fe073024a2bf26bd98458388b57af37 +1355 -0
  88. data/test/dummy/tmp/cache/assets/CE7/160/sprockets%2Fba1f9939f031b4356ec1869d40fc2747 +1261 -0
  89. data/test/dummy/tmp/cache/assets/CE8/C70/sprockets%2Fc6c9ba3c677b5e2af8520395192c9445 +173 -0
  90. data/test/dummy/tmp/cache/assets/CEA/8B0/sprockets%2Ff77e549cb6d37604105f35d4e67d8c21 +511 -0
  91. data/test/dummy/tmp/cache/assets/CEA/AA0/sprockets%2F5f816982c86d2e6b72b2f5f65c51d070 +1529 -0
  92. data/test/dummy/tmp/cache/assets/CEA/C10/sprockets%2F9dcd541e67c299ab076a44a2183872f8 +0 -0
  93. data/test/dummy/tmp/cache/assets/CF1/5A0/sprockets%2F1a697695edf2bb7b49a2896904218bc7 +115 -0
  94. data/test/dummy/tmp/cache/assets/CF4/480/sprockets%2F5e99c77e93f4a522c84357e62b25e0f7 +43 -0
  95. data/test/dummy/tmp/cache/assets/CF7/460/sprockets%2Fd12ea9733fe3c92456f57f9145569b9c +0 -0
  96. data/test/dummy/tmp/cache/assets/CF7/470/sprockets%2F2897897a166ca3369fecb88f83f211b5 +435 -0
  97. data/test/dummy/tmp/cache/assets/CFA/760/sprockets%2Fa9024adba14091e0635c6874d1db4e22 +0 -0
  98. data/test/dummy/tmp/cache/assets/D01/F30/sprockets%2Fe639a15b6e0cca37d12443b408e1166f +25 -0
  99. data/test/dummy/tmp/cache/assets/D02/9F0/sprockets%2Fb99eae308897fe88cb9414b96824098b +0 -0
  100. data/test/dummy/tmp/cache/assets/D03/330/sprockets%2F1e003cdb3e7dcc9307e84090ad457127 +454 -0
  101. data/test/dummy/tmp/cache/assets/D03/8B0/sprockets%2Ff74632bddf2c0b2018ca7b736309380e +365 -0
  102. data/test/dummy/tmp/cache/assets/D05/0A0/sprockets%2Fe57658220260db13eb5577aef42cb61b +257 -0
  103. data/test/dummy/tmp/cache/assets/D05/920/sprockets%2F909507434dcc270db4853e4c147f0aac +31 -0
  104. data/test/dummy/tmp/cache/assets/D08/510/sprockets%2Fa567be6cb6d7310096f1739b25a5a3f0 +50 -0
  105. data/test/dummy/tmp/cache/assets/D08/9F0/sprockets%2F1d61d2c89ca50957066bacc5b69011f5 +1424 -0
  106. data/test/dummy/tmp/cache/assets/D0A/790/sprockets%2Feb16913e6504c9b0d3be431de39e4751 +300 -0
  107. data/test/dummy/tmp/cache/assets/D0C/C50/sprockets%2Fd6613bee8b40d50459af6b52a7084f34 +796 -0
  108. data/test/dummy/tmp/cache/assets/D0D/030/sprockets%2Fba3f13b4a444679e8bc2549226ec743b +21 -0
  109. data/test/dummy/tmp/cache/assets/D0D/350/sprockets%2F2670bce036d485e15d059c0f1e98f24a +207 -0
  110. data/test/dummy/tmp/cache/assets/D13/270/sprockets%2F497cb163e6317e3fc1565d832f406cfb +348 -0
  111. data/test/dummy/tmp/cache/assets/D13/380/sprockets%2F786d003c9c7fb759dd26c1030c087cf6 +813 -0
  112. data/test/dummy/tmp/cache/assets/D13/7C0/sprockets%2F528d22310a9ab8e6fba08d82844ce795 +0 -0
  113. data/test/dummy/tmp/cache/assets/D15/F60/sprockets%2Fa28394e3f80365b5bc86794dd46daa22 +0 -0
  114. data/test/dummy/tmp/cache/assets/D18/500/sprockets%2Fd22c2d97d1db2154f2f7592906e957ea +1001 -0
  115. data/test/dummy/tmp/cache/assets/D1B/C70/sprockets%2F1c04848b1e1d6e8e33b8581f8c8128ff +223 -0
  116. data/test/dummy/tmp/cache/assets/D1C/600/sprockets%2Fa0601f99147f59ddd6266e6aff077e14 +0 -0
  117. data/test/dummy/tmp/cache/assets/D1E/470/sprockets%2Fb3933e694547b78bf6fb15f44a4623fe +53 -0
  118. data/test/dummy/tmp/cache/assets/D1F/480/sprockets%2F545164168becf42b289efc8708f1db68 +1278 -0
  119. data/test/dummy/tmp/cache/assets/D21/630/sprockets%2F0a14114729c14637f2e8f122acabd1ab +823 -0
  120. data/test/dummy/tmp/cache/assets/D24/A90/sprockets%2F21c8a0d48c51b8585ba03bc112ecd153 +692 -0
  121. data/test/dummy/tmp/cache/assets/D25/D30/sprockets%2F3b937f4c16d2aa0a28fc02a0e922712b +1441 -0
  122. data/test/dummy/tmp/cache/assets/D25/F30/sprockets%2Fe251527c0c018f4b4ad44b2ad7064fb0 +2255 -0
  123. data/test/dummy/tmp/cache/assets/D26/DE0/sprockets%2F761ac1bdb0739cc56fa0c1224b137b09 +0 -0
  124. data/test/dummy/tmp/cache/assets/D2A/C30/sprockets%2F978fe7268754f451c59b9ccb323ffa56 +0 -0
  125. data/test/dummy/tmp/cache/assets/D2B/0F0/sprockets%2Fbf223af03335cfc08a71e549e10c0e27 +2539 -0
  126. data/test/dummy/tmp/cache/assets/D2E/6D0/sprockets%2F9e7fda3affb389313cc50223f01c0324 +0 -0
  127. data/test/dummy/tmp/cache/assets/D2F/110/sprockets%2F3730ffe2ed34c1219d580bd1615ea7b0 +2239 -0
  128. data/test/dummy/tmp/cache/assets/D2F/F10/sprockets%2F9cac242f0bf5ec00079ea3a463e26552 +153 -0
  129. data/test/dummy/tmp/cache/assets/D30/1D0/sprockets%2Fd690a26a0b0ae138c1c48d257a7674bc +589 -0
  130. data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  131. data/test/dummy/tmp/cache/assets/D36/940/sprockets%2Fb4ba462ac9f4aac561c36e60367c1378 +572 -0
  132. data/test/dummy/tmp/cache/assets/D37/090/sprockets%2F2f2e71ebbc240014ebf648f0917e854a +798 -0
  133. data/test/dummy/tmp/cache/assets/D3A/440/sprockets%2F6d332243647c841dea36ed822cdfc23e +165 -0
  134. data/test/dummy/tmp/cache/assets/D3B/5A0/sprockets%2F82e05cf8c88ba8cb1c87e50d51372a03 +0 -0
  135. data/test/dummy/tmp/cache/assets/D41/B30/sprockets%2Fba1b93913dd01d83ac9a96df334456f8 +0 -0
  136. data/test/dummy/tmp/cache/assets/D43/D90/sprockets%2F04f3a5926d5a7672456dc7afa73d0c7f +38 -0
  137. data/test/dummy/tmp/cache/assets/D45/1F0/sprockets%2F1bfa855d9c10ff2431a9a548958cc5e4 +83 -0
  138. data/test/dummy/tmp/cache/assets/D45/B10/sprockets%2F643f3d9b216e48df952b7f150a46a7ec +60 -0
  139. data/test/dummy/tmp/cache/assets/D46/040/sprockets%2F199546844e5939721a5afcbcce4ea43a +143 -0
  140. data/test/dummy/tmp/cache/assets/D49/320/sprockets%2Fd8123eb229e34c9f507f7b1876f1c4ee +506 -0
  141. data/test/dummy/tmp/cache/assets/D49/750/sprockets%2Ff41ef1c0832b7294fb15588ff5c783cb +0 -0
  142. data/test/dummy/tmp/cache/assets/D49/930/sprockets%2F1071926698fa55abc71e1b6fd966dfe1 +72 -0
  143. data/test/dummy/tmp/cache/assets/D49/D10/sprockets%2Fb67b8d7cc7579352a91694f9ae10cdb0 +127 -0
  144. data/test/dummy/tmp/cache/assets/D4A/160/sprockets%2Fcbd8988b5e18d153eff6230d72e9046a +516 -0
  145. data/test/dummy/tmp/cache/assets/D4A/2B0/sprockets%2Ffcdf002d38fd938bf7226b46b76706c8 +1101 -0
  146. data/test/dummy/tmp/cache/assets/D4E/2F0/sprockets%2F77cb87ae57f0d8c25cdaa74181a64997 +1441 -0
  147. data/test/dummy/tmp/cache/assets/D4F/060/sprockets%2Fa9e66b39ada7394a29bf44f3a682f665 +511 -0
  148. data/test/dummy/tmp/cache/assets/D50/BD0/sprockets%2F88650dd57ef64075462e6dae757dbe2c +0 -0
  149. data/test/dummy/tmp/cache/assets/D53/CA0/sprockets%2Fa85032e82709a043fbb2ec00e04f2bbd +0 -0
  150. data/test/dummy/tmp/cache/assets/D54/BF0/sprockets%2F91970514ff528e8d2bfd81f1ec83c9c8 +240 -0
  151. data/test/dummy/tmp/cache/assets/D54/ED0/sprockets%2F71c9fa01091d432b131da3bb73faf3d4 +10 -0
  152. data/test/dummy/tmp/cache/assets/D56/500/sprockets%2F75ebadd035f1324b194034af92eac3a0 +0 -0
  153. data/test/dummy/tmp/cache/assets/D5A/900/sprockets%2F5729f77d97fdee53b1942cf17f6f05e4 +474 -0
  154. data/test/dummy/tmp/cache/assets/D5A/D50/sprockets%2F81bace3db2c2f1241175ff3c5009d08c +0 -0
  155. data/test/dummy/tmp/cache/assets/D5B/C70/sprockets%2Fe64119a9db7017b7ab3b0da1b6076f0d +44 -0
  156. data/test/dummy/tmp/cache/assets/D5E/4D0/sprockets%2F756f25e4ad861a050cdc41bb8414e4ab +126 -0
  157. data/test/dummy/tmp/cache/assets/D5E/730/sprockets%2Fd30caf70b387c4604326bdda32aeb549 +0 -0
  158. data/test/dummy/tmp/cache/assets/D5E/AA0/sprockets%2F790dd07caaaacb30ceb0174664e90817 +136 -0
  159. data/test/dummy/tmp/cache/assets/D64/D30/sprockets%2Fe4bd8f60a3a446274c3cb2f5d16563ac +590 -0
  160. data/test/dummy/tmp/cache/assets/D66/400/sprockets%2Fecb7401d20daf25605a7afad3a793778 +0 -0
  161. data/test/dummy/tmp/cache/assets/D67/250/sprockets%2F8422eb26855ca9c953a3bf1aeade8004 +0 -0
  162. data/test/dummy/tmp/cache/assets/D69/900/sprockets%2F28ae64f52cb18f77b1a1bd9c51293da4 +0 -0
  163. data/test/dummy/tmp/cache/assets/D6A/870/sprockets%2F1ece6a51b42f9280f4cee9020c94b72e +197 -0
  164. data/test/dummy/tmp/cache/assets/D6B/DD0/sprockets%2F9a0abc735e27fc61dab019788518eba4 +164 -0
  165. data/test/dummy/tmp/cache/assets/D6E/CC0/sprockets%2F8b4fbcec2475e7203b8859baf8e310a3 +0 -0
  166. data/test/dummy/tmp/cache/assets/D72/470/sprockets%2Fbc0c6d850e7c769e83d58eb3e6061b2a +2556 -0
  167. data/test/dummy/tmp/cache/assets/D72/9D0/sprockets%2F9402daf6da6f7eed331a9d78216cb761 +0 -0
  168. data/test/dummy/tmp/cache/assets/D74/070/sprockets%2F91ae68f698a39bd7d0d11150fc46e4cd +418 -0
  169. data/test/dummy/tmp/cache/assets/D74/7F0/sprockets%2F22dad1069ea6a8f29ae757c44e18ec83 +0 -0
  170. data/test/dummy/tmp/cache/assets/D75/3C0/sprockets%2F44e2ae51b97853d8ecda7b264a267c7d +1630 -0
  171. data/test/dummy/tmp/cache/assets/D77/780/sprockets%2Ffa2abdfb0b62867c346f79187b8e42d5 +823 -0
  172. data/test/dummy/tmp/cache/assets/D79/850/sprockets%2F4d540586ed379fd9a70fa0b7ce4f5b27 +306 -0
  173. data/test/dummy/tmp/cache/assets/D7A/B60/sprockets%2F5925c92f48caff053d08853dc69e5bba +0 -0
  174. data/test/dummy/tmp/cache/assets/D81/C90/sprockets%2F19aca5c835efce74878c23e581e2a89e +2239 -0
  175. data/test/dummy/tmp/cache/assets/D84/210/sprockets%2Fabd0103ccec2b428ac62c94e4c40b384 +11228 -0
  176. data/test/dummy/tmp/cache/assets/D8B/B10/sprockets%2Fbb7a2305a8f2832631863bbababb67be +301 -0
  177. data/test/dummy/tmp/cache/assets/D92/3B0/sprockets%2F93dc71f411faf72ec8ef0b5d217b51a0 +505 -0
  178. data/test/dummy/tmp/cache/assets/D92/EE0/sprockets%2Ffd051ea0abf6be6970754aa732e40c8b +289 -0
  179. data/test/dummy/tmp/cache/assets/D93/810/sprockets%2F7dc1ac5e1b83ba5144e34cf156d48a8a +471 -0
  180. data/test/dummy/tmp/cache/assets/D94/020/sprockets%2F35cb4ce22488fb5bdd260508ca47a3fb +239 -0
  181. data/test/dummy/tmp/cache/assets/D94/EC0/sprockets%2F8b900fba18f8e046f5f12e6d1f0ac15b +74 -0
  182. data/test/dummy/tmp/cache/assets/D95/470/sprockets%2F5be5d361a52575c433831b5e8cccbace +9273 -0
  183. data/test/dummy/tmp/cache/assets/D97/9D0/sprockets%2F524a2a94a88c1d392dabcba654e365fc +103 -0
  184. data/test/dummy/tmp/cache/assets/D9D/800/sprockets%2Ff8387220eb4dda9b29a37b5deb9f2a40 +54 -0
  185. data/test/dummy/tmp/cache/assets/D9E/DD0/sprockets%2Fb6b4ffad6485eda046b327a196e8c44a +0 -0
  186. data/test/dummy/tmp/cache/assets/DA1/0A0/sprockets%2F359c94aee6ba2e15fc9666aa4de311c8 +166 -0
  187. data/test/dummy/tmp/cache/assets/DA1/0D0/sprockets%2F798de3c28452e164a7fc1a3a6e8cdb4b +652 -0
  188. data/test/dummy/tmp/cache/assets/DA3/CB0/sprockets%2Fdfad6bb1857a8af91f98ba137c18504e +815 -0
  189. data/test/dummy/tmp/cache/assets/DA4/E10/sprockets%2Fbda7705734ace95f12a7d79df9c14af2 +1354 -0
  190. data/test/dummy/tmp/cache/assets/DA5/E30/sprockets%2F2e6707a119e94a784efbadca18d7e8d1 +129 -0
  191. data/test/dummy/tmp/cache/assets/DA6/4B0/sprockets%2F4f7a708b6aa2d42eb577493dea7cef55 +115 -0
  192. data/test/dummy/tmp/cache/assets/DA8/A10/sprockets%2F0ae5bbb4ca200e74db3b64d72c2be120 +0 -0
  193. data/test/dummy/tmp/cache/assets/DA9/3F0/sprockets%2Fdd0af9cfd65fb7d02fe778c8f6015361 +499 -0
  194. data/test/dummy/tmp/cache/assets/DA9/780/sprockets%2Fe3559a635e8f92dec7727a3db2ae7b4c +813 -0
  195. data/test/dummy/tmp/cache/assets/DAC/0E0/sprockets%2F04cef8243a9ef7321846debc977ea8db +607 -0
  196. data/test/dummy/tmp/cache/assets/DB1/260/sprockets%2Fb879ff7530bf8cc175e0c7e70dc4e79b +0 -0
  197. data/test/dummy/tmp/cache/assets/DB4/4C0/sprockets%2F30a76cbd98dedb56742cd8ecaf858757 +0 -0
  198. data/test/dummy/tmp/cache/assets/DBD/7E0/sprockets%2F236fb1ac5ed9f2e3fe32203acc3a842d +0 -0
  199. data/test/dummy/tmp/cache/assets/DC2/DF0/sprockets%2Fe233bcaba8beff15626c35cb5e0e0936 +845 -0
  200. data/test/dummy/tmp/cache/assets/DC4/600/sprockets%2F59c96aa6c1cbebc61bff6c050a5351d7 +225 -0
  201. data/test/dummy/tmp/cache/assets/DC5/030/sprockets%2Fcb2fe864a0177eec19017c43ce9aa4ad +187 -0
  202. data/test/dummy/tmp/cache/assets/DC8/A60/sprockets%2F9fcb9f5c3f679ce749ee4c3f93869ba6 +74 -0
  203. data/test/dummy/tmp/cache/assets/DCB/D40/sprockets%2Ffd5542bfb7660a8d8cac3a2e46fb01f8 +828 -0
  204. data/test/dummy/tmp/cache/assets/DCC/020/sprockets%2F0c129c5f2784c96fa1dc3da6c19c1efc +128 -0
  205. data/test/dummy/tmp/cache/assets/DCF/520/sprockets%2F975162fb97a3ec7033db5f2fdba4fcd3 +70 -0
  206. data/test/dummy/tmp/cache/assets/DD0/000/sprockets%2F0d5d631cce6f0b078bb29cf98b3d78bb +276 -0
  207. data/test/dummy/tmp/cache/assets/DD0/C90/sprockets%2F84eeca4ef8f5eb29b13f7e1ea3c71324 +591 -0
  208. data/test/dummy/tmp/cache/assets/DD6/710/sprockets%2F9e83f2ebbe3e349efca2de390e15d635 +204 -0
  209. data/test/dummy/tmp/cache/assets/DE1/830/sprockets%2Fd23d3cafef2e2a9055bc103dffc1a023 +208 -0
  210. data/test/dummy/tmp/cache/assets/DEB/470/sprockets%2Fae2de0fcbc2214b71d3f2a875d2bc8c3 +2255 -0
  211. data/test/dummy/tmp/cache/assets/DEE/690/sprockets%2F5d824bcadef29060cc13eed71af4b4d0 +550 -0
  212. data/test/dummy/tmp/cache/assets/DF0/5D0/sprockets%2F25a875eb0a5d4c49bcc3fa39ea0adb26 +567 -0
  213. data/test/dummy/tmp/cache/assets/DF3/E20/sprockets%2Fada770c49a5d6b38d1cc43ed4d51c1fc +0 -0
  214. data/test/dummy/tmp/cache/assets/DF5/C80/sprockets%2F03ad7d7b3a8feba9ed9be82ae2083b20 +340 -0
  215. data/test/dummy/tmp/cache/assets/DF6/560/sprockets%2Fafceb2b55eb108efe4446dfb02b519b8 +0 -0
  216. data/test/dummy/tmp/cache/assets/DFC/030/sprockets%2Fcbdd3679eaba219b4e1ff20677af1c6f +1371 -0
  217. data/test/dummy/tmp/cache/assets/E00/970/sprockets%2F8bc6dde8d05c382dd07cbcec70f54e09 +378 -0
  218. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  219. data/test/dummy/tmp/cache/assets/E12/2F0/sprockets%2F5c45062ecfbe512dcba176ba6ddacc00 +523 -0
  220. data/test/dummy/tmp/cache/assets/E21/5D0/sprockets%2Fd4fe6d611bfb0e63c04de5dbfb128a8a +0 -0
  221. data/test/dummy/tmp/cache/assets/E22/770/sprockets%2F2ccebcabfbb9b59159e4b73b3b30a74d +208 -0
  222. data/test/dummy/tmp/cache/assets/E31/A90/sprockets%2F26b98bbbc15eee9b370c7dcde88d16aa +394 -0
  223. data/test/dummy/tmp/cache/assets/E31/E30/sprockets%2Ffbdafcc4e2f44bb9fc653bcf9625b750 +284 -0
  224. data/test/dummy/tmp/cache/assets/E37/1C0/sprockets%2Fa5eb45fc86dafe2bee4e4fa3f53c4785 +0 -0
  225. data/test/dummy/tmp/cache/assets/E4C/960/sprockets%2F13fd6e4bfdf031acb3dedca8d0f407b4 +1277 -0
  226. data/test/dummy/tmp/cache/assets/E88/330/sprockets%2Fe02d0adb5529ffafcea1b9e5ccf69a5b +669 -0
  227. data/test/dummy/tmp/pids/server.pid +1 -0
  228. data/test/dummy/tmp/simple.js.js +20 -0
  229. data/test/dummy/tmp/soy-1325274421.js +20 -0
  230. data/test/dummy/tmp/soy-1325286267.js +20 -0
  231. data/test/test_helper.rb +10 -0
  232. data/test/yellow-brick-road_test.rb +7 -0
  233. metadata +538 -0
@@ -0,0 +1,815 @@
1
+ o: ActiveSupport::Cache::Entry :@compressedF:@expires_in0:@created_atf1325441615.017673: @value{I"
2
+ class:EFI"BundledAsset;
3
+ FI"id;
4
+ F"%360eefc2faf6a8c8e99eee29c1030c4fI"logical_path;
5
+ FI",closure/goog/datasource/fastdatanode.js;
6
+ TI"
7
+ F"y/Volumes/Development/dev-web/yellow-brick-road/vendor/assets/closure-library/closure/goog/datasource/fastdatanode.jsI"content_type;
8
+ FI"application/javascript;
9
+ FI"
10
+ mtime;
11
+ FI"2011-12-30T02:16:24+00:00;
12
+ FI" body;
13
+ FI"XY// Copyright 2007 The Closure Library Authors. All Rights Reserved.
14
+ //
15
+ // Licensed under the Apache License, Version 2.0 (the "License");
16
+ // you may not use this file except in compliance with the License.
17
+ // You may obtain a copy of the License at
18
+ //
19
+ // http://www.apache.org/licenses/LICENSE-2.0
20
+ //
21
+ // Unless required by applicable law or agreed to in writing, software
22
+ // distributed under the License is distributed on an "AS-IS" BASIS,
23
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24
+ // See the License for the specific language governing permissions and
25
+ // limitations under the License.
26
+
27
+ /**
28
+ * @fileoverview
29
+ * Efficient implementation of DataNode API.
30
+ *
31
+ * The implementation consists of three concrete classes for modelling
32
+ * DataNodes with different characteristics: FastDataNode,
33
+ * FastPrimitiveDataNode and FastListNode.
34
+ *
35
+ * FastDataNode is for bean-like or map-like objects that consists of
36
+ * key/value mappings and where the primary access pattern is by key.
37
+ *
38
+ * FastPrimitiveDataNode wraps primitives like strings, boolean, and numbers.
39
+ *
40
+ * FastListNode is for array-like data nodes. It also supports key-based
41
+ * lookups if the data nodes have an "id" property or if child nodes are
42
+ * explicitly added by name. It is most efficient if these features are not
43
+ * used.
44
+ *
45
+ * FastDataNodes can be constructed from JSON-like objects via the function
46
+ * goog.ds.FastDataNode.fromJs.
47
+
48
+ */
49
+
50
+
51
+ goog.provide('goog.ds.AbstractFastDataNode');
52
+ goog.provide('goog.ds.FastDataNode');
53
+ goog.provide('goog.ds.FastListNode');
54
+ goog.provide('goog.ds.PrimitiveFastDataNode');
55
+
56
+ goog.require('goog.ds.DataManager');
57
+ goog.require('goog.ds.EmptyNodeList');
58
+ goog.require('goog.string');
59
+
60
+ /*
61
+ * Implementation note: In order to reduce the number of objects,
62
+ * FastDataNode stores its key/value mappings directly in the FastDataNode
63
+ * object iself (instead of a separate map). To make this work we have to
64
+ * sure that there are no name clashes with other attribute names used by
65
+ * FastDataNode (like dataName and parent). This is especially difficult in
66
+ * the light of automatic renaming by the JavaScript compiler. For this reason,
67
+ * all internal attributes start with "__" so that they are not renamed
68
+ * by the compiler.
69
+ */
70
+
71
+ /**
72
+ * Creates a new abstract data node.
73
+ * @param {string} dataName Name of the datanode.
74
+ * @param {goog.ds.DataNode=} opt_parent Parent of this data node.
75
+ * @constructor
76
+ * @extends {goog.ds.DataNodeList}
77
+ */
78
+ // TODO(arv): Use interfaces when available.
79
+ goog.ds.AbstractFastDataNode = function(dataName, opt_parent) {
80
+ if (!dataName) {
81
+ throw Error('Cannot create a fast data node without a data name');
82
+ }
83
+ this['__dataName'] = dataName;
84
+ this['__parent'] = opt_parent;
85
+ };
86
+
87
+
88
+ /**
89
+ * Return the name of this data node.
90
+ * @return {string} Name of this data noden.
91
+ */
92
+ goog.ds.AbstractFastDataNode.prototype.getDataName = function() {
93
+ return this['__dataName'];
94
+ };
95
+
96
+
97
+ /**
98
+ * Set the name of this data node.
99
+ * @param {string} value Name.
100
+ */
101
+ goog.ds.AbstractFastDataNode.prototype.setDataName = function(value) {
102
+ this['__dataName'] = value;
103
+ };
104
+
105
+
106
+ /**
107
+ * Get the path leading to this data node.
108
+ * @return {string} Data path.
109
+ */
110
+ goog.ds.AbstractFastDataNode.prototype.getDataPath = function() {
111
+ var parentPath;
112
+ if (this['__parent']) {
113
+ parentPath = this['__parent'].getDataPath() + goog.ds.STR_PATH_SEPARATOR;
114
+ } else {
115
+ parentPath = '';
116
+ }
117
+ return parentPath + this.getDataName();
118
+ };
119
+
120
+
121
+
122
+ /**
123
+ * Creates a new fast data node, using the properties of root.
124
+ * @param {Object} root JSON-like object to initialize data node from.
125
+ * @param {string} dataName Name of this data node.
126
+ * @param {goog.ds.DataNode=} opt_parent Parent of this data node.
127
+ * @extends {goog.ds.AbstractFastDataNode}
128
+ * @constructor
129
+ */
130
+ goog.ds.FastDataNode = function(root, dataName, opt_parent) {
131
+ goog.ds.AbstractFastDataNode.call(this, dataName, opt_parent);
132
+ this.extendWith_(root);
133
+ };
134
+ goog.inherits(goog.ds.FastDataNode, goog.ds.AbstractFastDataNode);
135
+
136
+
137
+ /**
138
+ * Add all attributes of object to this data node.
139
+ * @param {Object} object Object to add attributes from.
140
+ * @protected
141
+ * @suppress {underscore}
142
+ */
143
+ goog.ds.FastDataNode.prototype.extendWith_ = function(object) {
144
+ for (var key in object) {
145
+ this[key] = object[key];
146
+ }
147
+ };
148
+
149
+
150
+ /**
151
+ * Creates a new FastDataNode structure initialized from object. This will
152
+ * return an instance of the most suitable sub-class of FastDataNode.
153
+ *
154
+ * You should not modify object after creating a fast data node from it
155
+ * or assume that changing object changes the data node. Doing so results
156
+ * in undefined behaviour.
157
+ *
158
+ * @param {Object|number|boolean|string} object Object to initialize data
159
+ * node from.
160
+ * @param {string} dataName Name of data node.
161
+ * @param {goog.ds.DataNode=} opt_parent Parent of data node.
162
+ * @return {goog.ds.AbstractFastDataNode} Data node representing object.
163
+ */
164
+ goog.ds.FastDataNode.fromJs = function(object, dataName, opt_parent) {
165
+ if (goog.isArray(object)) {
166
+ return new goog.ds.FastListNode(object, dataName, opt_parent);
167
+ } else if (goog.isObject(object)) {
168
+ return new goog.ds.FastDataNode(object, dataName, opt_parent);
169
+ } else {
170
+ return new goog.ds.PrimitiveFastDataNode(object || !!object,
171
+ dataName,
172
+ opt_parent);
173
+ }
174
+ };
175
+
176
+
177
+ /**
178
+ * Static instance of an empty list.
179
+ * @type {goog.ds.EmptyNodeList}
180
+ * @private
181
+ */
182
+ goog.ds.FastDataNode.emptyList_ = new goog.ds.EmptyNodeList();
183
+
184
+
185
+ /**
186
+ * Not supported for normal FastDataNodes.
187
+ * @param {Object} value Value to set data node to.
188
+ */
189
+ goog.ds.FastDataNode.prototype.set = function(value) {
190
+ throw 'Not implemented yet';
191
+ };
192
+
193
+
194
+ /**
195
+ * Returns child nodes of this data node. Currently, only supports
196
+ * returning all children.
197
+ * @param {string=} opt_selector Children to include in child list.
198
+ * @return {goog.ds.DataNode|goog.ds.DataNodeList} List of child nodes.
199
+ */
200
+ // TODO(arv): This class implements DataNodeList but we don't support interfaces
201
+ // yet.
202
+ goog.ds.FastDataNode.prototype.getChildNodes = function(opt_selector) {
203
+ if (!opt_selector || opt_selector == goog.ds.STR_ALL_CHILDREN_SELECTOR) {
204
+ return this;
205
+ } else if (opt_selector.indexOf(goog.ds.STR_WILDCARD) == -1) {
206
+ var child = this.getChildNode(opt_selector);
207
+ return child ? new goog.ds.FastListNode([child], '') :
208
+ new goog.ds.EmptyNodeList();
209
+ } else {
210
+ throw Error('Unsupported selector: ' + opt_selector);
211
+ }
212
+ };
213
+
214
+
215
+ /**
216
+ * Makes sure that a named child is wrapped in a data node structure.
217
+ * @param {string} name Name of child to wrap.
218
+ * @private
219
+ */
220
+ goog.ds.FastDataNode.prototype.wrapChild_ = function(name) {
221
+ var child = this[name];
222
+ if (child != null && !child.getDataName) {
223
+ this[name] = goog.ds.FastDataNode.fromJs(this[name], name, this);
224
+ }
225
+ };
226
+
227
+
228
+ /**
229
+ * Get a child node by name.
230
+ * @param {string} name Name of child node.
231
+ * @param {boolean=} opt_create Whether to create the child if it does not
232
+ * exist.
233
+ * @return {goog.ds.DataNode} Child node.
234
+ */
235
+ goog.ds.FastDataNode.prototype.getChildNode = function(name, opt_create) {
236
+ this.wrapChild_(name);
237
+ // this[name] always is a data node object, so using "||" is fine.
238
+ var child = this[name] || null;
239
+ if (child == null && opt_create) {
240
+ child = new goog.ds.FastDataNode({}, name, this);
241
+ this[name] = child;
242
+ }
243
+ return child;
244
+ };
245
+
246
+
247
+ /**
248
+ * Sets a child node. Creates the child if it does not exist.
249
+ *
250
+ * Calling this function makes any child nodes previously obtained for name
251
+ * invalid. You should not use these child nodes but instead obtain a new
252
+ * instance by calling getChildNode.
253
+ *
254
+ * @override
255
+ */
256
+ goog.ds.FastDataNode.prototype.setChildNode = function(name, value) {
257
+ if (value != null) {
258
+ this[name] = value;
259
+ } else {
260
+ delete this[name];
261
+ }
262
+ goog.ds.DataManager.getInstance().fireDataChange(this.getDataPath() +
263
+ goog.ds.STR_PATH_SEPARATOR + name);
264
+ return null;
265
+ };
266
+
267
+
268
+ /**
269
+ * Returns the value of a child node. By using this method you can avoid
270
+ * the need to create PrimitiveFastData nodes.
271
+ * @param {string} name Name of child node.
272
+ * @return {Object} Value of child node.
273
+ */
274
+ goog.ds.FastDataNode.prototype.getChildNodeValue = function(name) {
275
+ var child = this[name];
276
+ if (child != null) {
277
+ return (child.getDataName ? child.get() : child);
278
+ } else {
279
+ return null;
280
+ }
281
+ };
282
+
283
+
284
+ /**
285
+ * Returns whether this data node is a list. Always returns false for
286
+ * instances of FastDataNode but may return true for subclasses.
287
+ * @return {boolean} Whether this data node is array-like.
288
+ */
289
+ goog.ds.FastDataNode.prototype.isList = function() {
290
+ return false;
291
+ };
292
+
293
+
294
+ /**
295
+ * Returns a javascript object representation of this data node. You should
296
+ * not modify the object returned by this function.
297
+ * @return {Object} Javascript object representation of this data node.
298
+ */
299
+ goog.ds.FastDataNode.prototype.getJsObject = function() {
300
+ var result = {};
301
+ for (var key in this) {
302
+ if (!goog.string.startsWith(key, '__') && !goog.isFunction(this[key])) {
303
+ result[key] = (this[key]['__dataName'] ? this[key].getJsObject() :
304
+ this[key]);
305
+ }
306
+ }
307
+ return result;
308
+ };
309
+
310
+
311
+ /**
312
+ * Creates a deep copy of this data node.
313
+ * @return {goog.ds.FastDataNode} Clone of this data node.
314
+ */
315
+ goog.ds.FastDataNode.prototype.clone = function() {
316
+ return /** @type {goog.ds.FastDataNode} */(goog.ds.FastDataNode.fromJs(
317
+ this.getJsObject(), this.getDataName()));
318
+ };
319
+
320
+
321
+ /*
322
+ * Implementation of goog.ds.DataNodeList for FastDataNode.
323
+ */
324
+
325
+
326
+ /**
327
+ * Adds a child to this data node.
328
+ * @param {goog.ds.DataNode} value Child node to add.
329
+ */
330
+ goog.ds.FastDataNode.prototype.add = function(value) {
331
+ this.setChildNode(value.getDataName(), value);
332
+ };
333
+
334
+
335
+ /**
336
+ * Gets the value of this data node (if called without opt_key) or
337
+ * gets a child node (if called with opt_key).
338
+ * @param {string=} opt_key Name of child node.
339
+ * @return {goog.ds.DataNode} This data node or a child node.
340
+ */
341
+ goog.ds.FastDataNode.prototype.get = function(opt_key) {
342
+ if (!goog.isDef(opt_key)) {
343
+ // if there is no key, DataNode#get was called
344
+ return this;
345
+ } else {
346
+ return this.getChildNode(opt_key);
347
+ }
348
+ };
349
+
350
+
351
+ /**
352
+ * Gets a child node by index. This method has a complexity of O(n) where
353
+ * n is the number of children. If you need a faster implementation of this
354
+ * method, you should use goog.ds.FastListNode.
355
+ * @param {number} index Index of child node (starting from 0).
356
+ * @return {goog.ds.DataNode} Child node at specified index.
357
+ */
358
+ goog.ds.FastDataNode.prototype.getByIndex = function(index) {
359
+ var i = 0;
360
+ for (var key in this) {
361
+ if (!goog.string.startsWith(key, '__') && !goog.isFunction(this[key])) {
362
+ if (i == index) {
363
+ this.wrapChild_(key);
364
+ return this[key];
365
+ }
366
+ ++i;
367
+ }
368
+ }
369
+ return null;
370
+ };
371
+
372
+
373
+ /**
374
+ * Gets the number of child nodes. This method has a complexity of O(n) where
375
+ * n is the number of children. If you need a faster implementation of this
376
+ * method, you should use goog.ds.FastListNode.
377
+ * @return {number} Number of child nodes.
378
+ */
379
+ goog.ds.FastDataNode.prototype.getCount = function() {
380
+ var count = 0;
381
+ for (var key in this) {
382
+ if (!goog.string.startsWith(key, '__') && !goog.isFunction(this[key])) {
383
+ ++count;
384
+ }
385
+ }
386
+ // maybe cache this?
387
+ return count;
388
+ };
389
+
390
+
391
+ /**
392
+ * Sets a child node.
393
+ * @param {string} name Name of child node.
394
+ * @param {Object} value Value of child node.
395
+ */
396
+ goog.ds.FastDataNode.prototype.setNode = function(name, value) {
397
+ this.setChildNode(name, value);
398
+ };
399
+
400
+
401
+ /**
402
+ * Removes a child node.
403
+ * @override
404
+ */
405
+ goog.ds.FastDataNode.prototype.removeNode = function(name) {
406
+ delete this[name];
407
+ return false;
408
+ };
409
+
410
+
411
+
412
+ /**
413
+ * Creates a new data node wrapping a primitive value.
414
+ * @param {number|boolean|string} value Value the value to wrap.
415
+ * @param {string} dataName name Name of this data node.
416
+ * @param {goog.ds.DataNode=} opt_parent Parent of this data node.
417
+ * @extends {goog.ds.AbstractFastDataNode}
418
+ * @constructor
419
+ */
420
+ goog.ds.PrimitiveFastDataNode = function(value, dataName, opt_parent) {
421
+ this.value_ = value;
422
+ goog.ds.AbstractFastDataNode.call(this, dataName, opt_parent);
423
+ };
424
+ goog.inherits(goog.ds.PrimitiveFastDataNode, goog.ds.AbstractFastDataNode);
425
+
426
+
427
+ /**
428
+ * Returns the value of this data node.
429
+ * @return {*} Value of this data node.
430
+ */
431
+ goog.ds.PrimitiveFastDataNode.prototype.get = function() {
432
+ return this.value_;
433
+ };
434
+
435
+
436
+ /**
437
+ * Sets this data node to a new value.
438
+ * @param {number|boolean|string} value Value to set data node to.
439
+ */
440
+ goog.ds.PrimitiveFastDataNode.prototype.set = function(value) {
441
+ if (goog.isArray(value) || goog.isObject(value)) {
442
+ throw 'can only set PrimitiveFastDataNode to primitive values';
443
+ }
444
+ this.value_ = value;
445
+ goog.ds.DataManager.getInstance().fireDataChange(this.getDataPath());
446
+ };
447
+
448
+
449
+ /**
450
+ * Returns child nodes of this data node. Always returns an unmodifiable,
451
+ * empty list.
452
+ * @return {goog.ds.DataNodeList} (Empty) list of child nodes.
453
+ */
454
+ goog.ds.PrimitiveFastDataNode.prototype.getChildNodes = function() {
455
+ return goog.ds.FastDataNode.emptyList_;
456
+ };
457
+
458
+
459
+ /**
460
+ * Get a child node by name. Always returns null.
461
+ * @param {string} name Name of child node.
462
+ * @return {goog.ds.DataNode} Child node.
463
+ */
464
+ goog.ds.PrimitiveFastDataNode.prototype.getChildNode = function(name) {
465
+ return null;
466
+ };
467
+
468
+
469
+ /**
470
+ * Returns the value of a child node. Always returns null.
471
+ * @param {string} name Name of child node.
472
+ * @return {Object} Value of child node.
473
+ */
474
+ goog.ds.PrimitiveFastDataNode.prototype.getChildNodeValue = function(name) {
475
+ return null;
476
+ };
477
+
478
+
479
+ /**
480
+ * Not supported by primitive data nodes.
481
+ * @param {string} name Name of child node.
482
+ * @param {Object} value Value of child node.
483
+ */
484
+ goog.ds.PrimitiveFastDataNode.prototype.setChildNode =
485
+ function(name, value) {
486
+ throw Error('Cannot set a child node for a PrimitiveFastDataNode');
487
+ };
488
+
489
+
490
+ /**
491
+ * Returns whether this data node is a list. Always returns false for
492
+ * instances of PrimitiveFastDataNode.
493
+ * @return {boolean} Whether this data node is array-like.
494
+ */
495
+ goog.ds.PrimitiveFastDataNode.prototype.isList = function() {
496
+ return false;
497
+ };
498
+
499
+
500
+ /**
501
+ * Returns a javascript object representation of this data node. You should
502
+ * not modify the object returned by this function.
503
+ * @return {*} Javascript object representation of this data node.
504
+ */
505
+ goog.ds.PrimitiveFastDataNode.prototype.getJsObject = function() {
506
+ return this.value_;
507
+ };
508
+
509
+
510
+ /**
511
+ * Creates a new list node from an array.
512
+ * @param {Array} values values hold by this list node.
513
+ * @param {string} dataName name of this node.
514
+ * @param {goog.ds.DataNode=} opt_parent parent of this node.
515
+ * @extends {goog.ds.AbstractFastDataNode}
516
+ * @constructor
517
+ */
518
+ // TODO(arv): Use interfaces when available. This implements DataNodeList
519
+ // as well.
520
+ goog.ds.FastListNode = function(values, dataName, opt_parent) {
521
+ this.values_ = [];
522
+ for (var i = 0; i < values.length; ++i) {
523
+ var name = values[i].id || ('[' + i + ']');
524
+ this.values_.push(goog.ds.FastDataNode.fromJs(values[i], name, this));
525
+ if (values[i].id) {
526
+ if (!this.map_) {
527
+ this.map_ = {};
528
+ }
529
+ this.map_[values[i].id] = i;
530
+ }
531
+ }
532
+ goog.ds.AbstractFastDataNode.call(this, dataName, opt_parent);
533
+ };
534
+ goog.inherits(goog.ds.FastListNode, goog.ds.AbstractFastDataNode);
535
+
536
+
537
+ /**
538
+ * Not supported for FastListNodes.
539
+ * @param {Object} value Value to set data node to.
540
+ */
541
+ goog.ds.FastListNode.prototype.set = function(value) {
542
+ throw Error('Cannot set a FastListNode to a new value');
543
+ };
544
+
545
+
546
+ /**
547
+ * Returns child nodes of this data node. Currently, only supports
548
+ * returning all children.
549
+ * @return {goog.ds.DataNode|goog.ds.DataNodeList} List of child nodes.
550
+ */
551
+ // TODO(arv): This class implements DataNodeList but we don't support interfaces
552
+ // yet.
553
+ goog.ds.FastListNode.prototype.getChildNodes = function() {
554
+ return this;
555
+ };
556
+
557
+
558
+ /**
559
+ * Get a child node by name.
560
+ * @param {string} key Name of child node.
561
+ * @param {boolean=} opt_create Whether to create the child if it does not
562
+ * exist.
563
+ * @return {goog.ds.DataNode} Child node.
564
+ */
565
+ goog.ds.FastListNode.prototype.getChildNode = function(key, opt_create) {
566
+ var index = this.getKeyAsNumber_(key);
567
+ if (index == null && this.map_) {
568
+ index = this.map_[key];
569
+ }
570
+ if (index != null && this.values_[index]) {
571
+ return this.values_[index];
572
+ } else if (opt_create) {
573
+ this.setChildNode(key, {});
574
+ return this.getChildNode(key);
575
+ } else {
576
+ return null;
577
+ }
578
+ };
579
+
580
+
581
+ /**
582
+ * Returns the value of a child node.
583
+ * @param {string} key Name of child node.
584
+ * @return {Object} Value of child node.
585
+ */
586
+ goog.ds.FastListNode.prototype.getChildNodeValue = function(key) {
587
+ var child = this.getChildNode(key);
588
+ return (child ? child.get() : null);
589
+ };
590
+
591
+
592
+ /**
593
+ * Tries to interpret key as a numeric index enclosed by square brakcets.
594
+ * @param {string} key Key that should be interpreted as a number.
595
+ * @return {?number} Numeric index or null if key is not of the form
596
+ * described above.
597
+ * @private
598
+ */
599
+ goog.ds.FastListNode.prototype.getKeyAsNumber_ = function(key) {
600
+ if (key.charAt(0) == '[' && key.charAt(key.length - 1) == ']') {
601
+ return Number(key.substring(1, key.length - 1));
602
+ } else {
603
+ return null;
604
+ }
605
+ };
606
+
607
+
608
+ /**
609
+ * Sets a child node. Creates the child if it does not exist. To set
610
+ * children at a certain index, use a key of the form '[index]'. Note, that
611
+ * you can only set values at existing numeric indices. To add a new node
612
+ * to this list, you have to use the add method.
613
+ *
614
+ * Calling this function makes any child nodes previously obtained for name
615
+ * invalid. You should not use these child nodes but instead obtain a new
616
+ * instance by calling getChildNode.
617
+ *
618
+ * @override
619
+ */
620
+ goog.ds.FastListNode.prototype.setChildNode = function(key, value) {
621
+ var count = this.values_.length;
622
+ if (value != null) {
623
+ if (!value.getDataName) {
624
+ value = goog.ds.FastDataNode.fromJs(value, key, this);
625
+ }
626
+ var index = this.getKeyAsNumber_(key);
627
+ if (index != null) {
628
+ if (index < 0 || index >= this.values_.length) {
629
+ throw Error('List index out of bounds: ' + index);
630
+ }
631
+ this.values_[key] = value;
632
+ } else {
633
+ if (!this.map_) {
634
+ this.map_ = {};
635
+ }
636
+ this.values_.push(value);
637
+ this.map_[key] = this.values_.length - 1;
638
+ }
639
+ } else {
640
+ this.removeNode(key);
641
+ }
642
+ var dm = goog.ds.DataManager.getInstance();
643
+ dm.fireDataChange(this.getDataPath() + goog.ds.STR_PATH_SEPARATOR + key);
644
+ if (this.values_.length != count) {
645
+ this.listSizeChanged_();
646
+ }
647
+ return null;
648
+ };
649
+
650
+
651
+ /**
652
+ * Fire data changes that are appropriate when the size of this list changes.
653
+ * Should be called whenever the list size has changed.
654
+ * @private
655
+ */
656
+ goog.ds.FastListNode.prototype.listSizeChanged_ = function() {
657
+ var dm = goog.ds.DataManager.getInstance();
658
+ dm.fireDataChange(this.getDataPath());
659
+ dm.fireDataChange(this.getDataPath() + goog.ds.STR_PATH_SEPARATOR +
660
+ 'count()');
661
+ };
662
+
663
+
664
+ /**
665
+ * Returns whether this data node is a list. Always returns true.
666
+ * @return {boolean} Whether this data node is array-like.
667
+ */
668
+ goog.ds.FastListNode.prototype.isList = function() {
669
+ return true;
670
+ };
671
+
672
+
673
+ /**
674
+ * Returns a javascript object representation of this data node. You should
675
+ * not modify the object returned by this function.
676
+ * @return {Object} Javascript object representation of this data node.
677
+ */
678
+ goog.ds.FastListNode.prototype.getJsObject = function() {
679
+ var result = [];
680
+ for (var i = 0; i < this.values_.length; ++i) {
681
+ result.push(this.values_[i].getJsObject());
682
+ }
683
+ return result;
684
+ };
685
+
686
+
687
+ /*
688
+ * Implementation of goog.ds.DataNodeList for FastListNode.
689
+ */
690
+
691
+
692
+ /**
693
+ * Adds a child to this data node
694
+ * @param {goog.ds.DataNode} value Child node to add.
695
+ */
696
+ goog.ds.FastListNode.prototype.add = function(value) {
697
+ if (!value.getDataName) {
698
+ value = goog.ds.FastDataNode.fromJs(value,
699
+ String('[' + (this.values_.length) + ']'), this);
700
+ }
701
+ this.values_.push(value);
702
+ var dm = goog.ds.DataManager.getInstance();
703
+ dm.fireDataChange(this.getDataPath() + goog.ds.STR_PATH_SEPARATOR +
704
+ '[' + (this.values_.length - 1) + ']');
705
+ this.listSizeChanged_();
706
+ };
707
+
708
+
709
+ /**
710
+ * Gets the value of this data node (if called without opt_key) or
711
+ * gets a child node (if called with opt_key).
712
+ * @param {string=} opt_key Name of child node.
713
+ * @return {Array|goog.ds.DataNode} Array of child nodes (if called without
714
+ * opt_key), or a named child node otherwise.
715
+ */
716
+ goog.ds.FastListNode.prototype.get = function(opt_key) {
717
+ // if there are no arguments, DataNode.get was called
718
+ if (!goog.isDef(opt_key)) {
719
+ return this.values_;
720
+ } else {
721
+ return this.getChildNode(opt_key);
722
+ }
723
+ };
724
+
725
+
726
+ /**
727
+ * Gets a child node by (numeric) index.
728
+ * @param {number} index Index of child node (starting from 0).
729
+ * @return {goog.ds.DataNode} Child node at specified index.
730
+ */
731
+ goog.ds.FastListNode.prototype.getByIndex = function(index) {
732
+ var child = this.values_[index];
733
+ return (child != null ? child : null); // never return undefined
734
+ };
735
+
736
+
737
+ /**
738
+ * Gets the number of child nodes.
739
+ * @return {number} Number of child nodes.
740
+ */
741
+ goog.ds.FastListNode.prototype.getCount = function() {
742
+ return this.values_.length;
743
+ };
744
+
745
+
746
+ /**
747
+ * Sets a child node.
748
+ * @param {string} name Name of child node.
749
+ * @param {Object} value Value of child node.
750
+ */
751
+ goog.ds.FastListNode.prototype.setNode = function(name, value) {
752
+ throw Error('Setting child nodes of a FastListNode is not implemented, yet');
753
+ };
754
+
755
+
756
+ /**
757
+ * Removes a child node.
758
+ * @override
759
+ */
760
+ goog.ds.FastListNode.prototype.removeNode = function(name) {
761
+ var index = this.getKeyAsNumber_(name);
762
+ if (index == null && this.map_) {
763
+ index = this.map_[name];
764
+ }
765
+ if (index != null) {
766
+ this.values_.splice(index, 1);
767
+ if (this.map_) {
768
+ var keyToDelete = null;
769
+ for (var key in this.map_) {
770
+ if (this.map_[key] == index) {
771
+ keyToDelete = key;
772
+ } else if (this.map_[key] > index) {
773
+ --this.map_[key];
774
+ }
775
+ }
776
+ if (keyToDelete) {
777
+ delete this.map_[keyToDelete];
778
+ }
779
+ }
780
+ var dm = goog.ds.DataManager.getInstance();
781
+ dm.fireDataChange(this.getDataPath() + goog.ds.STR_PATH_SEPARATOR +
782
+ '[' + index + ']');
783
+ this.listSizeChanged_();
784
+ }
785
+ return false;
786
+ };
787
+
788
+
789
+ /**
790
+ * Returns the index of a named child nodes. This method only works if
791
+ * this list uses mixed name/indexed lookup, i.e. if its child node have
792
+ * an 'id' attribute.
793
+ * @param {string} name Name of child node to determine index of.
794
+ * @return {number} Index of child node named name.
795
+ */
796
+ goog.ds.FastListNode.prototype.indexOf = function(name) {
797
+ var index = this.getKeyAsNumber_(name);
798
+ if (index == null && this.map_) {
799
+ index = this.map_[name];
800
+ }
801
+ if (index == null) {
802
+ throw Error('Cannot determine index for: ' + name);
803
+ }
804
+ return /** @type {number} */(index);
805
+ };
806
+ ;
807
+ FI"asset_paths;
808
+ F["y/Volumes/Development/dev-web/yellow-brick-road/vendor/assets/closure-library/closure/goog/datasource/fastdatanode.jsI"dependency_paths;
809
+ F[{I" path;
810
+ F"y/Volumes/Development/dev-web/yellow-brick-road/vendor/assets/closure-library/closure/goog/datasource/fastdatanode.jsI"
811
+ mtime;
812
+ FIu: Time
813
+ T: offsetiI"hexdigest;
814
+ F"%9164461bbd47c79f044b466a9c144a52I"
815
+ F"%46dde6621c301f4928e3b34efee9e3b5