blogelator 0.2.2 → 0.2.3

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 (403) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +6 -1
  3. data/app/assets/javascripts/blogelator/admin.js +3 -4
  4. data/app/assets/javascripts/blogelator/components/markdown_editor_component.js +1 -1
  5. data/app/assets/javascripts/blogelator/config/router.js +2 -2
  6. data/app/assets/javascripts/blogelator/config/store.js +2 -2
  7. data/app/assets/javascripts/blogelator/templates/application.handlebars +2 -2
  8. data/lib/blogelator/version.rb +1 -1
  9. data/spec/dummy/config/environments/development.rb +0 -3
  10. data/spec/dummy/config/environments/production.rb +2 -0
  11. data/spec/dummy/config/initializers/teaspoon.rb +64 -0
  12. data/spec/dummy/log/development.log +407 -0
  13. data/spec/dummy/log/test.log +5931 -0
  14. data/spec/dummy/spec/teaspoon_env.rb +31 -0
  15. data/spec/dummy/tmp/cache/assets/development/sprockets/0035bf20bb2b00b92d477d04c43d0aea +0 -0
  16. data/spec/dummy/tmp/cache/assets/development/sprockets/01c8388ac413839f6da6e2873f33deea +0 -0
  17. data/spec/dummy/tmp/cache/assets/development/sprockets/02a1af1f7714de8266abf72c7b50ec59 +0 -0
  18. data/spec/dummy/tmp/cache/assets/development/sprockets/04972fd2c5849771d18618dab6a8d393 +0 -0
  19. data/spec/dummy/tmp/cache/assets/development/sprockets/04d4299740c43aa28bd490d49442847c +0 -0
  20. data/spec/dummy/tmp/cache/assets/development/sprockets/06818102fbdd5098a2498c66217c0b9e +0 -0
  21. data/spec/dummy/tmp/cache/assets/development/sprockets/07480eab8b760aa7803bd2a43a5af8a6 +0 -0
  22. data/spec/dummy/tmp/cache/assets/development/sprockets/0b8aefc6414907c456a6d2931770ce92 +0 -0
  23. data/spec/dummy/tmp/cache/assets/development/sprockets/0bb3f71998327005fa4474b72cdf1906 +0 -0
  24. data/spec/dummy/tmp/cache/assets/development/sprockets/0ccdcb035f2272248685f6eed371496f +0 -0
  25. data/spec/dummy/tmp/cache/assets/development/sprockets/0ffdbaf6d16aec30bfb6cb6ecfe1fc2c +0 -0
  26. data/spec/dummy/tmp/cache/assets/development/sprockets/10540929b00cc93cf8bbb830eea7c13e +0 -0
  27. data/spec/dummy/tmp/cache/assets/development/sprockets/113ed6660764a34b6b949e3e83d8f47f +0 -0
  28. data/spec/dummy/tmp/cache/assets/development/sprockets/124e25ebca5867367adec79115a0ca67 +0 -0
  29. data/spec/dummy/tmp/cache/assets/development/sprockets/1761f2355c63a1327d71f704fd0f0f45 +0 -0
  30. data/spec/dummy/tmp/cache/assets/development/sprockets/17b4609c1f1f232b9fd22f9a2c93f2cd +0 -0
  31. data/spec/dummy/tmp/cache/assets/development/sprockets/18dc9c71fcdc767f25de258b404ca42d +0 -0
  32. data/spec/dummy/tmp/cache/assets/development/sprockets/19c6abd503d4336614f363a40b336791 +0 -0
  33. data/spec/dummy/tmp/cache/assets/development/sprockets/1ac2bd9b586578646ecaabcb6bde0d66 +0 -0
  34. data/spec/dummy/tmp/cache/assets/development/sprockets/1bf531ae5678827808cefad9b853f496 +0 -0
  35. data/spec/dummy/tmp/cache/assets/development/sprockets/1ca7621c302e2cbcdc92a0721c796f52 +0 -0
  36. data/spec/dummy/tmp/cache/assets/development/sprockets/1dd23e80ffe5d395ed6a7d546d2c44db +0 -0
  37. data/spec/dummy/tmp/cache/assets/development/sprockets/1de63e02a9a79453e462e5c7d4e40cbd +0 -0
  38. data/spec/dummy/tmp/cache/assets/development/sprockets/1eb306e34ba8e9ef81ecf63449426d77 +0 -0
  39. data/spec/dummy/tmp/cache/assets/development/sprockets/1ec03d1119edc56c6c9baaa98293a121 +0 -0
  40. data/spec/dummy/tmp/cache/assets/development/sprockets/1f2d7a7aa7865b4a3201f89f96420158 +0 -0
  41. data/spec/dummy/tmp/cache/assets/development/sprockets/21e1804f6dfe3ceb605f24c94e6dc477 +0 -0
  42. data/spec/dummy/tmp/cache/assets/development/sprockets/23ecf564fa7a4ba6b10cdc7e73d5b96e +0 -0
  43. data/spec/dummy/tmp/cache/assets/development/sprockets/267fee7621dd7da0cd0edb1f5211c66f +0 -0
  44. data/spec/dummy/tmp/cache/assets/development/sprockets/26dea14589bf3e74e9f726683e9bdac4 +0 -0
  45. data/spec/dummy/tmp/cache/assets/development/sprockets/27b8ac22c4b0536c99a0f7a691ad3158 +0 -0
  46. data/spec/dummy/tmp/cache/assets/development/sprockets/292a4cc1ea9e79b14723bcdfee877f3d +0 -0
  47. data/spec/dummy/tmp/cache/assets/development/sprockets/29c7267c0af25b5030fdb4ec5b022a8b +0 -0
  48. data/spec/dummy/tmp/cache/assets/development/sprockets/2c1b170c79a25314872eab0e7f4c41d7 +0 -0
  49. data/spec/dummy/tmp/cache/assets/development/sprockets/2c470d2f2580f505c77ad6670dd81c30 +0 -0
  50. data/spec/dummy/tmp/cache/assets/development/sprockets/316356e0eb458fecf1a5988644ebebbb +0 -0
  51. data/spec/dummy/tmp/cache/assets/development/sprockets/342e80130bda0307bc4265b1c00c1c44 +0 -0
  52. data/spec/dummy/tmp/cache/assets/development/sprockets/353019a91a110855ae406b8781f39712 +0 -0
  53. data/spec/dummy/tmp/cache/assets/development/sprockets/3825351bd9442ada367da384627944d1 +0 -0
  54. data/spec/dummy/tmp/cache/assets/development/sprockets/38b2231f7dcef36baead65ebd56d76dd +0 -0
  55. data/spec/dummy/tmp/cache/assets/development/sprockets/39228b61911dee6579813ab9cb88b895 +0 -0
  56. data/spec/dummy/tmp/cache/assets/development/sprockets/39bf4ddb5d1cea8953aedd1d9b5dffaa +0 -0
  57. data/spec/dummy/tmp/cache/assets/development/sprockets/3b1d211a9594243e7a3d8e756187ecf8 +0 -0
  58. data/spec/dummy/tmp/cache/assets/development/sprockets/3c6e4f15dfdefdca999e660090d687cf +0 -0
  59. data/spec/dummy/tmp/cache/assets/development/sprockets/3d4cef0777fbc54966e4b1163bebc7d1 +0 -0
  60. data/spec/dummy/tmp/cache/assets/development/sprockets/41f65c62a632c84d566297229642675b +0 -0
  61. data/spec/dummy/tmp/cache/assets/development/sprockets/42634b762cfb2fd6c61d47d2dabc357a +0 -0
  62. data/spec/dummy/tmp/cache/assets/development/sprockets/428224d0d8a310a21e1b4f0d1455be48 +0 -0
  63. data/spec/dummy/tmp/cache/assets/development/sprockets/42cbac3d7bd8cde35e5dd4c94d8b50a8 +0 -0
  64. data/spec/dummy/tmp/cache/assets/development/sprockets/45cfce5040774a9551d99044ac56f7a1 +0 -0
  65. data/spec/dummy/tmp/cache/assets/development/sprockets/4aba8376707070db8167c05302adccc6 +0 -0
  66. data/spec/dummy/tmp/cache/assets/development/sprockets/4ba26a30b63589959d0c4692f314e3aa +0 -0
  67. data/spec/dummy/tmp/cache/assets/development/sprockets/4bb90865eea96559493ce136ee691802 +0 -0
  68. data/spec/dummy/tmp/cache/assets/development/sprockets/4c3720dcc01594b1fdba08d914c56073 +0 -0
  69. data/spec/dummy/tmp/cache/assets/development/sprockets/4d177c54215992cd81a26f8b170ea7f7 +0 -0
  70. data/spec/dummy/tmp/cache/assets/development/sprockets/4e642b7ec829037721eacf43d146e0f5 +0 -0
  71. data/spec/dummy/tmp/cache/assets/development/sprockets/4fd6af204163612638290ad988d8a9b6 +0 -0
  72. data/spec/dummy/tmp/cache/assets/development/sprockets/506ca0631764d6a3d89109efb476fd18 +0 -0
  73. data/spec/dummy/tmp/cache/assets/development/sprockets/507f01d96025d73ea9f817a06010b12d +0 -0
  74. data/spec/dummy/tmp/cache/assets/development/sprockets/508bb4304d3050108e2234b3d55b122e +0 -0
  75. data/spec/dummy/tmp/cache/assets/development/sprockets/5259e519b65d2a2a7df713ed4ad776a7 +0 -0
  76. data/spec/dummy/tmp/cache/assets/development/sprockets/5312340bbf8ff1672ab7ba17dc5d1e54 +0 -0
  77. data/spec/dummy/tmp/cache/assets/development/sprockets/5496155aa1d57a5d452afcebd4580646 +0 -0
  78. data/spec/dummy/tmp/cache/assets/development/sprockets/5833e5b28944a870da20b0261e2bba31 +0 -0
  79. data/spec/dummy/tmp/cache/assets/development/sprockets/58ac11795f3db30a3bbec089eb578085 +0 -0
  80. data/spec/dummy/tmp/cache/assets/development/sprockets/5a33192c3ff661394755236ff6a2a843 +0 -0
  81. data/spec/dummy/tmp/cache/assets/development/sprockets/5c50bbb6a22243becf4b686559662232 +0 -0
  82. data/spec/dummy/tmp/cache/assets/development/sprockets/5c6c35f39bf47311fa42de94e9e8472e +0 -0
  83. data/spec/dummy/tmp/cache/assets/development/sprockets/5e96b7215788159b18088b94aadfe4ea +0 -0
  84. data/spec/dummy/tmp/cache/assets/development/sprockets/6026416a45d2a8e2d81898511b5d0060 +0 -0
  85. data/spec/dummy/tmp/cache/assets/development/sprockets/63b25dc5521cb7ee9181b5a3d4263f6d +0 -0
  86. data/spec/dummy/tmp/cache/assets/development/sprockets/64f890cc56d1b4ed3144210969474884 +0 -0
  87. data/spec/dummy/tmp/cache/assets/development/sprockets/6759aa60233dd6de6888e3bee3522ccf +0 -0
  88. data/spec/dummy/tmp/cache/assets/development/sprockets/67ae152dfaec9b4d5c3c45a2f9fc69eb +0 -0
  89. data/spec/dummy/tmp/cache/assets/development/sprockets/6870da13c3305651063dc22ccce27d5c +0 -0
  90. data/spec/dummy/tmp/cache/assets/development/sprockets/6c4037151edd61cb313584b066e1ca79 +0 -0
  91. data/spec/dummy/tmp/cache/assets/development/sprockets/6d586185a813e8684c5f4f8c76901509 +0 -0
  92. data/spec/dummy/tmp/cache/assets/development/sprockets/6fac693c6eccbde54dd39a5346a17795 +0 -0
  93. data/spec/dummy/tmp/cache/assets/development/sprockets/7046170cbc635a51f15a2fd233cd3a9a +0 -0
  94. data/spec/dummy/tmp/cache/assets/development/sprockets/710d01e35d3ed05436fc147fc9812c11 +0 -0
  95. data/spec/dummy/tmp/cache/assets/development/sprockets/718bd7b3b79761648c0189b0bb1a7c66 +0 -0
  96. data/spec/dummy/tmp/cache/assets/development/sprockets/72f2ad6a628692922c1df934c7936ada +0 -0
  97. data/spec/dummy/tmp/cache/assets/development/sprockets/7321581cff8c39b5facc2ad1d4199612 +0 -0
  98. data/spec/dummy/tmp/cache/assets/development/sprockets/775ff6f166a14c9c033dfdb5607c9636 +0 -0
  99. data/spec/dummy/tmp/cache/assets/development/sprockets/77679fbf4182f999a442c39af05f45f8 +0 -0
  100. data/spec/dummy/tmp/cache/assets/development/sprockets/7772ce8d6dd3ef1168110de0a6c10abd +0 -0
  101. data/spec/dummy/tmp/cache/assets/development/sprockets/793531ed1abf292ae64bda64a55dd2f4 +0 -0
  102. data/spec/dummy/tmp/cache/assets/development/sprockets/7adb4f2b567f224e053ccb04c28a35eb +0 -0
  103. data/spec/dummy/tmp/cache/assets/development/sprockets/7bc99f8531b4485710faeee593166533 +0 -0
  104. data/spec/dummy/tmp/cache/assets/development/sprockets/7bf478cd8afa28bc218eca40f254d2e1 +0 -0
  105. data/spec/dummy/tmp/cache/assets/development/sprockets/7db6bbe81b6c8340fdd201ac653594d9 +0 -0
  106. data/spec/dummy/tmp/cache/assets/development/sprockets/7ecfc7a95d353736efabc93863355528 +0 -0
  107. data/spec/dummy/tmp/cache/assets/development/sprockets/8099cc04495d5ad8fc3842f9c370f598 +0 -0
  108. data/spec/dummy/tmp/cache/assets/development/sprockets/852fb692cb3efe1b33e399dae3bf86ef +0 -0
  109. data/spec/dummy/tmp/cache/assets/development/sprockets/886f23353b9e21b3076056205a177dce +0 -0
  110. data/spec/dummy/tmp/cache/assets/development/sprockets/88b70b8abde033544479b6f2340ff71e +0 -0
  111. data/spec/dummy/tmp/cache/assets/development/sprockets/88c3f23d1be22355f7c33520660c5509 +0 -0
  112. data/spec/dummy/tmp/cache/assets/development/sprockets/89a8e874d08cfbe4244d85c138ad6038 +0 -0
  113. data/spec/dummy/tmp/cache/assets/development/sprockets/89c4f203a2820da990cf4a49eafbf1a0 +0 -0
  114. data/spec/dummy/tmp/cache/assets/development/sprockets/8aa831d20b1255f392910cd1c8f4a28c +0 -0
  115. data/spec/dummy/tmp/cache/assets/development/sprockets/8b28271b15c4c4fda575bd3a4e4f74b1 +0 -0
  116. data/spec/dummy/tmp/cache/assets/development/sprockets/8c8c8c1ff0cfc510fe182015d7434ac5 +0 -0
  117. data/spec/dummy/tmp/cache/assets/development/sprockets/8cf8bc288b245b2429ed0405fd481660 +0 -0
  118. data/spec/dummy/tmp/cache/assets/development/sprockets/8e42dcc7aefa852924d151abf2e7e6c1 +0 -0
  119. data/spec/dummy/tmp/cache/assets/development/sprockets/8ebc8c58233ab12eee6edfc0feca2492 +0 -0
  120. data/spec/dummy/tmp/cache/assets/development/sprockets/8fb8b09fa416ad2d9ab9b159f7b0a899 +0 -0
  121. data/spec/dummy/tmp/cache/assets/development/sprockets/906e74f34706bce5e8fef1dd4767a131 +0 -0
  122. data/spec/dummy/tmp/cache/assets/development/sprockets/91e1869728c5050bc849e555ce1988e7 +0 -0
  123. data/spec/dummy/tmp/cache/assets/development/sprockets/95de9cef9d0ff722b4dc8eb23451a807 +0 -0
  124. data/spec/dummy/tmp/cache/assets/development/sprockets/96810adc9f3a9a1c1bbf54814f649e42 +0 -0
  125. data/spec/dummy/tmp/cache/assets/development/sprockets/975b498c626717504e487d848a70c7e0 +0 -0
  126. data/spec/dummy/tmp/cache/assets/development/sprockets/97c11dd89708841479148008c34005ec +0 -0
  127. data/spec/dummy/tmp/cache/assets/development/sprockets/987957ae03ced9fff088f7a19748bc74 +0 -0
  128. data/spec/dummy/tmp/cache/assets/development/sprockets/99ab6ebc5d61383f810287cc74fcdbb9 +0 -0
  129. data/spec/dummy/tmp/cache/assets/development/sprockets/9a875c88481e2d53f5c249cc4acd6018 +0 -0
  130. data/spec/dummy/tmp/cache/assets/development/sprockets/9d39b3fcf086f350b30bd73e86e4d976 +0 -0
  131. data/spec/dummy/tmp/cache/assets/development/sprockets/9d55ee6b4e9674f9fddeb9a4727c9084 +0 -0
  132. data/spec/dummy/tmp/cache/assets/development/sprockets/9dc0cbc69cd2c6dce076e5ea6a3651a2 +0 -0
  133. data/spec/dummy/tmp/cache/assets/development/sprockets/9eb50f68fb4418df7860e3df4e8647b4 +0 -0
  134. data/spec/dummy/tmp/cache/assets/development/sprockets/9f5e4c9e2daa2fd45246135c99f01509 +0 -0
  135. data/spec/dummy/tmp/cache/assets/development/sprockets/9f760111b547264ef7ca7885c6a77466 +0 -0
  136. data/spec/dummy/tmp/cache/assets/development/sprockets/9f8009e93b65f35cb6167d749f963476 +0 -0
  137. data/spec/dummy/tmp/cache/assets/development/sprockets/9f895ffe0a7ff3ab6d1f21c34f021cec +0 -0
  138. data/spec/dummy/tmp/cache/assets/development/sprockets/a0a9793653f72971df5333971af113d4 +0 -0
  139. data/spec/dummy/tmp/cache/assets/development/sprockets/a0d4d1565c853652662f6bad39d00b4c +0 -0
  140. data/spec/dummy/tmp/cache/assets/development/sprockets/a136ee2b8fb74ee5d30378a374c22f3b +0 -0
  141. data/spec/dummy/tmp/cache/assets/development/sprockets/a1fd1034ae16d33292e1f73f75113f04 +0 -0
  142. data/spec/dummy/tmp/cache/assets/development/sprockets/a65830b2fc6ebb1b5d5aafa38847f1c2 +0 -0
  143. data/spec/dummy/tmp/cache/assets/development/sprockets/a6613cb28bb9bda909e818c9dabda1d1 +0 -0
  144. data/spec/dummy/tmp/cache/assets/development/sprockets/a73670c606b6495d2c5fa68ab021b110 +0 -0
  145. data/spec/dummy/tmp/cache/assets/development/sprockets/a7ad947e6f3a1e3c5f7c7f1ba2830a22 +0 -0
  146. data/spec/dummy/tmp/cache/assets/development/sprockets/a8a327d32373b4335667206d19f042b1 +0 -0
  147. data/spec/dummy/tmp/cache/assets/development/sprockets/a9648a765fed0738b076bd24099109a3 +0 -0
  148. data/spec/dummy/tmp/cache/assets/development/sprockets/ab26323068f77b2f0d2c16e9f66288a1 +0 -0
  149. data/spec/dummy/tmp/cache/assets/development/sprockets/ad4490686c57d2eb25ed3f99c9ea39c3 +0 -0
  150. data/spec/dummy/tmp/cache/assets/development/sprockets/aee731d32c121990e31f5d68a034087c +0 -0
  151. data/spec/dummy/tmp/cache/assets/development/sprockets/b2015ea2290a27920d1a5b872c2ebde1 +0 -0
  152. data/spec/dummy/tmp/cache/assets/development/sprockets/b2be916e010058f87f9fd484fad599a3 +0 -0
  153. data/spec/dummy/tmp/cache/assets/development/sprockets/b566b85043412c7c5f600929543544f1 +0 -0
  154. data/spec/dummy/tmp/cache/assets/development/sprockets/b64b2ef188a76f97d0e4b82358e9148d +0 -0
  155. data/spec/dummy/tmp/cache/assets/development/sprockets/b92d02f74337d1b255e8405aa5d62189 +0 -0
  156. data/spec/dummy/tmp/cache/assets/development/sprockets/be0fe76ebb304256db992362f9fc8228 +0 -0
  157. data/spec/dummy/tmp/cache/assets/development/sprockets/be9bbd2e4f4d9711bc483c3cf230ec6e +0 -0
  158. data/spec/dummy/tmp/cache/assets/development/sprockets/bfbb0dd7d2e0f641cddb16994bb507d9 +0 -0
  159. data/spec/dummy/tmp/cache/assets/development/sprockets/c07430879f13129e2effbb47ede61618 +0 -0
  160. data/spec/dummy/tmp/cache/assets/development/sprockets/c1877ea0f62c92c885c76713cfe3c82d +0 -0
  161. data/spec/dummy/tmp/cache/assets/development/sprockets/c28281ffeb723fa28495ef556c557a22 +0 -0
  162. data/spec/dummy/tmp/cache/assets/development/sprockets/c362f64f02f137c3937eccd575d4f31b +0 -0
  163. data/spec/dummy/tmp/cache/assets/development/sprockets/c3dd754c803e3f32c139eedce6233772 +0 -0
  164. data/spec/dummy/tmp/cache/assets/development/sprockets/c43a1989c268b5844b7676a3cf7d378b +0 -0
  165. data/spec/dummy/tmp/cache/assets/development/sprockets/c5348a26b2c297ab5889ae73637d25f5 +0 -0
  166. data/spec/dummy/tmp/cache/assets/development/sprockets/c7a04cc7805eba56ebba93120225763c +0 -0
  167. data/spec/dummy/tmp/cache/assets/development/sprockets/c8c4c1b316845f30168739b5795846d6 +0 -0
  168. data/spec/dummy/tmp/cache/assets/development/sprockets/cc0fd9cf6eb1a82ae9b2b8ad81244035 +0 -0
  169. data/spec/dummy/tmp/cache/assets/development/sprockets/cc52477f6be74a37d0b39ab009804c20 +0 -0
  170. data/spec/dummy/tmp/cache/assets/development/sprockets/ccb95c683cf313ad174fbf9fee3ef4b0 +0 -0
  171. data/spec/dummy/tmp/cache/assets/development/sprockets/ce76f61efc5296b76def34ab78730fc7 +0 -0
  172. data/spec/dummy/tmp/cache/assets/development/sprockets/cea8867ce266b545d9f17a7e6b06d0b7 +0 -0
  173. data/spec/dummy/tmp/cache/assets/development/sprockets/cf30721780868ab370fc70e707649a28 +0 -0
  174. data/spec/dummy/tmp/cache/assets/development/sprockets/d0f099f88c45a76b27b2673ae1022c7c +0 -0
  175. data/spec/dummy/tmp/cache/assets/development/sprockets/d395fe077c5c94c1bb4e614bc7c8b86d +0 -0
  176. data/spec/dummy/tmp/cache/assets/development/sprockets/d4ec2eb97b872d3b50052ab27dcd4e03 +0 -0
  177. data/spec/dummy/tmp/cache/assets/development/sprockets/d75682e5e9727c3bc417517944521579 +0 -0
  178. data/spec/dummy/tmp/cache/assets/development/sprockets/d89d2c001862ea8ad82717e98c8053ff +0 -0
  179. data/spec/dummy/tmp/cache/assets/development/sprockets/d8f5f1c7f3a91ceab9105589757ee925 +0 -0
  180. data/spec/dummy/tmp/cache/assets/development/sprockets/dd855d74d3af81e354b2575f7ae1bb7c +0 -0
  181. data/spec/dummy/tmp/cache/assets/development/sprockets/dda9a60cee77db7f1c9005e6aedf15c4 +0 -0
  182. data/spec/dummy/tmp/cache/assets/development/sprockets/ddf96d93d5c2ed2884db3ef9ed9deee5 +0 -0
  183. data/spec/dummy/tmp/cache/assets/development/sprockets/de53fe5f77c008da07d1fd63b9e13417 +0 -0
  184. data/spec/dummy/tmp/cache/assets/development/sprockets/e1ac04dc134267c818b73ae2bdf561da +0 -0
  185. data/spec/dummy/tmp/cache/assets/development/sprockets/e28cc82b7abf4f6b6f43aa24e4b2760a +0 -0
  186. data/spec/dummy/tmp/cache/assets/development/sprockets/e3317328f38868bbbfe90f75151afa2b +0 -0
  187. data/spec/dummy/tmp/cache/assets/development/sprockets/e383447a775cdea087b07afe27ec5fcf +0 -0
  188. data/spec/dummy/tmp/cache/assets/development/sprockets/e411a2f57978dfd7a700e2e11cc18484 +0 -0
  189. data/spec/dummy/tmp/cache/assets/development/sprockets/e55198eac891bbb0bfc98ef7ad095674 +0 -0
  190. data/spec/dummy/tmp/cache/assets/development/sprockets/e6f95dbc64cc12ee3eac2bfdab8a10f2 +0 -0
  191. data/spec/dummy/tmp/cache/assets/development/sprockets/e7b3430e063930d966796d6deeac5afb +0 -0
  192. data/spec/dummy/tmp/cache/assets/development/sprockets/e944ae1af382e6fa7bafacb52dc3d446 +0 -0
  193. data/spec/dummy/tmp/cache/assets/development/sprockets/e9ccdd01928a9f7ad24b8cae6cadb30d +0 -0
  194. data/spec/dummy/tmp/cache/assets/development/sprockets/eac0749c781be78064d69e6ebe7a5b93 +0 -0
  195. data/spec/dummy/tmp/cache/assets/development/sprockets/ead1564499c3c5590a6bb4c7399cc15c +0 -0
  196. data/spec/dummy/tmp/cache/assets/development/sprockets/ed3b4296b4342de62dceb8aa09c84972 +0 -0
  197. data/spec/dummy/tmp/cache/assets/development/sprockets/eeb8644081bf2a1e50342ed7847f170b +0 -0
  198. data/spec/dummy/tmp/cache/assets/development/sprockets/ef7cff62ef5f81d217b7b08e2e9b1acf +0 -0
  199. data/spec/dummy/tmp/cache/assets/development/sprockets/f0e98cce3b04b7496dfb9abc3cbb997e +0 -0
  200. data/spec/dummy/tmp/cache/assets/development/sprockets/f442e3d6a56eb466469e033205299c08 +0 -0
  201. data/spec/dummy/tmp/cache/assets/development/sprockets/f5e9bb68665aed5a27bdf2b2a66c81de +0 -0
  202. data/spec/dummy/tmp/cache/assets/development/sprockets/f678d58a741fef36c848e1f1bfbc2f21 +0 -0
  203. data/spec/dummy/tmp/cache/assets/development/sprockets/f77b040af039273989c26d806db1ce9b +0 -0
  204. data/spec/dummy/tmp/cache/assets/development/sprockets/f8e63775bae7f226ec296177be6ca8ed +0 -0
  205. data/spec/dummy/tmp/cache/assets/development/sprockets/fa01a50da660614bd1fd691d70faffab +0 -0
  206. data/spec/dummy/tmp/cache/assets/development/sprockets/fa2afb49c0fe605d48d92fb011b1325d +0 -0
  207. data/spec/dummy/tmp/cache/assets/development/sprockets/fc4c248705c8d53f522afbaa47265569 +0 -0
  208. data/spec/dummy/tmp/cache/assets/development/sprockets/fdd7bc67106a7c5d0d8912519d463f4d +0 -0
  209. data/spec/dummy/tmp/cache/assets/development/sprockets/fdfd7e17f67d5b3f03c50d1686928177 +0 -0
  210. data/spec/dummy/tmp/cache/assets/{development → test}/sass/07921f743ac03b1f16c8610a85b27a8051687f6b/_button.scssc +0 -0
  211. data/spec/dummy/tmp/cache/assets/{development → test}/sass/07921f743ac03b1f16c8610a85b27a8051687f6b/_clearfix.scssc +0 -0
  212. data/spec/dummy/tmp/cache/assets/{development → test}/sass/07921f743ac03b1f16c8610a85b27a8051687f6b/_font-family.scssc +0 -0
  213. data/spec/dummy/tmp/cache/assets/{development → test}/sass/07921f743ac03b1f16c8610a85b27a8051687f6b/_hide-text.scssc +0 -0
  214. data/spec/dummy/tmp/cache/assets/{development → test}/sass/07921f743ac03b1f16c8610a85b27a8051687f6b/_html5-input-types.scssc +0 -0
  215. data/spec/dummy/tmp/cache/assets/{development → test}/sass/07921f743ac03b1f16c8610a85b27a8051687f6b/_position.scssc +0 -0
  216. data/spec/dummy/tmp/cache/assets/{development → test}/sass/07921f743ac03b1f16c8610a85b27a8051687f6b/_prefixer.scssc +0 -0
  217. data/spec/dummy/tmp/cache/assets/{development → test}/sass/07921f743ac03b1f16c8610a85b27a8051687f6b/_retina-image.scssc +0 -0
  218. data/spec/dummy/tmp/cache/assets/{development → test}/sass/07921f743ac03b1f16c8610a85b27a8051687f6b/_size.scssc +0 -0
  219. data/spec/dummy/tmp/cache/assets/{development → test}/sass/07921f743ac03b1f16c8610a85b27a8051687f6b/_timing-functions.scssc +0 -0
  220. data/spec/dummy/tmp/cache/assets/{development → test}/sass/07921f743ac03b1f16c8610a85b27a8051687f6b/_triangle.scssc +0 -0
  221. data/spec/dummy/tmp/cache/assets/{development → test}/sass/0b8483437e27ce81f53b75759a3a5d94f92b66a2/_bourbon.scssc +0 -0
  222. data/spec/dummy/tmp/cache/assets/{development → test}/sass/0b8483437e27ce81f53b75759a3a5d94f92b66a2/_neat.scssc +0 -0
  223. data/spec/dummy/tmp/cache/assets/{development → test}/sass/0b8483437e27ce81f53b75759a3a5d94f92b66a2/font-awesome.scssc +0 -0
  224. data/spec/dummy/tmp/cache/assets/{development → test}/sass/21fd1683fd80d7894dd681f2a5e0b5e886e5b924/post.scssc +0 -0
  225. data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_bordered-pulled.scssc +0 -0
  226. data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_core.scssc +0 -0
  227. data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_fixed-width.scssc +0 -0
  228. data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_icons.scssc +0 -0
  229. data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_larger.scssc +0 -0
  230. data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_list.scssc +0 -0
  231. data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_mixins.scssc +0 -0
  232. data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_path.scssc +0 -0
  233. data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_rotated-flipped.scssc +0 -0
  234. data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_spinning.scssc +0 -0
  235. data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_stacked.scssc +0 -0
  236. data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_variables.scssc +0 -0
  237. data/spec/dummy/tmp/cache/assets/{development → test}/sass/37b3a50d25c898dbca066a1bc8b29de6b6d4c47b/_deprecated-webkit-gradient.scssc +0 -0
  238. data/spec/dummy/tmp/cache/assets/{development → test}/sass/37b3a50d25c898dbca066a1bc8b29de6b6d4c47b/_gradient-positions-parser.scssc +0 -0
  239. data/spec/dummy/tmp/cache/assets/{development → test}/sass/37b3a50d25c898dbca066a1bc8b29de6b6d4c47b/_linear-positions-parser.scssc +0 -0
  240. data/spec/dummy/tmp/cache/assets/{development → test}/sass/37b3a50d25c898dbca066a1bc8b29de6b6d4c47b/_radial-arg-parser.scssc +0 -0
  241. data/spec/dummy/tmp/cache/assets/{development → test}/sass/37b3a50d25c898dbca066a1bc8b29de6b6d4c47b/_radial-positions-parser.scssc +0 -0
  242. data/spec/dummy/tmp/cache/assets/{development → test}/sass/37b3a50d25c898dbca066a1bc8b29de6b6d4c47b/_render-gradients.scssc +0 -0
  243. data/spec/dummy/tmp/cache/assets/{development → test}/sass/37b3a50d25c898dbca066a1bc8b29de6b6d4c47b/_shape-size-stripper.scssc +0 -0
  244. data/spec/dummy/tmp/cache/assets/{development → test}/sass/3be4963cb1c563e597c71b09139a24543d3b2819/_variables.scssc +0 -0
  245. data/spec/dummy/tmp/cache/assets/{development → test}/sass/3be4963cb1c563e597c71b09139a24543d3b2819/application.css.scssc +0 -0
  246. data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_fill-parent.scssc +0 -0
  247. data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_grid.scssc +0 -0
  248. data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_media.scssc +0 -0
  249. data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_omega.scssc +0 -0
  250. data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_outer-container.scssc +0 -0
  251. data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_pad.scssc +0 -0
  252. data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_private.scssc +0 -0
  253. data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_reset.scssc +0 -0
  254. data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_row.scssc +0 -0
  255. data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_shift.scssc +0 -0
  256. data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_span-columns.scssc +0 -0
  257. data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_to-deprecate.scssc +0 -0
  258. data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_visual-grid.scssc +0 -0
  259. data/spec/dummy/tmp/cache/assets/{development → test}/sass/45854bbd858f3f86b0a584dfaf9bab704c8297c6/_new-breakpoint.scssc +0 -0
  260. data/spec/dummy/tmp/cache/assets/{development → test}/sass/45854bbd858f3f86b0a584dfaf9bab704c8297c6/_private.scssc +0 -0
  261. data/spec/dummy/tmp/cache/assets/{development → test}/sass/80dd986b754d1ad645c2b6fbc04a7591de921a71/_compact.scssc +0 -0
  262. data/spec/dummy/tmp/cache/assets/{development → test}/sass/80dd986b754d1ad645c2b6fbc04a7591de921a71/_flex-grid.scssc +0 -0
  263. data/spec/dummy/tmp/cache/assets/{development → test}/sass/80dd986b754d1ad645c2b6fbc04a7591de921a71/_grid-width.scssc +0 -0
  264. data/spec/dummy/tmp/cache/assets/{development → test}/sass/80dd986b754d1ad645c2b6fbc04a7591de921a71/_linear-gradient.scssc +0 -0
  265. data/spec/dummy/tmp/cache/assets/{development → test}/sass/80dd986b754d1ad645c2b6fbc04a7591de921a71/_modular-scale.scssc +0 -0
  266. data/spec/dummy/tmp/cache/assets/{development → test}/sass/80dd986b754d1ad645c2b6fbc04a7591de921a71/_px-to-em.scssc +0 -0
  267. data/spec/dummy/tmp/cache/assets/{development → test}/sass/80dd986b754d1ad645c2b6fbc04a7591de921a71/_radial-gradient.scssc +0 -0
  268. data/spec/dummy/tmp/cache/assets/{development → test}/sass/80dd986b754d1ad645c2b6fbc04a7591de921a71/_tint-shade.scssc +0 -0
  269. data/spec/dummy/tmp/cache/assets/{development → test}/sass/80dd986b754d1ad645c2b6fbc04a7591de921a71/_transition-property-name.scssc +0 -0
  270. data/spec/dummy/tmp/cache/assets/{development → test}/sass/97963dc217c21292bf44715cd5d7413261d0adaa/_bourbon-deprecated-upcoming.scssc +0 -0
  271. data/spec/dummy/tmp/cache/assets/{development → test}/sass/b70a674b159e0032279f472ea6d42a76c3e47c19/blogelator_button.scssc +0 -0
  272. data/spec/dummy/tmp/cache/assets/{development → test}/sass/b70a674b159e0032279f472ea6d42a76c3e47c19/blogelator_logo.scssc +0 -0
  273. data/spec/dummy/tmp/cache/assets/{development → test}/sass/b7dbb1c3deaab5164c4bca07f653866f08bca0c7/code_highlighting.scssc +0 -0
  274. data/spec/dummy/tmp/cache/assets/{development → test}/sass/b7dbb1c3deaab5164c4bca07f653866f08bca0c7/forms.scssc +0 -0
  275. data/spec/dummy/tmp/cache/assets/{development → test}/sass/b7dbb1c3deaab5164c4bca07f653866f08bca0c7/headings.scssc +0 -0
  276. data/spec/dummy/tmp/cache/assets/{development → test}/sass/b7dbb1c3deaab5164c4bca07f653866f08bca0c7/lists.scssc +0 -0
  277. data/spec/dummy/tmp/cache/assets/{development → test}/sass/ba99e5ab418fb834c6e49ce31afd3075de4d50db/_grid.scssc +0 -0
  278. data/spec/dummy/tmp/cache/assets/{development → test}/sass/ba99e5ab418fb834c6e49ce31afd3075de4d50db/_visual-grid.scssc +0 -0
  279. data/spec/dummy/tmp/cache/assets/{development → test}/sass/c1ce53a77acbf2341c879195eb20239272a8b087/all.scssc +0 -0
  280. data/spec/dummy/tmp/cache/assets/{development → test}/sass/c1ce53a77acbf2341c879195eb20239272a8b087/layout.scssc +0 -0
  281. data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_animation.scssc +0 -0
  282. data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_appearance.scssc +0 -0
  283. data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_backface-visibility.scssc +0 -0
  284. data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_background-image.scssc +0 -0
  285. data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_background.scssc +0 -0
  286. data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_border-image.scssc +0 -0
  287. data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_border-radius.scssc +0 -0
  288. data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_box-sizing.scssc +0 -0
  289. data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_columns.scssc +0 -0
  290. data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_flex-box.scssc +0 -0
  291. data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_font-face.scssc +0 -0
  292. data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_hidpi-media-query.scssc +0 -0
  293. data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_image-rendering.scssc +0 -0
  294. data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_inline-block.scssc +0 -0
  295. data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_keyframes.scssc +0 -0
  296. data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_linear-gradient.scssc +0 -0
  297. data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_perspective.scssc +0 -0
  298. data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_placeholder.scssc +0 -0
  299. data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_radial-gradient.scssc +0 -0
  300. data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_transform.scssc +0 -0
  301. data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_transition.scssc +0 -0
  302. data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_user-select.scssc +0 -0
  303. data/spec/dummy/tmp/cache/assets/{development → test}/sass/d0967d53bf90082006477ee97c33804093680157/index.scssc +0 -0
  304. data/spec/dummy/tmp/cache/assets/{development → test}/sass/d0967d53bf90082006477ee97c33804093680157/show.scssc +0 -0
  305. data/spec/dummy/tmp/cache/assets/{development → test}/sass/faa8931c2712754847644594af58d6dafcb7eba6/_neat-helpers.scssc +0 -0
  306. data/spec/dummy/tmp/cache/assets/{development/sprockets/243a09d063adc2c1bf9c84a015b4deae → test/sprockets/014f2aa73071096a708e79e83a4de78c} +0 -0
  307. data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/03ee17815887f7f9572e7846347b73ad +0 -0
  308. data/spec/dummy/tmp/cache/assets/{development/sprockets/220178fefb8edca0ad305f035bcf755f → test/sprockets/07bcf8deb56158c6ac1e2b67dd08a58f} +0 -0
  309. data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/0b162b0585e479967a196493d24c9c31 +0 -0
  310. data/spec/dummy/tmp/cache/assets/test/sprockets/0b388d9b94f431857e6113f620e7f0ab +0 -0
  311. data/spec/dummy/tmp/cache/assets/test/sprockets/11a4b58bdf1e66237f1ad0ffddbc9d81 +0 -0
  312. data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/1642cb2980f0d6138a107f39e9b029ac +0 -0
  313. data/spec/dummy/tmp/cache/assets/{development/sprockets/06610a7a54fafe2fc26fcd24ffc25d6c → test/sprockets/18541c8a2f4dd2ad65967ac01540b5e5} +0 -0
  314. data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/1c911dda22afcac8e8b6b68de4f40cac +0 -0
  315. data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/1dfaa29320fac6e3f39174823f26ce4e +0 -0
  316. data/spec/dummy/tmp/cache/assets/test/sprockets/20bd84682bd4ad3230cb82210d277318 +0 -0
  317. data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/2bcb59581cfc2be9512e3653b1b83921 +0 -0
  318. data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/2c7aca493752ef3d0f2703c4afdeec35 +0 -0
  319. data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/2cb791441267f115aa66746962037d14 +0 -0
  320. data/spec/dummy/tmp/cache/assets/test/sprockets/31ff4fd075fbadfc861af13fa40e3fc6 +0 -0
  321. data/spec/dummy/tmp/cache/assets/test/sprockets/32290d48b6752b0790c7d40155a269a3 +0 -0
  322. data/spec/dummy/tmp/cache/assets/test/sprockets/4f929ac9fa380b32ac71e967031ce99e +0 -0
  323. data/spec/dummy/tmp/cache/assets/test/sprockets/4f9f2ec9f45bcb2b0314409f4ed8d314 +0 -0
  324. data/spec/dummy/tmp/cache/assets/test/sprockets/516b084be1daee008f2ee724442c2572 +0 -0
  325. data/spec/dummy/tmp/cache/assets/test/sprockets/59cac6b69b1e6be1078b191e0a426617 +0 -0
  326. data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/5dccf598e9581501f947944ab7ea77f8 +0 -0
  327. data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/5fed700ff4f114325222352b4a9eb173 +0 -0
  328. data/spec/dummy/tmp/cache/assets/test/sprockets/6a0de03f92b58421c222ff15037aa805 +0 -0
  329. data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/717a204b713a195d5144254a6c5f8eef +0 -0
  330. data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/7a89f6daba9fe362c5c272ee22f29114 +0 -0
  331. data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/876c20900cfbc139f2bcc806b9920bc0 +0 -0
  332. data/spec/dummy/tmp/cache/assets/test/sprockets/8c58f5e9fc13afdcf8a7347ea5b6433f +0 -0
  333. data/spec/dummy/tmp/cache/assets/test/sprockets/94737fda0d9284d7e802606d616d4d06 +0 -0
  334. data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/98c63563b5427dfac401489800970502 +0 -0
  335. data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/a57aae0412ef4b230257432da5013077 +0 -0
  336. data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/b24cd42a9549ae6c7654bbfcc4daf4fc +0 -0
  337. data/spec/dummy/tmp/cache/assets/test/sprockets/bf5947432e5c44e62273ea61a0293420 +0 -0
  338. data/spec/dummy/tmp/cache/assets/{development/sprockets/3ed3b2471b145dde7066f62e9943a664 → test/sprockets/c348ad210d6130dd55fd6affe02771a9} +0 -0
  339. data/spec/dummy/tmp/cache/assets/test/sprockets/c920365528fa0e293905ee4ebe14d0b4 +0 -0
  340. data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/cb25bb8c2cebf1ab8cbfd41bdae0e83a +0 -0
  341. data/spec/dummy/tmp/cache/assets/test/sprockets/e13d9fe9bfdbecc97bfc1b6e29c0fdde +0 -0
  342. data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/f54685839a569bf8fc641548a69ac0ba +0 -0
  343. data/spec/dummy/tmp/cache/assets/test/sprockets/f8ffdf212392f071a81075cd04868690 +0 -0
  344. data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/f9b9728da11c0c9be6ffbb4a37a2b543 +0 -0
  345. data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/fba2381f8cbae687c6e72ca4dd779af3 +0 -0
  346. data/spec/dummy/tmp/ember-rails/ember-data.js +8964 -9892
  347. data/spec/dummy/tmp/ember-rails/ember.js +1390 -179
  348. data/spec/{dummy/app/assets/javascripts → javascripts}/features/user_visits_admin_page_spec.js +0 -0
  349. data/spec/{dummy/app/assets/javascripts → javascripts}/features/user_visits_post_page_spec.js +0 -0
  350. data/spec/{dummy/app/assets/javascripts → javascripts}/fixtures/post.js +6 -6
  351. data/spec/javascripts/spec_helper.js +37 -0
  352. data/spec/teaspoon_env.rb +40 -0
  353. data/vendor/assets/javascripts/blogelator/ember-data.js +12 -0
  354. data/vendor/assets/javascripts/blogelator/ember.js +22 -0
  355. metadata +773 -434
  356. data/spec/dummy/app/assets/javascripts/test_helper.js +0 -12
  357. data/spec/dummy/tmp/cache/assets/development/sprockets/0b388d9b94f431857e6113f620e7f0ab +0 -0
  358. data/spec/dummy/tmp/cache/assets/development/sprockets/11a4b58bdf1e66237f1ad0ffddbc9d81 +0 -0
  359. data/spec/dummy/tmp/cache/assets/development/sprockets/18541c8a2f4dd2ad65967ac01540b5e5 +0 -0
  360. data/spec/dummy/tmp/cache/assets/development/sprockets/1a74619c045ead4f6c12d8fc82c8aca9 +0 -0
  361. data/spec/dummy/tmp/cache/assets/development/sprockets/20bd84682bd4ad3230cb82210d277318 +0 -0
  362. data/spec/dummy/tmp/cache/assets/development/sprockets/2e8caa7e10cf5e9f57a6e30591e14157 +0 -0
  363. data/spec/dummy/tmp/cache/assets/development/sprockets/31ff4fd075fbadfc861af13fa40e3fc6 +0 -0
  364. data/spec/dummy/tmp/cache/assets/development/sprockets/32290d48b6752b0790c7d40155a269a3 +0 -0
  365. data/spec/dummy/tmp/cache/assets/development/sprockets/41eec45d61cb4b25a78069f86a0846d6 +0 -0
  366. data/spec/dummy/tmp/cache/assets/development/sprockets/423852439fdd3ebb9e12cb1478647b7a +0 -0
  367. data/spec/dummy/tmp/cache/assets/development/sprockets/4f929ac9fa380b32ac71e967031ce99e +0 -0
  368. data/spec/dummy/tmp/cache/assets/development/sprockets/4f9f2ec9f45bcb2b0314409f4ed8d314 +0 -0
  369. data/spec/dummy/tmp/cache/assets/development/sprockets/516b084be1daee008f2ee724442c2572 +0 -0
  370. data/spec/dummy/tmp/cache/assets/development/sprockets/59cac6b69b1e6be1078b191e0a426617 +0 -0
  371. data/spec/dummy/tmp/cache/assets/development/sprockets/69af9db22ca680482e3b0fd69d77e381 +0 -0
  372. data/spec/dummy/tmp/cache/assets/development/sprockets/6a0de03f92b58421c222ff15037aa805 +0 -0
  373. data/spec/dummy/tmp/cache/assets/development/sprockets/892abc349986f4ebdd38a0606c2a7b47 +0 -0
  374. data/spec/dummy/tmp/cache/assets/development/sprockets/8c58f5e9fc13afdcf8a7347ea5b6433f +0 -0
  375. data/spec/dummy/tmp/cache/assets/development/sprockets/94737fda0d9284d7e802606d616d4d06 +0 -0
  376. data/spec/dummy/tmp/cache/assets/development/sprockets/96e4483c40e54e5cdef2e7baf5572cca +0 -0
  377. data/spec/dummy/tmp/cache/assets/development/sprockets/a234af77d7c2b510167d2448c4db2b02 +0 -0
  378. data/spec/dummy/tmp/cache/assets/development/sprockets/bf5947432e5c44e62273ea61a0293420 +0 -0
  379. data/spec/dummy/tmp/cache/assets/development/sprockets/c348ad210d6130dd55fd6affe02771a9 +0 -0
  380. data/spec/dummy/tmp/cache/assets/development/sprockets/c920365528fa0e293905ee4ebe14d0b4 +0 -0
  381. data/spec/dummy/tmp/cache/assets/development/sprockets/e13d9fe9bfdbecc97bfc1b6e29c0fdde +0 -0
  382. data/spec/dummy/tmp/cache/assets/development/sprockets/f7555b4d036360dedd6a3f1e75df2ae0 +0 -0
  383. data/spec/dummy/tmp/cache/assets/development/sprockets/f8ffdf212392f071a81075cd04868690 +0 -0
  384. data/spec/dummy/tmp/cache/assets/development/sprockets/fe17a0ac115f8c03036161dfae02e31b +0 -0
  385. data/spec/qunit_runner.js +0 -148
  386. data/vendor/assets/stylesheets/blogelator/_neat-helpers.scss +0 -7
  387. data/vendor/assets/stylesheets/blogelator/functions/_new-breakpoint.scss +0 -16
  388. data/vendor/assets/stylesheets/blogelator/functions/_private.scss +0 -125
  389. data/vendor/assets/stylesheets/blogelator/grid/_fill-parent.scss +0 -7
  390. data/vendor/assets/stylesheets/blogelator/grid/_grid.scss +0 -5
  391. data/vendor/assets/stylesheets/blogelator/grid/_media.scss +0 -51
  392. data/vendor/assets/stylesheets/blogelator/grid/_omega.scss +0 -79
  393. data/vendor/assets/stylesheets/blogelator/grid/_outer-container.scss +0 -8
  394. data/vendor/assets/stylesheets/blogelator/grid/_pad.scss +0 -8
  395. data/vendor/assets/stylesheets/blogelator/grid/_private.scss +0 -50
  396. data/vendor/assets/stylesheets/blogelator/grid/_reset.scss +0 -12
  397. data/vendor/assets/stylesheets/blogelator/grid/_row.scss +0 -17
  398. data/vendor/assets/stylesheets/blogelator/grid/_shift.scss +0 -16
  399. data/vendor/assets/stylesheets/blogelator/grid/_span-columns.scss +0 -45
  400. data/vendor/assets/stylesheets/blogelator/grid/_to-deprecate.scss +0 -57
  401. data/vendor/assets/stylesheets/blogelator/grid/_visual-grid.scss +0 -41
  402. data/vendor/assets/stylesheets/blogelator/settings/_grid.scss +0 -7
  403. data/vendor/assets/stylesheets/blogelator/settings/_visual-grid.scss +0 -5
@@ -5,7 +5,7 @@
5
5
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
6
6
  * @license Licensed under MIT license
7
7
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
8
- * @version 1.5.0-beta.3+pre.f95d2018
8
+ * @version 1.5.0
9
9
  */
10
10
 
11
11
 
@@ -175,6 +175,27 @@ Ember.deprecateFunc = function(message, func) {
175
175
  };
176
176
 
177
177
 
178
+ /**
179
+ Run a function meant for debugging. Ember build tools will remove any calls to
180
+ `Ember.runInDebug()` when doing a production build.
181
+
182
+ ```javascript
183
+ Ember.runInDebug( function() {
184
+ Ember.Handlebars.EachView.reopen({
185
+ didInsertElement: function() {
186
+ console.log("I'm happy");
187
+ }
188
+ });
189
+ });
190
+ ```
191
+
192
+ @method runInDebug
193
+ @param {Function} func The function to be executed.
194
+ */
195
+ Ember.runInDebug = function(func) {
196
+ func()
197
+ };
198
+
178
199
  // Inform the developer about the Ember Inspector if not installed.
179
200
  if (!Ember.testing) {
180
201
  var isFirefox = typeof InstallTrigger !== 'undefined';
@@ -188,7 +209,7 @@ if (!Ember.testing) {
188
209
  if(isChrome) {
189
210
  downloadURL = 'https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi';
190
211
  } else if(isFirefox) {
191
- downloadURL = 'https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/'
212
+ downloadURL = 'https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/';
192
213
  }
193
214
 
194
215
  Ember.debug('For more advanced debugging, install the Ember Inspector from ' + downloadURL);
@@ -206,7 +227,7 @@ if (!Ember.testing) {
206
227
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
207
228
  * @license Licensed under MIT license
208
229
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
209
- * @version 1.5.0-beta.3
230
+ * @version 1.5.0
210
231
  */
211
232
 
212
233
 
@@ -289,7 +310,7 @@ var define, requireModule, require, requirejs;
289
310
 
290
311
  @class Ember
291
312
  @static
292
- @version 1.5.0-beta.3+pre.f95d2018
313
+ @version 1.5.0
293
314
  */
294
315
 
295
316
  if ('undefined' === typeof Ember) {
@@ -316,10 +337,10 @@ Ember.toString = function() { return "Ember"; };
316
337
  /**
317
338
  @property VERSION
318
339
  @type String
319
- @default '1.5.0-beta.3+pre.f95d2018'
340
+ @default '1.5.0'
320
341
  @static
321
342
  */
322
- Ember.VERSION = '1.5.0-beta.3+pre.f95d2018';
343
+ Ember.VERSION = '1.5.0';
323
344
 
324
345
  /**
325
346
  Standard environmental variables. You can define these in a global `EmberENV`
@@ -462,6 +483,7 @@ Ember.K = function() { return this; };
462
483
  if ('undefined' === typeof Ember.assert) { Ember.assert = Ember.K; }
463
484
  if ('undefined' === typeof Ember.warn) { Ember.warn = Ember.K; }
464
485
  if ('undefined' === typeof Ember.debug) { Ember.debug = Ember.K; }
486
+ if ('undefined' === typeof Ember.runInDebug) { Ember.runInDebug = Ember.K; }
465
487
  if ('undefined' === typeof Ember.deprecate) { Ember.deprecate = Ember.K; }
466
488
  if ('undefined' === typeof Ember.deprecateFunc) {
467
489
  Ember.deprecateFunc = function(_, func) { return func; };
@@ -1093,6 +1115,7 @@ function Meta(obj) {
1093
1115
  this.descs = {};
1094
1116
  this.watching = {};
1095
1117
  this.cache = {};
1118
+ this.cacheMeta = {};
1096
1119
  this.source = obj;
1097
1120
  }
1098
1121
 
@@ -1102,6 +1125,7 @@ Meta.prototype = {
1102
1125
  watching: null,
1103
1126
  listeners: null,
1104
1127
  cache: null,
1128
+ cacheMeta: null,
1105
1129
  source: null,
1106
1130
  mixins: null,
1107
1131
  bindings: null,
@@ -1169,10 +1193,11 @@ Ember.meta = function meta(obj, writable) {
1169
1193
  if (!isDefinePropertySimulated) o_defineProperty(obj, META_KEY, META_DESC);
1170
1194
 
1171
1195
  ret = o_create(ret);
1172
- ret.descs = o_create(ret.descs);
1173
- ret.watching = o_create(ret.watching);
1174
- ret.cache = {};
1175
- ret.source = obj;
1196
+ ret.descs = o_create(ret.descs);
1197
+ ret.watching = o_create(ret.watching);
1198
+ ret.cache = {};
1199
+ ret.cacheMeta = {};
1200
+ ret.source = obj;
1176
1201
 
1177
1202
  if (MANDATORY_SETTER) { ret.values = o_create(ret.values); }
1178
1203
 
@@ -2029,12 +2054,12 @@ var utils = Ember.EnumerableUtils = {
2029
2054
  * @param {Array} array The array the objects should be inserted into.
2030
2055
  * @param {Number} idx Starting index in the array to replace. If *idx* >=
2031
2056
  * length, then append to the end of the array.
2032
- * @param {Number} amt Number of elements that should be remove from the array,
2057
+ * @param {Number} amt Number of elements that should be removed from the array,
2033
2058
  * starting at *idx*
2034
2059
  * @param {Array} objects An array of zero or more objects that should be
2035
2060
  * inserted into the array at *idx*
2036
2061
  *
2037
- * @return {Array} The changed array.
2062
+ * @return {Array} The modified array.
2038
2063
  */
2039
2064
  replace: function(array, idx, amt, objects) {
2040
2065
  if (array.replace) {
@@ -5826,6 +5851,7 @@ function beforeEvent(keyName) {
5826
5851
 
5827
5852
  /**
5828
5853
  @method addObserver
5854
+ @for Ember
5829
5855
  @param obj
5830
5856
  @param {String} path
5831
5857
  @param {Object|Function} targetOrMethod
@@ -5844,6 +5870,7 @@ Ember.observersFor = function(obj, path) {
5844
5870
 
5845
5871
  /**
5846
5872
  @method removeObserver
5873
+ @for Ember
5847
5874
  @param obj
5848
5875
  @param {String} path
5849
5876
  @param {Object|Function} targetOrMethod
@@ -5858,6 +5885,7 @@ Ember.removeObserver = function(obj, _path, target, method) {
5858
5885
 
5859
5886
  /**
5860
5887
  @method addBeforeObserver
5888
+ @for Ember
5861
5889
  @param obj
5862
5890
  @param {String} path
5863
5891
  @param {Object|Function} targetOrMethod
@@ -5900,6 +5928,7 @@ Ember.beforeObserversFor = function(obj, path) {
5900
5928
 
5901
5929
  /**
5902
5930
  @method removeBeforeObserver
5931
+ @for Ember
5903
5932
  @param obj
5904
5933
  @param {String} path
5905
5934
  @param {Object|Function} targetOrMethod
@@ -6731,9 +6760,9 @@ Ember.run.join = function(target, method /* args */) {
6731
6760
  when called within an existing loop, no return value is possible.
6732
6761
  */
6733
6762
  Ember.run.bind = function(target, method /* args*/) {
6734
- var args = arguments;
6763
+ var args = slice.call(arguments);
6735
6764
  return function() {
6736
- return Ember.run.join.apply(Ember.run, args);
6765
+ return Ember.run.join.apply(Ember.run, args.concat(slice.call(arguments)));
6737
6766
  };
6738
6767
  };
6739
6768
 
@@ -7065,8 +7094,6 @@ Ember.run.next = function() {
7065
7094
  // the 100ms delay until this method can be called again will be cancelled
7066
7095
  Ember.run.cancel(debounceImmediate);
7067
7096
  ```
7068
- ```
7069
- ```
7070
7097
 
7071
7098
  @method cancel
7072
7099
  @param {Object} timer Timer object to cancel
@@ -7137,7 +7164,7 @@ Ember.run.cancel = function(timer) {
7137
7164
  then it will be looked up on the passed target.
7138
7165
  @param {Object} [args*] Optional arguments to pass to the timeout.
7139
7166
  @param {Number} wait Number of milliseconds to wait.
7140
- @param {Boolean} immediate Trigger the function on the leading instead
7167
+ @param {Boolean} immediate Trigger the function on the leading instead
7141
7168
  of the trailing edge of the wait interval. Defaults to false.
7142
7169
  @return {Array} Timer information for use in cancelling, see `Ember.run.cancel`.
7143
7170
  */
@@ -11769,6 +11796,8 @@ function _copy(obj, deep, seen, copies) {
11769
11796
  }
11770
11797
  } else if (Ember.Copyable && Ember.Copyable.detect(obj)) {
11771
11798
  ret = obj.copy(deep, seen, copies);
11799
+ } else if (obj instanceof Date) {
11800
+ ret = new Date(obj.getTime());
11772
11801
  } else {
11773
11802
  ret = {};
11774
11803
  for(key in obj) {
@@ -12875,7 +12904,7 @@ function makeCtor() {
12875
12904
 
12876
12905
  var desc = m.descs[keyName];
12877
12906
 
12878
- Ember.assert("Ember.Object.create no longer supports defining computed properties.", !(value instanceof Ember.ComputedProperty));
12907
+ Ember.assert("Ember.Object.create no longer supports defining computed properties. Define computed properties using extend() or reopen() before calling create().", !(value instanceof Ember.ComputedProperty));
12879
12908
  Ember.assert("Ember.Object.create no longer supports defining methods that call _super.", !(typeof value === 'function' && value.toString().indexOf('._super') !== -1));
12880
12909
  Ember.assert("`actions` must be provided at extend time, not at create " +
12881
12910
  "time, when Ember.ActionHandler is used (i.e. views, " +
@@ -15391,6 +15420,9 @@ var e_get = Ember.get,
15391
15420
  a_slice = [].slice,
15392
15421
  o_create = Ember.create,
15393
15422
  forEach = Ember.EnumerableUtils.forEach,
15423
+ cacheSet = Ember.cacheFor.set,
15424
+ cacheGet = Ember.cacheFor.get,
15425
+ cacheRemove = Ember.cacheFor.remove,
15394
15426
  // Here we explicitly don't allow `@each.foo`; it would require some special
15395
15427
  // testing, but there's no particular reason why it should be disallowed.
15396
15428
  eachPropertyPattern = /^(.*)\.@each\.(.*)/,
@@ -15829,7 +15861,6 @@ function ReduceComputedProperty(options) {
15829
15861
  var cp = this;
15830
15862
 
15831
15863
  this.options = options;
15832
- this._instanceMetas = {};
15833
15864
 
15834
15865
  this._dependentKeys = null;
15835
15866
  // A map of dependentKey -> [itemProperty, ...] that tracks what properties of
@@ -15841,11 +15872,10 @@ function ReduceComputedProperty(options) {
15841
15872
  this.cacheable();
15842
15873
 
15843
15874
  this.recomputeOnce = function(propertyName) {
15844
- // What we really want to do is coalesce by <cp, propertyName>.
15845
- // We need a form of `scheduleOnce` that accepts an arbitrary token to
15846
- // coalesce by, in addition to the target and method.
15847
- Ember.run.once(this, recompute, propertyName);
15875
+ // TODO: Coalesce recomputation by <this, propertyName, cp>.
15876
+ recompute.call(this, propertyName);
15848
15877
  };
15878
+
15849
15879
  var recompute = function(propertyName) {
15850
15880
  var dependentKeys = cp._dependentKeys,
15851
15881
  meta = cp._instanceMeta(this, propertyName),
@@ -15927,19 +15957,15 @@ ReduceComputedProperty.prototype._callbacks = function () {
15927
15957
  };
15928
15958
 
15929
15959
  ReduceComputedProperty.prototype._hasInstanceMeta = function (context, propertyName) {
15930
- var guid = guidFor(context),
15931
- key = guid + ':' + propertyName;
15932
-
15933
- return !!this._instanceMetas[key];
15960
+ return !!metaFor(context).cacheMeta[propertyName];
15934
15961
  };
15935
15962
 
15936
15963
  ReduceComputedProperty.prototype._instanceMeta = function (context, propertyName) {
15937
- var guid = guidFor(context),
15938
- key = guid + ':' + propertyName,
15939
- meta = this._instanceMetas[key];
15964
+ var cacheMeta = metaFor(context).cacheMeta,
15965
+ meta = cacheMeta[propertyName];
15940
15966
 
15941
15967
  if (!meta) {
15942
- meta = this._instanceMetas[key] = new ReduceComputedPropertyInstanceMeta(context, propertyName, this.initialValue());
15968
+ meta = cacheMeta[propertyName] = new ReduceComputedPropertyInstanceMeta(context, propertyName, this.initialValue());
15943
15969
  meta.dependentArraysObserver = new DependentArraysObserver(this._callbacks(), this, meta, context, propertyName, meta.sugarMeta);
15944
15970
  }
15945
15971
 
@@ -16996,9 +17022,12 @@ SearchProxy = Ember.ObjectProxy.extend();
16996
17022
  - `itemA` the first item to compare.
16997
17023
  - `itemB` the second item to compare.
16998
17024
 
16999
- This function should return `-1` when `itemA` should come before
17000
- `itemB`. It should return `1` when `itemA` should come after
17025
+ This function should return negative number (e.g. `-1`) when `itemA` should come before
17026
+ `itemB`. It should return positive number (e.g. `1`) when `itemA` should come after
17001
17027
  `itemB`. If the `itemA` and `itemB` are equal this function should return `0`.
17028
+
17029
+ Therefore, if this function is comparing some numeric values, simple `itemA - itemB` or
17030
+ `itemA.get( 'foo' ) - itemB.get( 'foo' )` can be used instead of series of `if`.
17002
17031
 
17003
17032
  Example
17004
17033
 
@@ -18444,8 +18473,12 @@ var get = Ember.get, typeOf = Ember.typeOf;
18444
18473
  property to an `_actions` property at extend time, and adding `_actions`
18445
18474
  to the object's mergedProperties list.
18446
18475
 
18447
- `Ember.ActionHandler` is used internally by Ember in `Ember.View`,
18448
- `Ember.Controller`, and `Ember.Route`.
18476
+ `Ember.ActionHandler` is available on some familiar classes including
18477
+ `Ember.Route`, `Ember.View`, `Ember.Component`, and controllers such as
18478
+ `Ember.Controller` and `Ember.ObjectController`.
18479
+ (Internally the mixin is used by `Ember.CoreView`, `Ember.ControllerMixin`,
18480
+ and `Ember.Route` and available to the above classes through
18481
+ inheritance.)
18449
18482
 
18450
18483
  @class ActionHandler
18451
18484
  @namespace Ember
@@ -19549,6 +19582,10 @@ Ember.ArrayProxy = Ember.Object.extend(Ember.MutableArray, {
19549
19582
  var content = get(this, 'content');
19550
19583
 
19551
19584
  if (content) {
19585
+ Ember.assert(Ember.String.fmt('ArrayProxy expects an Array or ' +
19586
+ 'Ember.ArrayProxy, but you passed %@', [typeof content]),
19587
+ Ember.isArray(content) || content.isDestroyed);
19588
+
19552
19589
  content.addArrayObserver(this, {
19553
19590
  willChange: 'contentArrayWillChange',
19554
19591
  didChange: 'contentArrayDidChange'
@@ -19582,6 +19619,10 @@ Ember.ArrayProxy = Ember.Object.extend(Ember.MutableArray, {
19582
19619
  var arrangedContent = get(this, 'arrangedContent');
19583
19620
 
19584
19621
  if (arrangedContent) {
19622
+ Ember.assert(Ember.String.fmt('ArrayProxy expects an Array or ' +
19623
+ 'Ember.ArrayProxy, but you passed %@', [typeof arrangedContent]),
19624
+ Ember.isArray(arrangedContent) || arrangedContent.isDestroyed);
19625
+
19585
19626
  arrangedContent.addArrayObserver(this, {
19586
19627
  willChange: 'arrangedContentArrayWillChange',
19587
19628
  didChange: 'arrangedContentArrayDidChange'
@@ -20605,6 +20646,8 @@ Ember.Deferred = Deferred;
20605
20646
 
20606
20647
 
20607
20648
  (function() {
20649
+ /*globals CustomEvent */
20650
+
20608
20651
  var forEach = Ember.ArrayPolyfills.forEach;
20609
20652
 
20610
20653
  /**
@@ -20656,6 +20699,11 @@ Ember.onLoad = function(name, callback) {
20656
20699
  Ember.runLoadHooks = function(name, object) {
20657
20700
  loaded[name] = object;
20658
20701
 
20702
+ if (typeof window === 'object' && typeof window.dispatchEvent === 'function' && typeof CustomEvent === "function") {
20703
+ var event = new CustomEvent(name, {detail: object, name: name});
20704
+ window.dispatchEvent(event);
20705
+ }
20706
+
20659
20707
  if (loadHooks[name]) {
20660
20708
  forEach.call(loadHooks[name], function(callback) {
20661
20709
  callback(object);
@@ -21315,7 +21363,7 @@ Ember Runtime
21315
21363
  @submodule ember-views
21316
21364
  */
21317
21365
 
21318
- var jQuery = (this && this.jQuery) || (Ember.imports && Ember.imports.jQuery);
21366
+ var jQuery = (Ember.imports && Ember.imports.jQuery) || (this && this.jQuery);
21319
21367
  if (!jQuery && typeof require === 'function') {
21320
21368
  jQuery = require('jquery');
21321
21369
  }
@@ -26037,6 +26085,8 @@ Ember.CollectionView.CONTAINER_MAP = {
26037
26085
 
26038
26086
 
26039
26087
  (function() {
26088
+ var get = Ember.get;
26089
+
26040
26090
  /**
26041
26091
  The ComponentTemplateDeprecation mixin is used to provide a useful
26042
26092
  deprecation warning when using either `template` or `templateName` with
@@ -26071,7 +26121,7 @@ Ember.ComponentTemplateDeprecation = Ember.Mixin.create({
26071
26121
  this._super.apply(this, arguments);
26072
26122
 
26073
26123
  var deprecatedProperty, replacementProperty,
26074
- layoutSpecified = (props.layoutName || props.layout);
26124
+ layoutSpecified = (props.layoutName || props.layout || get(this, 'layoutName'));
26075
26125
 
26076
26126
  if (props.templateName && !layoutSpecified) {
26077
26127
  deprecatedProperty = 'templateName';
@@ -27075,7 +27125,7 @@ Ember.Handlebars.helper = function(name, value) {
27075
27125
  involving helper/component registration.
27076
27126
 
27077
27127
  @private
27078
- @method helper
27128
+ @method makeViewHelper
27079
27129
  @for Ember.Handlebars
27080
27130
  @param {Function} ViewClass view class constructor
27081
27131
  */
@@ -27165,7 +27215,7 @@ Ember.Handlebars.JavaScriptCompiler.stringifyLastBlockHelperMissingInvocation =
27165
27215
  matches = INVOCATION_SPLITTING_REGEX.exec(helperInvocation);
27166
27216
 
27167
27217
  source[source.length - 1] = matches[1] + "'" + helperName + "'" + matches[3];
27168
- }
27218
+ };
27169
27219
  var stringifyBlockHelperMissing = Ember.Handlebars.JavaScriptCompiler.stringifyLastBlockHelperMissingInvocation;
27170
27220
 
27171
27221
  var originalBlockValue = Ember.Handlebars.JavaScriptCompiler.prototype.blockValue;
@@ -30008,6 +30058,24 @@ Ember.Handlebars.EachView = Ember.CollectionView.extend(Ember._Metamorph, {
30008
30058
  }
30009
30059
  });
30010
30060
 
30061
+ // Defeatureify doesn't seem to like nested functions that need to be removed
30062
+ function _addMetamorphCheck() {
30063
+ Ember.Handlebars.EachView.reopen({
30064
+ _checkMetamorph: Ember.on('didInsertElement', function() {
30065
+ Ember.assert("The metamorph tags, " +
30066
+ this.morph.start + " and " + this.morph.end +
30067
+ ", have different parents.\nThe browser has fixed your template to output valid HTML (for example, check that you have properly closed all tags and have used a TBODY tag when creating a table with '{{#each}}')",
30068
+ document.getElementById( this.morph.start ).parentNode ===
30069
+ document.getElementById( this.morph.end ).parentNode
30070
+ );
30071
+ })
30072
+ });
30073
+ }
30074
+
30075
+ Ember.runInDebug( function() {
30076
+ _addMetamorphCheck();
30077
+ });
30078
+
30011
30079
  var GroupedEach = Ember.Handlebars.GroupedEach = function(context, path, options) {
30012
30080
  var self = this,
30013
30081
  normalized = Ember.Handlebars.normalizePath(context, path, options.data);
@@ -34672,6 +34740,8 @@ function DSL(name) {
34672
34740
 
34673
34741
  DSL.prototype = {
34674
34742
  resource: function(name, options, callback) {
34743
+ Ember.assert("'basic' cannot be used as a resource name.", name !== 'basic');
34744
+
34675
34745
  if (arguments.length === 2 && typeof options === 'function') {
34676
34746
  callback = options;
34677
34747
  options = {};
@@ -34706,6 +34776,8 @@ DSL.prototype = {
34706
34776
  },
34707
34777
 
34708
34778
  route: function(name, options) {
34779
+ Ember.assert("'basic' cannot be used as a route name.", name !== 'basic');
34780
+
34709
34781
  route(this, name, options);
34710
34782
  },
34711
34783
 
@@ -36525,6 +36597,8 @@ Ember.Route = Ember.Object.extend(Ember.ActionHandler, {
36525
36597
 
36526
36598
  if (!modelClass) { return; }
36527
36599
 
36600
+ Ember.assert(classify(name) + ' has no method `find`.', typeof modelClass.find === 'function');
36601
+
36528
36602
  return modelClass.find(value);
36529
36603
  }
36530
36604
  };
@@ -37167,6 +37241,18 @@ Ember.onLoad('Ember.Handlebars', function() {
37167
37241
  var get = Ember.get, set = Ember.set, fmt = Ember.String.fmt;
37168
37242
 
37169
37243
  var slice = Array.prototype.slice;
37244
+ var numberOfContextsAcceptedByHandler = function(handler, handlerInfos) {
37245
+ var req = 0;
37246
+ for (var i = 0, l = handlerInfos.length; i < l; i++) {
37247
+ req = req + handlerInfos[i].names.length;
37248
+ if (handlerInfos[i].handler === handler)
37249
+ break;
37250
+ }
37251
+
37252
+ // query params adds an additional context
37253
+ return req;
37254
+ };
37255
+
37170
37256
  Ember.onLoad('Ember.Handlebars', function(Handlebars) {
37171
37257
 
37172
37258
  var QueryParams = Ember.Object.extend({
@@ -37442,13 +37528,14 @@ Ember.onLoad('Ember.Handlebars', function(Handlebars) {
37442
37528
  routeArgs = get(this, 'routeArgs'),
37443
37529
  contexts = routeArgs.slice(1),
37444
37530
  resolvedParams = get(this, 'resolvedParams'),
37445
- currentWhen = this.currentWhen || routeArgs[0];
37446
-
37447
- // if overriding active w/ currentWhen then don't apply contexts since they won't match
37448
- if (this.currentWhen) {
37449
- contexts = [];
37450
- }
37531
+ currentWhen = this.currentWhen || routeArgs[0],
37532
+ maximumContexts = numberOfContextsAcceptedByHandler(currentWhen, router.router.recognizer.handlersFor(currentWhen));
37451
37533
 
37534
+ // if we don't have enough contexts revert back to full route name
37535
+ // this is because the leaf route will use one of the contexts
37536
+ if (contexts.length > maximumContexts)
37537
+ currentWhen = routeArgs[0];
37538
+
37452
37539
  var isActive = router.isActive.apply(router, [currentWhen].concat(contexts));
37453
37540
 
37454
37541
  if (isActive) { return get(this, 'activeClass'); }
@@ -37578,9 +37665,6 @@ Ember.onLoad('Ember.Handlebars', function(Handlebars) {
37578
37665
  } else {
37579
37666
  return resolveParams(parameters.context, parameters.params, { types: types, data: data });
37580
37667
  }
37581
-
37582
- // Original implementation if query params not enabled
37583
- return resolveParams(parameters.context, parameters.params, { types: types, data: data });
37584
37668
  }).property('router.url'),
37585
37669
 
37586
37670
  /**
@@ -39983,16 +40067,46 @@ var get = Ember.get,
39983
40067
  capitalize = Ember.String.capitalize,
39984
40068
  decamelize = Ember.String.decamelize;
39985
40069
 
40070
+ Ember.Resolver = Ember.Object.extend({
40071
+ /**
40072
+ This will be set to the Application instance when it is
40073
+ created.
40074
+
40075
+ @property namespace
40076
+ */
40077
+ namespace: null,
40078
+ normalize: function(fullName) {
40079
+ throw new Error("Invalid call to `resolver.normalize(fullName)`. Please override the 'normalize' method in subclass of `Ember.AbstractResolver` to prevent falling through to this error.");
40080
+ },
40081
+ resolve: function(fullName) {
40082
+ throw new Error("Invalid call to `resolver.resolve(parsedName)`. Please override the 'resolve' method in subclass of `Ember.AbstractResolver` to prevent falling through to this error.");
40083
+ },
40084
+ parseName: function(parsedName) {
40085
+ throw new Error("Invalid call to `resolver.resolveByType(parsedName)`. Please override the 'resolveByType' method in subclass of `Ember.AbstractResolver` to prevent falling through to this error.");
40086
+ },
40087
+ lookupDescription: function(fullName) {
40088
+ throw new Error("Invalid call to `resolver.lookupDescription(fullName)`. Please override the 'lookupDescription' method in subclass of `Ember.AbstractResolver` to prevent falling through to this error.");
40089
+ },
40090
+ makeToString: function(factory, fullName) {
40091
+ throw new Error("Invalid call to `resolver.makeToString(factory, fullName)`. Please override the 'makeToString' method in subclass of `Ember.AbstractResolver` to prevent falling through to this error.");
40092
+ },
40093
+ resolveOther: function(parsedName) {
40094
+ throw new Error("Invalid call to `resolver.resolveDefault(parsedName)`. Please override the 'resolveDefault' method in subclass of `Ember.AbstractResolver` to prevent falling through to this error.");
40095
+ }
40096
+ });
40097
+
40098
+
40099
+
39986
40100
  /**
39987
40101
  The DefaultResolver defines the default lookup rules to resolve
39988
40102
  container lookups before consulting the container for registered
39989
40103
  items:
39990
40104
 
39991
- * templates are looked up on `Ember.TEMPLATES`
39992
- * other names are looked up on the application after converting
39993
- the name. For example, `controller:post` looks up
39994
- `App.PostController` by default.
39995
- * there are some nuances (see examples below)
40105
+ * templates are looked up on `Ember.TEMPLATES`
40106
+ * other names are looked up on the application after converting
40107
+ the name. For example, `controller:post` looks up
40108
+ `App.PostController` by default.
40109
+ * there are some nuances (see examples below)
39996
40110
 
39997
40111
  ### How Resolving Works
39998
40112
 
@@ -40067,10 +40181,7 @@ Ember.DefaultResolver = Ember.Object.extend({
40067
40181
  type = split[0],
40068
40182
  name = split[1];
40069
40183
 
40070
- Ember.assert("Tried to normalize a container name without a colon (:) in " +
40071
- "it. You probably tried to lookup a name that did not contain " +
40072
- "a type, a colon, and a name. A proper lookup name would be " +
40073
- "`view:post`.", split.length === 2);
40184
+ Ember.assert("Tried to normalize a container name without a colon (:) in it. You probably tried to lookup a name that did not contain a type, a colon, and a name. A proper lookup name would be `view:post`.", split.length === 2);
40074
40185
 
40075
40186
  if (type !== 'template') {
40076
40187
  var result = name;
@@ -40147,6 +40258,48 @@ Ember.DefaultResolver = Ember.Object.extend({
40147
40258
  resolveMethodName: "resolve" + classify(type)
40148
40259
  };
40149
40260
  },
40261
+
40262
+ /**
40263
+ Returns a human-readable description for a fullName. Used by the
40264
+ Application namespace in assertions to describe the
40265
+ precise name of the class that Ember is looking for, rather than
40266
+ container keys.
40267
+
40268
+ @protected
40269
+ @param {String} fullName the lookup string
40270
+ @method lookupDescription
40271
+ */
40272
+ lookupDescription: function(fullName) {
40273
+ var parsedName = this.parseName(fullName);
40274
+
40275
+ if (parsedName.type === 'template') {
40276
+ return "template at " + parsedName.fullNameWithoutType.replace(/\./g, '/');
40277
+ }
40278
+
40279
+ var description = parsedName.root + "." + classify(parsedName.name);
40280
+ if (parsedName.type !== 'model') { description += classify(parsedName.type); }
40281
+
40282
+ return description;
40283
+ },
40284
+
40285
+ makeToString: function(factory, fullName) {
40286
+ return factory.toString();
40287
+ },
40288
+ /**
40289
+ Given a parseName object (output from `parseName`), apply
40290
+ the conventions expected by `Ember.Router`
40291
+
40292
+ @protected
40293
+ @param {Object} parsedName a parseName object with the parsed
40294
+ fullName lookup string
40295
+ @method useRouterNaming
40296
+ */
40297
+ useRouterNaming: function(parsedName) {
40298
+ parsedName.name = parsedName.name.replace(/\./g, '_');
40299
+ if (parsedName.name === 'basic') {
40300
+ parsedName.name = '';
40301
+ }
40302
+ },
40150
40303
  /**
40151
40304
  Look up the template in Ember.TEMPLATES
40152
40305
 
@@ -40168,19 +40321,16 @@ Ember.DefaultResolver = Ember.Object.extend({
40168
40321
  }
40169
40322
  },
40170
40323
  /**
40171
- Given a parseName object (output from `parseName`), apply
40172
- the conventions expected by `Ember.Router`
40324
+ Lookup the view using `resolveOther`
40173
40325
 
40174
40326
  @protected
40175
40327
  @param {Object} parsedName a parseName object with the parsed
40176
40328
  fullName lookup string
40177
- @method useRouterNaming
40329
+ @method resolveView
40178
40330
  */
40179
- useRouterNaming: function(parsedName) {
40180
- parsedName.name = parsedName.name.replace(/\./g, '_');
40181
- if (parsedName.name === 'basic') {
40182
- parsedName.name = '';
40183
- }
40331
+ resolveView: function(parsedName) {
40332
+ this.useRouterNaming(parsedName);
40333
+ return this.resolveOther(parsedName);
40184
40334
  },
40185
40335
  /**
40186
40336
  Lookup the controller using `resolveOther`
@@ -40206,22 +40356,6 @@ Ember.DefaultResolver = Ember.Object.extend({
40206
40356
  this.useRouterNaming(parsedName);
40207
40357
  return this.resolveOther(parsedName);
40208
40358
  },
40209
- /**
40210
- Lookup the view using `resolveOther`
40211
-
40212
- @protected
40213
- @param {Object} parsedName a parseName object with the parsed
40214
- fullName lookup string
40215
- @method resolveView
40216
- */
40217
- resolveView: function(parsedName) {
40218
- this.useRouterNaming(parsedName);
40219
- return this.resolveOther(parsedName);
40220
- },
40221
-
40222
- resolveHelper: function(parsedName) {
40223
- return this.resolveOther(parsedName) || Ember.Handlebars.helpers[parsedName.fullNameWithoutType];
40224
- },
40225
40359
 
40226
40360
  /**
40227
40361
  Lookup the model on the Application namespace
@@ -40244,39 +40378,24 @@ Ember.DefaultResolver = Ember.Object.extend({
40244
40378
  @protected
40245
40379
  @param {Object} parsedName a parseName object with the parsed
40246
40380
  fullName lookup string
40247
- @method resolveOther
40381
+ @method resolveHelper
40248
40382
  */
40249
- resolveOther: function(parsedName) {
40250
- var className = classify(parsedName.name) + classify(parsedName.type),
40251
- factory = get(parsedName.root, className);
40252
- if (factory) { return factory; }
40383
+ resolveHelper: function(parsedName) {
40384
+ return this.resolveOther(parsedName) || Ember.Handlebars.helpers[parsedName.fullNameWithoutType];
40253
40385
  },
40254
-
40255
40386
  /**
40256
- Returns a human-readable description for a fullName. Used by the
40257
- Application namespace in assertions to describe the
40258
- precise name of the class that Ember is looking for, rather than
40259
- container keys.
40387
+ Look up the specified object (from parsedName) on the appropriate
40388
+ namespace (usually on the Application)
40260
40389
 
40261
40390
  @protected
40262
- @param {String} fullName the lookup string
40263
- @method lookupDescription
40391
+ @param {Object} parsedName a parseName object with the parsed
40392
+ fullName lookup string
40393
+ @method resolveOther
40264
40394
  */
40265
- lookupDescription: function(fullName) {
40266
- var parsedName = this.parseName(fullName);
40267
-
40268
- if (parsedName.type === 'template') {
40269
- return "template at " + parsedName.fullNameWithoutType.replace(/\./g, '/');
40270
- }
40271
-
40272
- var description = parsedName.root + "." + classify(parsedName.name);
40273
- if (parsedName.type !== 'model') { description += classify(parsedName.type); }
40274
-
40275
- return description;
40276
- },
40277
-
40278
- makeToString: function(factory, fullName) {
40279
- return factory.toString();
40395
+ resolveOther: function(parsedName) {
40396
+ var className = classify(parsedName.name) + classify(parsedName.type),
40397
+ factory = get(parsedName.root, className);
40398
+ if (factory) { return factory; }
40280
40399
  }
40281
40400
  });
40282
40401
 
@@ -40406,18 +40525,24 @@ DeprecatedContainer.prototype = {
40406
40525
 
40407
40526
  ### Initializers
40408
40527
 
40409
- Libraries on top of Ember can register additional initializers, like so:
40528
+ Libraries on top of Ember can add initializers, like so:
40410
40529
 
40411
40530
  ```javascript
40412
40531
  Ember.Application.initializer({
40413
- name: "store",
40532
+ name: 'api-adapter',
40414
40533
 
40415
40534
  initialize: function(container, application) {
40416
- container.register('store:main', application.Store);
40535
+ application.register('api-adapter:main', ApiAdapter);
40417
40536
  }
40418
40537
  });
40419
40538
  ```
40420
40539
 
40540
+ Initializers provide an opportunity to access the container, which
40541
+ organizes the different components of an Ember application. Additionally
40542
+ they provide a chance to access the instantiated application. Beyond
40543
+ being used for libraries, initializers are also a great way to organize
40544
+ dependency injection or setup in your own application.
40545
+
40421
40546
  ### Routing
40422
40547
 
40423
40548
  In addition to creating your application's router, `Ember.Application` is
@@ -40662,17 +40787,50 @@ var Application = Ember.Application = Ember.Namespace.extend(Ember.DeferredMixin
40662
40787
  },
40663
40788
 
40664
40789
  /**
40665
- registers a factory for later injection
40790
+ Registers a factory that can be used for dependency injection (with
40791
+ `App.inject`) or for service lookup. Each factory is registered with
40792
+ a full name including two parts: `type:name`.
40666
40793
 
40667
- Example:
40794
+ A simple example:
40668
40795
 
40669
40796
  ```javascript
40670
- App = Ember.Application.create();
40797
+ var App = Ember.Application.create();
40798
+ App.Orange = Ember.Object.extend();
40799
+ App.register('fruit:favorite', App.Orange);
40800
+ ```
40801
+
40802
+ Ember will resolve factories from the `App` namespace automatically.
40803
+ For example `App.CarsController` will be discovered and returned if
40804
+ an application requests `controller:cars`.
40805
+
40806
+ An example of registering a controller with a non-standard name:
40807
+
40808
+ ```javascript
40809
+ var App = Ember.Application.create(),
40810
+ Session = Ember.Controller.extend();
40811
+
40812
+ App.register('controller:session', Session);
40813
+
40814
+ // The Session controller can now be treated like a normal controller,
40815
+ // despite its non-standard name.
40816
+ App.ApplicationController = Ember.Controller.extend({
40817
+ needs: ['session']
40818
+ });
40819
+ ```
40820
+
40821
+ Registered factories are **instantiated** by having `create`
40822
+ called on them. Additionally they are **singletons**, each time
40823
+ they are looked up they return the same instance.
40671
40824
 
40672
- App.Person = Ember.Object.extend({});
40673
- App.Orange = Ember.Object.extend({});
40674
- App.Email = Ember.Object.extend({});
40675
- App.session = Ember.Object.create({});
40825
+ Some examples modifying that default behavior:
40826
+
40827
+ ```javascript
40828
+ var App = Ember.Application.create();
40829
+
40830
+ App.Person = Ember.Object.extend();
40831
+ App.Orange = Ember.Object.extend();
40832
+ App.Email = Ember.Object.extend();
40833
+ App.session = Ember.Object.create();
40676
40834
 
40677
40835
  App.register('model:user', App.Person, {singleton: false });
40678
40836
  App.register('fruit:favorite', App.Orange);
@@ -40683,28 +40841,56 @@ var Application = Ember.Application = Ember.Namespace.extend(Ember.DeferredMixin
40683
40841
  @method register
40684
40842
  @param fullName {String} type:name (e.g., 'model:user')
40685
40843
  @param factory {Function} (e.g., App.Person)
40686
- @param options {Object} (optional)
40844
+ @param options {Object} (optional) disable instantiation or singleton usage
40687
40845
  **/
40688
40846
  register: function() {
40689
40847
  var container = this.__container__;
40690
40848
  container.register.apply(container, arguments);
40691
40849
  },
40850
+
40692
40851
  /**
40693
- defines an injection or typeInjection
40852
+ Define a dependency injection onto a specific factory or all factories
40853
+ of a type.
40694
40854
 
40695
- Example:
40855
+ When Ember instantiates a controller, view, or other framework component
40856
+ it can attach a dependency to that component. This is often used to
40857
+ provide services to a set of framework components.
40858
+
40859
+ An example of providing a session object to all controllers:
40860
+
40861
+ ```javascript
40862
+ var App = Ember.Application.create(),
40863
+ Session = Ember.Object.extend({ isAuthenticated: false });
40864
+
40865
+ // A factory must be registered before it can be injected
40866
+ App.register('session:main', Session);
40867
+
40868
+ // Inject 'session:main' onto all factories of the type 'controller'
40869
+ // with the name 'session'
40870
+ App.inject('controller', 'session', 'session:main');
40871
+
40872
+ App.IndexController = Ember.Controller.extend({
40873
+ isLoggedIn: Ember.computed.alias('session.isAuthenticated')
40874
+ });
40875
+ ```
40876
+
40877
+ Injections can also be performed on specific factories.
40696
40878
 
40697
40879
  ```javascript
40698
40880
  App.inject(<full_name or type>, <property name>, <full_name>)
40699
- App.inject('controller:application', 'email', 'model:email')
40700
- App.inject('controller', 'source', 'source:main')
40881
+ App.inject('route', 'source', 'source:main')
40882
+ App.inject('route:application', 'email', 'model:email')
40701
40883
  ```
40702
- Please note that injections on models are currently disabled.
40703
- This was done because ember-data was not ready for fully a container aware ecosystem.
40704
40884
 
40705
- You can enable injections on models by setting `Ember.MODEL_FACTORY_INJECTIONS` flag to `true`
40706
- If model factory injections are enabled, models should not be
40707
- accessed globally (only through `container.lookupFactory('model:modelName'))`);
40885
+ It is important to note that injections can only be performed on
40886
+ classes that are instantiated by Ember itself. Instantiating a class
40887
+ directly (via `create` or `new`) bypasses the dependency injection
40888
+ system.
40889
+
40890
+ Ember-Data instantiates its models in a unique manner, and consequently
40891
+ injections onto models (or all models) will not work as expected. Injections
40892
+ on models can be enabled by setting `Ember.MODEL_FACTORY_INJECTIONS`
40893
+ to `true`.
40708
40894
 
40709
40895
  @method inject
40710
40896
  @param factoryNameOrType {String}
@@ -40729,6 +40915,7 @@ var Application = Ember.Application = Ember.Namespace.extend(Ember.DeferredMixin
40729
40915
  initialize: function() {
40730
40916
  Ember.deprecate('Calling initialize manually is not supported. Please see Ember.Application#advanceReadiness and Ember.Application#deferReadiness');
40731
40917
  },
40918
+
40732
40919
  /**
40733
40920
  Initialize the application. This happens automatically.
40734
40921
 
@@ -41049,6 +41236,13 @@ Ember.Application.reopenClass({
41049
41236
 
41050
41237
  container.injection('route', 'router', 'router:main');
41051
41238
 
41239
+ // DEBUGGING
41240
+ container.register('resolver-for-debugging:main', container.resolver.__resolver__, { instantiate: false });
41241
+ container.injection('container-debug-adapter:main', 'resolver', 'resolver-for-debugging:main');
41242
+ container.injection('data-adapter:main', 'containerDebugAdapter', 'container-debug-adapter:main');
41243
+ // Custom resolver authors may want to register their own ContainerDebugAdapter with this key
41244
+ container.register('container-debug-adapter:main', Ember.ContainerDebugAdapter);
41245
+
41052
41246
  return container;
41053
41247
  }
41054
41248
  });
@@ -41100,6 +41294,8 @@ function resolverFor(namespace) {
41100
41294
  }
41101
41295
  };
41102
41296
 
41297
+ resolve.__resolver__ = resolver;
41298
+
41103
41299
  return resolve;
41104
41300
  }
41105
41301
 
@@ -41300,6 +41496,111 @@ Ember Application
41300
41496
 
41301
41497
  })();
41302
41498
 
41499
+ (function() {
41500
+ /**
41501
+ @module ember
41502
+ @submodule ember-extension-support
41503
+ */
41504
+ /**
41505
+ The `ContainerDebugAdapter` helps the container and resolver interface
41506
+ with tools that debug Ember such as the
41507
+ [Ember Extension](https://github.com/tildeio/ember-extension)
41508
+ for Chrome and Firefox.
41509
+
41510
+ This class can be extended by a custom resolver implementer
41511
+ to override some of the methods with library-specific code.
41512
+
41513
+ The methods likely to be overridden are:
41514
+
41515
+ * `canCatalogEntriesByType`
41516
+ * `catalogEntriesByType`
41517
+
41518
+ The adapter will need to be registered
41519
+ in the application's container as `container-debug-adapter:main`
41520
+
41521
+ Example:
41522
+
41523
+ ```javascript
41524
+ Application.initializer({
41525
+ name: "containerDebugAdapter",
41526
+
41527
+ initialize: function(container, application) {
41528
+ application.register('container-debug-adapter:main', require('app/container-debug-adapter'));
41529
+ }
41530
+ });
41531
+ ```
41532
+
41533
+ @class ContainerDebugAdapter
41534
+ @namespace Ember
41535
+ @extends Ember.Object
41536
+ */
41537
+ Ember.ContainerDebugAdapter = Ember.Object.extend({
41538
+ /**
41539
+ The container of the application being debugged.
41540
+ This property will be injected
41541
+ on creation.
41542
+
41543
+ @property container
41544
+ @default null
41545
+ */
41546
+ container: null,
41547
+
41548
+ /**
41549
+ The resolver instance of the application
41550
+ being debugged. This property will be injected
41551
+ on creation.
41552
+
41553
+ @property resolver
41554
+ @default null
41555
+ */
41556
+ resolver: null,
41557
+
41558
+ /**
41559
+ Returns true if it is possible to catalog a list of available
41560
+ classes in the resolver for a given type.
41561
+
41562
+ @method canCatalogEntriesByType
41563
+ @param {string} type The type. e.g. "model", "controller", "route"
41564
+ @return {boolean} whether a list is available for this type.
41565
+ */
41566
+ canCatalogEntriesByType: function(type) {
41567
+ if (type === 'model' || type === 'template') return false;
41568
+ return true;
41569
+ },
41570
+
41571
+ /**
41572
+ Returns the available classes a given type.
41573
+
41574
+ @method catalogEntriesByType
41575
+ @param {string} type The type. e.g. "model", "controller", "route"
41576
+ @return {Array} An array of strings.
41577
+ */
41578
+ catalogEntriesByType: function(type) {
41579
+ var namespaces = Ember.A(Ember.Namespace.NAMESPACES), types = Ember.A(), self = this;
41580
+ var typeSuffixRegex = new RegExp(Ember.String.classify(type) + "$");
41581
+
41582
+ namespaces.forEach(function(namespace) {
41583
+ if (namespace !== Ember) {
41584
+ for (var key in namespace) {
41585
+ if (!namespace.hasOwnProperty(key)) { continue; }
41586
+ if (typeSuffixRegex.test(key)) {
41587
+ var klass = namespace[key];
41588
+ if (Ember.typeOf(klass) === 'class') {
41589
+ types.push(Ember.String.dasherize(key.replace(typeSuffixRegex, '')));
41590
+ }
41591
+ }
41592
+ }
41593
+ }
41594
+ });
41595
+ return types;
41596
+ }
41597
+ });
41598
+
41599
+
41600
+ })();
41601
+
41602
+
41603
+
41303
41604
  (function() {
41304
41605
  /**
41305
41606
  @module ember
@@ -41334,10 +41635,10 @@ Ember Application
41334
41635
 
41335
41636
  ```javascript
41336
41637
  Application.initializer({
41337
- name: "dataAdapter",
41638
+ name: "data-adapter",
41338
41639
 
41339
41640
  initialize: function(container, application) {
41340
- application.register('dataAdapter:main', DS.DataAdapter);
41641
+ application.register('data-adapter:main', DS.DataAdapter);
41341
41642
  }
41342
41643
  });
41343
41644
  ```
@@ -41362,6 +41663,16 @@ Ember.DataAdapter = Ember.Object.extend({
41362
41663
  */
41363
41664
  container: null,
41364
41665
 
41666
+
41667
+ /**
41668
+ The container-debug-adapter which is used
41669
+ to list all models.
41670
+
41671
+ @property containerDebugAdapter
41672
+ @default undefined
41673
+ **/
41674
+ containerDebugAdapter: undefined,
41675
+
41365
41676
  /**
41366
41677
  Number of attributes to send
41367
41678
  as columns. (Enough to make the record
@@ -41415,8 +41726,9 @@ Ember.DataAdapter = Ember.Object.extend({
41415
41726
  self = this, typesToSend, releaseMethods = Ember.A();
41416
41727
 
41417
41728
  typesToSend = modelTypes.map(function(type) {
41418
- var wrapped = self.wrapModelType(type);
41419
- releaseMethods.push(self.observeModelType(type, typesUpdated));
41729
+ var klass = type.klass;
41730
+ var wrapped = self.wrapModelType(klass, type.name);
41731
+ releaseMethods.push(self.observeModelType(klass, typesUpdated));
41420
41732
  return wrapped;
41421
41733
  });
41422
41734
 
@@ -41430,6 +41742,13 @@ Ember.DataAdapter = Ember.Object.extend({
41430
41742
  return release;
41431
41743
  },
41432
41744
 
41745
+ _nameToClass: function(type) {
41746
+ if (typeof type === 'string') {
41747
+ type = this.container.lookupFactory('model:' + type);
41748
+ }
41749
+ return type;
41750
+ },
41751
+
41433
41752
  /**
41434
41753
  Fetch the records of a given type and observe them for changes.
41435
41754
 
@@ -41572,7 +41891,7 @@ Ember.DataAdapter = Ember.Object.extend({
41572
41891
  @private
41573
41892
  @method wrapModelType
41574
41893
  @param {Class} type A model class
41575
- @param {Function} typesUpdated callback to call when the type changes
41894
+ @param {String} Optional name of the class
41576
41895
  @return {Object} contains the wrapped type and the function to remove observers
41577
41896
  Format:
41578
41897
  type: {Object} the wrapped type
@@ -41583,12 +41902,12 @@ Ember.DataAdapter = Ember.Object.extend({
41583
41902
  object: {Class} the actual Model type class
41584
41903
  release: {Function} The function to remove observers
41585
41904
  */
41586
- wrapModelType: function(type, typesUpdated) {
41905
+ wrapModelType: function(type, name) {
41587
41906
  var release, records = this.getRecords(type),
41588
41907
  typeToSend, self = this;
41589
41908
 
41590
41909
  typeToSend = {
41591
- name: type.toString(),
41910
+ name: name || type.toString(),
41592
41911
  count: Ember.get(records, 'length'),
41593
41912
  columns: this.columnsForType(type),
41594
41913
  object: type
@@ -41606,18 +41925,45 @@ Ember.DataAdapter = Ember.Object.extend({
41606
41925
  @method getModelTypes
41607
41926
  @return {Array} Array of model types
41608
41927
  */
41609
-
41610
- // TODO: Use the resolver instead of looping over namespaces.
41611
41928
  getModelTypes: function() {
41612
- var namespaces = Ember.A(Ember.Namespace.NAMESPACES), types = Ember.A(), self = this;
41929
+ var types, self = this,
41930
+ containerDebugAdapter = this.get('containerDebugAdapter');
41931
+
41932
+ if (containerDebugAdapter.canCatalogEntriesByType('model')) {
41933
+ types = containerDebugAdapter.catalogEntriesByType('model');
41934
+ } else {
41935
+ types = this._getObjectsOnNamespaces();
41936
+ }
41937
+ // New adapters return strings instead of classes
41938
+ return types.map(function(name) {
41939
+ return {
41940
+ klass: self._nameToClass(name),
41941
+ name: name
41942
+ };
41943
+ }).filter(function(type) {
41944
+ return self.detect(type.klass);
41945
+ });
41946
+ },
41947
+
41948
+ /**
41949
+ Loops over all namespaces and all objects
41950
+ attached to them
41951
+
41952
+ @private
41953
+ @method _getObjectsOnNamespaces
41954
+ @return {Array} Array of model type strings
41955
+ */
41956
+ _getObjectsOnNamespaces: function() {
41957
+ var namespaces = Ember.A(Ember.Namespace.NAMESPACES), types = Ember.A();
41613
41958
 
41614
41959
  namespaces.forEach(function(namespace) {
41615
41960
  for (var key in namespace) {
41616
41961
  if (!namespace.hasOwnProperty(key)) { continue; }
41617
- var klass = namespace[key];
41618
- if (self.detect(klass)) {
41619
- types.push(klass);
41962
+ var name = Ember.String.dasherize(key);
41963
+ if (!(namespace instanceof Ember.Application) && namespace.toString()) {
41964
+ name = namespace + '/' + name;
41620
41965
  }
41966
+ types.push(name);
41621
41967
  }
41622
41968
  });
41623
41969
  return types;
@@ -41737,31 +42083,865 @@ Ember Extension Support
41737
42083
 
41738
42084
  })();
41739
42085
 
41740
- (function() {
41741
- /**
41742
- Sets Ember up for testing. This is useful to perform
41743
- basic setup steps in order to unit test.
41744
-
41745
- Use `App.setupForTesting` to perform integration tests (full
41746
- application testing).
42086
+ define("container/container",
42087
+ ["container/inheriting_dict","exports"],
42088
+ function(__dependency1__, __exports__) {
42089
+ "use strict";
42090
+ var InheritingDict = __dependency1__["default"];
41747
42091
 
41748
- @method setupForTesting
41749
- @namespace Ember
41750
- */
41751
- Ember.setupForTesting = function() {
41752
- Ember.testing = true;
42092
+ // A lightweight container that helps to assemble and decouple components.
42093
+ // Public api for the container is still in flux.
42094
+ // The public api, specified on the application namespace should be considered the stable api.
42095
+ function Container(parent) {
42096
+ this.parent = parent;
42097
+ this.children = [];
41753
42098
 
41754
- // if adapter is not manually set default to QUnit
41755
- if (!Ember.Test.adapter) {
41756
- Ember.Test.adapter = Ember.Test.QUnitAdapter.create();
41757
- }
41758
- };
42099
+ this.resolver = parent && parent.resolver || function() {};
41759
42100
 
41760
- })();
42101
+ this.registry = new InheritingDict(parent && parent.registry);
42102
+ this.cache = new InheritingDict(parent && parent.cache);
42103
+ this.factoryCache = new InheritingDict(parent && parent.factoryCache);
42104
+ this.resolveCache = new InheritingDict(parent && parent.resolveCache);
42105
+ this.typeInjections = new InheritingDict(parent && parent.typeInjections);
42106
+ this.injections = {};
41761
42107
 
42108
+ this.factoryTypeInjections = new InheritingDict(parent && parent.factoryTypeInjections);
42109
+ this.factoryInjections = {};
41762
42110
 
42111
+ this._options = new InheritingDict(parent && parent._options);
42112
+ this._typeOptions = new InheritingDict(parent && parent._typeOptions);
42113
+ }
41763
42114
 
41764
- (function() {
42115
+ Container.prototype = {
42116
+
42117
+ /**
42118
+ @property parent
42119
+ @type Container
42120
+ @default null
42121
+ */
42122
+ parent: null,
42123
+
42124
+ /**
42125
+ @property children
42126
+ @type Array
42127
+ @default []
42128
+ */
42129
+ children: null,
42130
+
42131
+ /**
42132
+ @property resolver
42133
+ @type function
42134
+ */
42135
+ resolver: null,
42136
+
42137
+ /**
42138
+ @property registry
42139
+ @type InheritingDict
42140
+ */
42141
+ registry: null,
42142
+
42143
+ /**
42144
+ @property cache
42145
+ @type InheritingDict
42146
+ */
42147
+ cache: null,
42148
+
42149
+ /**
42150
+ @property typeInjections
42151
+ @type InheritingDict
42152
+ */
42153
+ typeInjections: null,
42154
+
42155
+ /**
42156
+ @property injections
42157
+ @type Object
42158
+ @default {}
42159
+ */
42160
+ injections: null,
42161
+
42162
+ /**
42163
+ @private
42164
+
42165
+ @property _options
42166
+ @type InheritingDict
42167
+ @default null
42168
+ */
42169
+ _options: null,
42170
+
42171
+ /**
42172
+ @private
42173
+
42174
+ @property _typeOptions
42175
+ @type InheritingDict
42176
+ */
42177
+ _typeOptions: null,
42178
+
42179
+ /**
42180
+ Returns a new child of the current container. These children are configured
42181
+ to correctly inherit from the current container.
42182
+
42183
+ @method child
42184
+ @return {Container}
42185
+ */
42186
+ child: function() {
42187
+ var container = new Container(this);
42188
+ this.children.push(container);
42189
+ return container;
42190
+ },
42191
+
42192
+ /**
42193
+ Sets a key-value pair on the current container. If a parent container,
42194
+ has the same key, once set on a child, the parent and child will diverge
42195
+ as expected.
42196
+
42197
+ @method set
42198
+ @param {Object} object
42199
+ @param {String} key
42200
+ @param {any} value
42201
+ */
42202
+ set: function(object, key, value) {
42203
+ object[key] = value;
42204
+ },
42205
+
42206
+ /**
42207
+ Registers a factory for later injection.
42208
+
42209
+ Example:
42210
+
42211
+ ```javascript
42212
+ var container = new Container();
42213
+
42214
+ container.register('model:user', Person, {singleton: false });
42215
+ container.register('fruit:favorite', Orange);
42216
+ container.register('communication:main', Email, {singleton: false});
42217
+ ```
42218
+
42219
+ @method register
42220
+ @param {String} fullName
42221
+ @param {Function} factory
42222
+ @param {Object} options
42223
+ */
42224
+ register: function(fullName, factory, options) {
42225
+ validateFullName(fullName);
42226
+
42227
+ if (factory === undefined) {
42228
+ throw new TypeError('Attempting to register an unknown factory: `' + fullName + '`');
42229
+ }
42230
+
42231
+ var normalizedName = this.normalize(fullName);
42232
+
42233
+ if (this.cache.has(normalizedName)) {
42234
+ throw new Error('Cannot re-register: `' + fullName +'`, as it has already been looked up.');
42235
+ }
42236
+
42237
+ this.registry.set(normalizedName, factory);
42238
+ this._options.set(normalizedName, options || {});
42239
+ },
42240
+
42241
+ /**
42242
+ Unregister a fullName
42243
+
42244
+ ```javascript
42245
+ var container = new Container();
42246
+ container.register('model:user', User);
42247
+
42248
+ container.lookup('model:user') instanceof User //=> true
42249
+
42250
+ container.unregister('model:user')
42251
+ container.lookup('model:user') === undefined //=> true
42252
+ ```
42253
+
42254
+ @method unregister
42255
+ @param {String} fullName
42256
+ */
42257
+ unregister: function(fullName) {
42258
+ validateFullName(fullName);
42259
+
42260
+ var normalizedName = this.normalize(fullName);
42261
+
42262
+ this.registry.remove(normalizedName);
42263
+ this.cache.remove(normalizedName);
42264
+ this.factoryCache.remove(normalizedName);
42265
+ this.resolveCache.remove(normalizedName);
42266
+ this._options.remove(normalizedName);
42267
+ },
42268
+
42269
+ /**
42270
+ Given a fullName return the corresponding factory.
42271
+
42272
+ By default `resolve` will retrieve the factory from
42273
+ its container's registry.
42274
+
42275
+ ```javascript
42276
+ var container = new Container();
42277
+ container.register('api:twitter', Twitter);
42278
+
42279
+ container.resolve('api:twitter') // => Twitter
42280
+ ```
42281
+
42282
+ Optionally the container can be provided with a custom resolver.
42283
+ If provided, `resolve` will first provide the custom resolver
42284
+ the oppertunity to resolve the fullName, otherwise it will fallback
42285
+ to the registry.
42286
+
42287
+ ```javascript
42288
+ var container = new Container();
42289
+ container.resolver = function(fullName) {
42290
+ // lookup via the module system of choice
42291
+ };
42292
+
42293
+ // the twitter factory is added to the module system
42294
+ container.resolve('api:twitter') // => Twitter
42295
+ ```
42296
+
42297
+ @method resolve
42298
+ @param {String} fullName
42299
+ @return {Function} fullName's factory
42300
+ */
42301
+ resolve: function(fullName) {
42302
+ validateFullName(fullName);
42303
+
42304
+ var normalizedName = this.normalize(fullName);
42305
+ var cached = this.resolveCache.get(normalizedName);
42306
+
42307
+ if (cached) { return cached; }
42308
+
42309
+ var resolved = this.resolver(normalizedName) || this.registry.get(normalizedName);
42310
+
42311
+ this.resolveCache.set(normalizedName, resolved);
42312
+
42313
+ return resolved;
42314
+ },
42315
+
42316
+ /**
42317
+ A hook that can be used to describe how the resolver will
42318
+ attempt to find the factory.
42319
+
42320
+ For example, the default Ember `.describe` returns the full
42321
+ class name (including namespace) where Ember's resolver expects
42322
+ to find the `fullName`.
42323
+
42324
+ @method describe
42325
+ @param {String} fullName
42326
+ @return {string} described fullName
42327
+ */
42328
+ describe: function(fullName) {
42329
+ return fullName;
42330
+ },
42331
+
42332
+ /**
42333
+ A hook to enable custom fullName normalization behaviour
42334
+
42335
+ @method normalize
42336
+ @param {String} fullName
42337
+ @return {string} normalized fullName
42338
+ */
42339
+ normalize: function(fullName) {
42340
+ return fullName;
42341
+ },
42342
+
42343
+ /**
42344
+ @method makeToString
42345
+
42346
+ @param {any} factory
42347
+ @param {string} fullName
42348
+ @return {function} toString function
42349
+ */
42350
+ makeToString: function(factory, fullName) {
42351
+ return factory.toString();
42352
+ },
42353
+
42354
+ /**
42355
+ Given a fullName return a corresponding instance.
42356
+
42357
+ The default behaviour is for lookup to return a singleton instance.
42358
+ The singleton is scoped to the container, allowing multiple containers
42359
+ to all have their own locally scoped singletons.
42360
+
42361
+ ```javascript
42362
+ var container = new Container();
42363
+ container.register('api:twitter', Twitter);
42364
+
42365
+ var twitter = container.lookup('api:twitter');
42366
+
42367
+ twitter instanceof Twitter; // => true
42368
+
42369
+ // by default the container will return singletons
42370
+ var twitter2 = container.lookup('api:twitter');
42371
+ twitter instanceof Twitter; // => true
42372
+
42373
+ twitter === twitter2; //=> true
42374
+ ```
42375
+
42376
+ If singletons are not wanted an optional flag can be provided at lookup.
42377
+
42378
+ ```javascript
42379
+ var container = new Container();
42380
+ container.register('api:twitter', Twitter);
42381
+
42382
+ var twitter = container.lookup('api:twitter', { singleton: false });
42383
+ var twitter2 = container.lookup('api:twitter', { singleton: false });
42384
+
42385
+ twitter === twitter2; //=> false
42386
+ ```
42387
+
42388
+ @method lookup
42389
+ @param {String} fullName
42390
+ @param {Object} options
42391
+ @return {any}
42392
+ */
42393
+ lookup: function(fullName, options) {
42394
+ validateFullName(fullName);
42395
+ return lookup(this, this.normalize(fullName), options);
42396
+ },
42397
+
42398
+ /**
42399
+ Given a fullName return the corresponding factory.
42400
+
42401
+ @method lookupFactory
42402
+ @param {String} fullName
42403
+ @return {any}
42404
+ */
42405
+ lookupFactory: function(fullName) {
42406
+ validateFullName(fullName);
42407
+ return factoryFor(this, this.normalize(fullName));
42408
+ },
42409
+
42410
+ /**
42411
+ Given a fullName check if the container is aware of its factory
42412
+ or singleton instance.
42413
+
42414
+ @method has
42415
+ @param {String} fullName
42416
+ @return {Boolean}
42417
+ */
42418
+ has: function(fullName) {
42419
+ validateFullName(fullName);
42420
+ return has(this, this.normalize(fullName));
42421
+ },
42422
+
42423
+ /**
42424
+ Allow registering options for all factories of a type.
42425
+
42426
+ ```javascript
42427
+ var container = new Container();
42428
+
42429
+ // if all of type `connection` must not be singletons
42430
+ container.optionsForType('connection', { singleton: false });
42431
+
42432
+ container.register('connection:twitter', TwitterConnection);
42433
+ container.register('connection:facebook', FacebookConnection);
42434
+
42435
+ var twitter = container.lookup('connection:twitter');
42436
+ var twitter2 = container.lookup('connection:twitter');
42437
+
42438
+ twitter === twitter2; // => false
42439
+
42440
+ var facebook = container.lookup('connection:facebook');
42441
+ var facebook2 = container.lookup('connection:facebook');
42442
+
42443
+ facebook === facebook2; // => false
42444
+ ```
42445
+
42446
+ @method optionsForType
42447
+ @param {String} type
42448
+ @param {Object} options
42449
+ */
42450
+ optionsForType: function(type, options) {
42451
+ if (this.parent) { illegalChildOperation('optionsForType'); }
42452
+
42453
+ this._typeOptions.set(type, options);
42454
+ },
42455
+
42456
+ /**
42457
+ @method options
42458
+ @param {String} type
42459
+ @param {Object} options
42460
+ */
42461
+ options: function(type, options) {
42462
+ this.optionsForType(type, options);
42463
+ },
42464
+
42465
+ /**
42466
+ Used only via `injection`.
42467
+
42468
+ Provides a specialized form of injection, specifically enabling
42469
+ all objects of one type to be injected with a reference to another
42470
+ object.
42471
+
42472
+ For example, provided each object of type `controller` needed a `router`.
42473
+ one would do the following:
42474
+
42475
+ ```javascript
42476
+ var container = new Container();
42477
+
42478
+ container.register('router:main', Router);
42479
+ container.register('controller:user', UserController);
42480
+ container.register('controller:post', PostController);
42481
+
42482
+ container.typeInjection('controller', 'router', 'router:main');
42483
+
42484
+ var user = container.lookup('controller:user');
42485
+ var post = container.lookup('controller:post');
42486
+
42487
+ user.router instanceof Router; //=> true
42488
+ post.router instanceof Router; //=> true
42489
+
42490
+ // both controllers share the same router
42491
+ user.router === post.router; //=> true
42492
+ ```
42493
+
42494
+ @private
42495
+ @method typeInjection
42496
+ @param {String} type
42497
+ @param {String} property
42498
+ @param {String} fullName
42499
+ */
42500
+ typeInjection: function(type, property, fullName) {
42501
+ validateFullName(fullName);
42502
+ if (this.parent) { illegalChildOperation('typeInjection'); }
42503
+
42504
+ var fullNameType = fullName.split(':')[0];
42505
+ if(fullNameType === type) {
42506
+ throw new Error('Cannot inject a `' + fullName + '` on other ' + type + '(s). Register the `' + fullName + '` as a different type and perform the typeInjection.');
42507
+ }
42508
+ addTypeInjection(this.typeInjections, type, property, fullName);
42509
+ },
42510
+
42511
+ /**
42512
+ Defines injection rules.
42513
+
42514
+ These rules are used to inject dependencies onto objects when they
42515
+ are instantiated.
42516
+
42517
+ Two forms of injections are possible:
42518
+
42519
+ * Injecting one fullName on another fullName
42520
+ * Injecting one fullName on a type
42521
+
42522
+ Example:
42523
+
42524
+ ```javascript
42525
+ var container = new Container();
42526
+
42527
+ container.register('source:main', Source);
42528
+ container.register('model:user', User);
42529
+ container.register('model:post', Post);
42530
+
42531
+ // injecting one fullName on another fullName
42532
+ // eg. each user model gets a post model
42533
+ container.injection('model:user', 'post', 'model:post');
42534
+
42535
+ // injecting one fullName on another type
42536
+ container.injection('model', 'source', 'source:main');
42537
+
42538
+ var user = container.lookup('model:user');
42539
+ var post = container.lookup('model:post');
42540
+
42541
+ user.source instanceof Source; //=> true
42542
+ post.source instanceof Source; //=> true
42543
+
42544
+ user.post instanceof Post; //=> true
42545
+
42546
+ // and both models share the same source
42547
+ user.source === post.source; //=> true
42548
+ ```
42549
+
42550
+ @method injection
42551
+ @param {String} factoryName
42552
+ @param {String} property
42553
+ @param {String} injectionName
42554
+ */
42555
+ injection: function(fullName, property, injectionName) {
42556
+ if (this.parent) { illegalChildOperation('injection'); }
42557
+
42558
+ validateFullName(injectionName);
42559
+ var normalizedInjectionName = this.normalize(injectionName);
42560
+
42561
+ if (fullName.indexOf(':') === -1) {
42562
+ return this.typeInjection(fullName, property, normalizedInjectionName);
42563
+ }
42564
+
42565
+ validateFullName(fullName);
42566
+ var normalizedName = this.normalize(fullName);
42567
+
42568
+ addInjection(this.injections, normalizedName, property, normalizedInjectionName);
42569
+ },
42570
+
42571
+
42572
+ /**
42573
+ Used only via `factoryInjection`.
42574
+
42575
+ Provides a specialized form of injection, specifically enabling
42576
+ all factory of one type to be injected with a reference to another
42577
+ object.
42578
+
42579
+ For example, provided each factory of type `model` needed a `store`.
42580
+ one would do the following:
42581
+
42582
+ ```javascript
42583
+ var container = new Container();
42584
+
42585
+ container.register('store:main', SomeStore);
42586
+
42587
+ container.factoryTypeInjection('model', 'store', 'store:main');
42588
+
42589
+ var store = container.lookup('store:main');
42590
+ var UserFactory = container.lookupFactory('model:user');
42591
+
42592
+ UserFactory.store instanceof SomeStore; //=> true
42593
+ ```
42594
+
42595
+ @private
42596
+ @method factoryTypeInjection
42597
+ @param {String} type
42598
+ @param {String} property
42599
+ @param {String} fullName
42600
+ */
42601
+ factoryTypeInjection: function(type, property, fullName) {
42602
+ if (this.parent) { illegalChildOperation('factoryTypeInjection'); }
42603
+
42604
+ addTypeInjection(this.factoryTypeInjections, type, property, this.normalize(fullName));
42605
+ },
42606
+
42607
+ /**
42608
+ Defines factory injection rules.
42609
+
42610
+ Similar to regular injection rules, but are run against factories, via
42611
+ `Container#lookupFactory`.
42612
+
42613
+ These rules are used to inject objects onto factories when they
42614
+ are looked up.
42615
+
42616
+ Two forms of injections are possible:
42617
+
42618
+ * Injecting one fullName on another fullName
42619
+ * Injecting one fullName on a type
42620
+
42621
+ Example:
42622
+
42623
+ ```javascript
42624
+ var container = new Container();
42625
+
42626
+ container.register('store:main', Store);
42627
+ container.register('store:secondary', OtherStore);
42628
+ container.register('model:user', User);
42629
+ container.register('model:post', Post);
42630
+
42631
+ // injecting one fullName on another type
42632
+ container.factoryInjection('model', 'store', 'store:main');
42633
+
42634
+ // injecting one fullName on another fullName
42635
+ container.factoryInjection('model:post', 'secondaryStore', 'store:secondary');
42636
+
42637
+ var UserFactory = container.lookupFactory('model:user');
42638
+ var PostFactory = container.lookupFactory('model:post');
42639
+ var store = container.lookup('store:main');
42640
+
42641
+ UserFactory.store instanceof Store; //=> true
42642
+ UserFactory.secondaryStore instanceof OtherStore; //=> false
42643
+
42644
+ PostFactory.store instanceof Store; //=> true
42645
+ PostFactory.secondaryStore instanceof OtherStore; //=> true
42646
+
42647
+ // and both models share the same source instance
42648
+ UserFactory.store === PostFactory.store; //=> true
42649
+ ```
42650
+
42651
+ @method factoryInjection
42652
+ @param {String} factoryName
42653
+ @param {String} property
42654
+ @param {String} injectionName
42655
+ */
42656
+ factoryInjection: function(fullName, property, injectionName) {
42657
+ if (this.parent) { illegalChildOperation('injection'); }
42658
+
42659
+ var normalizedName = this.normalize(fullName);
42660
+ var normalizedInjectionName = this.normalize(injectionName);
42661
+
42662
+ validateFullName(injectionName);
42663
+
42664
+ if (fullName.indexOf(':') === -1) {
42665
+ return this.factoryTypeInjection(normalizedName, property, normalizedInjectionName);
42666
+ }
42667
+
42668
+ validateFullName(fullName);
42669
+
42670
+ addInjection(this.factoryInjections, normalizedName, property, normalizedInjectionName);
42671
+ },
42672
+
42673
+ /**
42674
+ A depth first traversal, destroying the container, its descendant containers and all
42675
+ their managed objects.
42676
+
42677
+ @method destroy
42678
+ */
42679
+ destroy: function() {
42680
+ for (var i=0, l=this.children.length; i<l; i++) {
42681
+ this.children[i].destroy();
42682
+ }
42683
+
42684
+ this.children = [];
42685
+
42686
+ eachDestroyable(this, function(item) {
42687
+ item.destroy();
42688
+ });
42689
+
42690
+ this.parent = undefined;
42691
+ this.isDestroyed = true;
42692
+ },
42693
+
42694
+ /**
42695
+ @method reset
42696
+ */
42697
+ reset: function() {
42698
+ for (var i=0, l=this.children.length; i<l; i++) {
42699
+ resetCache(this.children[i]);
42700
+ }
42701
+ resetCache(this);
42702
+ }
42703
+ };
42704
+
42705
+ function has(container, fullName){
42706
+ if (container.cache.has(fullName)) {
42707
+ return true;
42708
+ }
42709
+
42710
+ return !!container.resolve(fullName);
42711
+ }
42712
+
42713
+ function lookup(container, fullName, options) {
42714
+ options = options || {};
42715
+
42716
+ if (container.cache.has(fullName) && options.singleton !== false) {
42717
+ return container.cache.get(fullName);
42718
+ }
42719
+
42720
+ var value = instantiate(container, fullName);
42721
+
42722
+ if (value === undefined) { return; }
42723
+
42724
+ if (isSingleton(container, fullName) && options.singleton !== false) {
42725
+ container.cache.set(fullName, value);
42726
+ }
42727
+
42728
+ return value;
42729
+ }
42730
+
42731
+ function illegalChildOperation(operation) {
42732
+ throw new Error(operation + " is not currently supported on child containers");
42733
+ }
42734
+
42735
+ function isSingleton(container, fullName) {
42736
+ var singleton = option(container, fullName, 'singleton');
42737
+
42738
+ return singleton !== false;
42739
+ }
42740
+
42741
+ function buildInjections(container, injections) {
42742
+ var hash = {};
42743
+
42744
+ if (!injections) { return hash; }
42745
+
42746
+ var injection, injectable;
42747
+
42748
+ for (var i=0, l=injections.length; i<l; i++) {
42749
+ injection = injections[i];
42750
+ injectable = lookup(container, injection.fullName);
42751
+
42752
+ if (injectable !== undefined) {
42753
+ hash[injection.property] = injectable;
42754
+ } else {
42755
+ throw new Error('Attempting to inject an unknown injection: `' + injection.fullName + '`');
42756
+ }
42757
+ }
42758
+
42759
+ return hash;
42760
+ }
42761
+
42762
+ function option(container, fullName, optionName) {
42763
+ var options = container._options.get(fullName);
42764
+
42765
+ if (options && options[optionName] !== undefined) {
42766
+ return options[optionName];
42767
+ }
42768
+
42769
+ var type = fullName.split(":")[0];
42770
+ options = container._typeOptions.get(type);
42771
+
42772
+ if (options) {
42773
+ return options[optionName];
42774
+ }
42775
+ }
42776
+
42777
+ function factoryFor(container, fullName) {
42778
+ var name = fullName;
42779
+ var factory = container.resolve(name);
42780
+ var injectedFactory;
42781
+ var cache = container.factoryCache;
42782
+ var type = fullName.split(":")[0];
42783
+
42784
+ if (factory === undefined) { return; }
42785
+
42786
+ if (cache.has(fullName)) {
42787
+ return cache.get(fullName);
42788
+ }
42789
+
42790
+ if (!factory || typeof factory.extend !== 'function' || (!Ember.MODEL_FACTORY_INJECTIONS && type === 'model')) {
42791
+ // TODO: think about a 'safe' merge style extension
42792
+ // for now just fallback to create time injection
42793
+ return factory;
42794
+ } else {
42795
+
42796
+ var injections = injectionsFor(container, fullName);
42797
+ var factoryInjections = factoryInjectionsFor(container, fullName);
42798
+
42799
+ factoryInjections._toString = container.makeToString(factory, fullName);
42800
+
42801
+ injectedFactory = factory.extend(injections);
42802
+ injectedFactory.reopenClass(factoryInjections);
42803
+
42804
+ cache.set(fullName, injectedFactory);
42805
+
42806
+ return injectedFactory;
42807
+ }
42808
+ }
42809
+
42810
+ function injectionsFor(container, fullName) {
42811
+ var splitName = fullName.split(":"),
42812
+ type = splitName[0],
42813
+ injections = [];
42814
+
42815
+ injections = injections.concat(container.typeInjections.get(type) || []);
42816
+ injections = injections.concat(container.injections[fullName] || []);
42817
+
42818
+ injections = buildInjections(container, injections);
42819
+ injections._debugContainerKey = fullName;
42820
+ injections.container = container;
42821
+
42822
+ return injections;
42823
+ }
42824
+
42825
+ function factoryInjectionsFor(container, fullName) {
42826
+ var splitName = fullName.split(":"),
42827
+ type = splitName[0],
42828
+ factoryInjections = [];
42829
+
42830
+ factoryInjections = factoryInjections.concat(container.factoryTypeInjections.get(type) || []);
42831
+ factoryInjections = factoryInjections.concat(container.factoryInjections[fullName] || []);
42832
+
42833
+ factoryInjections = buildInjections(container, factoryInjections);
42834
+ factoryInjections._debugContainerKey = fullName;
42835
+
42836
+ return factoryInjections;
42837
+ }
42838
+
42839
+ function instantiate(container, fullName) {
42840
+ var factory = factoryFor(container, fullName);
42841
+
42842
+ if (option(container, fullName, 'instantiate') === false) {
42843
+ return factory;
42844
+ }
42845
+
42846
+ if (factory) {
42847
+ if (typeof factory.extend === 'function') {
42848
+ // assume the factory was extendable and is already injected
42849
+ return factory.create();
42850
+ } else {
42851
+ // assume the factory was extendable
42852
+ // to create time injections
42853
+ // TODO: support new'ing for instantiation and merge injections for pure JS Functions
42854
+ return factory.create(injectionsFor(container, fullName));
42855
+ }
42856
+ }
42857
+ }
42858
+
42859
+ function eachDestroyable(container, callback) {
42860
+ container.cache.eachLocal(function(key, value) {
42861
+ if (option(container, key, 'instantiate') === false) { return; }
42862
+ callback(value);
42863
+ });
42864
+ }
42865
+
42866
+ function resetCache(container) {
42867
+ container.cache.eachLocal(function(key, value) {
42868
+ if (option(container, key, 'instantiate') === false) { return; }
42869
+ value.destroy();
42870
+ });
42871
+ container.cache.dict = {};
42872
+ }
42873
+
42874
+ function addTypeInjection(rules, type, property, fullName) {
42875
+ var injections = rules.get(type);
42876
+
42877
+ if (!injections) {
42878
+ injections = [];
42879
+ rules.set(type, injections);
42880
+ }
42881
+
42882
+ injections.push({
42883
+ property: property,
42884
+ fullName: fullName
42885
+ });
42886
+ }
42887
+
42888
+ var VALID_FULL_NAME_REGEXP = /^[^:]+.+:[^:]+$/;
42889
+ function validateFullName(fullName) {
42890
+ if (!VALID_FULL_NAME_REGEXP.test(fullName)) {
42891
+ throw new TypeError('Invalid Fullname, expected: `type:name` got: ' + fullName);
42892
+ }
42893
+ }
42894
+
42895
+ function addInjection(rules, factoryName, property, injectionName) {
42896
+ var injections = rules[factoryName] = rules[factoryName] || [];
42897
+ injections.push({ property: property, fullName: injectionName });
42898
+ }
42899
+
42900
+ __exports__["default"] = Container;
42901
+ });define("ember-runtime/ext/rsvp",
42902
+ ["ember-metal/core","ember-metal/logger","exports"],
42903
+ function(__dependency1__, __dependency2__, __exports__) {
42904
+ "use strict";
42905
+ var Ember = __dependency1__["default"];
42906
+ var Logger = __dependency2__["default"];
42907
+
42908
+ var RSVP = requireModule("rsvp");
42909
+ var Test, testModuleName = 'ember-testing/test';
42910
+
42911
+ RSVP.onerrorDefault = function(error) {
42912
+ if (error instanceof Error) {
42913
+ if (Ember.testing) {
42914
+ // ES6TODO: remove when possible
42915
+ if (!Test && Ember.__loader.registry[testModuleName]) {
42916
+ Test = requireModule(testModuleName)['default'];
42917
+ }
42918
+
42919
+ if (Test && Test.adapter) {
42920
+ Test.adapter.exception(error);
42921
+ } else {
42922
+ throw error;
42923
+ }
42924
+ } else {
42925
+ Logger.error(error.stack);
42926
+ Ember.assert(error, false);
42927
+ }
42928
+ }
42929
+ };
42930
+
42931
+ RSVP.on('error', RSVP.onerrorDefault);
42932
+
42933
+ __exports__["default"] = RSVP;
42934
+ });define("ember-runtime/system/container",
42935
+ ["ember-metal/property_set","exports"],
42936
+ function(__dependency1__, __exports__) {
42937
+ "use strict";
42938
+ var set = __dependency1__["default"];
42939
+
42940
+ var Container = requireModule('container')["default"];
42941
+ Container.set = set;
42942
+
42943
+ __exports__["default"] = Container;
42944
+ });(function() {
41765
42945
  /**
41766
42946
  @module ember
41767
42947
  @submodule ember-testing
@@ -41894,11 +43074,11 @@ Ember.Test = {
41894
43074
 
41895
43075
  ```javascript
41896
43076
  Ember.Test.onInjectHelpers(function() {
41897
- Ember.$(document).ajaxStart(function() {
43077
+ Ember.$(document).ajaxSend(function() {
41898
43078
  Test.pendingAjaxRequests++;
41899
43079
  });
41900
43080
 
41901
- Ember.$(document).ajaxStop(function() {
43081
+ Ember.$(document).ajaxComplete(function() {
41902
43082
  Test.pendingAjaxRequests--;
41903
43083
  });
41904
43084
  });
@@ -42261,6 +43441,53 @@ function isolate(fn, val) {
42261
43441
 
42262
43442
 
42263
43443
 
43444
+ (function() {
43445
+ var Test = Ember.Test;
43446
+
43447
+ function incrementAjaxPendingRequests(){
43448
+ Test.pendingAjaxRequests++;
43449
+ }
43450
+
43451
+ function decrementAjaxPendingRequests(){
43452
+ Ember.assert("An ajaxComplete event which would cause the number of pending AJAX " +
43453
+ "requests to be negative has been triggered. This is most likely " +
43454
+ "caused by AJAX events that were started before calling " +
43455
+ "`injectTestHelpers()`.", Test.pendingAjaxRequests !== 0);
43456
+ Test.pendingAjaxRequests--;
43457
+ }
43458
+
43459
+ /**
43460
+ Sets Ember up for testing. This is useful to perform
43461
+ basic setup steps in order to unit test.
43462
+
43463
+ Use `App.setupForTesting` to perform integration tests (full
43464
+ application testing).
43465
+
43466
+ @method setupForTesting
43467
+ @namespace Ember
43468
+ */
43469
+ Ember.setupForTesting = function() {
43470
+ Ember.testing = true;
43471
+
43472
+ // if adapter is not manually set default to QUnit
43473
+ if (!Ember.Test.adapter) {
43474
+ Ember.Test.adapter = Ember.Test.QUnitAdapter.create();
43475
+ }
43476
+
43477
+ if (!Test.pendingAjaxRequests) {
43478
+ Test.pendingAjaxRequests = 0;
43479
+ }
43480
+
43481
+ Ember.$(document).off('ajaxSend', incrementAjaxPendingRequests);
43482
+ Ember.$(document).off('ajaxComplete', decrementAjaxPendingRequests);
43483
+ Ember.$(document).on('ajaxSend', incrementAjaxPendingRequests);
43484
+ Ember.$(document).on('ajaxComplete', decrementAjaxPendingRequests);
43485
+ };
43486
+
43487
+ })();
43488
+
43489
+
43490
+
42264
43491
  (function() {
42265
43492
  Ember.onLoad('Ember.Application', function(Application) {
42266
43493
  Application.initializer({
@@ -42429,22 +43656,6 @@ var get = Ember.get,
42429
43656
  asyncHelper = Test.registerAsyncHelper,
42430
43657
  countAsync = 0;
42431
43658
 
42432
- Test.pendingAjaxRequests = 0;
42433
-
42434
- Test.onInjectHelpers(function() {
42435
- Ember.$(document).ajaxStart(function() {
42436
- Test.pendingAjaxRequests++;
42437
- });
42438
-
42439
- Ember.$(document).ajaxStop(function() {
42440
- Ember.assert("An ajaxStop event which would cause the number of pending AJAX " +
42441
- "requests to be negative has been triggered. This is most likely " +
42442
- "caused by AJAX events that were started before calling " +
42443
- "`injectTestHelpers()`.", Test.pendingAjaxRequests !== 0);
42444
- Test.pendingAjaxRequests--;
42445
- });
42446
- });
42447
-
42448
43659
  function currentRouteName(app){
42449
43660
  var appController = app.__container__.lookup('controller:application');
42450
43661
 
@@ -42530,7 +43741,7 @@ function keyEvent(app, selector, context, type, keyCode) {
42530
43741
  context = null;
42531
43742
  }
42532
43743
 
42533
- return triggerEvent(app, selector, context, type, { keyCode: keyCode });
43744
+ return triggerEvent(app, selector, context, type, { keyCode: keyCode, which: keyCode });
42534
43745
  }
42535
43746
 
42536
43747
  function fillIn(app, selector, context, text) {