blogelator 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
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) {