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,153 @@
1
+ o: ActiveSupport::Cache::Entry :@compressedF:@expires_in0:@created_atf1325441614.703029: @value{ I" length:EFi�I" digest;
2
+ F"%61f04baf8119f0680c3fe1e9207c5475I" source;
3
+ FI"�// Copyright 2010 The Closure Library Authors. All Rights Reserved.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 (the "License");
6
+ // you may not use this file except in compliance with the License.
7
+ // You may obtain a copy of the License at
8
+ //
9
+ // http://www.apache.org/licenses/LICENSE-2.0
10
+ //
11
+ // Unless required by applicable law or agreed to in writing, software
12
+ // distributed under the License is distributed on an "AS-IS" BASIS,
13
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ // See the License for the specific language governing permissions and
15
+ // limitations under the License.
16
+
17
+ /**
18
+ * @fileoverview A buffer for log records. The purpose of this is to improve
19
+ * logging performance by re-using old objects when the buffer becomes full and
20
+ * to eliminate the need for each app to implement their own log buffer. The
21
+ * disadvantage to doing this is that log handlers cannot maintain references to
22
+ * log records and expect that they are not overwriten at a later point.
23
+ *
24
+ * @author agrieve@google.com (Andrew Grieve)
25
+ */
26
+
27
+
28
+ goog.provide('goog.debug.LogBuffer');
29
+
30
+ goog.require('goog.asserts');
31
+ goog.require('goog.debug.LogRecord');
32
+
33
+
34
+
35
+ /**
36
+ * Creates the log buffer.
37
+ * @constructor
38
+ */
39
+ goog.debug.LogBuffer = function() {
40
+ goog.asserts.assert(goog.debug.LogBuffer.isBufferingEnabled(),
41
+ 'Cannot use goog.debug.LogBuffer without defining ' +
42
+ 'goog.debug.LogBuffer.CAPACITY.');
43
+ this.clear();
44
+ };
45
+
46
+
47
+ /**
48
+ * A static method that always returns the same instance of LogBuffer.
49
+ * @return {!goog.debug.LogBuffer} The LogBuffer singleton instance.
50
+ */
51
+ goog.debug.LogBuffer.getInstance = function() {
52
+ if (!goog.debug.LogBuffer.instance_) {
53
+ // This function is written with the return statement after the assignment
54
+ // to avoid the jscompiler StripCode bug described in http://b/2608064.
55
+ // After that bug is fixed this can be refactored.
56
+ goog.debug.LogBuffer.instance_ = new goog.debug.LogBuffer();
57
+ }
58
+ return goog.debug.LogBuffer.instance_;
59
+ };
60
+
61
+
62
+ /**
63
+ * @define {number} The number of log records to buffer. 0 means disable
64
+ * buffering.
65
+ */
66
+ goog.debug.LogBuffer.CAPACITY = 0;
67
+
68
+
69
+ /**
70
+ * The array to store the records.
71
+ * @type {!Array.<!goog.debug.LogRecord|undefined>}
72
+ * @private
73
+ */
74
+ goog.debug.LogBuffer.prototype.buffer_;
75
+
76
+
77
+ /**
78
+ * The index of the most recently added record or -1 if there are no records.
79
+ * @type {number}
80
+ * @private
81
+ */
82
+ goog.debug.LogBuffer.prototype.curIndex_;
83
+
84
+
85
+ /**
86
+ * Whether the buffer is at capacity.
87
+ * @type {boolean}
88
+ * @private
89
+ */
90
+ goog.debug.LogBuffer.prototype.isFull_;
91
+
92
+
93
+ /**
94
+ * Adds a log record to the buffer, possibly overwriting the oldest record.
95
+ * @param {goog.debug.Logger.Level} level One of the level identifiers.
96
+ * @param {string} msg The string message.
97
+ * @param {string} loggerName The name of the source logger.
98
+ * @return {!goog.debug.LogRecord} The log record.
99
+ */
100
+ goog.debug.LogBuffer.prototype.addRecord = function(level, msg, loggerName) {
101
+ var curIndex = (this.curIndex_ + 1) % goog.debug.LogBuffer.CAPACITY;
102
+ this.curIndex_ = curIndex;
103
+ if (this.isFull_) {
104
+ var ret = this.buffer_[curIndex];
105
+ ret.reset(level, msg, loggerName);
106
+ return ret;
107
+ }
108
+ this.isFull_ = curIndex == goog.debug.LogBuffer.CAPACITY - 1;
109
+ return this.buffer_[curIndex] =
110
+ new goog.debug.LogRecord(level, msg, loggerName);
111
+ };
112
+
113
+
114
+ /**
115
+ * @return {boolean} Whether the log buffer is enabled.
116
+ */
117
+ goog.debug.LogBuffer.isBufferingEnabled = function() {
118
+ return goog.debug.LogBuffer.CAPACITY > 0;
119
+ };
120
+
121
+
122
+ /**
123
+ * Removes all buffered log records.
124
+ */
125
+ goog.debug.LogBuffer.prototype.clear = function() {
126
+ this.buffer_ = new Array(goog.debug.LogBuffer.CAPACITY);
127
+ this.curIndex_ = -1;
128
+ this.isFull_ = false;
129
+ };
130
+
131
+
132
+ /**
133
+ * Calls the given function for each buffered log record, starting with the
134
+ * oldest one.
135
+ * @param {function(!goog.debug.LogRecord)} func The function to call.
136
+ */
137
+ goog.debug.LogBuffer.prototype.forEachRecord = function(func) {
138
+ var buffer = this.buffer_;
139
+ // Corner case: no records.
140
+ if (!buffer[0]) {
141
+ return;
142
+ }
143
+ var curIndex = this.curIndex_;
144
+ var i = this.isFull_ ? curIndex : -1;
145
+ do {
146
+ i = (i + 1) % goog.debug.LogBuffer.CAPACITY;
147
+ func(/** @type {!goog.debug.LogRecord} */ (buffer[i]));
148
+ } while (i != curIndex);
149
+ };
150
+
151
+ ;
152
+ FI"
153
+ F"%6b71a9d0d278a57bbeea1b396e9aa178
@@ -0,0 +1,589 @@
1
+ o: ActiveSupport::Cache::Entry :@compressedF:@expires_in0:@created_atf1325441614.9600031: @value{I"
2
+ class:EFI"BundledAsset;
3
+ FI"id;
4
+ F"%8f66e4f2bd5bab0bff3d55e9244a98f9I"logical_path;
5
+ FI"+closure/goog/datasource/datamanager.js;
6
+ TI"
7
+ F"x/Volumes/Development/dev-web/yellow-brick-road/vendor/assets/closure-library/closure/goog/datasource/datamanager.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"�D// Copyright 2006 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
+ * Central class for registering and accessing data sources
30
+ * Also handles processing of data events.
31
+ *
32
+ * There is a shared global instance that most client code should access via
33
+ * goog.ds.DataManager.getInstance(). However you can also create your own
34
+ * DataManager using new
35
+ *
36
+ * Implements DataNode to provide the top element in a data registry
37
+ * Prepends '$' to top level data names in path to denote they are root object
38
+ *
39
+ */
40
+
41
+ goog.provide('goog.ds.DataManager');
42
+
43
+ goog.require('goog.ds.BasicNodeList');
44
+ goog.require('goog.ds.DataNode');
45
+ goog.require('goog.ds.Expr');
46
+ goog.require('goog.string');
47
+ goog.require('goog.structs');
48
+ goog.require('goog.structs.Map');
49
+
50
+
51
+
52
+ /**
53
+ * Create a DataManger
54
+ * @extends {goog.ds.DataNode}
55
+ * @constructor
56
+ */
57
+ goog.ds.DataManager = function() {
58
+ this.dataSources_ = new goog.ds.BasicNodeList();
59
+ this.autoloads_ = new goog.structs.Map();
60
+ this.listenerMap_ = {};
61
+ this.listenersByFunction_ = {};
62
+ this.aliases_ = {};
63
+ this.eventCount_ = 0;
64
+ this.indexedListenersByFunction_ = {};
65
+ };
66
+
67
+
68
+ /**
69
+ * Global instance
70
+ * @private
71
+ */
72
+ goog.ds.DataManager.instance_ = null;
73
+ goog.inherits(goog.ds.DataManager, goog.ds.DataNode);
74
+
75
+
76
+ /**
77
+ * Get the global instance
78
+ * @return {goog.ds.DataManager} The data manager singleton.
79
+ */
80
+ goog.ds.DataManager.getInstance = function() {
81
+ if (!goog.ds.DataManager.instance_) {
82
+ goog.ds.DataManager.instance_ = new goog.ds.DataManager();
83
+ }
84
+ return goog.ds.DataManager.instance_;
85
+ };
86
+
87
+
88
+ /**
89
+ * Clears the global instance (for unit tests to reset state).
90
+ */
91
+ goog.ds.DataManager.clearInstance = function() {
92
+ goog.ds.DataManager.instance_ = null;
93
+ };
94
+
95
+
96
+ /**
97
+ * Add a data source
98
+ * @param {goog.ds.DataNode} ds The data source.
99
+ * @param {boolean=} opt_autoload Whether to automatically load the data,
100
+ * defaults to false.
101
+ * @param {string=} opt_name Optional name, can also get name
102
+ * from the datasource.
103
+ */
104
+ goog.ds.DataManager.prototype.addDataSource = function(ds, opt_autoload,
105
+ opt_name) {
106
+ var autoload = !!opt_autoload;
107
+ var name = opt_name || ds.getDataName();
108
+ if (!goog.string.startsWith(name, '$')) {
109
+ name = '$' + name;
110
+ }
111
+ ds.setDataName(name);
112
+ this.dataSources_.add(ds);
113
+ this.autoloads_.set(name, autoload);
114
+ };
115
+
116
+
117
+ /**
118
+ * Create an alias for a data path, very similar to assigning a variable.
119
+ * For example, you can set $CurrentContact -> $Request/Contacts[5], and all
120
+ * references to $CurrentContact will be procesed on $Request/Contacts[5].
121
+ *
122
+ * Aliases will hide datasources of the same name.
123
+ *
124
+ * @param {string} name Alias name, must be a top level path ($Foo).
125
+ * @param {string} dataPath Data path being aliased.
126
+ */
127
+ goog.ds.DataManager.prototype.aliasDataSource = function(name, dataPath) {
128
+ if (!this.aliasListener_) {
129
+ this.aliasListener_ = goog.bind(this.listenForAlias_, this);
130
+ }
131
+ if (this.aliases_[name]) {
132
+ var oldPath = this.aliases_[name].getSource();
133
+ this.removeListeners(this.aliasListener_, oldPath + '/...', name);
134
+ }
135
+ this.aliases_[name] = goog.ds.Expr.create(dataPath);
136
+ this.addListener(this.aliasListener_, dataPath + '/...', name);
137
+ this.fireDataChange(name);
138
+ };
139
+
140
+
141
+ /**
142
+ * Listener function for matches of paths that have been aliased.
143
+ * Fires a data change on the alias as well.
144
+ *
145
+ * @param {string} dataPath Path of data event fired.
146
+ * @param {string} name Name of the alias.
147
+ * @private
148
+ */
149
+ goog.ds.DataManager.prototype.listenForAlias_ = function(dataPath, name) {
150
+ var aliasedExpr = this.aliases_[name];
151
+
152
+ if (aliasedExpr) {
153
+ // If it's a subpath, appends the subpath to the alias name
154
+ // otherwise just fires on the top level alias
155
+ var aliasedPath = aliasedExpr.getSource();
156
+ if (dataPath.indexOf(aliasedPath) == 0) {
157
+ this.fireDataChange(name + dataPath.substring(aliasedPath.length));
158
+ } else {
159
+ this.fireDataChange(name);
160
+ }
161
+ }
162
+ };
163
+
164
+
165
+ /**
166
+ * Gets a named child node of the current node.
167
+ *
168
+ * @param {string} name The node name.
169
+ * @return {goog.ds.DataNode} The child node,
170
+ * or null if no node of this name exists.
171
+ */
172
+ goog.ds.DataManager.prototype.getDataSource = function(name) {
173
+ if (this.aliases_[name]) {
174
+ return this.aliases_[name].getNode();
175
+ } else {
176
+ return this.dataSources_.get(name);
177
+ }
178
+ };
179
+
180
+
181
+ /**
182
+ * Get the value of the node
183
+ * @return {Object} The value of the node, or null if no value.
184
+ */
185
+ goog.ds.DataManager.prototype.get = function() {
186
+ return this.dataSources_;
187
+ };
188
+
189
+
190
+ /**
191
+ * Set the value of the node
192
+ * @param {Object} value The new value of the node.
193
+ */
194
+ goog.ds.DataManager.prototype.set = function(value) {
195
+ throw Error('Can\'t set on DataManager');
196
+ };
197
+
198
+
199
+ /**
200
+ * Gets all of the child nodes of the current node.
201
+ * @param {string=} opt_selector String selector to choose child nodes
202
+ * Should return an empty DataNode list if no child nodes.
203
+ *
204
+ * @return {goog.ds.DataNodeList} The child nodes.
205
+ */
206
+ goog.ds.DataManager.prototype.getChildNodes = function(opt_selector) {
207
+ if (opt_selector) {
208
+ return new goog.ds.BasicNodeList(
209
+ [this.getChildNode(/** @type {string} */(opt_selector))]);
210
+ } else {
211
+ return this.dataSources_;
212
+ }
213
+ };
214
+
215
+
216
+ /**
217
+ * Gets a named child node of the current node
218
+ * @param {string} name The node name.
219
+ * @return {goog.ds.DataNode} The child node,
220
+ * or null if no node of this name exists.
221
+ */
222
+ goog.ds.DataManager.prototype.getChildNode = function(name) {
223
+ return this.getDataSource(name);
224
+ };
225
+
226
+
227
+ /**
228
+ * Gets the value of a child node
229
+ * @param {string} name The node name.
230
+ * @return {Object} The value of the node, or null if no value or the child node
231
+ * doesn't exist.
232
+ */
233
+ goog.ds.DataManager.prototype.getChildNodeValue = function(name) {
234
+ var ds = this.getDataSource(name);
235
+ return ds ? ds.get() : null;
236
+ };
237
+
238
+
239
+ /**
240
+ * Get the name of the node relative to the parent node
241
+ * @return {string} The name of the node.
242
+ */
243
+ goog.ds.DataManager.prototype.getDataName = function() {
244
+ return '';
245
+ };
246
+
247
+
248
+ /**
249
+ * Gets the a qualified data path to this node
250
+ * @return {string} The data path.
251
+ */
252
+ goog.ds.DataManager.prototype.getDataPath = function() {
253
+ return '';
254
+ };
255
+
256
+
257
+ /**
258
+ * Load or reload the backing data for this node
259
+ * only loads datasources flagged with autoload
260
+ */
261
+ goog.ds.DataManager.prototype.load = function() {
262
+ var len = this.dataSources_.getCount();
263
+ for (var i = 0; i < len; i++) {
264
+ var ds = this.dataSources_.getByIndex(i);
265
+ var autoload = this.autoloads_.get(ds.getDataName());
266
+ if (autoload) {
267
+ ds.load();
268
+ }
269
+ }
270
+ };
271
+
272
+
273
+ /**
274
+ * Gets the state of the backing data for this node
275
+ * @return {goog.ds.LoadState} The state.
276
+ */
277
+ goog.ds.DataManager.prototype.getLoadState = goog.abstractMethod;
278
+
279
+
280
+ /**
281
+ * Whether the value of this node is a homogeneous list of data
282
+ * @return {boolean} True if a list.
283
+ */
284
+ goog.ds.DataManager.prototype.isList = function() {
285
+ return false;
286
+ };
287
+
288
+
289
+ /**
290
+ * Get the total count of events fired (mostly for debugging)
291
+ * @return {number} Count of events.
292
+ */
293
+ goog.ds.DataManager.prototype.getEventCount = function() {
294
+ return this.eventCount_;
295
+ };
296
+
297
+
298
+ /**
299
+ * Adds a listener
300
+ * Listeners should fire when any data with path that has dataPath as substring
301
+ * is changed.
302
+ * TODO(user) Look into better listener handling
303
+ *
304
+ * @param {Function} fn Callback function, signature function(dataPath, id).
305
+ * @param {string} dataPath Fully qualified data path.
306
+ * @param {string=} opt_id A value passed back to the listener when the dataPath
307
+ * is matched.
308
+ */
309
+ goog.ds.DataManager.prototype.addListener = function(fn, dataPath, opt_id) {
310
+ // maxAncestor sets how distant an ancestor you can be of the fired event
311
+ // and still fire (you always fire if you are a descendant).
312
+ // 0 means you don't fire if you are an ancestor
313
+ // 1 means you only fire if you are parent
314
+ // 1000 means you will fire if you are ancestor (effectively infinite)
315
+ var maxAncestors = 0;
316
+ if (goog.string.endsWith(dataPath, '/...')) {
317
+ maxAncestors = 1000;
318
+ dataPath = dataPath.substring(0, dataPath.length - 4);
319
+ } else if (goog.string.endsWith(dataPath, '/*')) {
320
+ maxAncestors = 1;
321
+ dataPath = dataPath.substring(0, dataPath.length - 2);
322
+ }
323
+
324
+ opt_id = opt_id || '';
325
+ var key = dataPath + ':' + opt_id + ':' + goog.getUid(fn);
326
+ var listener = {dataPath: dataPath, id: opt_id, fn: fn};
327
+ var expr = goog.ds.Expr.create(dataPath);
328
+
329
+ var fnUid = goog.getUid(fn);
330
+ if (!this.listenersByFunction_[fnUid]) {
331
+ this.listenersByFunction_[fnUid] = {};
332
+ }
333
+ this.listenersByFunction_[fnUid][key] = {listener: listener, items: []};
334
+
335
+ while (expr) {
336
+ var listenerSpec = {listener: listener, maxAncestors: maxAncestors};
337
+ var matchingListeners = this.listenerMap_[expr.getSource()];
338
+ if (matchingListeners == null) {
339
+ matchingListeners = {};
340
+ this.listenerMap_[expr.getSource()] = matchingListeners;
341
+ }
342
+ matchingListeners[key] = listenerSpec;
343
+ maxAncestors = 0;
344
+ expr = expr.getParent();
345
+ this.listenersByFunction_[fnUid][key].items.push(
346
+ {key: key, obj: matchingListeners});
347
+ }
348
+ };
349
+
350
+
351
+ /**
352
+ * Adds an indexed listener.
353
+ *
354
+ * Indexed listeners allow for '*' in data paths. If a * exists, will match
355
+ * all values and return the matched values in an array to the callback.
356
+ *
357
+ * Currently uses a promiscuous match algorithm: Matches everything before the
358
+ * first '*', and then does a regex match for all of the returned events.
359
+ * Although this isn't optimized, it is still an improvement as you can collapse
360
+ * 100's of listeners into a single regex match
361
+ *
362
+ * @param {Function} fn Callback function, signature (dataPath, id, indexes).
363
+ * @param {string} dataPath Fully qualified data path.
364
+ * @param {string=} opt_id A value passed back to the listener when the dataPath
365
+ * is matched.
366
+ */
367
+ goog.ds.DataManager.prototype.addIndexedListener = function(fn, dataPath,
368
+ opt_id) {
369
+ var firstStarPos = dataPath.indexOf('*');
370
+ // Just need a regular listener
371
+ if (firstStarPos == -1) {
372
+ this.addListener(fn, dataPath, opt_id);
373
+ return;
374
+ }
375
+
376
+ var listenPath = dataPath.substring(0, firstStarPos) + '...';
377
+
378
+ // Create regex that matches * to any non '\' character
379
+ var ext = '$';
380
+ if (goog.string.endsWith(dataPath, '/...')) {
381
+ dataPath = dataPath.substring(0, dataPath.length - 4);
382
+ ext = '';
383
+ }
384
+ var regExpPath = goog.string.regExpEscape(dataPath);
385
+ var matchRegExp = regExpPath.replace(/\\\*/g, '([^\\\/]+)') + ext;
386
+
387
+ // Matcher function applies the regex and calls back the original function
388
+ // if the regex matches, passing in an array of the matched values
389
+ var matchRegExpRe = new RegExp(matchRegExp);
390
+ var matcher = function(path, id) {
391
+ var match = matchRegExpRe.exec(path);
392
+ if (match) {
393
+ match.shift();
394
+ fn(path, opt_id, match);
395
+ }
396
+ }
397
+ this.addListener(matcher, listenPath, opt_id);
398
+
399
+ // Add the indexed listener to the map so that we can remove it later.
400
+ var fnUid = goog.getUid(fn);
401
+ if (!this.indexedListenersByFunction_[fnUid]) {
402
+ this.indexedListenersByFunction_[fnUid] = {};
403
+ }
404
+ var key = dataPath + ':' + opt_id;
405
+ this.indexedListenersByFunction_[fnUid][key] = {
406
+ listener: {dataPath: listenPath, fn: matcher, id: opt_id}
407
+ };
408
+ };
409
+
410
+
411
+ /**
412
+ * Removes indexed listeners with a given callback function, and optional
413
+ * matching datapath and matching id.
414
+ *
415
+ * @param {Function} fn Callback function, signature function(dataPath, id).
416
+ * @param {string=} opt_dataPath Fully qualified data path.
417
+ * @param {string=} opt_id A value passed back to the listener when the dataPath
418
+ * is matched.
419
+ */
420
+ goog.ds.DataManager.prototype.removeIndexedListeners = function(
421
+ fn, opt_dataPath, opt_id) {
422
+ this.removeListenersByFunction_(
423
+ this.indexedListenersByFunction_, true, fn, opt_dataPath, opt_id);
424
+ };
425
+
426
+
427
+ /**
428
+ * Removes listeners with a given callback function, and optional
429
+ * matching dataPath and matching id
430
+ *
431
+ * @param {Function} fn Callback function, signature function(dataPath, id).
432
+ * @param {string=} opt_dataPath Fully qualified data path.
433
+ * @param {string=} opt_id A value passed back to the listener when the dataPath
434
+ * is matched.
435
+ */
436
+ goog.ds.DataManager.prototype.removeListeners = function(fn, opt_dataPath,
437
+ opt_id) {
438
+
439
+ // Normalize data path root
440
+ if (opt_dataPath && goog.string.endsWith(opt_dataPath, '/...')) {
441
+ opt_dataPath = opt_dataPath.substring(0, opt_dataPath.length - 4);
442
+ } else if (opt_dataPath && goog.string.endsWith(opt_dataPath, '/*')) {
443
+ opt_dataPath = opt_dataPath.substring(0, opt_dataPath.length - 2);
444
+ }
445
+
446
+ this.removeListenersByFunction_(
447
+ this.listenersByFunction_, false, fn, opt_dataPath, opt_id);
448
+ };
449
+
450
+
451
+ /**
452
+ * Removes listeners with a given callback function, and optional
453
+ * matching dataPath and matching id from the given listenersByFunction
454
+ * data structure.
455
+ *
456
+ * @param {Object} listenersByFunction The listeners by function.
457
+ * @param {boolean} indexed Indicates whether the listenersByFunction are
458
+ * indexed or not.
459
+ * @param {Function} fn Callback function, signature function(dataPath, id).
460
+ * @param {string=} opt_dataPath Fully qualified data path.
461
+ * @param {string=} opt_id A value passed back to the listener when the dataPath
462
+ * is matched.
463
+ * @private
464
+ */
465
+ goog.ds.DataManager.prototype.removeListenersByFunction_ = function(
466
+ listenersByFunction, indexed, fn, opt_dataPath, opt_id) {
467
+ var fnUid = goog.getUid(fn);
468
+ var functionMatches = listenersByFunction[fnUid];
469
+ if (functionMatches != null) {
470
+ for (var key in functionMatches) {
471
+ var functionMatch = functionMatches[key];
472
+ var listener = functionMatch.listener;
473
+ if ((!opt_dataPath || opt_dataPath == listener.dataPath) &&
474
+ (!opt_id || opt_id == listener.id)) {
475
+ if (indexed) {
476
+ this.removeListeners(
477
+ listener.fn, listener.dataPath, listener.id);
478
+ }
479
+ if (functionMatch.items) {
480
+ for (var i = 0; i < functionMatch.items.length; i++) {
481
+ var item = functionMatch.items[i];
482
+ delete item.obj[item.key];
483
+ }
484
+ }
485
+ delete functionMatches[key];
486
+ }
487
+ }
488
+ }
489
+ };
490
+
491
+
492
+ /**
493
+ * Get the total number of listeners (per expression listened to, so may be
494
+ * more than number of times addListener() has been called
495
+ * @return {number} Number of listeners.
496
+ */
497
+ goog.ds.DataManager.prototype.getListenerCount = function() {
498
+ var count = 0;
499
+ goog.structs.forEach(this.listenerMap_, function(matchingListeners) {
500
+ count += goog.structs.getCount(matchingListeners);
501
+ });
502
+ return count;
503
+ };
504
+
505
+
506
+ /**
507
+ * Disables the sending of all data events during the execution of the given
508
+ * callback. This provides a way to avoid useless notifications of small changes
509
+ * when you will eventually send a data event manually that encompasses them
510
+ * all.
511
+ *
512
+ * Note that this function can not be called reentrantly.
513
+ *
514
+ * @param {Function} callback Zero-arg function to execute.
515
+ */
516
+ goog.ds.DataManager.prototype.runWithoutFiringDataChanges = function(callback) {
517
+ if (this.disableFiring_) {
518
+ throw Error('Can not nest calls to runWithoutFiringDataChanges');
519
+ }
520
+
521
+ this.disableFiring_ = true;
522
+ try {
523
+ callback();
524
+ } finally {
525
+ this.disableFiring_ = false;
526
+ }
527
+ };
528
+
529
+
530
+ /**
531
+ * Fire a data change event to all listeners
532
+ *
533
+ * If the path matches the path of a listener, the listener will fire
534
+ *
535
+ * If your path is the parent of a listener, the listener will fire. I.e.
536
+ * if $Contacts/bob@bob.com changes, then we will fire listener for
537
+ * $Contacts/bob@bob.com/Name as well, as the assumption is that when
538
+ * a parent changes, all children are invalidated.
539
+ *
540
+ * If your path is the child of a listener, the listener may fire, depending
541
+ * on the ancestor depth.
542
+ *
543
+ * A listener for $Contacts might only be interested if the contact name changes
544
+ * (i.e. $Contacts doesn't fire on $Contacts/bob@bob.com/Name),
545
+ * while a listener for a specific contact might
546
+ * (i.e. $Contacts/bob@bob.com would fire on $Contacts/bob@bob.com/Name).
547
+ * Adding "/..." to a lisetener path listens to all children, and adding "/*" to
548
+ * a listener path listens only to direct children
549
+ *
550
+ * @param {string} dataPath Fully qualified data path.
551
+ */
552
+ goog.ds.DataManager.prototype.fireDataChange = function(dataPath) {
553
+ if (this.disableFiring_) {
554
+ return;
555
+ }
556
+
557
+ var expr = goog.ds.Expr.create(dataPath);
558
+ var ancestorDepth = 0;
559
+
560
+ // Look for listeners for expression and all its parents.
561
+ // Parents of listener expressions are all added to the listenerMap as well,
562
+ // so this will evaluate inner loop every time the dataPath is a child or
563
+ // an ancestor of the original listener path
564
+ while (expr) {
565
+ var matchingListeners = this.listenerMap_[expr.getSource()];
566
+ if (matchingListeners) {
567
+ for (var id in matchingListeners) {
568
+ var match = matchingListeners[id];
569
+ var listener = match.listener;
570
+ if (ancestorDepth <= match.maxAncestors) {
571
+ listener.fn(dataPath, listener.id);
572
+ }
573
+ }
574
+ }
575
+ ancestorDepth++;
576
+ expr = expr.getParent();
577
+ }
578
+ this.eventCount_++;
579
+ };
580
+ ;
581
+ FI"asset_paths;
582
+ F["x/Volumes/Development/dev-web/yellow-brick-road/vendor/assets/closure-library/closure/goog/datasource/datamanager.jsI"dependency_paths;
583
+ F[{I" path;
584
+ F"x/Volumes/Development/dev-web/yellow-brick-road/vendor/assets/closure-library/closure/goog/datasource/datamanager.jsI"
585
+ mtime;
586
+ FIu: Time
587
+ T: offsetiI"hexdigest;
588
+ F"%fc0863922185caab4eae1ca98d1f851dI"
589
+ F"%46dde6621c301f4928e3b34efee9e3b5