social_networking 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (731) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +84 -0
  4. data/Rakefile +66 -0
  5. data/app/assets/images/social_networking/_profile_icon_admin.png +0 -0
  6. data/app/assets/images/social_networking/profile_icon_art.png +0 -0
  7. data/app/assets/images/social_networking/profile_icon_bike.png +0 -0
  8. data/app/assets/images/social_networking/profile_icon_bolt.png +0 -0
  9. data/app/assets/images/social_networking/profile_icon_bookshelf.png +0 -0
  10. data/app/assets/images/social_networking/profile_icon_die.png +0 -0
  11. data/app/assets/images/social_networking/profile_icon_fashion.png +0 -0
  12. data/app/assets/images/social_networking/profile_icon_flower.png +0 -0
  13. data/app/assets/images/social_networking/profile_icon_genius.png +0 -0
  14. data/app/assets/images/social_networking/profile_icon_heart.png +0 -0
  15. data/app/assets/images/social_networking/profile_icon_helicopter.png +0 -0
  16. data/app/assets/images/social_networking/profile_icon_hourglass.png +0 -0
  17. data/app/assets/images/social_networking/profile_icon_keyboard.png +0 -0
  18. data/app/assets/images/social_networking/profile_icon_magnifyingglass.png +0 -0
  19. data/app/assets/images/social_networking/profile_icon_megaphone2.png +0 -0
  20. data/app/assets/images/social_networking/profile_icon_microphone.png +0 -0
  21. data/app/assets/images/social_networking/profile_icon_music.png +0 -0
  22. data/app/assets/images/social_networking/profile_icon_paintbrush2.png +0 -0
  23. data/app/assets/images/social_networking/profile_icon_plane.png +0 -0
  24. data/app/assets/images/social_networking/profile_icon_polaroidcamera.png +0 -0
  25. data/app/assets/images/social_networking/profile_icon_present.png +0 -0
  26. data/app/assets/images/social_networking/profile_icon_questionmark.png +0 -0
  27. data/app/assets/images/social_networking/profile_icon_recycle.png +0 -0
  28. data/app/assets/images/social_networking/profile_icon_scooter.png +0 -0
  29. data/app/assets/images/social_networking/profile_icon_shipwheel.png +0 -0
  30. data/app/assets/images/social_networking/profile_icon_shoeprints.png +0 -0
  31. data/app/assets/images/social_networking/profile_icon_star.png +0 -0
  32. data/app/assets/images/social_networking/profile_icon_travelerbag.png +0 -0
  33. data/app/assets/images/social_networking/profile_icon_ufo.png +0 -0
  34. data/app/assets/images/social_networking/profile_icon_umbrella.png +0 -0
  35. data/app/assets/images/social_networking/profile_icon_weather.png +0 -0
  36. data/app/assets/javascripts/notices.js +92 -0
  37. data/app/assets/javascripts/shared/new_shareable_form.js.erb +28 -0
  38. data/app/assets/javascripts/social_networking/app.js +15 -0
  39. data/app/assets/javascripts/social_networking/controllers/goal-controller.js +166 -0
  40. data/app/assets/javascripts/social_networking/controllers/home-controller.js +260 -0
  41. data/app/assets/javascripts/social_networking/controllers/nudge-controller.js +19 -0
  42. data/app/assets/javascripts/social_networking/controllers/participant-controller.js +34 -0
  43. data/app/assets/javascripts/social_networking/controllers/participants-controller.js +17 -0
  44. data/app/assets/javascripts/social_networking/controllers/profile-answer-controller.js +104 -0
  45. data/app/assets/javascripts/social_networking/controllers/profile-controller.js +55 -0
  46. data/app/assets/javascripts/social_networking/controllers/profile-question-controller.js +21 -0
  47. data/app/assets/javascripts/social_networking/controllers/profile-questions-controller.js +14 -0
  48. data/app/assets/javascripts/social_networking/controllers/profiles-controller.js +17 -0
  49. data/app/assets/javascripts/social_networking/directives.js +29 -0
  50. data/app/assets/javascripts/social_networking/filters.js +15 -0
  51. data/app/assets/javascripts/social_networking/resources/comments-resource.js +26 -0
  52. data/app/assets/javascripts/social_networking/resources/goals-resource.js +39 -0
  53. data/app/assets/javascripts/social_networking/resources/likes-resource.js +26 -0
  54. data/app/assets/javascripts/social_networking/resources/nudges-resource.js +27 -0
  55. data/app/assets/javascripts/social_networking/resources/on-your-mind-resource.js +29 -0
  56. data/app/assets/javascripts/social_networking/resources/participants-resource.js +23 -0
  57. data/app/assets/javascripts/social_networking/resources/profile-answer-resource.js +44 -0
  58. data/app/assets/javascripts/social_networking/resources/profiles-resource.js +35 -0
  59. data/app/assets/javascripts/social_networking/services/Alert.js +29 -0
  60. data/app/assets/javascripts/social_networking/services/focus-service.js +15 -0
  61. data/app/assets/javascripts/social_networking/services/goal-tool-service.js +75 -0
  62. data/app/assets/javascripts/social_networking/services/home-tool-service.js +89 -0
  63. data/app/assets/javascripts/social_networking/services/profile-answer-tool-service.js +49 -0
  64. data/app/assets/javascripts/social_networking.js +10 -0
  65. data/app/assets/stylesheets/social_networking/base.css.scss +140 -0
  66. data/app/assets/stylesheets/social_networking.css +1 -0
  67. data/app/controllers/concerns/sms.rb +28 -0
  68. data/app/controllers/social_networking/application_controller.rb +29 -0
  69. data/app/controllers/social_networking/comments_controller.rb +73 -0
  70. data/app/controllers/social_networking/concerns/invalid_auth_token.rb +21 -0
  71. data/app/controllers/social_networking/concerns/profile_page/feed.rb +72 -0
  72. data/app/controllers/social_networking/concerns/show_feed.rb +44 -0
  73. data/app/controllers/social_networking/goals_controller.rb +83 -0
  74. data/app/controllers/social_networking/homes_controller.rb +12 -0
  75. data/app/controllers/social_networking/likes_controller.rb +76 -0
  76. data/app/controllers/social_networking/nudges_controller.rb +64 -0
  77. data/app/controllers/social_networking/on_the_mind_statements_controller.rb +30 -0
  78. data/app/controllers/social_networking/participants_controller.rb +28 -0
  79. data/app/controllers/social_networking/profile_answers_controller.rb +79 -0
  80. data/app/controllers/social_networking/profile_icon_controller.rb +26 -0
  81. data/app/controllers/social_networking/profile_pages_controller.rb +87 -0
  82. data/app/controllers/social_networking/profiles_controller.rb +53 -0
  83. data/app/controllers/social_networking/shared_item_controller.rb +95 -0
  84. data/app/controllers/social_networking/templates_controller.rb +14 -0
  85. data/app/mailers/social_networking/mailer.rb +9 -0
  86. data/app/models/social_networking/action_item.rb +14 -0
  87. data/app/models/social_networking/comment.rb +20 -0
  88. data/app/models/social_networking/concerns/membership.rb +27 -0
  89. data/app/models/social_networking/concerns/participant.rb +43 -0
  90. data/app/models/social_networking/goal.rb +91 -0
  91. data/app/models/social_networking/like.rb +37 -0
  92. data/app/models/social_networking/notification.rb +42 -0
  93. data/app/models/social_networking/nudge.rb +38 -0
  94. data/app/models/social_networking/on_the_mind_statement.rb +26 -0
  95. data/app/models/social_networking/profile.rb +88 -0
  96. data/app/models/social_networking/profile_answer.rb +17 -0
  97. data/app/models/social_networking/profile_question.rb +14 -0
  98. data/app/models/social_networking/reports/comment.rb +31 -0
  99. data/app/models/social_networking/reports/goal.rb +32 -0
  100. data/app/models/social_networking/reports/like.rb +35 -0
  101. data/app/models/social_networking/reports/nudge.rb +27 -0
  102. data/app/models/social_networking/reports/off_topic_post.rb +27 -0
  103. data/app/models/social_networking/reports/tool_share.rb +27 -0
  104. data/app/models/social_networking/serializers/comment_serializer.rb +18 -0
  105. data/app/models/social_networking/serializers/goal_serializer.rb +23 -0
  106. data/app/models/social_networking/serializers/like_serializer.rb +18 -0
  107. data/app/models/social_networking/serializers/nudge_serializer.rb +24 -0
  108. data/app/models/social_networking/serializers/on_the_mind_statement_serializer.rb +21 -0
  109. data/app/models/social_networking/serializers/participant_serializer.rb +15 -0
  110. data/app/models/social_networking/serializers/profile_answer_serializer.rb +16 -0
  111. data/app/models/social_networking/serializers/profile_question_serializer.rb +13 -0
  112. data/app/models/social_networking/serializers/profile_serializer.rb +28 -0
  113. data/app/models/social_networking/serializers/serializer.rb +16 -0
  114. data/app/models/social_networking/serializers/shared_item_serializer.rb +38 -0
  115. data/app/models/social_networking/shareable.rb +17 -0
  116. data/app/models/social_networking/shared_item.rb +21 -0
  117. data/app/views/social_networking/coach/patient_dashboards/tables/_comments.html.erb +57 -0
  118. data/app/views/social_networking/coach/patient_dashboards/tables/_goals.html.erb +67 -0
  119. data/app/views/social_networking/coach/patient_dashboards/tables/_likes.html.erb +57 -0
  120. data/app/views/social_networking/coach/patient_dashboards/tables/_on_my_mind_statements.html.erb +62 -0
  121. data/app/views/social_networking/coach/patient_dashboards/tables/_social_summary_totals.html.erb +39 -0
  122. data/app/views/social_networking/coach/patient_dashboards/tables/nudges/_initiator_nudges.html.erb +22 -0
  123. data/app/views/social_networking/coach/patient_dashboards/tables/nudges/_nudges.html.erb +5 -0
  124. data/app/views/social_networking/coach/patient_dashboards/tables/nudges/_recipient_nudges.html.erb +22 -0
  125. data/app/views/social_networking/goals/tool.html.erb +116 -0
  126. data/app/views/social_networking/homes/_action_items.html.erb +13 -0
  127. data/app/views/social_networking/homes/show.html.erb +64 -0
  128. data/app/views/social_networking/mailer/notify.html.erb +11 -0
  129. data/app/views/social_networking/profile_pages/_profile_questions.html.erb +79 -0
  130. data/app/views/social_networking/profile_pages/index.html.erb +27 -0
  131. data/app/views/social_networking/profile_pages/show.html.erb +106 -0
  132. data/app/views/social_networking/shared/_comment_form.html.erb +25 -0
  133. data/app/views/social_networking/shared/_infinite_feed.html.erb +94 -0
  134. data/app/views/social_networking/shared/_nav.html.erb +11 -0
  135. data/app/views/social_networking/shared/_sharing_fields.html +11 -0
  136. data/app/views/social_networking/templates/social_networking/goals/_summary.html +1 -0
  137. data/config/brakeman.ignore +25 -0
  138. data/config/brakeman.yml +0 -0
  139. data/config/initializers/datetime_formats.rb +5 -0
  140. data/config/initializers/think_feel_do_dashboard.rb +2 -0
  141. data/config/routes.rb +25 -0
  142. data/db/migrate/20140827154926_create_social_networking_nudges.rb +40 -0
  143. data/db/migrate/20140827154939_create_social_networking_likes.rb +29 -0
  144. data/db/migrate/20140827154953_create_social_networking_comments.rb +30 -0
  145. data/db/migrate/20140904201719_create_social_networking_goals.rb +31 -0
  146. data/db/migrate/20140910123000_create_social_networking_shared_items.rb +11 -0
  147. data/db/migrate/20140911193832_create_social_networking_on_the_mind_statements.rb +28 -0
  148. data/db/migrate/20140915185648_create_social_networking_profiles.rb +30 -0
  149. data/db/migrate/20140915190627_create_social_networking_profile_questions.rb +14 -0
  150. data/db/migrate/20140915190633_create_social_networking_profile_answers.rb +31 -0
  151. data/db/migrate/20140916163621_add_profile_to_social_networking_profile_answers.rb +23 -0
  152. data/db/migrate/20140917151905_populate_profiles_for_existing_participants.rb +9 -0
  153. data/db/migrate/20140930141007_add_unique_constraint_to_profile_answers.rb +8 -0
  154. data/db/migrate/20141001130941_drop_participant_id_from_shared_items.rb +6 -0
  155. data/db/migrate/20141003191233_add_action_type_to_shared_items.rb +5 -0
  156. data/db/migrate/20141006200325_add_item_label_to_shared_items.rb +5 -0
  157. data/db/migrate/20141007141541_add_uniqueness_constraint_to_likes.rb +8 -0
  158. data/db/migrate/20141008150325_add_icon_name_to_profiles.rb +5 -0
  159. data/db/migrate/20141015222822_remove_unused_profile_question_columns.rb +7 -0
  160. data/db/migrate/20141016015415_seed_profile_questions.rb +16 -0
  161. data/db/migrate/20141016164443_remove_active_from_profiles.rb +5 -0
  162. data/db/migrate/20141106102625_add_active_to_profiles.rb +5 -0
  163. data/db/migrate/20141106104713_seed_active_field_of_profiles.rb +9 -0
  164. data/db/migrate/20141223203142_add_participant_id_to_social_networking_shared_items.rb +6 -0
  165. data/db/migrate/20141223203721_add_participant_id_to_social_networking_shared_items_data_migration.rb +9 -0
  166. data/db/migrate/20150317173959_add_completed_at_to_goals.rb +5 -0
  167. data/db/migrate/20150317174425_populate_completed_at_in_goals.rb +7 -0
  168. data/db/migrate/20150317180057_remove_is_completed_from_goals.rb +5 -0
  169. data/db/migrate/20150318133032_add_deleted_at_to_social_networking_goals.rb +5 -0
  170. data/db/migrate/20150318133127_populate_deleted_at_in_social_networking_goals.rb +7 -0
  171. data/db/migrate/20150318133353_remove_is_deleted_from_social_networking_goals.rb +5 -0
  172. data/db/migrate/20150327143224_add_index_to_comment_items_and_item_types.rb +5 -0
  173. data/db/migrate/20150327143244_add_index_to_like_item_id_and_item_types.rb +5 -0
  174. data/db/migrate/20150327185721_add_indices_to_on_the_mind_statements.rb +6 -0
  175. data/db/migrate/20150327185856_add_indices_to_nudges.rb +7 -0
  176. data/db/migrate/20150327185919_add_indices_to_shared_items.rb +5 -0
  177. data/db/migrate/20151211204425_change_column_default_social_networking_profiles_active_to_false.rb +9 -0
  178. data/lib/social_networking/engine.rb +29 -0
  179. data/lib/social_networking/version.rb +4 -0
  180. data/lib/social_networking.rb +5 -0
  181. data/lib/tasks/seed.rake +17 -0
  182. data/lib/tasks/social_networking_tasks.rake +4 -0
  183. data/spec/controllers/social_networking/comments_controller_spec.rb +139 -0
  184. data/spec/controllers/social_networking/concerns/profile_page/feed_spec.rb +57 -0
  185. data/spec/controllers/social_networking/concerns/show_feed_spec.rb +46 -0
  186. data/spec/controllers/social_networking/goals_controller_spec.rb +178 -0
  187. data/spec/controllers/social_networking/likes_controller_spec.rb +152 -0
  188. data/spec/controllers/social_networking/nudges_controller_spec.rb +88 -0
  189. data/spec/controllers/social_networking/on_the_mind_statements_controller_spec.rb +61 -0
  190. data/spec/controllers/social_networking/participants_controller_spec.rb +67 -0
  191. data/spec/controllers/social_networking/profile_answers_controller_spec.rb +95 -0
  192. data/spec/controllers/social_networking/profile_pages_controller_spec.rb +57 -0
  193. data/spec/controllers/social_networking/profiles_controller_spec.rb +45 -0
  194. data/spec/controllers/social_networking/shared_item_controller_spec.rb +69 -0
  195. data/spec/dummy/README.rdoc +28 -0
  196. data/spec/dummy/Rakefile +6 -0
  197. data/spec/dummy/app/assets/images/profile_icon_art.png +0 -0
  198. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  199. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  200. data/spec/dummy/app/controllers/application_controller.rb +11 -0
  201. data/spec/dummy/app/helpers/application_helper.rb +3 -0
  202. data/spec/dummy/app/models/arm.rb +17 -0
  203. data/spec/dummy/app/models/membership.rb +3 -0
  204. data/spec/dummy/app/models/participant.rb +41 -0
  205. data/spec/dummy/app/views/layouts/tool.html.erb +14 -0
  206. data/spec/dummy/bin/bundle +3 -0
  207. data/spec/dummy/bin/rails +4 -0
  208. data/spec/dummy/bin/rake +4 -0
  209. data/spec/dummy/config/application.rb +29 -0
  210. data/spec/dummy/config/boot.rb +5 -0
  211. data/spec/dummy/config/database.yml +85 -0
  212. data/spec/dummy/config/environment.rb +5 -0
  213. data/spec/dummy/config/environments/development.rb +37 -0
  214. data/spec/dummy/config/environments/production.rb +82 -0
  215. data/spec/dummy/config/environments/test.rb +39 -0
  216. data/spec/dummy/config/initializers/assets.rb +8 -0
  217. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  218. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  219. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  220. data/spec/dummy/config/initializers/inflections.rb +16 -0
  221. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  222. data/spec/dummy/config/initializers/session_store.rb +3 -0
  223. data/spec/dummy/config/initializers/social_networking.rb +3 -0
  224. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  225. data/spec/dummy/config/routes.rb +10 -0
  226. data/spec/dummy/config/secrets.yml +22 -0
  227. data/spec/dummy/config.ru +4 -0
  228. data/spec/dummy/db/migrate/001_create_participants.rb +8 -0
  229. data/spec/dummy/db/migrate/002_add_participant_fields.rb +7 -0
  230. data/spec/dummy/db/migrate/003_create_arms.rb +8 -0
  231. data/spec/dummy/db/migrate/005_add_null_false_to_arms.rb +6 -0
  232. data/spec/dummy/db/migrate/006_add_has_woz_to_arm.rb +5 -0
  233. data/spec/dummy/db/migrate/008_add_studyid_to_participant.rb +5 -0
  234. data/spec/dummy/db/migrate/20150309210518_create_activities.rb +8 -0
  235. data/spec/dummy/db/schema.rb +139 -0
  236. data/spec/dummy/log/test.log +2570 -0
  237. data/spec/dummy/public/404.html +67 -0
  238. data/spec/dummy/public/422.html +67 -0
  239. data/spec/dummy/public/500.html +66 -0
  240. data/spec/dummy/public/favicon.ico +0 -0
  241. data/spec/dummy/spec/javascripts/support/jasmine.yml +50 -0
  242. data/spec/dummy/tmp/cache/assets/test/sprockets/04efcdd6c2cbcd95a83d2aa0d4995f89 +0 -0
  243. data/spec/dummy/tmp/cache/assets/test/sprockets/068970f71c3f6012607d13ba3bd51ca9 +0 -0
  244. data/spec/dummy/tmp/cache/assets/test/sprockets/0929783dcb5284a33ab0ec76571eddd5 +0 -0
  245. data/spec/dummy/tmp/cache/assets/test/sprockets/09ba850e0d40810a04aff16561dfa5f4 +0 -0
  246. data/spec/dummy/tmp/cache/assets/test/sprockets/0d398091cc9b33caf4ff46ecf5b6f74f +0 -0
  247. data/spec/dummy/tmp/cache/assets/test/sprockets/12c8d4b7c877e3cd4448dd1b00707da6 +0 -0
  248. data/spec/dummy/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  249. data/spec/dummy/tmp/cache/assets/test/sprockets/140a7d4959b7b37b837ba2f3cb2bf417 +0 -0
  250. data/spec/dummy/tmp/cache/assets/test/sprockets/154ab867cda672ff401a3baac54b7898 +0 -0
  251. data/spec/dummy/tmp/cache/assets/test/sprockets/1960708584396db585aae1018ea4a492 +0 -0
  252. data/spec/dummy/tmp/cache/assets/test/sprockets/1d762895546253dcc6e595df571755b1 +0 -0
  253. data/spec/dummy/tmp/cache/assets/test/sprockets/1ed203a64343e4f8e85e690a0b5d0f7b +0 -0
  254. data/spec/dummy/tmp/cache/assets/test/sprockets/1f952a4b9967316acf409ccd34e8ec87 +0 -0
  255. data/spec/dummy/tmp/cache/assets/test/sprockets/1f98bd082d83bfdad92f9ba01b42748a +0 -0
  256. data/spec/dummy/tmp/cache/assets/test/sprockets/22350041706de3dfa9cee230711d3ce9 +0 -0
  257. data/spec/dummy/tmp/cache/assets/test/sprockets/22e8cb4f46663942b588d7944872c0f8 +0 -0
  258. data/spec/dummy/tmp/cache/assets/test/sprockets/26231c6b41d81e442dab3d83badd2f01 +0 -0
  259. data/spec/dummy/tmp/cache/assets/test/sprockets/27bf280d84e06ed90ff687aaf602df7e +0 -0
  260. data/spec/dummy/tmp/cache/assets/test/sprockets/2860af66d6d959cb8944e1c48d098de7 +0 -0
  261. data/spec/dummy/tmp/cache/assets/test/sprockets/28a86db440573315a22085e2b4036c0d +0 -0
  262. data/spec/dummy/tmp/cache/assets/test/sprockets/29a82a5df9e04680f19b956360385c06 +0 -0
  263. data/spec/dummy/tmp/cache/assets/test/sprockets/2a1b3faed5adcc0e4e23cdcc0ce8d71d +0 -0
  264. data/spec/dummy/tmp/cache/assets/test/sprockets/2b872bba3bb8628d6f86243fc6e703d7 +0 -0
  265. data/spec/dummy/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  266. data/spec/dummy/tmp/cache/assets/test/sprockets/31531d40219fb9de72f7d435f0bc6d29 +0 -0
  267. data/spec/dummy/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  268. data/spec/dummy/tmp/cache/assets/test/sprockets/367532405470b3383c6a711508e349b2 +0 -0
  269. data/spec/dummy/tmp/cache/assets/test/sprockets/36e5455272bf2b78c940e9852c3ea676 +0 -0
  270. data/spec/dummy/tmp/cache/assets/test/sprockets/39d7bdd486b95f83727fc7fd46c39ae6 +0 -0
  271. data/spec/dummy/tmp/cache/assets/test/sprockets/3a1337d692c1f9efc14d7160cf945f74 +0 -0
  272. data/spec/dummy/tmp/cache/assets/test/sprockets/3d8940a03a5b8bb523a7162b7b7535d0 +0 -0
  273. data/spec/dummy/tmp/cache/assets/test/sprockets/3f1cbf42da24a1936d09dc953596ef9a +0 -0
  274. data/spec/dummy/tmp/cache/assets/test/sprockets/3f4fed38607dba45acf166564186df46 +0 -0
  275. data/spec/dummy/tmp/cache/assets/test/sprockets/40e5c19eafa92b2835c4d00b48700e96 +0 -0
  276. data/spec/dummy/tmp/cache/assets/test/sprockets/43d2fda02ff963968b06162a6d0d374d +0 -0
  277. data/spec/dummy/tmp/cache/assets/test/sprockets/45d1b5e6429202866237cdeb6eeb9f2d +0 -0
  278. data/spec/dummy/tmp/cache/assets/test/sprockets/4b6e85ac359577dc45d431be6388f2a9 +0 -0
  279. data/spec/dummy/tmp/cache/assets/test/sprockets/4be94805fb74f8b23ca1eca6ed0bd632 +0 -0
  280. data/spec/dummy/tmp/cache/assets/test/sprockets/4c5ff0a55b551701250f16d458ba51b4 +0 -0
  281. data/spec/dummy/tmp/cache/assets/test/sprockets/4d20040fe1d18366899d8caf56ec3888 +0 -0
  282. data/spec/dummy/tmp/cache/assets/test/sprockets/4eaff946c4e170a052634f6d0a84b35c +0 -0
  283. data/spec/dummy/tmp/cache/assets/test/sprockets/541a3d0737bf0f253387f6b0b7d6a5d3 +0 -0
  284. data/spec/dummy/tmp/cache/assets/test/sprockets/54c84618c8cf7d618f6151ea3fd88114 +0 -0
  285. data/spec/dummy/tmp/cache/assets/test/sprockets/560219db5ee91f876afa37ef5649c1d0 +0 -0
  286. data/spec/dummy/tmp/cache/assets/test/sprockets/572be3bb00fd4fc080a02f811f61c09a +0 -0
  287. data/spec/dummy/tmp/cache/assets/test/sprockets/5a3c0221e63dd66e2d75cbabc62576bc +0 -0
  288. data/spec/dummy/tmp/cache/assets/test/sprockets/5a6a2bae028eaea543a5bb7f29e24c25 +0 -0
  289. data/spec/dummy/tmp/cache/assets/test/sprockets/5ab8b4a262c6429d3bb919a0afc62f40 +0 -0
  290. data/spec/dummy/tmp/cache/assets/test/sprockets/5b931c69c9352477eca01b56f003018d +0 -0
  291. data/spec/dummy/tmp/cache/assets/test/sprockets/5d1fd03e2719b5fbff6134e24275b83c +0 -0
  292. data/spec/dummy/tmp/cache/assets/test/sprockets/60e0db4345ca1045d312904ddcd94658 +0 -0
  293. data/spec/dummy/tmp/cache/assets/test/sprockets/61bf02a12fdd04ae613f77f050bb0bd2 +0 -0
  294. data/spec/dummy/tmp/cache/assets/test/sprockets/674b2ac4d809a9b90cee9866f1e8bfcc +0 -0
  295. data/spec/dummy/tmp/cache/assets/test/sprockets/68526121585196fdc97da101d374ff68 +0 -0
  296. data/spec/dummy/tmp/cache/assets/test/sprockets/688e7d80db8815937c45205e7ce92dfa +0 -0
  297. data/spec/dummy/tmp/cache/assets/test/sprockets/6c170dcde21cf22cc343417ec75314eb +0 -0
  298. data/spec/dummy/tmp/cache/assets/test/sprockets/6d23eac698f5f61de3f7eecfaeddf1b4 +0 -0
  299. data/spec/dummy/tmp/cache/assets/test/sprockets/6dffaae88127986895220191266ec704 +0 -0
  300. data/spec/dummy/tmp/cache/assets/test/sprockets/6e06d0075cb88c7364b07464dbfb7688 +0 -0
  301. data/spec/dummy/tmp/cache/assets/test/sprockets/728cf3650010e91e100cae55401a5830 +0 -0
  302. data/spec/dummy/tmp/cache/assets/test/sprockets/738cdc373678c00120e4d6d7ffb705de +0 -0
  303. data/spec/dummy/tmp/cache/assets/test/sprockets/7a2651faf6bb6a23a8effe61630fd700 +0 -0
  304. data/spec/dummy/tmp/cache/assets/test/sprockets/7a2a8769a0ec115fed298f3e5c93c1dd +0 -0
  305. data/spec/dummy/tmp/cache/assets/test/sprockets/7c24a1204ee1746620faad54fbed946c +0 -0
  306. data/spec/dummy/tmp/cache/assets/test/sprockets/7cdc143a7c7fe71a82e354732c18246c +0 -0
  307. data/spec/dummy/tmp/cache/assets/test/sprockets/7e999b5ecb325df8accc83846ce2c61f +0 -0
  308. data/spec/dummy/tmp/cache/assets/test/sprockets/895691afa586f44640776cab8bd383c3 +0 -0
  309. data/spec/dummy/tmp/cache/assets/test/sprockets/8bba4a518cf75d823dba13f41424a984 +0 -0
  310. data/spec/dummy/tmp/cache/assets/test/sprockets/8d441dad671546638ccdca205d3536a3 +0 -0
  311. data/spec/dummy/tmp/cache/assets/test/sprockets/8d70cef1f0db4662b80f108e80fe5b65 +0 -0
  312. data/spec/dummy/tmp/cache/assets/test/sprockets/9146770e078971e34abce1d944074147 +0 -0
  313. data/spec/dummy/tmp/cache/assets/test/sprockets/968ae7fc17099ef0889f64467a8cb734 +0 -0
  314. data/spec/dummy/tmp/cache/assets/test/sprockets/976e87a00faf3e5602358931e689d3b0 +0 -0
  315. data/spec/dummy/tmp/cache/assets/test/sprockets/9c1b782e0a2c7965e1ceed6ab002b8ff +0 -0
  316. data/spec/dummy/tmp/cache/assets/test/sprockets/9c2f58c58ad455cd5d72ac9815d59b7b +0 -0
  317. data/spec/dummy/tmp/cache/assets/test/sprockets/9f689c6ccaf5f847ad59b7783174476d +0 -0
  318. data/spec/dummy/tmp/cache/assets/test/sprockets/a1ccfd0880e598423474a088a3119000 +0 -0
  319. data/spec/dummy/tmp/cache/assets/test/sprockets/a23da29f740b4ea1d2379dc17c8326ee +0 -0
  320. data/spec/dummy/tmp/cache/assets/test/sprockets/a2fa117e42b34a2ffea76d5ca64a3f1a +0 -0
  321. data/spec/dummy/tmp/cache/assets/test/sprockets/a3cef68f2556ddb2a541e62c00ae540d +0 -0
  322. data/spec/dummy/tmp/cache/assets/test/sprockets/aa29d745f690c694480985c15036192f +0 -0
  323. data/spec/dummy/tmp/cache/assets/test/sprockets/aa8aab7ae37043423b88c004cb8f4cdf +0 -0
  324. data/spec/dummy/tmp/cache/assets/test/sprockets/aa962b4cca6151633f9ab8ff34d0c520 +0 -0
  325. data/spec/dummy/tmp/cache/assets/test/sprockets/abaa0de19245ca2c68191677f4559081 +0 -0
  326. data/spec/dummy/tmp/cache/assets/test/sprockets/ac2b3b35971cf44d8178142506e5d5b7 +0 -0
  327. data/spec/dummy/tmp/cache/assets/test/sprockets/ae29456edfe833786eea7c66707c7da4 +0 -0
  328. data/spec/dummy/tmp/cache/assets/test/sprockets/af34abeaf80d5a3bda55ab5a4b80b0dd +0 -0
  329. data/spec/dummy/tmp/cache/assets/test/sprockets/b3d20fc65bd5b869e10d000c3d63f169 +0 -0
  330. data/spec/dummy/tmp/cache/assets/test/sprockets/b518c9877d28db6188b4f30f924b8a46 +0 -0
  331. data/spec/dummy/tmp/cache/assets/test/sprockets/b57dd1a0f84680cfbb1dcc22a56d96b8 +0 -0
  332. data/spec/dummy/tmp/cache/assets/test/sprockets/ba4b67f6691a50192907c834193e9d58 +0 -0
  333. data/spec/dummy/tmp/cache/assets/test/sprockets/bd5422edbbd5c7fc844657da6abacea8 +0 -0
  334. data/spec/dummy/tmp/cache/assets/test/sprockets/c2986c18be3b9e2260ebc2ec3f7cf68e +0 -0
  335. data/spec/dummy/tmp/cache/assets/test/sprockets/c3c4b1d5dd84fe989d8d71a0742b7955 +0 -0
  336. data/spec/dummy/tmp/cache/assets/test/sprockets/c3c84972cc743ef7ce0be72922c4d7ef +0 -0
  337. data/spec/dummy/tmp/cache/assets/test/sprockets/c486fa9d8abbb7b603dcba17f821f070 +0 -0
  338. data/spec/dummy/tmp/cache/assets/test/sprockets/c58e24e3502e2b6da83a2d6d6700e15a +0 -0
  339. data/spec/dummy/tmp/cache/assets/test/sprockets/c5f7d3bee0ba777ca31ce3f567809224 +0 -0
  340. data/spec/dummy/tmp/cache/assets/test/sprockets/c947fc97ebed89ec8585c68c9f8390b7 +0 -0
  341. data/spec/dummy/tmp/cache/assets/test/sprockets/ca1466177f0af6f86edc281e3c251a0d +0 -0
  342. data/spec/dummy/tmp/cache/assets/test/sprockets/ca28a1bafeeac300a63b1bbf3ab8c897 +0 -0
  343. data/spec/dummy/tmp/cache/assets/test/sprockets/cacbdab68eef233cd46010371da08c43 +0 -0
  344. data/spec/dummy/tmp/cache/assets/test/sprockets/cc8d8966f154f7c7da3cce88f0b47fc9 +0 -0
  345. data/spec/dummy/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  346. data/spec/dummy/tmp/cache/assets/test/sprockets/d030f0f26628011570880089419315ce +0 -0
  347. data/spec/dummy/tmp/cache/assets/test/sprockets/d1d96db186996c39eb8f5259c167da27 +0 -0
  348. data/spec/dummy/tmp/cache/assets/test/sprockets/d47cfb4b568753042b07393d36056556 +0 -0
  349. data/spec/dummy/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  350. data/spec/dummy/tmp/cache/assets/test/sprockets/d7ac57921e5445b1ccb0e9a0dd15d9b1 +0 -0
  351. data/spec/dummy/tmp/cache/assets/test/sprockets/d8ceef4f981c72fb022ff0c99b2f177d +0 -0
  352. data/spec/dummy/tmp/cache/assets/test/sprockets/d8d46208b57987aafef4d0a7955f4151 +0 -0
  353. data/spec/dummy/tmp/cache/assets/test/sprockets/dafd05a502959ae10f9e01822ab180c8 +0 -0
  354. data/spec/dummy/tmp/cache/assets/test/sprockets/e085fbe577186379fb7420be5bf18607 +0 -0
  355. data/spec/dummy/tmp/cache/assets/test/sprockets/e1a08a4120e766f3afacb299b2e29230 +0 -0
  356. data/spec/dummy/tmp/cache/assets/test/sprockets/e21891a7e3b4ca614f61ed71a863ead0 +0 -0
  357. data/spec/dummy/tmp/cache/assets/test/sprockets/e2dee3d404c3b593266ad9ff6a3735d0 +0 -0
  358. data/spec/dummy/tmp/cache/assets/test/sprockets/e37b8f12cd510587012353ad9d06913a +0 -0
  359. data/spec/dummy/tmp/cache/assets/test/sprockets/e76cbbf8dcf00082c47c01d37044d6d7 +0 -0
  360. data/spec/dummy/tmp/cache/assets/test/sprockets/e7a9e5cc7b084b587c2edcaa960b8e15 +0 -0
  361. data/spec/dummy/tmp/cache/assets/test/sprockets/e8a2ef95023e57ce5c183606a22fd449 +0 -0
  362. data/spec/dummy/tmp/cache/assets/test/sprockets/ebb42cb2d4235b4e1dae3dea9db2e67f +0 -0
  363. data/spec/dummy/tmp/cache/assets/test/sprockets/ec89e89474a7c877cc323153779a9c8a +0 -0
  364. data/spec/dummy/tmp/cache/assets/test/sprockets/f2b564985f4ff06a50afbc400dffd487 +0 -0
  365. data/spec/dummy/tmp/cache/assets/test/sprockets/f4024efb009df86e896190a181da8478 +0 -0
  366. data/spec/dummy/tmp/cache/assets/test/sprockets/f56f31437c53a543d321fadf298f946f +0 -0
  367. data/spec/dummy/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  368. data/spec/dummy/tmp/cache/assets/test/sprockets/fc84963b480f54a41ad1983db1a1474a +0 -0
  369. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/-Kl7eLvnXvAQpHHO0RSxE7GCGE0tSG5KH-OUa6OVtik.cache +1 -0
  370. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/-WU-JqepVF-DTdSlRu6uS8xIVrtSADfFfhDqjqQQedA.cache +1 -0
  371. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/-j1cnxD6WVjsz8CRyaZZNOoh_lze6qj0pOgzaVlR4qs.cache +1 -0
  372. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/-pkorL6LfkzJf0__OamvnwkpHhzdEISIQtyhWteTjNs.cache +0 -0
  373. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/0FOD13MGeTXbv6iHubo9MNlLYMcv9Jb7cUWv-3uU9xw.cache +2 -0
  374. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/0I70zaRtFNDZYHW6TjZiMrISeghHV3u6UoklahKOQrA.cache +0 -0
  375. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/0M7l1lWcLbUw_-2zKwRqbE74S0zPeZCzjjA1mU_H02c.cache +2 -0
  376. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/0hz5HR6RzEgs0jqntLhqM_FHIgeXlBy9JLRxwLre9nA.cache +1 -0
  377. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/11j_zBUWnB_noYdpXX6yTXk83ylkKjCC6x9CUd6tHJI.cache +1 -0
  378. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/1m8-kDbSQWt1HM-BYSKNtW-OrfzNvGGUTJaZ9rNZxwA.cache +2 -0
  379. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/1wTclBfuQl0hyPD9bV1c360UrolsRqSkXwW82TXt60w.cache +0 -0
  380. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/28FMT4a_EiOtu-dpXX3pgYypD248pYbd2-N8LC2AK-k.cache +0 -0
  381. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/2EqlKwzfGGe0jVya_ah5rs9LZyIw-xTAuEgkerY4TOY.cache +0 -0
  382. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/2h2DyYyVNypgZ_X43AvwfBAD0MnoRmclnTf-9zKDHes.cache +0 -0
  383. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/2vMyUMkVHhTF0xlxZ4MR9MfAtifhkXhnNT_yiRyBztI.cache +2 -0
  384. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/36bjILgscvAaTKgrGP7RQne8CVH5XS2KWN5XD3xBnm4.cache +2 -0
  385. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/3e87gYbgeDYaP8698l6nAqE5cMrTGbhRNCrknbLrGJE.cache +0 -0
  386. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/3xV_Wbs0ECPCzZ15J4b-jdz7MgHLwKBPA0XPajF_wfU.cache +1 -0
  387. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/4NrGbarSfwsf0W_ggaGlTw0LKz6B1lFRlPEbNcg0mAo.cache +2 -0
  388. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/4NsobJgC2SmxE8K1j8wfVF8A1saRJpmr2J3Ud-V7QFQ.cache +1 -0
  389. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/4frttnlbfUjitowHOAIeln9xuEFU3RZpqu_PH9IBh1w.cache +3 -0
  390. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/4idVT75AxzWeKPFKRcvjHcrfSG9vLgOh92UCQ0NJhuI.cache +1 -0
  391. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/4merYQ2M1201BAz6XtjFzj5JAews34QuwydGzr2x99s.cache +1 -0
  392. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/58uXxkZLLaPd09smeocWKFQd35od2IRdpcgKBSAibCE.cache +1 -0
  393. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/5Ksy8krRwIia3k3HciPFXChZTc03x3IMdY0dIXbTAxU.cache +1 -0
  394. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/5gfjkEM4e5wWzc-hLf4YfFDda3M8Tq0Mc5l5xglUNXQ.cache +0 -0
  395. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/5mB1_oGW8Dvt0yRzmW6V2Nl7YAg_B1JgatQDDyfIJ-k.cache +3 -0
  396. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/60XhepG7gj3RkZz5kJij1tiOspZ-tYpfDF3x6Op_qIw.cache +1 -0
  397. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/68cGGmmrte-5ECDHO-ncmQwzR-Rh4vD84YHs67Hysh0.cache +1 -0
  398. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/6RHMH5Mbj47VK94CkdISUfhZSvyPg0rlvQ_hEted0fY.cache +1 -0
  399. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/6XbZpmNHcZscIKL-OAohGcM2rGkVzQPtEhgyMvi4lvE.cache +0 -0
  400. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/6ZR1jD36DG0Gg9CH9O9anQhwjsmmJDJqOTl1upPJua8.cache +1 -0
  401. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/6vKulvrY_lwn1VnETAo3w3LkCtomqosV4Ee7g2_Z4fY.cache +0 -0
  402. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/77vKYy51Jr9VFLeSL5t8N9UZGLGyC6dgKU-sDqYrFGM.cache +1 -0
  403. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/7YE-1oMQQdcewPg7d072ky3wl5aFFkmeu2WhbSne9xA.cache +2 -0
  404. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/7x_7AKaqtE4SJtFhwXw-R_NtVDJ5uiTBO5-_Symqsv8.cache +0 -0
  405. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/88L_9W2TxasY7ylZUgtG8QrPeh6H0FFv72G4Ucm0P9Q.cache +1 -0
  406. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/89t5I0yd6cdBsdVcuaWGTFXCOZ32tkLZx358JHi77Ks.cache +1 -0
  407. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/8EllqE_b9MFGDmrvnO6pKhmhMfTtUOJAlNlvAC_t0vc.cache +1 -0
  408. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/8oJB5cwVs0UjcszfU9BSogRPzpYwFvGPvKl4cync7qs.cache +1 -0
  409. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/96dgkJ06tOBt34tT84AvWgnpGkNwTHa4nlPDRkNtNkE.cache +1 -0
  410. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/9U8iQEEqiOPuxSGeGN-WhxCF73z-GD8odYXs2_HZ2iA.cache +1 -0
  411. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/9ajfYu2m83ZNU-xoicMF1F1IxW3QBovL2ZVo76FyKwU.cache +1 -0
  412. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/9auLnF2MX77my31UDbHJ4PDw3v2XXC3uTwN2qYxtofw.cache +0 -0
  413. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/9dMFObFT2EnVycRFfQT3llUJhfXimv4qfev51SuAvDw.cache +1 -0
  414. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/AINQZl10AtaJqHZyyNZdVqmuCjRXMHBoF3uVRzTV5D0.cache +1 -0
  415. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/AlNYO1xK40rhHfFyRYGxXTHHJDg20nuatO1w4_dHWag.cache +1 -0
  416. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/Amf6TOEJj52Y_q8SFAO2_alayaDbHjYmyCY4xFH5pRw.cache +0 -0
  417. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/AzFhw57UjRaXPes4x1rH89UL4dK1tJ4lmI-MGunACZI.cache +2 -0
  418. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/BMNEGqDE_k0Y_ZLiyGs2U1rGheuZkRbcY3h9j1zucxQ.cache +2 -0
  419. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/BPYjK4i8yqdGrlDJYymCpvtdq0Snmnwa2k2qaS_7t14.cache +0 -0
  420. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/BjTft4o-tKWvIPKtvf5AkkAUPLObFIT_do6Jm7tVKkQ.cache +1 -0
  421. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/CCpDzdG3W13gZeA5EFZRfTgO-ThiqqfRcOTz286AtH0.cache +1 -0
  422. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/Ca4arIhUzvVjosagcB8jsaBlFEdzjJpGfb6jjeLgkxE.cache +1 -0
  423. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/CcBydNOQmljUdbJuOzv105nCjVkTtnHoTT-r6kiPLk4.cache +0 -0
  424. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/CcTGAtIJmw1CnyheeZBIpUBzQ9mMEEp576BgKx6c8VQ.cache +2 -0
  425. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/Chi2RCxRj8eEfPJxEJddjhdgReDg4bUY3dMPiKq2PWY.cache +0 -0
  426. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/Cm5YNa35Mpa_Cg8f1h-NnORBopbu1sgkf9pHJwNelk4.cache +2 -0
  427. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/Cxgk3uQ4gVJPQqwn5P893pNo10Ymbe7VqJqiAQUOcQs.cache +0 -0
  428. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/D9QZrZJ63_XOdiSyzVkL5di0X0USCC2QBRcasQhhtXg.cache +1 -0
  429. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/DOnD8st_2PDNu_jghE9jb2em-wWMmCaWylTxNUd_gnE.cache +1 -0
  430. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/DafDaaltFmFz2oPyaLKSFmhcIQTMLDBUlS6uJgkNMZE.cache +1 -0
  431. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/DxGBFYs6zLSeYDW1JbTUbjf2Ik2n0ACzYKYbtGtkqSg.cache +1 -0
  432. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/DyLaLMPso-ByMEkpb6IBwyCPWiPjrcB2boVURoj2s_o.cache +0 -0
  433. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/E03RtAomRVfV9kzAYE7db9qN8aJglXLJDbT39IheYa0.cache +1 -0
  434. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/EBhopqgX8x1a7hHpixQP7SafeUa5poT9jUqyv-_4hp4.cache +0 -0
  435. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/EEtFS2SnA4hDQgK02Y_tdC6IypLaGKf0zmTbzk_P548.cache +1 -0
  436. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/EKbTxMQiibHNFMKIy7PPXSJwrevhl6dvBouZm0R8iOI.cache +0 -0
  437. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/EZZhD9Dm8b88dOoZlfo_pgoDXBeVpJPaMxGJ7o9rP38.cache +1 -0
  438. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/EqTGxHK2drCdyrWWK0L_qeI2xdZFg-yeAjl-mdFzT_w.cache +0 -0
  439. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/F0DB8SF2vleu8oyBOqSJNWzYv3Xeq1jMgI0W3Qr2Mis.cache +0 -0
  440. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/FBOWggWkBK_75B_Ra3WQrEKEwWBw6MPeJV7XrXyJ6rc.cache +1 -0
  441. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/FMNxBdDAGb_B08SbmLbkVOBMDsoSRDc4say1jccF7XQ.cache +2 -0
  442. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/FltaQce9Y1CpZf73yxwYPYVZQG6pdlqMSF1ND6526AA.cache +1 -0
  443. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/Ghi37MhO6Av2HBvVSRv54q9X4ovVskDNEeHyiDRi43k.cache +0 -0
  444. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/GiIOrHqX_kacv_9z2B630MniSnPcl-xF_oMtnNZxJlE.cache +2 -0
  445. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/GxQzUlvpTSYIngAYQR8ZwD61-5pa4UcBTL-93JTXwQA.cache +2 -0
  446. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/HR5TgeriOCfs8vqLY3y-vOTxbDGJCAqVe7ejhduAopQ.cache +0 -0
  447. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/Hb6tiUleBb7lJtBtixNk6wDERPxLwj-atd-7VWhK-KY.cache +1 -0
  448. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/HliBSFWaOzYo2Tp3NLqFI0dzOaBUqQ_Eb8A-ijIK-P4.cache +2 -0
  449. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/I1mtmpmoauZKzIfX4Nuxd32-RLvBfEiAUoo7eUrLW9U.cache +0 -0
  450. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/IBOMe6hFUXo2Advx7iSiCAMORK5GOff43DQNiObLYSw.cache +0 -0
  451. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/ID2TAnevxW1Sn4vt0mFIx6MFmaO8T0oib-Ts4Qwjdqc.cache +2 -0
  452. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/IHzO5EE1hIa7YDQm7mLOPEbRg_qj0CUojrNel_s5uHo.cache +1 -0
  453. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/IPN_5r0HPnY6qHZ11JCXMC8qz7cp5-9D_tyyc-aXS9A.cache +1 -0
  454. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/IiUZ72U5K2rvRG13qyVr0mVNpRxVf21SN6q6LNVjFbw.cache +2 -0
  455. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/Ik6jghOUPFUi4cbv9k1K_AuBIhcg-xcgiAlSiBiVsE8.cache +0 -0
  456. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/JdCbaxFb2mtb-XqPLC3e5ZCBk7mndLzgtCy4dK-itaU.cache +0 -0
  457. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/JuVksXNe-kUWuYYnKrVv8aOBAgkh42yZnuebyXEMQbQ.cache +1 -0
  458. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/JwdAo29vaIOkPuWtbEYRc-bnsclGbxlZ04D1Q9X5ZAU.cache +0 -0
  459. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/K5HD2xy8qRP6Rg6axUTrEo1BVTgm-5v-nW-5z0eUv7k.cache +1 -0
  460. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/KK7-YeBGe7vnm2wYNbTGQUaEC7Mk8kRc7zW5UuLxVzs.cache +1 -0
  461. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/KUCMeIyfSJYgKme_2CX2kMgCHm_1HD8JpWuVcWR-i9g.cache +2 -0
  462. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/Kgm7eaversrfhbkxWftCN-_bA_oRA3BKhucRIo6hZfM.cache +0 -0
  463. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/LDgFmC-Qowab8Ty7v1oMXq5DbpMJHpyXCzj-fb3ofUI.cache +1 -0
  464. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/LF9cqLCpCKK45hkoU03HjB0E9QTYR8ZHkSkT_-XnU4g.cache +0 -0
  465. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/LIcuPhyoVCaRDqHJjy5ynh6GhFolAaiuvLCj5fYNtUw.cache +0 -0
  466. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/Lz6c89-eVWWBPzKydxpqoxLA5MiFnolTehDXJ0328gg.cache +1 -0
  467. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/M3KzXbqZJ7cj-odtR9LLGv3NWQ3uU8zCU8qroa6lGdY.cache +2 -0
  468. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/M6YIECYiSiGWlv5UEyLrgKjfVAuUtHEND8pgLmsrfXs.cache +0 -0
  469. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/M7jIBHnObqQu1ZUYeLq7bez0wYEzNT5T0qyJjQoOW44.cache +0 -0
  470. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/McykCRHHDQzN7wHpJqyYfnBIlEHpJpdLUdNDD6TS2u4.cache +1 -0
  471. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/MfMOUf3woUN-NpXdXIbtu2vD6bO0Hg_eBltVYKxBXHw.cache +0 -0
  472. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/MvHFm2BpzYmTgbZ-dfIVI4bJM1Xdot_L2_UY8jdR-DU.cache +1 -0
  473. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/Mvj-qtsI7_IQw81ywgayhNuCB6WhIXNgebDykUiNM1c.cache +2 -0
  474. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/NCdhWqZzyU9KMA24yVZfhbZZgrfaVcSXygDttZDK0pw.cache +1 -0
  475. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/NIDczTDvwoT4E54H7IvQQCQQUp5ETf5jTc959elSVIM.cache +2 -0
  476. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/NIUmtg76CDA3k56ZRix2c2zk0g74kUfkQKAEC1URX70.cache +1 -0
  477. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/NQbnRV4ZOz2kD4dJZLNdDxGtLHdmG78aWKD9ic5UJU0.cache +2 -0
  478. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/Nbe9MxX5L18mY_SvrY1LmQ28DBdtWXfHtv01sAy44PI.cache +1 -0
  479. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/NbnwIH6yXuD_o6lDRhBz4zoOVnS0nb_LNyzv6fIcHWQ.cache +2 -0
  480. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/Npi3B0esj5mnRmKjcrZEqvfYMEXq1m0Wnxetpf893Ek.cache +2 -0
  481. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/O7WC0awRTG2hcvxKVDJ6LrdGEuL7YxocQUw2d-UTbmY.cache +1 -0
  482. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/O8akbUwAbmIKY-AhITimq-JDQ6IgsO3Hvq2v5etufFw.cache +2 -0
  483. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/ObCOiweEGWKEn5G8eWQSfR887Yi702tPObaLkMNES_c.cache +2 -0
  484. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/ObdIdL7E4w4UDFLndzcRZdowkN29A8XsaRSpzEJuX6Q.cache +1 -0
  485. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/P6OiAJ-x0gq4A1ixHfODhauG0uur5LrRcQvDhBRuhwY.cache +1 -0
  486. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/PDE7K8QSxh6yZVGnJad2XasYtPFfvBLda2RK1xbCCY0.cache +1 -0
  487. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/PF8jVe43kt3aGtP3z27ER33XQAxvW8tm052sXDGIOys.cache +0 -0
  488. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/PHYKuXWTpxrRcx9fvzzIKXlTQFMqkGZBF_cF6Nm9e6M.cache +0 -0
  489. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/PUOQ3QLfR6Uv0QkilH_-HsbbNmamc-jwyhXVCO7MfrQ.cache +1 -0
  490. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/PciIOqCmmInt_D8J2zH0HO7BHzNLzweZxxbp8InJiJM.cache +1 -0
  491. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/PiiYSGME8IETnMv8wyHabAQ8dQLWJuCADRytXzz2zt4.cache +2 -0
  492. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/Pt5L_9FIrEh4mV-ugTXsC4X4tB0GVcXO-Rhd--an-JQ.cache +0 -0
  493. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/QBSeAI4UcQXnJOpFdPKOzdXpYMn62qm4wyPNhH6QPWw.cache +0 -0
  494. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/QIFmyb6W-9jQUOxWYNkuzoyERR5U5ev-iiREa8yHD3o.cache +2 -0
  495. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/QOXYmHR1W-37X6qAZOGFTMhj7dzBQf5a-xMk7QC6q1s.cache +1 -0
  496. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/RehYfMoP35mzUqugLaaC0GETUfRE1JIQrpQKWKxchx8.cache +0 -0
  497. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/S-AysoDTJXWRWEmgTJ4vBioZ-ei5lG8LdRJzUcJakdg.cache +1 -0
  498. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/S-sKK_R__vzg8OGRsBZ0LpjXpZi5sVq6zX6YLWiXk1M.cache +1 -0
  499. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/SuerJAVpvUaoie-SfM_yjcRr068zE3idcmMoLPRMcCo.cache +0 -0
  500. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/SwmVDeL6mLTd9eCHwreqXojuYW9Z4JovoCtbQ9k8hEg.cache +1 -0
  501. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/TLBmbsLhiGNq2J6hgc88yclTEcC2qLlzvjerRvKF58I.cache +1 -0
  502. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/TapmroTKPi1dfKnnO63VVain9GhrJMOMwunRiNWug0A.cache +1 -0
  503. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/Tfb52ZLkIuepuhjA112-KHiNeNmMlzA9dWwrVQHUnIg.cache +1 -0
  504. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/TfukQ5et-BTh27AZKYewwVWUXj5gQgl5p06fGAtgUzU.cache +0 -0
  505. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/ToOIJ6rRF-bcKueaGgRsc5azdRPlF5YSRC07G6LnMqw.cache +1 -0
  506. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/Tv3lc0P580mhM6shD-eCsvmWfu23x2JptWMo1a5Y6LQ.cache +2 -0
  507. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/U2HqX5LYZZX1xzabfbxzuG-SN95k5wf3UWQDKL4oKdk.cache +0 -0
  508. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/UEWzEPlOqBrWXkWr86Mbnvp9UkmpEwmbO70QyXFDtQg.cache +0 -0
  509. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/UKuAcJLE961hTJhJ3_g8IVkP8hi4SJ1ibMriqluQBSc.cache +1 -0
  510. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/Ufjo8SEMhwSXNbt1ELV1w2W0AK2RqvKuRCfj8oDSrA0.cache +2 -0
  511. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/VZ7WrbhwonPow-gjNSy--48-OwcgHeuIRt6pzlIe9u0.cache +2 -0
  512. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/VgPnbsqytPuO0Ik1c4tlPVmDmgrzRG1Aimzxq_gtF8g.cache +2 -0
  513. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/VteJsc6Hoxg5CZ4n3j7NOtJX28yOxGkudHXcjnk97zE.cache +0 -0
  514. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/WE0KN5RFSUAZBNZTuJwbweRCIn9UK30RPxMfhEur8Vo.cache +0 -0
  515. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/WG-ciVUsY3cyQnpsMU4ynT7daEL-azSsM80uYZ-o6dc.cache +1 -0
  516. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/WGsBp-eP0POzBqmwMV94nqQfdgvXWB3XfjV7RTkjkOg.cache +1 -0
  517. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/Wau-56jMKZeemv9I0TxR_dtytVmnmROvaYf0KdWgqYg.cache +0 -0
  518. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/WiWBeG7nAbiu_mXHNvoUeP2aj0Na4CIPOJTRKxVpxlw.cache +1 -0
  519. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/WtWLSNQ4YXD4jE30EAvu-u2a8fDUdeT_pwiNQbo4XXA.cache +1 -0
  520. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/XDOG9yeFGOOsKQuWaYsp0MjtyAHkwaOYDJx1KqPQqj8.cache +1 -0
  521. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/XQhSvqFG85BZLLEp_oF2j7bieWIMWg-zlSuszqJeKyI.cache +0 -0
  522. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/XRVCsMytpsgXocEtryMQ4AadQJxP4AIPi6KVkC42U2s.cache +3 -0
  523. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/XXVczR_0vWS_qIBG3EDaNjMQpTiYH6ECDQndmW5pXzs.cache +0 -0
  524. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/X_MQ9TWcE5TDPhl09G9Li2hoOdKTSA5izEmEEOCOZNI.cache +1 -0
  525. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/XyguOxuYT1L5Jfk17rGm94Whvggm9cvVkqzys3KT8mI.cache +1 -0
  526. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/YOyYkTNmHljba-4nIjr7YlZrp92tHj4SJKjwrhMYQJg.cache +1 -0
  527. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/Yk1-v76F4OYZ1k1_rAPHA-hUAe-YlipmKqyqLmjMsRc.cache +2 -0
  528. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/Ywk2BN6P76hLuAdQbZ4Nc6G2wktEfe_zkj8oNw4xdeU.cache +2 -0
  529. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/Z5odkgR_R_ktxsQY6qUG-MvjDrJhv24j-WK0QMGM5ng.cache +2 -0
  530. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/ZQn3l7rP-xxUdl_jjSQct3rxoUttJeMgHb2ybJ93N1g.cache +2 -0
  531. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/ZXKM3i6yC9CFe9EI4Lr04ETqpxg_Uuk5ny2bjfvCMeY.cache +0 -0
  532. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/ZdeGHCEgJIB_xlZrcZbh5r4aMXNunY758y88lOekfgM.cache +2 -0
  533. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/ZqnS90DE28NUw_6pK4c_GHg37lyMRxzaNokLtumrGuw.cache +1 -0
  534. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/ZsrUGj5ZywDWkhL2v00eXJhp0LOft9cyy8-Pj-FG3bA.cache +3 -0
  535. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/Zxnusb32A7CoqOHB2Tjp16CP_qqWlgqbQnCA_RmnI50.cache +1 -0
  536. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/__AC7Z_FqlhYG9oxaczHWS1e6maUCDzh0uAPaSpLq-c.cache +1 -0
  537. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/aHPvKxs51MX35Xze9EAH3gMFtFT7xLnWAYekruLMowk.cache +1 -0
  538. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/aLM_bJa3T9DXSpahbXWBUPmdcQ2GK52WeNMKZLziddg.cache +2 -0
  539. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/aYCniUe-p50gfl8R-x-tLzw9gwDNiDejz7ZLz-pAurk.cache +1 -0
  540. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/apVY7wqE7LI-obDiPEOoKECYgryYKXdvfH7G1pJCYZk.cache +1 -0
  541. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/b00jXZKeSk2UFD3EDfE4EM3NlB6TPqIebPh_eMyvtRI.cache +2 -0
  542. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/bEDuOC-9tuNJfs1O_ETbdBd3TemlYiNAoTPjz_tF4Ro.cache +0 -0
  543. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/bFZWUiCGWDkULcMHm0lXvKbRgd7pYCx5z_HgbOAJrtw.cache +0 -0
  544. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/bGNuR3zk0GYl5tIMXOliWkEMwoPajsn8G8-H8IaaKFM.cache +1 -0
  545. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/bUcg2IbTydeXQGoBxVq8JjCK5vvrVbCRzMdsk0gEfro.cache +2 -0
  546. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/c2-xhBhHuDQ18UqrywUsHcesxhGgeM0SN9Hj7PUaIaI.cache +0 -0
  547. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/cIgOLivvJH0wPxcVUuY_GOryMxsmNTzpoN8JMYSHSk0.cache +1 -0
  548. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/cUvXZ1vgv0OTq9xr8MkPIvKc28hGbId1ScYsjr1LTZc.cache +3 -0
  549. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/cYcbi0jHCkxqGMvSAKiKXX9GerYUwyhqVcXP43KC1_I.cache +0 -0
  550. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/cp3C_61cvaRZTpODT60UbNn0cSR7z5BW53HYd-vd9tI.cache +0 -0
  551. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/dOi-CrHTYJLnAfsdZZJEN3bq3V7JGW9It5wfvQqnYzY.cache +1 -0
  552. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/dSkaNtPExYPg597s1b2-o2o8_XuXLN7j4Gne8LZR6RA.cache +1 -0
  553. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/dqC5ODoKUPXTSAuMAGrDXyUuDm1FoQncJnVXb6v8jQ4.cache +1 -0
  554. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/dr9BJa7e4iREcymymCYoLl-okhqVKxHHzNoTQCnjC18.cache +1 -0
  555. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/dxPuuU3VNipmW54dOCVKtORPyj5z1IU7MW9BsEBoBcw.cache +0 -0
  556. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/e22rez_TAzCLZctNdq-zAiP7-t5Zh8hJWE1gC8rxTSk.cache +0 -0
  557. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/e80l5ji8v14PeKrs2A6ZdU_LkcmltBUAZTKcZHuRJpc.cache +0 -0
  558. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/eK2IOSBshTxbfBo3uzy07d4WKl8ppywhWAKI9hcJqoQ.cache +0 -0
  559. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/eL0Nfr5axdnFnGPXMC2SkfXd9uTCOxRoDKnJ7Vps1uc.cache +0 -0
  560. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/eZObR9SH1s20kypLgB0rLGmIC-Ll66ZQ79HmdGHwa5w.cache +0 -0
  561. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/eZVyo072fXRF4KZ06h0fshCrgb7bKsva9cmRynWgiZ0.cache +2 -0
  562. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/f0OKdH7LiosD9hRyDNWR4eK9ptcMWA2fprcTC7w_sXk.cache +1 -0
  563. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/fKpvsDHPIWjQRMlHlizdWTXnmpQDeVoUz8pE344Saqw.cache +0 -0
  564. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/fLocVliVeNk4-LsW7PkE39-D27LdR5wXtZDnCwWuULo.cache +3 -0
  565. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/fVyNL2Un9HUR3622TjU85auW2fSUbrJ8ASJ9WFiXVbM.cache +2 -0
  566. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/ffXLLR9pjEH7-T6mhmtJ-rgKx6pHmNLTQyRGKuFfGTM.cache +0 -0
  567. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/foP6St1ZFh7tPJ6-OTXNSsBHODKKfBHxHIxiZpqSesU.cache +0 -0
  568. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/gbmpclxhgONHHW_721C5CsP4nXTqQlxKT86KFyy0ipU.cache +1 -0
  569. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/gsCOAZfr_83VLXC2TwQaRNZ3ZZGKCaQepnKGGhbxlQY.cache +0 -0
  570. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/h311hZIjLayedPYKGX4F70pd7_KJw9p7kGRgpZBU2-I.cache +1 -0
  571. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/hSnla4B2Unwgd36Mq6EBcjCb5qOU2hekM-5Lgzy7qLM.cache +1 -0
  572. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/hUTE-BEK7NX8ZZJugAuZ92lnQIuwgY3vv7BlKJbsN_8.cache +0 -0
  573. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/hcqQUR3J5bMmOJizmOpNgo_htWMG44ZpdxLXJUFaRNE.cache +2 -0
  574. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/i-cFTL-n782xOJabM0bWMco1Vm-xcNLJ6fJtb9FVFSI.cache +0 -0
  575. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/i0mNdudzhegd8m6dd1_q72ktVU4wZDQaS5LQN-dowCI.cache +0 -0
  576. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/i8iwntg0Se16dVEAr72QPrBAQtibMImbIunXfpTy5ew.cache +1 -0
  577. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/iiFEzxeGGYD9iI9TNO4atgZJ2w0E1kxi_uvGdhx8-Kg.cache +1 -0
  578. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/itjNE6IOYTi2X17GuYC5fT0xoUps56TOrQdlJ88Bxa4.cache +1 -0
  579. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/jJlWAA3M15ikrIazNk78ZcRXpHMsZH_TaeZutaQ5NR0.cache +1 -0
  580. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/jYVWrF6-TVzMcWev8TuMmpT-GniTbGR6e1_38VABfxw.cache +1 -0
  581. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/jZssewsl1yI_3-K1YMFnVTCjNEuEFMmoHbTl_vfZ-VU.cache +1 -0
  582. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/jbJF1droqyhqp5h5l-iP9karh9cPv4x3Kmou9yWzIXc.cache +3 -0
  583. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/jh1S56lmjVNr9VMsNW5H_Hy05zEip4oHEOhhqczxe18.cache +1 -0
  584. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/jmsRL4nMm_H3M_i1aqT4IZ7PCmZD1ulMM3L3dwDJ2yA.cache +0 -0
  585. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/kOUEFXuesLUObuWQij6odPvyaGiECt9o8m905gd3lg8.cache +0 -0
  586. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/kOr0zJx74dUNhRklB5BKj8RD1DkDVLiG0_FqJ9IUi1k.cache +0 -0
  587. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/kgZAcv19yFcBmON0zkiLpzrzFptPqZBXN0xokTuTeWU.cache +2 -0
  588. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/kkvf85VAn71xSQxc0Wh-fVHNW5Wg_Wezr-IHXtDO7mg.cache +1 -0
  589. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/knfBTwFijllikUk2c9juNk5739SIiMtkkPyk-Zlw7RY.cache +2 -0
  590. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/kwcEp-SIbbT6cqUM2tsFlhhBn8U3p44qg7r2iihczhY.cache +1 -0
  591. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/l2TT9Ach0-Wfts1BqqULGc4wnq1jDt64pfVpYW6EYGA.cache +1 -0
  592. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/lPGrU3YTLsaSPyAwMjgSqH62xNgT8l4mJyStU4M2HmQ.cache +1 -0
  593. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/lk_8x6ACJYNqOsJKqP-Dpa7BbvEZ_5jYNvDc9dsfDGE.cache +0 -0
  594. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/ls9Qil1-yog8RWKdH8T8i00ka9Vqj64QOWj9EkOXxz4.cache +2 -0
  595. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/ltyPWLF2VUlhhKAsYXHXO2ixixV9BhdeUsIKO69kfJE.cache +1 -0
  596. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/m-htitJ2TPs0yjT3xWeVkjm4X3K4b7b8YLe1tbKCSkc.cache +1 -0
  597. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/n0_HLWeEiWiXI-KYa9WErM_bc1WHkaaMl60D4Cd4U7Q.cache +1 -0
  598. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/n2XDoLQdTJNTD6rsFgzokc7853aIHQyhL8Kb65QelKI.cache +2 -0
  599. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/n4DCCaovNhmNgeUVm-U15kvZE1kJaXh2Z50lGDbpqOA.cache +1 -0
  600. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/n4OWXbnHG3_g4qeGy51KHkrI4NbQQablVwKWQK9HT4w.cache +1 -0
  601. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/nUdkYc2e9S0n_eiiZq4YszatZtdM8nHbSoXrFE0t4Q8.cache +1 -0
  602. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/ndeNJHEb5qUCNJEeRjIlm3Wwl3vLWw_uzhXN94EN82g.cache +1 -0
  603. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/o4Nxd0EO3mN1PTewaWMti08d4sR3D3h8ShaEc5-AOWg.cache +0 -0
  604. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/oG_vhJrPiae7svjKHHzNii7vjT7kWxwJf9SkazDD04I.cache +1 -0
  605. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/oh3XPU6acFoUTO-NiOpURopt64xtQ9VRzVILeF6bvw0.cache +2 -0
  606. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/ooiXZIVFyv9RCY2iAmFE7fVLJoycB-Nc1iqHbnWavic.cache +1 -0
  607. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/otjX8B8d9Ct3r-qgL_8L3xOQhdCprDRBq-G20ymrqmU.cache +0 -0
  608. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/p-r_EWD6NJqkuffjVaNK3mG0UxgW_qBEHF-U_st8U10.cache +2 -0
  609. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/p7d3aFcLbvwVTmf8ffT85qelQIjwk8uCdZuJKrbw8g0.cache +2 -0
  610. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/pMfcYR3BUgwXGqc7eRNzAaJEr2ba8YJWgzcVqNOIqQc.cache +0 -0
  611. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/pVGU_kOT-m3fEKzY7klpTg4RtinAWRAsW-DcqgnZOFU.cache +1 -0
  612. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/paDJT7gEr9lFhQ6D1_lI6Jya-xfLyeffW4iW-m9r1hI.cache +1 -0
  613. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/pzmcyomcCfx5st42nGYe23gAldnSi4SxSGdrklTd0As.cache +1 -0
  614. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/q--nfMlsyUr-aGz0nAnxL7zG6r62oedX_Kzec_ALqwM.cache +1 -0
  615. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/q1C_2EldZlh1J41JoV7p16Rc8yWMYHP6AiOGfFmpWTk.cache +1 -0
  616. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/qFNmsPZ5EG6zmPOXrLvGFd8ah_soiEWrCN9Ez460f8o.cache +0 -0
  617. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/qISxXQ-GEfd6l1PBIZIfnlZD-boAPW8U-pEVHzCbn94.cache +0 -0
  618. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/qU1bIdouDcAAH7yOyi1jXT35YhzKzC6GoKis09Ifx-8.cache +2 -0
  619. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/qYvjSTT4rb8DNoRvWrFMd1mf_QBacH_PiyinVwetmF0.cache +1 -0
  620. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/qgQXG4V3UmkS8uljc-0chxUJj1Z-IIAguDg7Pkpi-nU.cache +0 -0
  621. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/qmkcOPZJ8Pk8jPUuFXUfJCs-EPt1r5Woo9JJTBrIfLk.cache +1 -0
  622. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/r8hZ8BYAI22INI0dLoZ4sMmNLxYSNlf-7TSSuJV5VEM.cache +0 -0
  623. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/rN_Me58n7DwLhgc8swgX_Iul3oliHYxJ-_4brHtNwOI.cache +1 -0
  624. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/rS4zpW74ZX0p4-dg_WR7DxcFYkM1FN-7HcFEbXHxnBk.cache +0 -0
  625. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/rlSB5wQtvu5VpBEZDGObuCL2I75RHV1rz-6m2o9-7VU.cache +1 -0
  626. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/rt15qdKb7ZBQzuxPM2ORzcHid5J2Kwnn1rn055er5H4.cache +1 -0
  627. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/ry4Em-igN7wETkrtsiGy0eRxJigZdKRQ1c4WcPjeqFw.cache +0 -0
  628. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/smMaXntAkBY9K79e5KdrleGpp48yLpQTfOmw0fw9q_M.cache +2 -0
  629. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/t2fqnmSq_YRr-uCuJIRsO-whwzwEgSiuYcfOKxhKYnI.cache +2 -0
  630. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/t3kDZRsibVL_zZiJ4zEWTK2Lo0e886NMFcNAe6Jzk-k.cache +1 -0
  631. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/tGZIFYEBSTjSkjKrwGwtUJrWlkZxp9SNYGncRPJxkPw.cache +2 -0
  632. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/tPF6H9NRpGO3whu2y5_e_R_1EACKdCwu5437D83qJT0.cache +3 -0
  633. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/tbOjwZGYOnJYGMrlol8573MQo99XeZ36h7sTYO5kRnM.cache +2 -0
  634. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/u6anhh2MfB136hhlNJfBdYNTz2aIM-m6IvTpcugcnbg.cache +1 -0
  635. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/uTHXb8Z0YxI7aLS5rA7Hra9zeZyrR8g8nSRmtdCw4m4.cache +1 -0
  636. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/uXq77_WjvTZc7AMiuNJOCYpYrckylrd1Pld_bnQf3_c.cache +0 -0
  637. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/ubom7B2wHpngDC6jgnbQKDT9EmMm9cBUShWwDqo1-CE.cache +0 -0
  638. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/umoBebMy9sh8zzQ6wycCgfPSxrbomAylG4Q2cO-55Q0.cache +1 -0
  639. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/uof9mxHLUaEFljZKO1k-p7ZBnbvtiF8a28vPWfGZyNY.cache +2 -0
  640. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/v-hRKqo9nlO7BV1_X_7l947UJfqhYQJP1qf84_Kli4Y.cache +0 -0
  641. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/vrR6tQPP1nTpZ2KC7Wzau0PvwY_3bAo2rq3Jt6Rgzn8.cache +2 -0
  642. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/vuJvLF6Q8OehmqodaXLZ4YuxwdpBdHxhm1vDho27lGg.cache +2 -0
  643. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/wKkts-yt5g9fWSjQRSFvxKO_ydrKEO9McNcpuD2SWxE.cache +1 -0
  644. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/wOrYIa0sH_v6i-Ek_3hsvyxoTZMKaMYvoj1C9M2KBAc.cache +0 -0
  645. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/xG_WEVWVEONt2tgNVT_kPhp_lwChu-RdrMbm7zpljNY.cache +1 -0
  646. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/yHNsSYW80oc0mE_Pk3KpwQDo0pt5ZhBJaNm-9qnnAmU.cache +2 -0
  647. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/yPdAc0mIZhK3czuFCQqfLgg6fhHQ3fI6cpb3m0z543U.cache +0 -0
  648. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/yfehLO7-7POX4WwqPUrmmihLDUnIfJeuTNeTZUQjHRI.cache +1 -0
  649. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/yiUCgoKMXZsv6S2bTAR5a0trcf-ybB5ILcLn_1CshWg.cache +0 -0
  650. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/yxJJQqViHnVAHmkBRknRcLhXHhbm8gNCY3dehutSE2o.cache +1 -0
  651. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/zCypVswL7JI63bjCKAL3xzAG18RkyDyhfcZH5vG0yFA.cache +2 -0
  652. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/zSpdf9_FUcbIoPziXn2RB7VtupqSWZkrHjtaUDy--fg.cache +1 -0
  653. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/zX1tSlHWzasEqWDoN-qhYjJ7OPJFpt4VSdnmQFL71BI.cache +1 -0
  654. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/zYM0NAbeJMJNqeHt2y8XotOfznNZDwJcRErpRZNOvtE.cache +1 -0
  655. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/zZmpdlcNT78O4lO0a6gRp_0T_V8MMVWgUEYi_asFQFM.cache +2 -0
  656. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/zkf4XwOA97_1ibVYSSH5BlnyOYjMCzXnigoxz8-wgqM.cache +0 -0
  657. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/zwGauLixHsh96P0HWJ2irnfYj2Auy2qxdf4WgH1y9JQ.cache +2 -0
  658. data/spec/dummy/tmp/jasmine/assets/boot.js +153 -0
  659. data/spec/dummy/tmp/jasmine/assets/jasmine-console-reporter.js +131 -0
  660. data/spec/dummy/tmp/jasmine/assets/jasmine-console-shims.js +38 -0
  661. data/spec/dummy/tmp/jasmine/assets/jasmine-html.js +474 -0
  662. data/spec/dummy/tmp/jasmine/assets/jasmine-specs.css +1 -0
  663. data/spec/dummy/tmp/jasmine/assets/jasmine-specs.js +22277 -0
  664. data/spec/dummy/tmp/jasmine/assets/jasmine.css +58 -0
  665. data/spec/dummy/tmp/jasmine/assets/jasmine.js +3455 -0
  666. data/spec/dummy/tmp/jasmine/assets/json2.js +489 -0
  667. data/spec/dummy/tmp/jasmine/runner.html +22 -0
  668. data/spec/features/goal_tool_spec.rb +108 -0
  669. data/spec/features/home_tool_spec.rb +44 -0
  670. data/spec/fixtures/participants.yml +17 -0
  671. data/spec/fixtures/social_networking/comments.yml +4 -0
  672. data/spec/fixtures/social_networking/goals.yml +67 -0
  673. data/spec/fixtures/social_networking/likes.yml +3 -0
  674. data/spec/fixtures/social_networking/nudges.yml +19 -0
  675. data/spec/fixtures/social_networking/on_the_mind_statements.yml +7 -0
  676. data/spec/fixtures/social_networking/profile_answers.yml +17 -0
  677. data/spec/fixtures/social_networking/profile_questions.yml +8 -0
  678. data/spec/fixtures/social_networking/profiles.yml +5 -0
  679. data/spec/fixtures/social_networking/shared_items.yml +3 -0
  680. data/spec/javascripts/helpers/angular-mocks.js +2287 -0
  681. data/spec/javascripts/helpers/sinon-1.14.1.js +5931 -0
  682. data/spec/javascripts/social_networking/goal-controller_spec.js +191 -0
  683. data/spec/javascripts/social_networking/home-controller_spec.js +351 -0
  684. data/spec/javascripts/social_networking/new_shareable_form_spec.js +91 -0
  685. data/spec/javascripts/social_networking/notices_spec.js +44 -0
  686. data/spec/javascripts/social_networking/profile/profile-answer-controller_spec.js +174 -0
  687. data/spec/javascripts/social_networking/profile/profile-controller_spec.js +80 -0
  688. data/spec/javascripts/social_networking/services/AlertSpec.js +43 -0
  689. data/spec/mailers/social_networking/mailer_spec.rb +20 -0
  690. data/spec/models/social_networking/comment_spec.rb +38 -0
  691. data/spec/models/social_networking/concerns/participant_spec.rb +32 -0
  692. data/spec/models/social_networking/goal_spec.rb +120 -0
  693. data/spec/models/social_networking/like_spec.rb +90 -0
  694. data/spec/models/social_networking/notification_spec.rb +55 -0
  695. data/spec/models/social_networking/nudge_spec.rb +40 -0
  696. data/spec/models/social_networking/on_the_mind_statement_spec.rb +87 -0
  697. data/spec/models/social_networking/profile_answer_spec.rb +18 -0
  698. data/spec/models/social_networking/profile_spec.rb +42 -0
  699. data/spec/models/social_networking/reports/comment_report_spec.rb +37 -0
  700. data/spec/models/social_networking/reports/goal_report_spec.rb +39 -0
  701. data/spec/models/social_networking/reports/like_report_spec.rb +41 -0
  702. data/spec/models/social_networking/reports/nudge_report_spec.rb +35 -0
  703. data/spec/models/social_networking/reports/off_topic_post_report_spec.rb +35 -0
  704. data/spec/models/social_networking/reports/tool_share_report_spec.rb +37 -0
  705. data/spec/models/social_networking/serializers/comment_serializer_spec.rb +42 -0
  706. data/spec/models/social_networking/serializers/like_serializer_spec.rb +46 -0
  707. data/spec/models/social_networking/serializers/nudge_serializer_spec.rb +48 -0
  708. data/spec/models/social_networking/serializers/on_the_mind_statement_serializer_spec.rb +45 -0
  709. data/spec/models/social_networking/serializers/shared_item_serializer_spec.rb +55 -0
  710. data/spec/models/social_networking/shareable_spec.rb +40 -0
  711. data/spec/models/social_networking/shared_item_spec.rb +27 -0
  712. data/spec/spec_helper.rb +29 -0
  713. data/spec/support/controller_helpers.rb +19 -0
  714. data/spec/support/feature_helpers.rb +9 -0
  715. data/spec/views/social_networking/coach/patient_dashboards/tables/_comments.html.erb_spec.rb +40 -0
  716. data/spec/views/social_networking/coach/patient_dashboards/tables/_goals.html.erb_spec.rb +121 -0
  717. data/spec/views/social_networking/coach/patient_dashboards/tables/_likes.html.erb_spec.rb +31 -0
  718. data/spec/views/social_networking/coach/patient_dashboards/tables/_on_my_mind_statements.html.erb_spec.rb +43 -0
  719. data/spec/views/social_networking/coach/patient_dashboards/tables/nudges/_initiator_nudges.html.erb_spec.rb +46 -0
  720. data/spec/views/social_networking/coach/patient_dashboards/tables/nudges/_recipient_nudges.html.erb_spec.rb +46 -0
  721. data/spec/views/social_networking/goals/tool.html.erb_spec.rb +27 -0
  722. data/spec/views/social_networking/profile_pages/_profile_questions.html.erb_spec.rb +81 -0
  723. data/vendor/assets/javascripts/angular-resource.min.js +13 -0
  724. data/vendor/assets/javascripts/angular-resource.min.js.map +8 -0
  725. data/vendor/assets/javascripts/angular.js +25584 -0
  726. data/vendor/assets/javascripts/angular.min.js +247 -0
  727. data/vendor/assets/javascripts/angular.min.js.map +8 -0
  728. data/vendor/assets/javascripts/jquery.toaster.js +173 -0
  729. data/vendor/assets/javascripts/moment.min.js +6 -0
  730. data/vendor/assets/javascripts/ng-infinite-scroll.min.js +2 -0
  731. metadata +1483 -0
@@ -0,0 +1,3455 @@
1
+ /*
2
+ Copyright (c) 2008-2015 Pivotal Labs
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining
5
+ a copy of this software and associated documentation files (the
6
+ "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish,
8
+ distribute, sublicense, and/or sell copies of the Software, and to
9
+ permit persons to whom the Software is furnished to do so, subject to
10
+ the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ */
23
+
24
+ var getJasmineRequireObj = (function (jasmineGlobal) {
25
+ var jasmineRequire;
26
+
27
+ if (typeof module !== 'undefined' && module.exports) {
28
+ if (typeof global !== 'undefined') {
29
+ jasmineGlobal = global;
30
+ } else {
31
+ jasmineGlobal = {};
32
+ }
33
+ jasmineRequire = exports;
34
+ } else {
35
+ if (typeof window !== 'undefined' && typeof window.toString === 'function' && window.toString() === '[object GjsGlobal]') {
36
+ jasmineGlobal = window;
37
+ }
38
+ jasmineRequire = jasmineGlobal.jasmineRequire = jasmineGlobal.jasmineRequire || {};
39
+ }
40
+
41
+ function getJasmineRequire() {
42
+ return jasmineRequire;
43
+ }
44
+
45
+ getJasmineRequire().core = function(jRequire) {
46
+ var j$ = {};
47
+
48
+ jRequire.base(j$, jasmineGlobal);
49
+ j$.util = jRequire.util();
50
+ j$.errors = jRequire.errors();
51
+ j$.Any = jRequire.Any(j$);
52
+ j$.Anything = jRequire.Anything(j$);
53
+ j$.CallTracker = jRequire.CallTracker();
54
+ j$.MockDate = jRequire.MockDate();
55
+ j$.Clock = jRequire.Clock();
56
+ j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler();
57
+ j$.Env = jRequire.Env(j$);
58
+ j$.ExceptionFormatter = jRequire.ExceptionFormatter();
59
+ j$.Expectation = jRequire.Expectation();
60
+ j$.buildExpectationResult = jRequire.buildExpectationResult();
61
+ j$.JsApiReporter = jRequire.JsApiReporter();
62
+ j$.matchersUtil = jRequire.matchersUtil(j$);
63
+ j$.ObjectContaining = jRequire.ObjectContaining(j$);
64
+ j$.ArrayContaining = jRequire.ArrayContaining(j$);
65
+ j$.pp = jRequire.pp(j$);
66
+ j$.QueueRunner = jRequire.QueueRunner(j$);
67
+ j$.ReportDispatcher = jRequire.ReportDispatcher();
68
+ j$.Spec = jRequire.Spec(j$);
69
+ j$.SpyRegistry = jRequire.SpyRegistry(j$);
70
+ j$.SpyStrategy = jRequire.SpyStrategy();
71
+ j$.StringMatching = jRequire.StringMatching(j$);
72
+ j$.Suite = jRequire.Suite(j$);
73
+ j$.Timer = jRequire.Timer();
74
+ j$.TreeProcessor = jRequire.TreeProcessor();
75
+ j$.version = jRequire.version();
76
+ j$.Order = jRequire.Order();
77
+
78
+ j$.matchers = jRequire.requireMatchers(jRequire, j$);
79
+
80
+ return j$;
81
+ };
82
+
83
+ return getJasmineRequire;
84
+ })(this);
85
+
86
+ getJasmineRequireObj().requireMatchers = function(jRequire, j$) {
87
+ var availableMatchers = [
88
+ 'toBe',
89
+ 'toBeCloseTo',
90
+ 'toBeDefined',
91
+ 'toBeFalsy',
92
+ 'toBeGreaterThan',
93
+ 'toBeLessThan',
94
+ 'toBeNaN',
95
+ 'toBeNull',
96
+ 'toBeTruthy',
97
+ 'toBeUndefined',
98
+ 'toContain',
99
+ 'toEqual',
100
+ 'toHaveBeenCalled',
101
+ 'toHaveBeenCalledWith',
102
+ 'toHaveBeenCalledTimes',
103
+ 'toMatch',
104
+ 'toThrow',
105
+ 'toThrowError'
106
+ ],
107
+ matchers = {};
108
+
109
+ for (var i = 0; i < availableMatchers.length; i++) {
110
+ var name = availableMatchers[i];
111
+ matchers[name] = jRequire[name](j$);
112
+ }
113
+
114
+ return matchers;
115
+ };
116
+
117
+ getJasmineRequireObj().base = function(j$, jasmineGlobal) {
118
+ j$.unimplementedMethod_ = function() {
119
+ throw new Error('unimplemented method');
120
+ };
121
+
122
+ j$.MAX_PRETTY_PRINT_DEPTH = 40;
123
+ j$.MAX_PRETTY_PRINT_ARRAY_LENGTH = 100;
124
+ j$.DEFAULT_TIMEOUT_INTERVAL = 5000;
125
+
126
+ j$.getGlobal = function() {
127
+ return jasmineGlobal;
128
+ };
129
+
130
+ j$.getEnv = function(options) {
131
+ var env = j$.currentEnv_ = j$.currentEnv_ || new j$.Env(options);
132
+ //jasmine. singletons in here (setTimeout blah blah).
133
+ return env;
134
+ };
135
+
136
+ j$.isArray_ = function(value) {
137
+ return j$.isA_('Array', value);
138
+ };
139
+
140
+ j$.isString_ = function(value) {
141
+ return j$.isA_('String', value);
142
+ };
143
+
144
+ j$.isNumber_ = function(value) {
145
+ return j$.isA_('Number', value);
146
+ };
147
+
148
+ j$.isA_ = function(typeName, value) {
149
+ return Object.prototype.toString.apply(value) === '[object ' + typeName + ']';
150
+ };
151
+
152
+ j$.isDomNode = function(obj) {
153
+ return obj.nodeType > 0;
154
+ };
155
+
156
+ j$.fnNameFor = function(func) {
157
+ return func.name || func.toString().match(/^\s*function\s*(\w*)\s*\(/)[1];
158
+ };
159
+
160
+ j$.any = function(clazz) {
161
+ return new j$.Any(clazz);
162
+ };
163
+
164
+ j$.anything = function() {
165
+ return new j$.Anything();
166
+ };
167
+
168
+ j$.objectContaining = function(sample) {
169
+ return new j$.ObjectContaining(sample);
170
+ };
171
+
172
+ j$.stringMatching = function(expected) {
173
+ return new j$.StringMatching(expected);
174
+ };
175
+
176
+ j$.arrayContaining = function(sample) {
177
+ return new j$.ArrayContaining(sample);
178
+ };
179
+
180
+ j$.createSpy = function(name, originalFn) {
181
+
182
+ var spyStrategy = new j$.SpyStrategy({
183
+ name: name,
184
+ fn: originalFn,
185
+ getSpy: function() { return spy; }
186
+ }),
187
+ callTracker = new j$.CallTracker(),
188
+ spy = function() {
189
+ var callData = {
190
+ object: this,
191
+ args: Array.prototype.slice.apply(arguments)
192
+ };
193
+
194
+ callTracker.track(callData);
195
+ var returnValue = spyStrategy.exec.apply(this, arguments);
196
+ callData.returnValue = returnValue;
197
+
198
+ return returnValue;
199
+ };
200
+
201
+ for (var prop in originalFn) {
202
+ if (prop === 'and' || prop === 'calls') {
203
+ throw new Error('Jasmine spies would overwrite the \'and\' and \'calls\' properties on the object being spied upon');
204
+ }
205
+
206
+ spy[prop] = originalFn[prop];
207
+ }
208
+
209
+ spy.and = spyStrategy;
210
+ spy.calls = callTracker;
211
+
212
+ return spy;
213
+ };
214
+
215
+ j$.isSpy = function(putativeSpy) {
216
+ if (!putativeSpy) {
217
+ return false;
218
+ }
219
+ return putativeSpy.and instanceof j$.SpyStrategy &&
220
+ putativeSpy.calls instanceof j$.CallTracker;
221
+ };
222
+
223
+ j$.createSpyObj = function(baseName, methodNames) {
224
+ if (j$.isArray_(baseName) && j$.util.isUndefined(methodNames)) {
225
+ methodNames = baseName;
226
+ baseName = 'unknown';
227
+ }
228
+
229
+ if (!j$.isArray_(methodNames) || methodNames.length === 0) {
230
+ throw 'createSpyObj requires a non-empty array of method names to create spies for';
231
+ }
232
+ var obj = {};
233
+ for (var i = 0; i < methodNames.length; i++) {
234
+ obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]);
235
+ }
236
+ return obj;
237
+ };
238
+ };
239
+
240
+ getJasmineRequireObj().util = function() {
241
+
242
+ var util = {};
243
+
244
+ util.inherit = function(childClass, parentClass) {
245
+ var Subclass = function() {
246
+ };
247
+ Subclass.prototype = parentClass.prototype;
248
+ childClass.prototype = new Subclass();
249
+ };
250
+
251
+ util.htmlEscape = function(str) {
252
+ if (!str) {
253
+ return str;
254
+ }
255
+ return str.replace(/&/g, '&amp;')
256
+ .replace(/</g, '&lt;')
257
+ .replace(/>/g, '&gt;');
258
+ };
259
+
260
+ util.argsToArray = function(args) {
261
+ var arrayOfArgs = [];
262
+ for (var i = 0; i < args.length; i++) {
263
+ arrayOfArgs.push(args[i]);
264
+ }
265
+ return arrayOfArgs;
266
+ };
267
+
268
+ util.isUndefined = function(obj) {
269
+ return obj === void 0;
270
+ };
271
+
272
+ util.arrayContains = function(array, search) {
273
+ var i = array.length;
274
+ while (i--) {
275
+ if (array[i] === search) {
276
+ return true;
277
+ }
278
+ }
279
+ return false;
280
+ };
281
+
282
+ util.clone = function(obj) {
283
+ if (Object.prototype.toString.apply(obj) === '[object Array]') {
284
+ return obj.slice();
285
+ }
286
+
287
+ var cloned = {};
288
+ for (var prop in obj) {
289
+ if (obj.hasOwnProperty(prop)) {
290
+ cloned[prop] = obj[prop];
291
+ }
292
+ }
293
+
294
+ return cloned;
295
+ };
296
+
297
+ return util;
298
+ };
299
+
300
+ getJasmineRequireObj().Spec = function(j$) {
301
+ function Spec(attrs) {
302
+ this.expectationFactory = attrs.expectationFactory;
303
+ this.resultCallback = attrs.resultCallback || function() {};
304
+ this.id = attrs.id;
305
+ this.description = attrs.description || '';
306
+ this.queueableFn = attrs.queueableFn;
307
+ this.beforeAndAfterFns = attrs.beforeAndAfterFns || function() { return {befores: [], afters: []}; };
308
+ this.userContext = attrs.userContext || function() { return {}; };
309
+ this.onStart = attrs.onStart || function() {};
310
+ this.getSpecName = attrs.getSpecName || function() { return ''; };
311
+ this.expectationResultFactory = attrs.expectationResultFactory || function() { };
312
+ this.queueRunnerFactory = attrs.queueRunnerFactory || function() {};
313
+ this.catchingExceptions = attrs.catchingExceptions || function() { return true; };
314
+ this.throwOnExpectationFailure = !!attrs.throwOnExpectationFailure;
315
+
316
+ if (!this.queueableFn.fn) {
317
+ this.pend();
318
+ }
319
+
320
+ this.result = {
321
+ id: this.id,
322
+ description: this.description,
323
+ fullName: this.getFullName(),
324
+ failedExpectations: [],
325
+ passedExpectations: [],
326
+ pendingReason: ''
327
+ };
328
+ }
329
+
330
+ Spec.prototype.addExpectationResult = function(passed, data, isError) {
331
+ var expectationResult = this.expectationResultFactory(data);
332
+ if (passed) {
333
+ this.result.passedExpectations.push(expectationResult);
334
+ } else {
335
+ this.result.failedExpectations.push(expectationResult);
336
+
337
+ if (this.throwOnExpectationFailure && !isError) {
338
+ throw new j$.errors.ExpectationFailed();
339
+ }
340
+ }
341
+ };
342
+
343
+ Spec.prototype.expect = function(actual) {
344
+ return this.expectationFactory(actual, this);
345
+ };
346
+
347
+ Spec.prototype.execute = function(onComplete, enabled) {
348
+ var self = this;
349
+
350
+ this.onStart(this);
351
+
352
+ if (!this.isExecutable() || this.markedPending || enabled === false) {
353
+ complete(enabled);
354
+ return;
355
+ }
356
+
357
+ var fns = this.beforeAndAfterFns();
358
+ var allFns = fns.befores.concat(this.queueableFn).concat(fns.afters);
359
+
360
+ this.queueRunnerFactory({
361
+ queueableFns: allFns,
362
+ onException: function() { self.onException.apply(self, arguments); },
363
+ onComplete: complete,
364
+ userContext: this.userContext()
365
+ });
366
+
367
+ function complete(enabledAgain) {
368
+ self.result.status = self.status(enabledAgain);
369
+ self.resultCallback(self.result);
370
+
371
+ if (onComplete) {
372
+ onComplete();
373
+ }
374
+ }
375
+ };
376
+
377
+ Spec.prototype.onException = function onException(e) {
378
+ if (Spec.isPendingSpecException(e)) {
379
+ this.pend(extractCustomPendingMessage(e));
380
+ return;
381
+ }
382
+
383
+ if (e instanceof j$.errors.ExpectationFailed) {
384
+ return;
385
+ }
386
+
387
+ this.addExpectationResult(false, {
388
+ matcherName: '',
389
+ passed: false,
390
+ expected: '',
391
+ actual: '',
392
+ error: e
393
+ }, true);
394
+ };
395
+
396
+ Spec.prototype.disable = function() {
397
+ this.disabled = true;
398
+ };
399
+
400
+ Spec.prototype.pend = function(message) {
401
+ this.markedPending = true;
402
+ if (message) {
403
+ this.result.pendingReason = message;
404
+ }
405
+ };
406
+
407
+ Spec.prototype.getResult = function() {
408
+ this.result.status = this.status();
409
+ return this.result;
410
+ };
411
+
412
+ Spec.prototype.status = function(enabled) {
413
+ if (this.disabled || enabled === false) {
414
+ return 'disabled';
415
+ }
416
+
417
+ if (this.markedPending) {
418
+ return 'pending';
419
+ }
420
+
421
+ if (this.result.failedExpectations.length > 0) {
422
+ return 'failed';
423
+ } else {
424
+ return 'passed';
425
+ }
426
+ };
427
+
428
+ Spec.prototype.isExecutable = function() {
429
+ return !this.disabled;
430
+ };
431
+
432
+ Spec.prototype.getFullName = function() {
433
+ return this.getSpecName(this);
434
+ };
435
+
436
+ var extractCustomPendingMessage = function(e) {
437
+ var fullMessage = e.toString(),
438
+ boilerplateStart = fullMessage.indexOf(Spec.pendingSpecExceptionMessage),
439
+ boilerplateEnd = boilerplateStart + Spec.pendingSpecExceptionMessage.length;
440
+
441
+ return fullMessage.substr(boilerplateEnd);
442
+ };
443
+
444
+ Spec.pendingSpecExceptionMessage = '=> marked Pending';
445
+
446
+ Spec.isPendingSpecException = function(e) {
447
+ return !!(e && e.toString && e.toString().indexOf(Spec.pendingSpecExceptionMessage) !== -1);
448
+ };
449
+
450
+ return Spec;
451
+ };
452
+
453
+ if (typeof window == void 0 && typeof exports == 'object') {
454
+ exports.Spec = jasmineRequire.Spec;
455
+ }
456
+
457
+ /*jshint bitwise: false*/
458
+
459
+ getJasmineRequireObj().Order = function() {
460
+ function Order(options) {
461
+ this.random = 'random' in options ? options.random : true;
462
+ var seed = this.seed = options.seed || generateSeed();
463
+ this.sort = this.random ? randomOrder : naturalOrder;
464
+
465
+ function naturalOrder(items) {
466
+ return items;
467
+ }
468
+
469
+ function randomOrder(items) {
470
+ var copy = items.slice();
471
+ copy.sort(function(a, b) {
472
+ return jenkinsHash(seed + a.id) - jenkinsHash(seed + b.id);
473
+ });
474
+ return copy;
475
+ }
476
+
477
+ function generateSeed() {
478
+ return String(Math.random()).slice(-5);
479
+ }
480
+
481
+ // Bob Jenkins One-at-a-Time Hash algorithm is a non-cryptographic hash function
482
+ // used to get a different output when the key changes slighly.
483
+ // We use your return to sort the children randomly in a consistent way when
484
+ // used in conjunction with a seed
485
+
486
+ function jenkinsHash(key) {
487
+ var hash, i;
488
+ for(hash = i = 0; i < key.length; ++i) {
489
+ hash += key.charCodeAt(i);
490
+ hash += (hash << 10);
491
+ hash ^= (hash >> 6);
492
+ }
493
+ hash += (hash << 3);
494
+ hash ^= (hash >> 11);
495
+ hash += (hash << 15);
496
+ return hash;
497
+ }
498
+
499
+ }
500
+
501
+ return Order;
502
+ };
503
+
504
+ getJasmineRequireObj().Env = function(j$) {
505
+ function Env(options) {
506
+ options = options || {};
507
+
508
+ var self = this;
509
+ var global = options.global || j$.getGlobal();
510
+
511
+ var totalSpecsDefined = 0;
512
+
513
+ var catchExceptions = true;
514
+
515
+ var realSetTimeout = j$.getGlobal().setTimeout;
516
+ var realClearTimeout = j$.getGlobal().clearTimeout;
517
+ this.clock = new j$.Clock(global, function () { return new j$.DelayedFunctionScheduler(); }, new j$.MockDate(global));
518
+
519
+ var runnableLookupTable = {};
520
+ var runnableResources = {};
521
+
522
+ var currentSpec = null;
523
+ var currentlyExecutingSuites = [];
524
+ var currentDeclarationSuite = null;
525
+ var throwOnExpectationFailure = false;
526
+ var random = false;
527
+ var seed = null;
528
+
529
+ var currentSuite = function() {
530
+ return currentlyExecutingSuites[currentlyExecutingSuites.length - 1];
531
+ };
532
+
533
+ var currentRunnable = function() {
534
+ return currentSpec || currentSuite();
535
+ };
536
+
537
+ var reporter = new j$.ReportDispatcher([
538
+ 'jasmineStarted',
539
+ 'jasmineDone',
540
+ 'suiteStarted',
541
+ 'suiteDone',
542
+ 'specStarted',
543
+ 'specDone'
544
+ ]);
545
+
546
+ this.specFilter = function() {
547
+ return true;
548
+ };
549
+
550
+ this.addCustomEqualityTester = function(tester) {
551
+ if(!currentRunnable()) {
552
+ throw new Error('Custom Equalities must be added in a before function or a spec');
553
+ }
554
+ runnableResources[currentRunnable().id].customEqualityTesters.push(tester);
555
+ };
556
+
557
+ this.addMatchers = function(matchersToAdd) {
558
+ if(!currentRunnable()) {
559
+ throw new Error('Matchers must be added in a before function or a spec');
560
+ }
561
+ var customMatchers = runnableResources[currentRunnable().id].customMatchers;
562
+ for (var matcherName in matchersToAdd) {
563
+ customMatchers[matcherName] = matchersToAdd[matcherName];
564
+ }
565
+ };
566
+
567
+ j$.Expectation.addCoreMatchers(j$.matchers);
568
+
569
+ var nextSpecId = 0;
570
+ var getNextSpecId = function() {
571
+ return 'spec' + nextSpecId++;
572
+ };
573
+
574
+ var nextSuiteId = 0;
575
+ var getNextSuiteId = function() {
576
+ return 'suite' + nextSuiteId++;
577
+ };
578
+
579
+ var expectationFactory = function(actual, spec) {
580
+ return j$.Expectation.Factory({
581
+ util: j$.matchersUtil,
582
+ customEqualityTesters: runnableResources[spec.id].customEqualityTesters,
583
+ customMatchers: runnableResources[spec.id].customMatchers,
584
+ actual: actual,
585
+ addExpectationResult: addExpectationResult
586
+ });
587
+
588
+ function addExpectationResult(passed, result) {
589
+ return spec.addExpectationResult(passed, result);
590
+ }
591
+ };
592
+
593
+ var defaultResourcesForRunnable = function(id, parentRunnableId) {
594
+ var resources = {spies: [], customEqualityTesters: [], customMatchers: {}};
595
+
596
+ if(runnableResources[parentRunnableId]){
597
+ resources.customEqualityTesters = j$.util.clone(runnableResources[parentRunnableId].customEqualityTesters);
598
+ resources.customMatchers = j$.util.clone(runnableResources[parentRunnableId].customMatchers);
599
+ }
600
+
601
+ runnableResources[id] = resources;
602
+ };
603
+
604
+ var clearResourcesForRunnable = function(id) {
605
+ spyRegistry.clearSpies();
606
+ delete runnableResources[id];
607
+ };
608
+
609
+ var beforeAndAfterFns = function(suite) {
610
+ return function() {
611
+ var befores = [],
612
+ afters = [];
613
+
614
+ while(suite) {
615
+ befores = befores.concat(suite.beforeFns);
616
+ afters = afters.concat(suite.afterFns);
617
+
618
+ suite = suite.parentSuite;
619
+ }
620
+
621
+ return {
622
+ befores: befores.reverse(),
623
+ afters: afters
624
+ };
625
+ };
626
+ };
627
+
628
+ var getSpecName = function(spec, suite) {
629
+ return suite.getFullName() + ' ' + spec.description;
630
+ };
631
+
632
+ // TODO: we may just be able to pass in the fn instead of wrapping here
633
+ var buildExpectationResult = j$.buildExpectationResult,
634
+ exceptionFormatter = new j$.ExceptionFormatter(),
635
+ expectationResultFactory = function(attrs) {
636
+ attrs.messageFormatter = exceptionFormatter.message;
637
+ attrs.stackFormatter = exceptionFormatter.stack;
638
+
639
+ return buildExpectationResult(attrs);
640
+ };
641
+
642
+ // TODO: fix this naming, and here's where the value comes in
643
+ this.catchExceptions = function(value) {
644
+ catchExceptions = !!value;
645
+ return catchExceptions;
646
+ };
647
+
648
+ this.catchingExceptions = function() {
649
+ return catchExceptions;
650
+ };
651
+
652
+ var maximumSpecCallbackDepth = 20;
653
+ var currentSpecCallbackDepth = 0;
654
+
655
+ function clearStack(fn) {
656
+ currentSpecCallbackDepth++;
657
+ if (currentSpecCallbackDepth >= maximumSpecCallbackDepth) {
658
+ currentSpecCallbackDepth = 0;
659
+ realSetTimeout(fn, 0);
660
+ } else {
661
+ fn();
662
+ }
663
+ }
664
+
665
+ var catchException = function(e) {
666
+ return j$.Spec.isPendingSpecException(e) || catchExceptions;
667
+ };
668
+
669
+ this.throwOnExpectationFailure = function(value) {
670
+ throwOnExpectationFailure = !!value;
671
+ };
672
+
673
+ this.throwingExpectationFailures = function() {
674
+ return throwOnExpectationFailure;
675
+ };
676
+
677
+ this.randomizeTests = function(value) {
678
+ random = !!value;
679
+ };
680
+
681
+ this.randomTests = function() {
682
+ return random;
683
+ };
684
+
685
+ this.seed = function(value) {
686
+ if (value) {
687
+ seed = value;
688
+ }
689
+ return seed;
690
+ };
691
+
692
+ var queueRunnerFactory = function(options) {
693
+ options.catchException = catchException;
694
+ options.clearStack = options.clearStack || clearStack;
695
+ options.timeout = {setTimeout: realSetTimeout, clearTimeout: realClearTimeout};
696
+ options.fail = self.fail;
697
+
698
+ new j$.QueueRunner(options).execute();
699
+ };
700
+
701
+ var topSuite = new j$.Suite({
702
+ env: this,
703
+ id: getNextSuiteId(),
704
+ description: 'Jasmine__TopLevel__Suite',
705
+ queueRunner: queueRunnerFactory
706
+ });
707
+ runnableLookupTable[topSuite.id] = topSuite;
708
+ defaultResourcesForRunnable(topSuite.id);
709
+ currentDeclarationSuite = topSuite;
710
+
711
+ this.topSuite = function() {
712
+ return topSuite;
713
+ };
714
+
715
+ this.execute = function(runnablesToRun) {
716
+ if(!runnablesToRun) {
717
+ if (focusedRunnables.length) {
718
+ runnablesToRun = focusedRunnables;
719
+ } else {
720
+ runnablesToRun = [topSuite.id];
721
+ }
722
+ }
723
+
724
+ var order = new j$.Order({
725
+ random: random,
726
+ seed: seed
727
+ });
728
+
729
+ var processor = new j$.TreeProcessor({
730
+ tree: topSuite,
731
+ runnableIds: runnablesToRun,
732
+ queueRunnerFactory: queueRunnerFactory,
733
+ nodeStart: function(suite) {
734
+ currentlyExecutingSuites.push(suite);
735
+ defaultResourcesForRunnable(suite.id, suite.parentSuite.id);
736
+ reporter.suiteStarted(suite.result);
737
+ },
738
+ nodeComplete: function(suite, result) {
739
+ if (!suite.disabled) {
740
+ clearResourcesForRunnable(suite.id);
741
+ }
742
+ currentlyExecutingSuites.pop();
743
+ reporter.suiteDone(result);
744
+ },
745
+ orderChildren: function(node) {
746
+ return order.sort(node.children);
747
+ }
748
+ });
749
+
750
+ if(!processor.processTree().valid) {
751
+ throw new Error('Invalid order: would cause a beforeAll or afterAll to be run multiple times');
752
+ }
753
+
754
+ reporter.jasmineStarted({
755
+ totalSpecsDefined: totalSpecsDefined
756
+ });
757
+
758
+ processor.execute(function() {
759
+ reporter.jasmineDone({
760
+ order: order
761
+ });
762
+ });
763
+ };
764
+
765
+ this.addReporter = function(reporterToAdd) {
766
+ reporter.addReporter(reporterToAdd);
767
+ };
768
+
769
+ var spyRegistry = new j$.SpyRegistry({currentSpies: function() {
770
+ if(!currentRunnable()) {
771
+ throw new Error('Spies must be created in a before function or a spec');
772
+ }
773
+ return runnableResources[currentRunnable().id].spies;
774
+ }});
775
+
776
+ this.spyOn = function() {
777
+ return spyRegistry.spyOn.apply(spyRegistry, arguments);
778
+ };
779
+
780
+ var suiteFactory = function(description) {
781
+ var suite = new j$.Suite({
782
+ env: self,
783
+ id: getNextSuiteId(),
784
+ description: description,
785
+ parentSuite: currentDeclarationSuite,
786
+ expectationFactory: expectationFactory,
787
+ expectationResultFactory: expectationResultFactory,
788
+ throwOnExpectationFailure: throwOnExpectationFailure
789
+ });
790
+
791
+ runnableLookupTable[suite.id] = suite;
792
+ return suite;
793
+ };
794
+
795
+ this.describe = function(description, specDefinitions) {
796
+ var suite = suiteFactory(description);
797
+ if (specDefinitions.length > 0) {
798
+ throw new Error('describe does not expect a done parameter');
799
+ }
800
+ if (currentDeclarationSuite.markedPending) {
801
+ suite.pend();
802
+ }
803
+ addSpecsToSuite(suite, specDefinitions);
804
+ return suite;
805
+ };
806
+
807
+ this.xdescribe = function(description, specDefinitions) {
808
+ var suite = suiteFactory(description);
809
+ suite.pend();
810
+ addSpecsToSuite(suite, specDefinitions);
811
+ return suite;
812
+ };
813
+
814
+ var focusedRunnables = [];
815
+
816
+ this.fdescribe = function(description, specDefinitions) {
817
+ var suite = suiteFactory(description);
818
+ suite.isFocused = true;
819
+
820
+ focusedRunnables.push(suite.id);
821
+ unfocusAncestor();
822
+ addSpecsToSuite(suite, specDefinitions);
823
+
824
+ return suite;
825
+ };
826
+
827
+ function addSpecsToSuite(suite, specDefinitions) {
828
+ var parentSuite = currentDeclarationSuite;
829
+ parentSuite.addChild(suite);
830
+ currentDeclarationSuite = suite;
831
+
832
+ var declarationError = null;
833
+ try {
834
+ specDefinitions.call(suite);
835
+ } catch (e) {
836
+ declarationError = e;
837
+ }
838
+
839
+ if (declarationError) {
840
+ self.it('encountered a declaration exception', function() {
841
+ throw declarationError;
842
+ });
843
+ }
844
+
845
+ currentDeclarationSuite = parentSuite;
846
+ }
847
+
848
+ function findFocusedAncestor(suite) {
849
+ while (suite) {
850
+ if (suite.isFocused) {
851
+ return suite.id;
852
+ }
853
+ suite = suite.parentSuite;
854
+ }
855
+
856
+ return null;
857
+ }
858
+
859
+ function unfocusAncestor() {
860
+ var focusedAncestor = findFocusedAncestor(currentDeclarationSuite);
861
+ if (focusedAncestor) {
862
+ for (var i = 0; i < focusedRunnables.length; i++) {
863
+ if (focusedRunnables[i] === focusedAncestor) {
864
+ focusedRunnables.splice(i, 1);
865
+ break;
866
+ }
867
+ }
868
+ }
869
+ }
870
+
871
+ var specFactory = function(description, fn, suite, timeout) {
872
+ totalSpecsDefined++;
873
+ var spec = new j$.Spec({
874
+ id: getNextSpecId(),
875
+ beforeAndAfterFns: beforeAndAfterFns(suite),
876
+ expectationFactory: expectationFactory,
877
+ resultCallback: specResultCallback,
878
+ getSpecName: function(spec) {
879
+ return getSpecName(spec, suite);
880
+ },
881
+ onStart: specStarted,
882
+ description: description,
883
+ expectationResultFactory: expectationResultFactory,
884
+ queueRunnerFactory: queueRunnerFactory,
885
+ userContext: function() { return suite.clonedSharedUserContext(); },
886
+ queueableFn: {
887
+ fn: fn,
888
+ timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; }
889
+ },
890
+ throwOnExpectationFailure: throwOnExpectationFailure
891
+ });
892
+
893
+ runnableLookupTable[spec.id] = spec;
894
+
895
+ if (!self.specFilter(spec)) {
896
+ spec.disable();
897
+ }
898
+
899
+ return spec;
900
+
901
+ function specResultCallback(result) {
902
+ clearResourcesForRunnable(spec.id);
903
+ currentSpec = null;
904
+ reporter.specDone(result);
905
+ }
906
+
907
+ function specStarted(spec) {
908
+ currentSpec = spec;
909
+ defaultResourcesForRunnable(spec.id, suite.id);
910
+ reporter.specStarted(spec.result);
911
+ }
912
+ };
913
+
914
+ this.it = function(description, fn, timeout) {
915
+ var spec = specFactory(description, fn, currentDeclarationSuite, timeout);
916
+ if (currentDeclarationSuite.markedPending) {
917
+ spec.pend();
918
+ }
919
+ currentDeclarationSuite.addChild(spec);
920
+ return spec;
921
+ };
922
+
923
+ this.xit = function() {
924
+ var spec = this.it.apply(this, arguments);
925
+ spec.pend('Temporarily disabled with xit');
926
+ return spec;
927
+ };
928
+
929
+ this.fit = function(description, fn, timeout){
930
+ var spec = specFactory(description, fn, currentDeclarationSuite, timeout);
931
+ currentDeclarationSuite.addChild(spec);
932
+ focusedRunnables.push(spec.id);
933
+ unfocusAncestor();
934
+ return spec;
935
+ };
936
+
937
+ this.expect = function(actual) {
938
+ if (!currentRunnable()) {
939
+ throw new Error('\'expect\' was used when there was no current spec, this could be because an asynchronous test timed out');
940
+ }
941
+
942
+ return currentRunnable().expect(actual);
943
+ };
944
+
945
+ this.beforeEach = function(beforeEachFunction, timeout) {
946
+ currentDeclarationSuite.beforeEach({
947
+ fn: beforeEachFunction,
948
+ timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; }
949
+ });
950
+ };
951
+
952
+ this.beforeAll = function(beforeAllFunction, timeout) {
953
+ currentDeclarationSuite.beforeAll({
954
+ fn: beforeAllFunction,
955
+ timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; }
956
+ });
957
+ };
958
+
959
+ this.afterEach = function(afterEachFunction, timeout) {
960
+ currentDeclarationSuite.afterEach({
961
+ fn: afterEachFunction,
962
+ timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; }
963
+ });
964
+ };
965
+
966
+ this.afterAll = function(afterAllFunction, timeout) {
967
+ currentDeclarationSuite.afterAll({
968
+ fn: afterAllFunction,
969
+ timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; }
970
+ });
971
+ };
972
+
973
+ this.pending = function(message) {
974
+ var fullMessage = j$.Spec.pendingSpecExceptionMessage;
975
+ if(message) {
976
+ fullMessage += message;
977
+ }
978
+ throw fullMessage;
979
+ };
980
+
981
+ this.fail = function(error) {
982
+ var message = 'Failed';
983
+ if (error) {
984
+ message += ': ';
985
+ message += error.message || error;
986
+ }
987
+
988
+ currentRunnable().addExpectationResult(false, {
989
+ matcherName: '',
990
+ passed: false,
991
+ expected: '',
992
+ actual: '',
993
+ message: message,
994
+ error: error && error.message ? error : null
995
+ });
996
+ };
997
+ }
998
+
999
+ return Env;
1000
+ };
1001
+
1002
+ getJasmineRequireObj().JsApiReporter = function() {
1003
+
1004
+ var noopTimer = {
1005
+ start: function(){},
1006
+ elapsed: function(){ return 0; }
1007
+ };
1008
+
1009
+ function JsApiReporter(options) {
1010
+ var timer = options.timer || noopTimer,
1011
+ status = 'loaded';
1012
+
1013
+ this.started = false;
1014
+ this.finished = false;
1015
+ this.runDetails = {};
1016
+
1017
+ this.jasmineStarted = function() {
1018
+ this.started = true;
1019
+ status = 'started';
1020
+ timer.start();
1021
+ };
1022
+
1023
+ var executionTime;
1024
+
1025
+ this.jasmineDone = function(runDetails) {
1026
+ this.finished = true;
1027
+ this.runDetails = runDetails;
1028
+ executionTime = timer.elapsed();
1029
+ status = 'done';
1030
+ };
1031
+
1032
+ this.status = function() {
1033
+ return status;
1034
+ };
1035
+
1036
+ var suites = [],
1037
+ suites_hash = {};
1038
+
1039
+ this.suiteStarted = function(result) {
1040
+ suites_hash[result.id] = result;
1041
+ };
1042
+
1043
+ this.suiteDone = function(result) {
1044
+ storeSuite(result);
1045
+ };
1046
+
1047
+ this.suiteResults = function(index, length) {
1048
+ return suites.slice(index, index + length);
1049
+ };
1050
+
1051
+ function storeSuite(result) {
1052
+ suites.push(result);
1053
+ suites_hash[result.id] = result;
1054
+ }
1055
+
1056
+ this.suites = function() {
1057
+ return suites_hash;
1058
+ };
1059
+
1060
+ var specs = [];
1061
+
1062
+ this.specDone = function(result) {
1063
+ specs.push(result);
1064
+ };
1065
+
1066
+ this.specResults = function(index, length) {
1067
+ return specs.slice(index, index + length);
1068
+ };
1069
+
1070
+ this.specs = function() {
1071
+ return specs;
1072
+ };
1073
+
1074
+ this.executionTime = function() {
1075
+ return executionTime;
1076
+ };
1077
+
1078
+ }
1079
+
1080
+ return JsApiReporter;
1081
+ };
1082
+
1083
+ getJasmineRequireObj().CallTracker = function() {
1084
+
1085
+ function CallTracker() {
1086
+ var calls = [];
1087
+
1088
+ this.track = function(context) {
1089
+ calls.push(context);
1090
+ };
1091
+
1092
+ this.any = function() {
1093
+ return !!calls.length;
1094
+ };
1095
+
1096
+ this.count = function() {
1097
+ return calls.length;
1098
+ };
1099
+
1100
+ this.argsFor = function(index) {
1101
+ var call = calls[index];
1102
+ return call ? call.args : [];
1103
+ };
1104
+
1105
+ this.all = function() {
1106
+ return calls;
1107
+ };
1108
+
1109
+ this.allArgs = function() {
1110
+ var callArgs = [];
1111
+ for(var i = 0; i < calls.length; i++){
1112
+ callArgs.push(calls[i].args);
1113
+ }
1114
+
1115
+ return callArgs;
1116
+ };
1117
+
1118
+ this.first = function() {
1119
+ return calls[0];
1120
+ };
1121
+
1122
+ this.mostRecent = function() {
1123
+ return calls[calls.length - 1];
1124
+ };
1125
+
1126
+ this.reset = function() {
1127
+ calls = [];
1128
+ };
1129
+ }
1130
+
1131
+ return CallTracker;
1132
+ };
1133
+
1134
+ getJasmineRequireObj().Clock = function() {
1135
+ function Clock(global, delayedFunctionSchedulerFactory, mockDate) {
1136
+ var self = this,
1137
+ realTimingFunctions = {
1138
+ setTimeout: global.setTimeout,
1139
+ clearTimeout: global.clearTimeout,
1140
+ setInterval: global.setInterval,
1141
+ clearInterval: global.clearInterval
1142
+ },
1143
+ fakeTimingFunctions = {
1144
+ setTimeout: setTimeout,
1145
+ clearTimeout: clearTimeout,
1146
+ setInterval: setInterval,
1147
+ clearInterval: clearInterval
1148
+ },
1149
+ installed = false,
1150
+ delayedFunctionScheduler,
1151
+ timer;
1152
+
1153
+
1154
+ self.install = function() {
1155
+ if(!originalTimingFunctionsIntact()) {
1156
+ throw new Error('Jasmine Clock was unable to install over custom global timer functions. Is the clock already installed?');
1157
+ }
1158
+ replace(global, fakeTimingFunctions);
1159
+ timer = fakeTimingFunctions;
1160
+ delayedFunctionScheduler = delayedFunctionSchedulerFactory();
1161
+ installed = true;
1162
+
1163
+ return self;
1164
+ };
1165
+
1166
+ self.uninstall = function() {
1167
+ delayedFunctionScheduler = null;
1168
+ mockDate.uninstall();
1169
+ replace(global, realTimingFunctions);
1170
+
1171
+ timer = realTimingFunctions;
1172
+ installed = false;
1173
+ };
1174
+
1175
+ self.withMock = function(closure) {
1176
+ this.install();
1177
+ try {
1178
+ closure();
1179
+ } finally {
1180
+ this.uninstall();
1181
+ }
1182
+ };
1183
+
1184
+ self.mockDate = function(initialDate) {
1185
+ mockDate.install(initialDate);
1186
+ };
1187
+
1188
+ self.setTimeout = function(fn, delay, params) {
1189
+ if (legacyIE()) {
1190
+ if (arguments.length > 2) {
1191
+ throw new Error('IE < 9 cannot support extra params to setTimeout without a polyfill');
1192
+ }
1193
+ return timer.setTimeout(fn, delay);
1194
+ }
1195
+ return Function.prototype.apply.apply(timer.setTimeout, [global, arguments]);
1196
+ };
1197
+
1198
+ self.setInterval = function(fn, delay, params) {
1199
+ if (legacyIE()) {
1200
+ if (arguments.length > 2) {
1201
+ throw new Error('IE < 9 cannot support extra params to setInterval without a polyfill');
1202
+ }
1203
+ return timer.setInterval(fn, delay);
1204
+ }
1205
+ return Function.prototype.apply.apply(timer.setInterval, [global, arguments]);
1206
+ };
1207
+
1208
+ self.clearTimeout = function(id) {
1209
+ return Function.prototype.call.apply(timer.clearTimeout, [global, id]);
1210
+ };
1211
+
1212
+ self.clearInterval = function(id) {
1213
+ return Function.prototype.call.apply(timer.clearInterval, [global, id]);
1214
+ };
1215
+
1216
+ self.tick = function(millis) {
1217
+ if (installed) {
1218
+ mockDate.tick(millis);
1219
+ delayedFunctionScheduler.tick(millis);
1220
+ } else {
1221
+ throw new Error('Mock clock is not installed, use jasmine.clock().install()');
1222
+ }
1223
+ };
1224
+
1225
+ return self;
1226
+
1227
+ function originalTimingFunctionsIntact() {
1228
+ return global.setTimeout === realTimingFunctions.setTimeout &&
1229
+ global.clearTimeout === realTimingFunctions.clearTimeout &&
1230
+ global.setInterval === realTimingFunctions.setInterval &&
1231
+ global.clearInterval === realTimingFunctions.clearInterval;
1232
+ }
1233
+
1234
+ function legacyIE() {
1235
+ //if these methods are polyfilled, apply will be present
1236
+ return !(realTimingFunctions.setTimeout || realTimingFunctions.setInterval).apply;
1237
+ }
1238
+
1239
+ function replace(dest, source) {
1240
+ for (var prop in source) {
1241
+ dest[prop] = source[prop];
1242
+ }
1243
+ }
1244
+
1245
+ function setTimeout(fn, delay) {
1246
+ return delayedFunctionScheduler.scheduleFunction(fn, delay, argSlice(arguments, 2));
1247
+ }
1248
+
1249
+ function clearTimeout(id) {
1250
+ return delayedFunctionScheduler.removeFunctionWithId(id);
1251
+ }
1252
+
1253
+ function setInterval(fn, interval) {
1254
+ return delayedFunctionScheduler.scheduleFunction(fn, interval, argSlice(arguments, 2), true);
1255
+ }
1256
+
1257
+ function clearInterval(id) {
1258
+ return delayedFunctionScheduler.removeFunctionWithId(id);
1259
+ }
1260
+
1261
+ function argSlice(argsObj, n) {
1262
+ return Array.prototype.slice.call(argsObj, n);
1263
+ }
1264
+ }
1265
+
1266
+ return Clock;
1267
+ };
1268
+
1269
+ getJasmineRequireObj().DelayedFunctionScheduler = function() {
1270
+ function DelayedFunctionScheduler() {
1271
+ var self = this;
1272
+ var scheduledLookup = [];
1273
+ var scheduledFunctions = {};
1274
+ var currentTime = 0;
1275
+ var delayedFnCount = 0;
1276
+
1277
+ self.tick = function(millis) {
1278
+ millis = millis || 0;
1279
+ var endTime = currentTime + millis;
1280
+
1281
+ runScheduledFunctions(endTime);
1282
+ currentTime = endTime;
1283
+ };
1284
+
1285
+ self.scheduleFunction = function(funcToCall, millis, params, recurring, timeoutKey, runAtMillis) {
1286
+ var f;
1287
+ if (typeof(funcToCall) === 'string') {
1288
+ /* jshint evil: true */
1289
+ f = function() { return eval(funcToCall); };
1290
+ /* jshint evil: false */
1291
+ } else {
1292
+ f = funcToCall;
1293
+ }
1294
+
1295
+ millis = millis || 0;
1296
+ timeoutKey = timeoutKey || ++delayedFnCount;
1297
+ runAtMillis = runAtMillis || (currentTime + millis);
1298
+
1299
+ var funcToSchedule = {
1300
+ runAtMillis: runAtMillis,
1301
+ funcToCall: f,
1302
+ recurring: recurring,
1303
+ params: params,
1304
+ timeoutKey: timeoutKey,
1305
+ millis: millis
1306
+ };
1307
+
1308
+ if (runAtMillis in scheduledFunctions) {
1309
+ scheduledFunctions[runAtMillis].push(funcToSchedule);
1310
+ } else {
1311
+ scheduledFunctions[runAtMillis] = [funcToSchedule];
1312
+ scheduledLookup.push(runAtMillis);
1313
+ scheduledLookup.sort(function (a, b) {
1314
+ return a - b;
1315
+ });
1316
+ }
1317
+
1318
+ return timeoutKey;
1319
+ };
1320
+
1321
+ self.removeFunctionWithId = function(timeoutKey) {
1322
+ for (var runAtMillis in scheduledFunctions) {
1323
+ var funcs = scheduledFunctions[runAtMillis];
1324
+ var i = indexOfFirstToPass(funcs, function (func) {
1325
+ return func.timeoutKey === timeoutKey;
1326
+ });
1327
+
1328
+ if (i > -1) {
1329
+ if (funcs.length === 1) {
1330
+ delete scheduledFunctions[runAtMillis];
1331
+ deleteFromLookup(runAtMillis);
1332
+ } else {
1333
+ funcs.splice(i, 1);
1334
+ }
1335
+
1336
+ // intervals get rescheduled when executed, so there's never more
1337
+ // than a single scheduled function with a given timeoutKey
1338
+ break;
1339
+ }
1340
+ }
1341
+ };
1342
+
1343
+ return self;
1344
+
1345
+ function indexOfFirstToPass(array, testFn) {
1346
+ var index = -1;
1347
+
1348
+ for (var i = 0; i < array.length; ++i) {
1349
+ if (testFn(array[i])) {
1350
+ index = i;
1351
+ break;
1352
+ }
1353
+ }
1354
+
1355
+ return index;
1356
+ }
1357
+
1358
+ function deleteFromLookup(key) {
1359
+ var value = Number(key);
1360
+ var i = indexOfFirstToPass(scheduledLookup, function (millis) {
1361
+ return millis === value;
1362
+ });
1363
+
1364
+ if (i > -1) {
1365
+ scheduledLookup.splice(i, 1);
1366
+ }
1367
+ }
1368
+
1369
+ function reschedule(scheduledFn) {
1370
+ self.scheduleFunction(scheduledFn.funcToCall,
1371
+ scheduledFn.millis,
1372
+ scheduledFn.params,
1373
+ true,
1374
+ scheduledFn.timeoutKey,
1375
+ scheduledFn.runAtMillis + scheduledFn.millis);
1376
+ }
1377
+
1378
+ function forEachFunction(funcsToRun, callback) {
1379
+ for (var i = 0; i < funcsToRun.length; ++i) {
1380
+ callback(funcsToRun[i]);
1381
+ }
1382
+ }
1383
+
1384
+ function runScheduledFunctions(endTime) {
1385
+ if (scheduledLookup.length === 0 || scheduledLookup[0] > endTime) {
1386
+ return;
1387
+ }
1388
+
1389
+ do {
1390
+ currentTime = scheduledLookup.shift();
1391
+
1392
+ var funcsToRun = scheduledFunctions[currentTime];
1393
+ delete scheduledFunctions[currentTime];
1394
+
1395
+ forEachFunction(funcsToRun, function(funcToRun) {
1396
+ if (funcToRun.recurring) {
1397
+ reschedule(funcToRun);
1398
+ }
1399
+ });
1400
+
1401
+ forEachFunction(funcsToRun, function(funcToRun) {
1402
+ funcToRun.funcToCall.apply(null, funcToRun.params || []);
1403
+ });
1404
+ } while (scheduledLookup.length > 0 &&
1405
+ // checking first if we're out of time prevents setTimeout(0)
1406
+ // scheduled in a funcToRun from forcing an extra iteration
1407
+ currentTime !== endTime &&
1408
+ scheduledLookup[0] <= endTime);
1409
+ }
1410
+ }
1411
+
1412
+ return DelayedFunctionScheduler;
1413
+ };
1414
+
1415
+ getJasmineRequireObj().ExceptionFormatter = function() {
1416
+ function ExceptionFormatter() {
1417
+ this.message = function(error) {
1418
+ var message = '';
1419
+
1420
+ if (error.name && error.message) {
1421
+ message += error.name + ': ' + error.message;
1422
+ } else {
1423
+ message += error.toString() + ' thrown';
1424
+ }
1425
+
1426
+ if (error.fileName || error.sourceURL) {
1427
+ message += ' in ' + (error.fileName || error.sourceURL);
1428
+ }
1429
+
1430
+ if (error.line || error.lineNumber) {
1431
+ message += ' (line ' + (error.line || error.lineNumber) + ')';
1432
+ }
1433
+
1434
+ return message;
1435
+ };
1436
+
1437
+ this.stack = function(error) {
1438
+ return error ? error.stack : null;
1439
+ };
1440
+ }
1441
+
1442
+ return ExceptionFormatter;
1443
+ };
1444
+
1445
+ getJasmineRequireObj().Expectation = function() {
1446
+
1447
+ function Expectation(options) {
1448
+ this.util = options.util || { buildFailureMessage: function() {} };
1449
+ this.customEqualityTesters = options.customEqualityTesters || [];
1450
+ this.actual = options.actual;
1451
+ this.addExpectationResult = options.addExpectationResult || function(){};
1452
+ this.isNot = options.isNot;
1453
+
1454
+ var customMatchers = options.customMatchers || {};
1455
+ for (var matcherName in customMatchers) {
1456
+ this[matcherName] = Expectation.prototype.wrapCompare(matcherName, customMatchers[matcherName]);
1457
+ }
1458
+ }
1459
+
1460
+ Expectation.prototype.wrapCompare = function(name, matcherFactory) {
1461
+ return function() {
1462
+ var args = Array.prototype.slice.call(arguments, 0),
1463
+ expected = args.slice(0),
1464
+ message = '';
1465
+
1466
+ args.unshift(this.actual);
1467
+
1468
+ var matcher = matcherFactory(this.util, this.customEqualityTesters),
1469
+ matcherCompare = matcher.compare;
1470
+
1471
+ function defaultNegativeCompare() {
1472
+ var result = matcher.compare.apply(null, args);
1473
+ result.pass = !result.pass;
1474
+ return result;
1475
+ }
1476
+
1477
+ if (this.isNot) {
1478
+ matcherCompare = matcher.negativeCompare || defaultNegativeCompare;
1479
+ }
1480
+
1481
+ var result = matcherCompare.apply(null, args);
1482
+
1483
+ if (!result.pass) {
1484
+ if (!result.message) {
1485
+ args.unshift(this.isNot);
1486
+ args.unshift(name);
1487
+ message = this.util.buildFailureMessage.apply(null, args);
1488
+ } else {
1489
+ if (Object.prototype.toString.apply(result.message) === '[object Function]') {
1490
+ message = result.message();
1491
+ } else {
1492
+ message = result.message;
1493
+ }
1494
+ }
1495
+ }
1496
+
1497
+ if (expected.length == 1) {
1498
+ expected = expected[0];
1499
+ }
1500
+
1501
+ // TODO: how many of these params are needed?
1502
+ this.addExpectationResult(
1503
+ result.pass,
1504
+ {
1505
+ matcherName: name,
1506
+ passed: result.pass,
1507
+ message: message,
1508
+ actual: this.actual,
1509
+ expected: expected // TODO: this may need to be arrayified/sliced
1510
+ }
1511
+ );
1512
+ };
1513
+ };
1514
+
1515
+ Expectation.addCoreMatchers = function(matchers) {
1516
+ var prototype = Expectation.prototype;
1517
+ for (var matcherName in matchers) {
1518
+ var matcher = matchers[matcherName];
1519
+ prototype[matcherName] = prototype.wrapCompare(matcherName, matcher);
1520
+ }
1521
+ };
1522
+
1523
+ Expectation.Factory = function(options) {
1524
+ options = options || {};
1525
+
1526
+ var expect = new Expectation(options);
1527
+
1528
+ // TODO: this would be nice as its own Object - NegativeExpectation
1529
+ // TODO: copy instead of mutate options
1530
+ options.isNot = true;
1531
+ expect.not = new Expectation(options);
1532
+
1533
+ return expect;
1534
+ };
1535
+
1536
+ return Expectation;
1537
+ };
1538
+
1539
+ //TODO: expectation result may make more sense as a presentation of an expectation.
1540
+ getJasmineRequireObj().buildExpectationResult = function() {
1541
+ function buildExpectationResult(options) {
1542
+ var messageFormatter = options.messageFormatter || function() {},
1543
+ stackFormatter = options.stackFormatter || function() {};
1544
+
1545
+ var result = {
1546
+ matcherName: options.matcherName,
1547
+ message: message(),
1548
+ stack: stack(),
1549
+ passed: options.passed
1550
+ };
1551
+
1552
+ if(!result.passed) {
1553
+ result.expected = options.expected;
1554
+ result.actual = options.actual;
1555
+ }
1556
+
1557
+ return result;
1558
+
1559
+ function message() {
1560
+ if (options.passed) {
1561
+ return 'Passed.';
1562
+ } else if (options.message) {
1563
+ return options.message;
1564
+ } else if (options.error) {
1565
+ return messageFormatter(options.error);
1566
+ }
1567
+ return '';
1568
+ }
1569
+
1570
+ function stack() {
1571
+ if (options.passed) {
1572
+ return '';
1573
+ }
1574
+
1575
+ var error = options.error;
1576
+ if (!error) {
1577
+ try {
1578
+ throw new Error(message());
1579
+ } catch (e) {
1580
+ error = e;
1581
+ }
1582
+ }
1583
+ return stackFormatter(error);
1584
+ }
1585
+ }
1586
+
1587
+ return buildExpectationResult;
1588
+ };
1589
+
1590
+ getJasmineRequireObj().MockDate = function() {
1591
+ function MockDate(global) {
1592
+ var self = this;
1593
+ var currentTime = 0;
1594
+
1595
+ if (!global || !global.Date) {
1596
+ self.install = function() {};
1597
+ self.tick = function() {};
1598
+ self.uninstall = function() {};
1599
+ return self;
1600
+ }
1601
+
1602
+ var GlobalDate = global.Date;
1603
+
1604
+ self.install = function(mockDate) {
1605
+ if (mockDate instanceof GlobalDate) {
1606
+ currentTime = mockDate.getTime();
1607
+ } else {
1608
+ currentTime = new GlobalDate().getTime();
1609
+ }
1610
+
1611
+ global.Date = FakeDate;
1612
+ };
1613
+
1614
+ self.tick = function(millis) {
1615
+ millis = millis || 0;
1616
+ currentTime = currentTime + millis;
1617
+ };
1618
+
1619
+ self.uninstall = function() {
1620
+ currentTime = 0;
1621
+ global.Date = GlobalDate;
1622
+ };
1623
+
1624
+ createDateProperties();
1625
+
1626
+ return self;
1627
+
1628
+ function FakeDate() {
1629
+ switch(arguments.length) {
1630
+ case 0:
1631
+ return new GlobalDate(currentTime);
1632
+ case 1:
1633
+ return new GlobalDate(arguments[0]);
1634
+ case 2:
1635
+ return new GlobalDate(arguments[0], arguments[1]);
1636
+ case 3:
1637
+ return new GlobalDate(arguments[0], arguments[1], arguments[2]);
1638
+ case 4:
1639
+ return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3]);
1640
+ case 5:
1641
+ return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3],
1642
+ arguments[4]);
1643
+ case 6:
1644
+ return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3],
1645
+ arguments[4], arguments[5]);
1646
+ default:
1647
+ return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3],
1648
+ arguments[4], arguments[5], arguments[6]);
1649
+ }
1650
+ }
1651
+
1652
+ function createDateProperties() {
1653
+ FakeDate.prototype = GlobalDate.prototype;
1654
+
1655
+ FakeDate.now = function() {
1656
+ if (GlobalDate.now) {
1657
+ return currentTime;
1658
+ } else {
1659
+ throw new Error('Browser does not support Date.now()');
1660
+ }
1661
+ };
1662
+
1663
+ FakeDate.toSource = GlobalDate.toSource;
1664
+ FakeDate.toString = GlobalDate.toString;
1665
+ FakeDate.parse = GlobalDate.parse;
1666
+ FakeDate.UTC = GlobalDate.UTC;
1667
+ }
1668
+ }
1669
+
1670
+ return MockDate;
1671
+ };
1672
+
1673
+ getJasmineRequireObj().pp = function(j$) {
1674
+
1675
+ function PrettyPrinter() {
1676
+ this.ppNestLevel_ = 0;
1677
+ this.seen = [];
1678
+ }
1679
+
1680
+ PrettyPrinter.prototype.format = function(value) {
1681
+ this.ppNestLevel_++;
1682
+ try {
1683
+ if (j$.util.isUndefined(value)) {
1684
+ this.emitScalar('undefined');
1685
+ } else if (value === null) {
1686
+ this.emitScalar('null');
1687
+ } else if (value === 0 && 1/value === -Infinity) {
1688
+ this.emitScalar('-0');
1689
+ } else if (value === j$.getGlobal()) {
1690
+ this.emitScalar('<global>');
1691
+ } else if (value.jasmineToString) {
1692
+ this.emitScalar(value.jasmineToString());
1693
+ } else if (typeof value === 'string') {
1694
+ this.emitString(value);
1695
+ } else if (j$.isSpy(value)) {
1696
+ this.emitScalar('spy on ' + value.and.identity());
1697
+ } else if (value instanceof RegExp) {
1698
+ this.emitScalar(value.toString());
1699
+ } else if (typeof value === 'function') {
1700
+ this.emitScalar('Function');
1701
+ } else if (typeof value.nodeType === 'number') {
1702
+ this.emitScalar('HTMLNode');
1703
+ } else if (value instanceof Date) {
1704
+ this.emitScalar('Date(' + value + ')');
1705
+ } else if (value.toString && typeof value === 'object' && !(value instanceof Array) && value.toString !== Object.prototype.toString) {
1706
+ this.emitScalar(value.toString());
1707
+ } else if (j$.util.arrayContains(this.seen, value)) {
1708
+ this.emitScalar('<circular reference: ' + (j$.isArray_(value) ? 'Array' : 'Object') + '>');
1709
+ } else if (j$.isArray_(value) || j$.isA_('Object', value)) {
1710
+ this.seen.push(value);
1711
+ if (j$.isArray_(value)) {
1712
+ this.emitArray(value);
1713
+ } else {
1714
+ this.emitObject(value);
1715
+ }
1716
+ this.seen.pop();
1717
+ } else {
1718
+ this.emitScalar(value.toString());
1719
+ }
1720
+ } finally {
1721
+ this.ppNestLevel_--;
1722
+ }
1723
+ };
1724
+
1725
+ PrettyPrinter.prototype.iterateObject = function(obj, fn) {
1726
+ for (var property in obj) {
1727
+ if (!Object.prototype.hasOwnProperty.call(obj, property)) { continue; }
1728
+ fn(property, obj.__lookupGetter__ ? (!j$.util.isUndefined(obj.__lookupGetter__(property)) &&
1729
+ obj.__lookupGetter__(property) !== null) : false);
1730
+ }
1731
+ };
1732
+
1733
+ PrettyPrinter.prototype.emitArray = j$.unimplementedMethod_;
1734
+ PrettyPrinter.prototype.emitObject = j$.unimplementedMethod_;
1735
+ PrettyPrinter.prototype.emitScalar = j$.unimplementedMethod_;
1736
+ PrettyPrinter.prototype.emitString = j$.unimplementedMethod_;
1737
+
1738
+ function StringPrettyPrinter() {
1739
+ PrettyPrinter.call(this);
1740
+
1741
+ this.string = '';
1742
+ }
1743
+
1744
+ j$.util.inherit(StringPrettyPrinter, PrettyPrinter);
1745
+
1746
+ StringPrettyPrinter.prototype.emitScalar = function(value) {
1747
+ this.append(value);
1748
+ };
1749
+
1750
+ StringPrettyPrinter.prototype.emitString = function(value) {
1751
+ this.append('\'' + value + '\'');
1752
+ };
1753
+
1754
+ StringPrettyPrinter.prototype.emitArray = function(array) {
1755
+ if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) {
1756
+ this.append('Array');
1757
+ return;
1758
+ }
1759
+ var length = Math.min(array.length, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH);
1760
+ this.append('[ ');
1761
+ for (var i = 0; i < length; i++) {
1762
+ if (i > 0) {
1763
+ this.append(', ');
1764
+ }
1765
+ this.format(array[i]);
1766
+ }
1767
+ if(array.length > length){
1768
+ this.append(', ...');
1769
+ }
1770
+
1771
+ var self = this;
1772
+ var first = array.length === 0;
1773
+ this.iterateObject(array, function(property, isGetter) {
1774
+ if (property.match(/^\d+$/)) {
1775
+ return;
1776
+ }
1777
+
1778
+ if (first) {
1779
+ first = false;
1780
+ } else {
1781
+ self.append(', ');
1782
+ }
1783
+
1784
+ self.formatProperty(array, property, isGetter);
1785
+ });
1786
+
1787
+ this.append(' ]');
1788
+ };
1789
+
1790
+ StringPrettyPrinter.prototype.emitObject = function(obj) {
1791
+ var constructorName = obj.constructor ? j$.fnNameFor(obj.constructor) : 'null';
1792
+ this.append(constructorName);
1793
+
1794
+ if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) {
1795
+ return;
1796
+ }
1797
+
1798
+ var self = this;
1799
+ this.append('({ ');
1800
+ var first = true;
1801
+
1802
+ this.iterateObject(obj, function(property, isGetter) {
1803
+ if (first) {
1804
+ first = false;
1805
+ } else {
1806
+ self.append(', ');
1807
+ }
1808
+
1809
+ self.formatProperty(obj, property, isGetter);
1810
+ });
1811
+
1812
+ this.append(' })');
1813
+ };
1814
+
1815
+ StringPrettyPrinter.prototype.formatProperty = function(obj, property, isGetter) {
1816
+ this.append(property);
1817
+ this.append(': ');
1818
+ if (isGetter) {
1819
+ this.append('<getter>');
1820
+ } else {
1821
+ this.format(obj[property]);
1822
+ }
1823
+ };
1824
+
1825
+ StringPrettyPrinter.prototype.append = function(value) {
1826
+ this.string += value;
1827
+ };
1828
+
1829
+ return function(value) {
1830
+ var stringPrettyPrinter = new StringPrettyPrinter();
1831
+ stringPrettyPrinter.format(value);
1832
+ return stringPrettyPrinter.string;
1833
+ };
1834
+ };
1835
+
1836
+ getJasmineRequireObj().QueueRunner = function(j$) {
1837
+
1838
+ function once(fn) {
1839
+ var called = false;
1840
+ return function() {
1841
+ if (!called) {
1842
+ called = true;
1843
+ fn();
1844
+ }
1845
+ };
1846
+ }
1847
+
1848
+ function QueueRunner(attrs) {
1849
+ this.queueableFns = attrs.queueableFns || [];
1850
+ this.onComplete = attrs.onComplete || function() {};
1851
+ this.clearStack = attrs.clearStack || function(fn) {fn();};
1852
+ this.onException = attrs.onException || function() {};
1853
+ this.catchException = attrs.catchException || function() { return true; };
1854
+ this.userContext = attrs.userContext || {};
1855
+ this.timeout = attrs.timeout || {setTimeout: setTimeout, clearTimeout: clearTimeout};
1856
+ this.fail = attrs.fail || function() {};
1857
+ }
1858
+
1859
+ QueueRunner.prototype.execute = function() {
1860
+ this.run(this.queueableFns, 0);
1861
+ };
1862
+
1863
+ QueueRunner.prototype.run = function(queueableFns, recursiveIndex) {
1864
+ var length = queueableFns.length,
1865
+ self = this,
1866
+ iterativeIndex;
1867
+
1868
+
1869
+ for(iterativeIndex = recursiveIndex; iterativeIndex < length; iterativeIndex++) {
1870
+ var queueableFn = queueableFns[iterativeIndex];
1871
+ if (queueableFn.fn.length > 0) {
1872
+ attemptAsync(queueableFn);
1873
+ return;
1874
+ } else {
1875
+ attemptSync(queueableFn);
1876
+ }
1877
+ }
1878
+
1879
+ var runnerDone = iterativeIndex >= length;
1880
+
1881
+ if (runnerDone) {
1882
+ this.clearStack(this.onComplete);
1883
+ }
1884
+
1885
+ function attemptSync(queueableFn) {
1886
+ try {
1887
+ queueableFn.fn.call(self.userContext);
1888
+ } catch (e) {
1889
+ handleException(e, queueableFn);
1890
+ }
1891
+ }
1892
+
1893
+ function attemptAsync(queueableFn) {
1894
+ var clearTimeout = function () {
1895
+ Function.prototype.apply.apply(self.timeout.clearTimeout, [j$.getGlobal(), [timeoutId]]);
1896
+ },
1897
+ next = once(function () {
1898
+ clearTimeout(timeoutId);
1899
+ self.run(queueableFns, iterativeIndex + 1);
1900
+ }),
1901
+ timeoutId;
1902
+
1903
+ next.fail = function() {
1904
+ self.fail.apply(null, arguments);
1905
+ next();
1906
+ };
1907
+
1908
+ if (queueableFn.timeout) {
1909
+ timeoutId = Function.prototype.apply.apply(self.timeout.setTimeout, [j$.getGlobal(), [function() {
1910
+ var error = new Error('Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.');
1911
+ onException(error);
1912
+ next();
1913
+ }, queueableFn.timeout()]]);
1914
+ }
1915
+
1916
+ try {
1917
+ queueableFn.fn.call(self.userContext, next);
1918
+ } catch (e) {
1919
+ handleException(e, queueableFn);
1920
+ next();
1921
+ }
1922
+ }
1923
+
1924
+ function onException(e) {
1925
+ self.onException(e);
1926
+ }
1927
+
1928
+ function handleException(e, queueableFn) {
1929
+ onException(e);
1930
+ if (!self.catchException(e)) {
1931
+ //TODO: set a var when we catch an exception and
1932
+ //use a finally block to close the loop in a nice way..
1933
+ throw e;
1934
+ }
1935
+ }
1936
+ };
1937
+
1938
+ return QueueRunner;
1939
+ };
1940
+
1941
+ getJasmineRequireObj().ReportDispatcher = function() {
1942
+ function ReportDispatcher(methods) {
1943
+
1944
+ var dispatchedMethods = methods || [];
1945
+
1946
+ for (var i = 0; i < dispatchedMethods.length; i++) {
1947
+ var method = dispatchedMethods[i];
1948
+ this[method] = (function(m) {
1949
+ return function() {
1950
+ dispatch(m, arguments);
1951
+ };
1952
+ }(method));
1953
+ }
1954
+
1955
+ var reporters = [];
1956
+
1957
+ this.addReporter = function(reporter) {
1958
+ reporters.push(reporter);
1959
+ };
1960
+
1961
+ return this;
1962
+
1963
+ function dispatch(method, args) {
1964
+ for (var i = 0; i < reporters.length; i++) {
1965
+ var reporter = reporters[i];
1966
+ if (reporter[method]) {
1967
+ reporter[method].apply(reporter, args);
1968
+ }
1969
+ }
1970
+ }
1971
+ }
1972
+
1973
+ return ReportDispatcher;
1974
+ };
1975
+
1976
+
1977
+ getJasmineRequireObj().SpyRegistry = function(j$) {
1978
+
1979
+ function SpyRegistry(options) {
1980
+ options = options || {};
1981
+ var currentSpies = options.currentSpies || function() { return []; };
1982
+
1983
+ this.spyOn = function(obj, methodName) {
1984
+ if (j$.util.isUndefined(obj)) {
1985
+ throw new Error('spyOn could not find an object to spy upon for ' + methodName + '()');
1986
+ }
1987
+
1988
+ if (j$.util.isUndefined(methodName)) {
1989
+ throw new Error('No method name supplied');
1990
+ }
1991
+
1992
+ if (j$.util.isUndefined(obj[methodName])) {
1993
+ throw new Error(methodName + '() method does not exist');
1994
+ }
1995
+
1996
+ if (obj[methodName] && j$.isSpy(obj[methodName])) {
1997
+ //TODO?: should this return the current spy? Downside: may cause user confusion about spy state
1998
+ throw new Error(methodName + ' has already been spied upon');
1999
+ }
2000
+
2001
+ var descriptor;
2002
+ try {
2003
+ descriptor = Object.getOwnPropertyDescriptor(obj, methodName);
2004
+ } catch(e) {
2005
+ // IE 8 doesn't support `definePropery` on non-DOM nodes
2006
+ }
2007
+
2008
+ if (descriptor && !(descriptor.writable || descriptor.set)) {
2009
+ throw new Error(methodName + ' is not declared writable or has no setter');
2010
+ }
2011
+
2012
+ var spy = j$.createSpy(methodName, obj[methodName]);
2013
+
2014
+ currentSpies().push({
2015
+ spy: spy,
2016
+ baseObj: obj,
2017
+ methodName: methodName,
2018
+ originalValue: obj[methodName]
2019
+ });
2020
+
2021
+ obj[methodName] = spy;
2022
+
2023
+ return spy;
2024
+ };
2025
+
2026
+ this.clearSpies = function() {
2027
+ var spies = currentSpies();
2028
+ for (var i = 0; i < spies.length; i++) {
2029
+ var spyEntry = spies[i];
2030
+ spyEntry.baseObj[spyEntry.methodName] = spyEntry.originalValue;
2031
+ }
2032
+ };
2033
+ }
2034
+
2035
+ return SpyRegistry;
2036
+ };
2037
+
2038
+ getJasmineRequireObj().SpyStrategy = function() {
2039
+
2040
+ function SpyStrategy(options) {
2041
+ options = options || {};
2042
+
2043
+ var identity = options.name || 'unknown',
2044
+ originalFn = options.fn || function() {},
2045
+ getSpy = options.getSpy || function() {},
2046
+ plan = function() {};
2047
+
2048
+ this.identity = function() {
2049
+ return identity;
2050
+ };
2051
+
2052
+ this.exec = function() {
2053
+ return plan.apply(this, arguments);
2054
+ };
2055
+
2056
+ this.callThrough = function() {
2057
+ plan = originalFn;
2058
+ return getSpy();
2059
+ };
2060
+
2061
+ this.returnValue = function(value) {
2062
+ plan = function() {
2063
+ return value;
2064
+ };
2065
+ return getSpy();
2066
+ };
2067
+
2068
+ this.returnValues = function() {
2069
+ var values = Array.prototype.slice.call(arguments);
2070
+ plan = function () {
2071
+ return values.shift();
2072
+ };
2073
+ return getSpy();
2074
+ };
2075
+
2076
+ this.throwError = function(something) {
2077
+ var error = (something instanceof Error) ? something : new Error(something);
2078
+ plan = function() {
2079
+ throw error;
2080
+ };
2081
+ return getSpy();
2082
+ };
2083
+
2084
+ this.callFake = function(fn) {
2085
+ plan = fn;
2086
+ return getSpy();
2087
+ };
2088
+
2089
+ this.stub = function(fn) {
2090
+ plan = function() {};
2091
+ return getSpy();
2092
+ };
2093
+ }
2094
+
2095
+ return SpyStrategy;
2096
+ };
2097
+
2098
+ getJasmineRequireObj().Suite = function(j$) {
2099
+ function Suite(attrs) {
2100
+ this.env = attrs.env;
2101
+ this.id = attrs.id;
2102
+ this.parentSuite = attrs.parentSuite;
2103
+ this.description = attrs.description;
2104
+ this.expectationFactory = attrs.expectationFactory;
2105
+ this.expectationResultFactory = attrs.expectationResultFactory;
2106
+ this.throwOnExpectationFailure = !!attrs.throwOnExpectationFailure;
2107
+
2108
+ this.beforeFns = [];
2109
+ this.afterFns = [];
2110
+ this.beforeAllFns = [];
2111
+ this.afterAllFns = [];
2112
+ this.disabled = false;
2113
+
2114
+ this.children = [];
2115
+
2116
+ this.result = {
2117
+ id: this.id,
2118
+ description: this.description,
2119
+ fullName: this.getFullName(),
2120
+ failedExpectations: []
2121
+ };
2122
+ }
2123
+
2124
+ Suite.prototype.expect = function(actual) {
2125
+ return this.expectationFactory(actual, this);
2126
+ };
2127
+
2128
+ Suite.prototype.getFullName = function() {
2129
+ var fullName = this.description;
2130
+ for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) {
2131
+ if (parentSuite.parentSuite) {
2132
+ fullName = parentSuite.description + ' ' + fullName;
2133
+ }
2134
+ }
2135
+ return fullName;
2136
+ };
2137
+
2138
+ Suite.prototype.disable = function() {
2139
+ this.disabled = true;
2140
+ };
2141
+
2142
+ Suite.prototype.pend = function(message) {
2143
+ this.markedPending = true;
2144
+ };
2145
+
2146
+ Suite.prototype.beforeEach = function(fn) {
2147
+ this.beforeFns.unshift(fn);
2148
+ };
2149
+
2150
+ Suite.prototype.beforeAll = function(fn) {
2151
+ this.beforeAllFns.push(fn);
2152
+ };
2153
+
2154
+ Suite.prototype.afterEach = function(fn) {
2155
+ this.afterFns.unshift(fn);
2156
+ };
2157
+
2158
+ Suite.prototype.afterAll = function(fn) {
2159
+ this.afterAllFns.push(fn);
2160
+ };
2161
+
2162
+ Suite.prototype.addChild = function(child) {
2163
+ this.children.push(child);
2164
+ };
2165
+
2166
+ Suite.prototype.status = function() {
2167
+ if (this.disabled) {
2168
+ return 'disabled';
2169
+ }
2170
+
2171
+ if (this.markedPending) {
2172
+ return 'pending';
2173
+ }
2174
+
2175
+ if (this.result.failedExpectations.length > 0) {
2176
+ return 'failed';
2177
+ } else {
2178
+ return 'finished';
2179
+ }
2180
+ };
2181
+
2182
+ Suite.prototype.isExecutable = function() {
2183
+ return !this.disabled;
2184
+ };
2185
+
2186
+ Suite.prototype.canBeReentered = function() {
2187
+ return this.beforeAllFns.length === 0 && this.afterAllFns.length === 0;
2188
+ };
2189
+
2190
+ Suite.prototype.getResult = function() {
2191
+ this.result.status = this.status();
2192
+ return this.result;
2193
+ };
2194
+
2195
+ Suite.prototype.sharedUserContext = function() {
2196
+ if (!this.sharedContext) {
2197
+ this.sharedContext = this.parentSuite ? clone(this.parentSuite.sharedUserContext()) : {};
2198
+ }
2199
+
2200
+ return this.sharedContext;
2201
+ };
2202
+
2203
+ Suite.prototype.clonedSharedUserContext = function() {
2204
+ return clone(this.sharedUserContext());
2205
+ };
2206
+
2207
+ Suite.prototype.onException = function() {
2208
+ if (arguments[0] instanceof j$.errors.ExpectationFailed) {
2209
+ return;
2210
+ }
2211
+
2212
+ if(isAfterAll(this.children)) {
2213
+ var data = {
2214
+ matcherName: '',
2215
+ passed: false,
2216
+ expected: '',
2217
+ actual: '',
2218
+ error: arguments[0]
2219
+ };
2220
+ this.result.failedExpectations.push(this.expectationResultFactory(data));
2221
+ } else {
2222
+ for (var i = 0; i < this.children.length; i++) {
2223
+ var child = this.children[i];
2224
+ child.onException.apply(child, arguments);
2225
+ }
2226
+ }
2227
+ };
2228
+
2229
+ Suite.prototype.addExpectationResult = function () {
2230
+ if(isAfterAll(this.children) && isFailure(arguments)){
2231
+ var data = arguments[1];
2232
+ this.result.failedExpectations.push(this.expectationResultFactory(data));
2233
+ if(this.throwOnExpectationFailure) {
2234
+ throw new j$.errors.ExpectationFailed();
2235
+ }
2236
+ } else {
2237
+ for (var i = 0; i < this.children.length; i++) {
2238
+ var child = this.children[i];
2239
+ try {
2240
+ child.addExpectationResult.apply(child, arguments);
2241
+ } catch(e) {
2242
+ // keep going
2243
+ }
2244
+ }
2245
+ }
2246
+ };
2247
+
2248
+ function isAfterAll(children) {
2249
+ return children && children[0].result.status;
2250
+ }
2251
+
2252
+ function isFailure(args) {
2253
+ return !args[0];
2254
+ }
2255
+
2256
+ function clone(obj) {
2257
+ var clonedObj = {};
2258
+ for (var prop in obj) {
2259
+ if (obj.hasOwnProperty(prop)) {
2260
+ clonedObj[prop] = obj[prop];
2261
+ }
2262
+ }
2263
+
2264
+ return clonedObj;
2265
+ }
2266
+
2267
+ return Suite;
2268
+ };
2269
+
2270
+ if (typeof window == void 0 && typeof exports == 'object') {
2271
+ exports.Suite = jasmineRequire.Suite;
2272
+ }
2273
+
2274
+ getJasmineRequireObj().Timer = function() {
2275
+ var defaultNow = (function(Date) {
2276
+ return function() { return new Date().getTime(); };
2277
+ })(Date);
2278
+
2279
+ function Timer(options) {
2280
+ options = options || {};
2281
+
2282
+ var now = options.now || defaultNow,
2283
+ startTime;
2284
+
2285
+ this.start = function() {
2286
+ startTime = now();
2287
+ };
2288
+
2289
+ this.elapsed = function() {
2290
+ return now() - startTime;
2291
+ };
2292
+ }
2293
+
2294
+ return Timer;
2295
+ };
2296
+
2297
+ getJasmineRequireObj().TreeProcessor = function() {
2298
+ function TreeProcessor(attrs) {
2299
+ var tree = attrs.tree,
2300
+ runnableIds = attrs.runnableIds,
2301
+ queueRunnerFactory = attrs.queueRunnerFactory,
2302
+ nodeStart = attrs.nodeStart || function() {},
2303
+ nodeComplete = attrs.nodeComplete || function() {},
2304
+ orderChildren = attrs.orderChildren || function(node) { return node.children; },
2305
+ stats = { valid: true },
2306
+ processed = false,
2307
+ defaultMin = Infinity,
2308
+ defaultMax = 1 - Infinity;
2309
+
2310
+ this.processTree = function() {
2311
+ processNode(tree, false);
2312
+ processed = true;
2313
+ return stats;
2314
+ };
2315
+
2316
+ this.execute = function(done) {
2317
+ if (!processed) {
2318
+ this.processTree();
2319
+ }
2320
+
2321
+ if (!stats.valid) {
2322
+ throw 'invalid order';
2323
+ }
2324
+
2325
+ var childFns = wrapChildren(tree, 0);
2326
+
2327
+ queueRunnerFactory({
2328
+ queueableFns: childFns,
2329
+ userContext: tree.sharedUserContext(),
2330
+ onException: function() {
2331
+ tree.onException.apply(tree, arguments);
2332
+ },
2333
+ onComplete: done
2334
+ });
2335
+ };
2336
+
2337
+ function runnableIndex(id) {
2338
+ for (var i = 0; i < runnableIds.length; i++) {
2339
+ if (runnableIds[i] === id) {
2340
+ return i;
2341
+ }
2342
+ }
2343
+ }
2344
+
2345
+ function processNode(node, parentEnabled) {
2346
+ var executableIndex = runnableIndex(node.id);
2347
+
2348
+ if (executableIndex !== undefined) {
2349
+ parentEnabled = true;
2350
+ }
2351
+
2352
+ parentEnabled = parentEnabled && node.isExecutable();
2353
+
2354
+ if (!node.children) {
2355
+ stats[node.id] = {
2356
+ executable: parentEnabled && node.isExecutable(),
2357
+ segments: [{
2358
+ index: 0,
2359
+ owner: node,
2360
+ nodes: [node],
2361
+ min: startingMin(executableIndex),
2362
+ max: startingMax(executableIndex)
2363
+ }]
2364
+ };
2365
+ } else {
2366
+ var hasExecutableChild = false;
2367
+
2368
+ var orderedChildren = orderChildren(node);
2369
+
2370
+ for (var i = 0; i < orderedChildren.length; i++) {
2371
+ var child = orderedChildren[i];
2372
+
2373
+ processNode(child, parentEnabled);
2374
+
2375
+ if (!stats.valid) {
2376
+ return;
2377
+ }
2378
+
2379
+ var childStats = stats[child.id];
2380
+
2381
+ hasExecutableChild = hasExecutableChild || childStats.executable;
2382
+ }
2383
+
2384
+ stats[node.id] = {
2385
+ executable: hasExecutableChild
2386
+ };
2387
+
2388
+ segmentChildren(node, orderedChildren, stats[node.id], executableIndex);
2389
+
2390
+ if (!node.canBeReentered() && stats[node.id].segments.length > 1) {
2391
+ stats = { valid: false };
2392
+ }
2393
+ }
2394
+ }
2395
+
2396
+ function startingMin(executableIndex) {
2397
+ return executableIndex === undefined ? defaultMin : executableIndex;
2398
+ }
2399
+
2400
+ function startingMax(executableIndex) {
2401
+ return executableIndex === undefined ? defaultMax : executableIndex;
2402
+ }
2403
+
2404
+ function segmentChildren(node, orderedChildren, nodeStats, executableIndex) {
2405
+ var currentSegment = { index: 0, owner: node, nodes: [], min: startingMin(executableIndex), max: startingMax(executableIndex) },
2406
+ result = [currentSegment],
2407
+ lastMax = defaultMax,
2408
+ orderedChildSegments = orderChildSegments(orderedChildren);
2409
+
2410
+ function isSegmentBoundary(minIndex) {
2411
+ return lastMax !== defaultMax && minIndex !== defaultMin && lastMax < minIndex - 1;
2412
+ }
2413
+
2414
+ for (var i = 0; i < orderedChildSegments.length; i++) {
2415
+ var childSegment = orderedChildSegments[i],
2416
+ maxIndex = childSegment.max,
2417
+ minIndex = childSegment.min;
2418
+
2419
+ if (isSegmentBoundary(minIndex)) {
2420
+ currentSegment = {index: result.length, owner: node, nodes: [], min: defaultMin, max: defaultMax};
2421
+ result.push(currentSegment);
2422
+ }
2423
+
2424
+ currentSegment.nodes.push(childSegment);
2425
+ currentSegment.min = Math.min(currentSegment.min, minIndex);
2426
+ currentSegment.max = Math.max(currentSegment.max, maxIndex);
2427
+ lastMax = maxIndex;
2428
+ }
2429
+
2430
+ nodeStats.segments = result;
2431
+ }
2432
+
2433
+ function orderChildSegments(children) {
2434
+ var specifiedOrder = [],
2435
+ unspecifiedOrder = [];
2436
+
2437
+ for (var i = 0; i < children.length; i++) {
2438
+ var child = children[i],
2439
+ segments = stats[child.id].segments;
2440
+
2441
+ for (var j = 0; j < segments.length; j++) {
2442
+ var seg = segments[j];
2443
+
2444
+ if (seg.min === defaultMin) {
2445
+ unspecifiedOrder.push(seg);
2446
+ } else {
2447
+ specifiedOrder.push(seg);
2448
+ }
2449
+ }
2450
+ }
2451
+
2452
+ specifiedOrder.sort(function(a, b) {
2453
+ return a.min - b.min;
2454
+ });
2455
+
2456
+ return specifiedOrder.concat(unspecifiedOrder);
2457
+ }
2458
+
2459
+ function executeNode(node, segmentNumber) {
2460
+ if (node.children) {
2461
+ return {
2462
+ fn: function(done) {
2463
+ nodeStart(node);
2464
+
2465
+ queueRunnerFactory({
2466
+ onComplete: function() {
2467
+ nodeComplete(node, node.getResult());
2468
+ done();
2469
+ },
2470
+ queueableFns: wrapChildren(node, segmentNumber),
2471
+ userContext: node.sharedUserContext(),
2472
+ onException: function() {
2473
+ node.onException.apply(node, arguments);
2474
+ }
2475
+ });
2476
+ }
2477
+ };
2478
+ } else {
2479
+ return {
2480
+ fn: function(done) { node.execute(done, stats[node.id].executable); }
2481
+ };
2482
+ }
2483
+ }
2484
+
2485
+ function wrapChildren(node, segmentNumber) {
2486
+ var result = [],
2487
+ segmentChildren = stats[node.id].segments[segmentNumber].nodes;
2488
+
2489
+ for (var i = 0; i < segmentChildren.length; i++) {
2490
+ result.push(executeNode(segmentChildren[i].owner, segmentChildren[i].index));
2491
+ }
2492
+
2493
+ if (!stats[node.id].executable) {
2494
+ return result;
2495
+ }
2496
+
2497
+ return node.beforeAllFns.concat(result).concat(node.afterAllFns);
2498
+ }
2499
+ }
2500
+
2501
+ return TreeProcessor;
2502
+ };
2503
+
2504
+ getJasmineRequireObj().Any = function(j$) {
2505
+
2506
+ function Any(expectedObject) {
2507
+ if (typeof expectedObject === 'undefined') {
2508
+ throw new TypeError(
2509
+ 'jasmine.any() expects to be passed a constructor function. ' +
2510
+ 'Please pass one or use jasmine.anything() to match any object.'
2511
+ );
2512
+ }
2513
+ this.expectedObject = expectedObject;
2514
+ }
2515
+
2516
+ Any.prototype.asymmetricMatch = function(other) {
2517
+ if (this.expectedObject == String) {
2518
+ return typeof other == 'string' || other instanceof String;
2519
+ }
2520
+
2521
+ if (this.expectedObject == Number) {
2522
+ return typeof other == 'number' || other instanceof Number;
2523
+ }
2524
+
2525
+ if (this.expectedObject == Function) {
2526
+ return typeof other == 'function' || other instanceof Function;
2527
+ }
2528
+
2529
+ if (this.expectedObject == Object) {
2530
+ return typeof other == 'object';
2531
+ }
2532
+
2533
+ if (this.expectedObject == Boolean) {
2534
+ return typeof other == 'boolean';
2535
+ }
2536
+
2537
+ return other instanceof this.expectedObject;
2538
+ };
2539
+
2540
+ Any.prototype.jasmineToString = function() {
2541
+ return '<jasmine.any(' + j$.fnNameFor(this.expectedObject) + ')>';
2542
+ };
2543
+
2544
+ return Any;
2545
+ };
2546
+
2547
+ getJasmineRequireObj().Anything = function(j$) {
2548
+
2549
+ function Anything() {}
2550
+
2551
+ Anything.prototype.asymmetricMatch = function(other) {
2552
+ return !j$.util.isUndefined(other) && other !== null;
2553
+ };
2554
+
2555
+ Anything.prototype.jasmineToString = function() {
2556
+ return '<jasmine.anything>';
2557
+ };
2558
+
2559
+ return Anything;
2560
+ };
2561
+
2562
+ getJasmineRequireObj().ArrayContaining = function(j$) {
2563
+ function ArrayContaining(sample) {
2564
+ this.sample = sample;
2565
+ }
2566
+
2567
+ ArrayContaining.prototype.asymmetricMatch = function(other) {
2568
+ var className = Object.prototype.toString.call(this.sample);
2569
+ if (className !== '[object Array]') { throw new Error('You must provide an array to arrayContaining, not \'' + this.sample + '\'.'); }
2570
+
2571
+ for (var i = 0; i < this.sample.length; i++) {
2572
+ var item = this.sample[i];
2573
+ if (!j$.matchersUtil.contains(other, item)) {
2574
+ return false;
2575
+ }
2576
+ }
2577
+
2578
+ return true;
2579
+ };
2580
+
2581
+ ArrayContaining.prototype.jasmineToString = function () {
2582
+ return '<jasmine.arrayContaining(' + jasmine.pp(this.sample) +')>';
2583
+ };
2584
+
2585
+ return ArrayContaining;
2586
+ };
2587
+
2588
+ getJasmineRequireObj().ObjectContaining = function(j$) {
2589
+
2590
+ function ObjectContaining(sample) {
2591
+ this.sample = sample;
2592
+ }
2593
+
2594
+ function getPrototype(obj) {
2595
+ if (Object.getPrototypeOf) {
2596
+ return Object.getPrototypeOf(obj);
2597
+ }
2598
+
2599
+ if (obj.constructor.prototype == obj) {
2600
+ return null;
2601
+ }
2602
+
2603
+ return obj.constructor.prototype;
2604
+ }
2605
+
2606
+ function hasProperty(obj, property) {
2607
+ if (!obj) {
2608
+ return false;
2609
+ }
2610
+
2611
+ if (Object.prototype.hasOwnProperty.call(obj, property)) {
2612
+ return true;
2613
+ }
2614
+
2615
+ return hasProperty(getPrototype(obj), property);
2616
+ }
2617
+
2618
+ ObjectContaining.prototype.asymmetricMatch = function(other) {
2619
+ if (typeof(this.sample) !== 'object') { throw new Error('You must provide an object to objectContaining, not \''+this.sample+'\'.'); }
2620
+
2621
+ for (var property in this.sample) {
2622
+ if (!hasProperty(other, property) ||
2623
+ !j$.matchersUtil.equals(this.sample[property], other[property])) {
2624
+ return false;
2625
+ }
2626
+ }
2627
+
2628
+ return true;
2629
+ };
2630
+
2631
+ ObjectContaining.prototype.jasmineToString = function() {
2632
+ return '<jasmine.objectContaining(' + j$.pp(this.sample) + ')>';
2633
+ };
2634
+
2635
+ return ObjectContaining;
2636
+ };
2637
+
2638
+ getJasmineRequireObj().StringMatching = function(j$) {
2639
+
2640
+ function StringMatching(expected) {
2641
+ if (!j$.isString_(expected) && !j$.isA_('RegExp', expected)) {
2642
+ throw new Error('Expected is not a String or a RegExp');
2643
+ }
2644
+
2645
+ this.regexp = new RegExp(expected);
2646
+ }
2647
+
2648
+ StringMatching.prototype.asymmetricMatch = function(other) {
2649
+ return this.regexp.test(other);
2650
+ };
2651
+
2652
+ StringMatching.prototype.jasmineToString = function() {
2653
+ return '<jasmine.stringMatching(' + this.regexp + ')>';
2654
+ };
2655
+
2656
+ return StringMatching;
2657
+ };
2658
+
2659
+ getJasmineRequireObj().errors = function() {
2660
+ function ExpectationFailed() {}
2661
+
2662
+ ExpectationFailed.prototype = new Error();
2663
+ ExpectationFailed.prototype.constructor = ExpectationFailed;
2664
+
2665
+ return {
2666
+ ExpectationFailed: ExpectationFailed
2667
+ };
2668
+ };
2669
+ getJasmineRequireObj().matchersUtil = function(j$) {
2670
+ // TODO: what to do about jasmine.pp not being inject? move to JSON.stringify? gut PrettyPrinter?
2671
+
2672
+ return {
2673
+ equals: function(a, b, customTesters) {
2674
+ customTesters = customTesters || [];
2675
+
2676
+ return eq(a, b, [], [], customTesters);
2677
+ },
2678
+
2679
+ contains: function(haystack, needle, customTesters) {
2680
+ customTesters = customTesters || [];
2681
+
2682
+ if ((Object.prototype.toString.apply(haystack) === '[object Array]') ||
2683
+ (!!haystack && !haystack.indexOf))
2684
+ {
2685
+ for (var i = 0; i < haystack.length; i++) {
2686
+ if (eq(haystack[i], needle, [], [], customTesters)) {
2687
+ return true;
2688
+ }
2689
+ }
2690
+ return false;
2691
+ }
2692
+
2693
+ return !!haystack && haystack.indexOf(needle) >= 0;
2694
+ },
2695
+
2696
+ buildFailureMessage: function() {
2697
+ var args = Array.prototype.slice.call(arguments, 0),
2698
+ matcherName = args[0],
2699
+ isNot = args[1],
2700
+ actual = args[2],
2701
+ expected = args.slice(3),
2702
+ englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); });
2703
+
2704
+ var message = 'Expected ' +
2705
+ j$.pp(actual) +
2706
+ (isNot ? ' not ' : ' ') +
2707
+ englishyPredicate;
2708
+
2709
+ if (expected.length > 0) {
2710
+ for (var i = 0; i < expected.length; i++) {
2711
+ if (i > 0) {
2712
+ message += ',';
2713
+ }
2714
+ message += ' ' + j$.pp(expected[i]);
2715
+ }
2716
+ }
2717
+
2718
+ return message + '.';
2719
+ }
2720
+ };
2721
+
2722
+ function isAsymmetric(obj) {
2723
+ return obj && j$.isA_('Function', obj.asymmetricMatch);
2724
+ }
2725
+
2726
+ function asymmetricMatch(a, b) {
2727
+ var asymmetricA = isAsymmetric(a),
2728
+ asymmetricB = isAsymmetric(b);
2729
+
2730
+ if (asymmetricA && asymmetricB) {
2731
+ return undefined;
2732
+ }
2733
+
2734
+ if (asymmetricA) {
2735
+ return a.asymmetricMatch(b);
2736
+ }
2737
+
2738
+ if (asymmetricB) {
2739
+ return b.asymmetricMatch(a);
2740
+ }
2741
+ }
2742
+
2743
+ // Equality function lovingly adapted from isEqual in
2744
+ // [Underscore](http://underscorejs.org)
2745
+ function eq(a, b, aStack, bStack, customTesters) {
2746
+ var result = true;
2747
+
2748
+ var asymmetricResult = asymmetricMatch(a, b);
2749
+ if (!j$.util.isUndefined(asymmetricResult)) {
2750
+ return asymmetricResult;
2751
+ }
2752
+
2753
+ for (var i = 0; i < customTesters.length; i++) {
2754
+ var customTesterResult = customTesters[i](a, b);
2755
+ if (!j$.util.isUndefined(customTesterResult)) {
2756
+ return customTesterResult;
2757
+ }
2758
+ }
2759
+
2760
+ if (a instanceof Error && b instanceof Error) {
2761
+ return a.message == b.message;
2762
+ }
2763
+
2764
+ // Identical objects are equal. `0 === -0`, but they aren't identical.
2765
+ // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
2766
+ if (a === b) { return a !== 0 || 1 / a == 1 / b; }
2767
+ // A strict comparison is necessary because `null == undefined`.
2768
+ if (a === null || b === null) { return a === b; }
2769
+ var className = Object.prototype.toString.call(a);
2770
+ if (className != Object.prototype.toString.call(b)) { return false; }
2771
+ switch (className) {
2772
+ // Strings, numbers, dates, and booleans are compared by value.
2773
+ case '[object String]':
2774
+ // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
2775
+ // equivalent to `new String("5")`.
2776
+ return a == String(b);
2777
+ case '[object Number]':
2778
+ // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for
2779
+ // other numeric values.
2780
+ return a != +a ? b != +b : (a === 0 ? 1 / a == 1 / b : a == +b);
2781
+ case '[object Date]':
2782
+ case '[object Boolean]':
2783
+ // Coerce dates and booleans to numeric primitive values. Dates are compared by their
2784
+ // millisecond representations. Note that invalid dates with millisecond representations
2785
+ // of `NaN` are not equivalent.
2786
+ return +a == +b;
2787
+ // RegExps are compared by their source patterns and flags.
2788
+ case '[object RegExp]':
2789
+ return a.source == b.source &&
2790
+ a.global == b.global &&
2791
+ a.multiline == b.multiline &&
2792
+ a.ignoreCase == b.ignoreCase;
2793
+ }
2794
+ if (typeof a != 'object' || typeof b != 'object') { return false; }
2795
+
2796
+ var aIsDomNode = j$.isDomNode(a);
2797
+ var bIsDomNode = j$.isDomNode(b);
2798
+ if (aIsDomNode && bIsDomNode) {
2799
+ // At first try to use DOM3 method isEqualNode
2800
+ if (a.isEqualNode) {
2801
+ return a.isEqualNode(b);
2802
+ }
2803
+ // IE8 doesn't support isEqualNode, try to use outerHTML && innerText
2804
+ var aIsElement = a instanceof Element;
2805
+ var bIsElement = b instanceof Element;
2806
+ if (aIsElement && bIsElement) {
2807
+ return a.outerHTML == b.outerHTML;
2808
+ }
2809
+ if (aIsElement || bIsElement) {
2810
+ return false;
2811
+ }
2812
+ return a.innerText == b.innerText && a.textContent == b.textContent;
2813
+ }
2814
+ if (aIsDomNode || bIsDomNode) {
2815
+ return false;
2816
+ }
2817
+
2818
+ // Assume equality for cyclic structures. The algorithm for detecting cyclic
2819
+ // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
2820
+ var length = aStack.length;
2821
+ while (length--) {
2822
+ // Linear search. Performance is inversely proportional to the number of
2823
+ // unique nested structures.
2824
+ if (aStack[length] == a) { return bStack[length] == b; }
2825
+ }
2826
+ // Add the first object to the stack of traversed objects.
2827
+ aStack.push(a);
2828
+ bStack.push(b);
2829
+ var size = 0;
2830
+ // Recursively compare objects and arrays.
2831
+ // Compare array lengths to determine if a deep comparison is necessary.
2832
+ if (className == '[object Array]' && a.length !== b.length) {
2833
+ result = false;
2834
+ }
2835
+
2836
+ if (result) {
2837
+ // Objects with different constructors are not equivalent, but `Object`s
2838
+ // or `Array`s from different frames are.
2839
+ if (className !== '[object Array]') {
2840
+ var aCtor = a.constructor, bCtor = b.constructor;
2841
+ if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor &&
2842
+ isFunction(bCtor) && bCtor instanceof bCtor)) {
2843
+ return false;
2844
+ }
2845
+ }
2846
+ // Deep compare objects.
2847
+ for (var key in a) {
2848
+ if (has(a, key)) {
2849
+ // Count the expected number of properties.
2850
+ size++;
2851
+ // Deep compare each member.
2852
+ if (!(result = has(b, key) && eq(a[key], b[key], aStack, bStack, customTesters))) { break; }
2853
+ }
2854
+ }
2855
+ // Ensure that both objects contain the same number of properties.
2856
+ if (result) {
2857
+ for (key in b) {
2858
+ if (has(b, key) && !(size--)) { break; }
2859
+ }
2860
+ result = !size;
2861
+ }
2862
+ }
2863
+ // Remove the first object from the stack of traversed objects.
2864
+ aStack.pop();
2865
+ bStack.pop();
2866
+
2867
+ return result;
2868
+
2869
+ function has(obj, key) {
2870
+ return Object.prototype.hasOwnProperty.call(obj, key);
2871
+ }
2872
+
2873
+ function isFunction(obj) {
2874
+ return typeof obj === 'function';
2875
+ }
2876
+ }
2877
+ };
2878
+
2879
+ getJasmineRequireObj().toBe = function() {
2880
+ function toBe() {
2881
+ return {
2882
+ compare: function(actual, expected) {
2883
+ return {
2884
+ pass: actual === expected
2885
+ };
2886
+ }
2887
+ };
2888
+ }
2889
+
2890
+ return toBe;
2891
+ };
2892
+
2893
+ getJasmineRequireObj().toBeCloseTo = function() {
2894
+
2895
+ function toBeCloseTo() {
2896
+ return {
2897
+ compare: function(actual, expected, precision) {
2898
+ if (precision !== 0) {
2899
+ precision = precision || 2;
2900
+ }
2901
+
2902
+ return {
2903
+ pass: Math.abs(expected - actual) < (Math.pow(10, -precision) / 2)
2904
+ };
2905
+ }
2906
+ };
2907
+ }
2908
+
2909
+ return toBeCloseTo;
2910
+ };
2911
+
2912
+ getJasmineRequireObj().toBeDefined = function() {
2913
+ function toBeDefined() {
2914
+ return {
2915
+ compare: function(actual) {
2916
+ return {
2917
+ pass: (void 0 !== actual)
2918
+ };
2919
+ }
2920
+ };
2921
+ }
2922
+
2923
+ return toBeDefined;
2924
+ };
2925
+
2926
+ getJasmineRequireObj().toBeFalsy = function() {
2927
+ function toBeFalsy() {
2928
+ return {
2929
+ compare: function(actual) {
2930
+ return {
2931
+ pass: !!!actual
2932
+ };
2933
+ }
2934
+ };
2935
+ }
2936
+
2937
+ return toBeFalsy;
2938
+ };
2939
+
2940
+ getJasmineRequireObj().toBeGreaterThan = function() {
2941
+
2942
+ function toBeGreaterThan() {
2943
+ return {
2944
+ compare: function(actual, expected) {
2945
+ return {
2946
+ pass: actual > expected
2947
+ };
2948
+ }
2949
+ };
2950
+ }
2951
+
2952
+ return toBeGreaterThan;
2953
+ };
2954
+
2955
+
2956
+ getJasmineRequireObj().toBeLessThan = function() {
2957
+ function toBeLessThan() {
2958
+ return {
2959
+
2960
+ compare: function(actual, expected) {
2961
+ return {
2962
+ pass: actual < expected
2963
+ };
2964
+ }
2965
+ };
2966
+ }
2967
+
2968
+ return toBeLessThan;
2969
+ };
2970
+ getJasmineRequireObj().toBeNaN = function(j$) {
2971
+
2972
+ function toBeNaN() {
2973
+ return {
2974
+ compare: function(actual) {
2975
+ var result = {
2976
+ pass: (actual !== actual)
2977
+ };
2978
+
2979
+ if (result.pass) {
2980
+ result.message = 'Expected actual not to be NaN.';
2981
+ } else {
2982
+ result.message = function() { return 'Expected ' + j$.pp(actual) + ' to be NaN.'; };
2983
+ }
2984
+
2985
+ return result;
2986
+ }
2987
+ };
2988
+ }
2989
+
2990
+ return toBeNaN;
2991
+ };
2992
+
2993
+ getJasmineRequireObj().toBeNull = function() {
2994
+
2995
+ function toBeNull() {
2996
+ return {
2997
+ compare: function(actual) {
2998
+ return {
2999
+ pass: actual === null
3000
+ };
3001
+ }
3002
+ };
3003
+ }
3004
+
3005
+ return toBeNull;
3006
+ };
3007
+
3008
+ getJasmineRequireObj().toBeTruthy = function() {
3009
+
3010
+ function toBeTruthy() {
3011
+ return {
3012
+ compare: function(actual) {
3013
+ return {
3014
+ pass: !!actual
3015
+ };
3016
+ }
3017
+ };
3018
+ }
3019
+
3020
+ return toBeTruthy;
3021
+ };
3022
+
3023
+ getJasmineRequireObj().toBeUndefined = function() {
3024
+
3025
+ function toBeUndefined() {
3026
+ return {
3027
+ compare: function(actual) {
3028
+ return {
3029
+ pass: void 0 === actual
3030
+ };
3031
+ }
3032
+ };
3033
+ }
3034
+
3035
+ return toBeUndefined;
3036
+ };
3037
+
3038
+ getJasmineRequireObj().toContain = function() {
3039
+ function toContain(util, customEqualityTesters) {
3040
+ customEqualityTesters = customEqualityTesters || [];
3041
+
3042
+ return {
3043
+ compare: function(actual, expected) {
3044
+
3045
+ return {
3046
+ pass: util.contains(actual, expected, customEqualityTesters)
3047
+ };
3048
+ }
3049
+ };
3050
+ }
3051
+
3052
+ return toContain;
3053
+ };
3054
+
3055
+ getJasmineRequireObj().toEqual = function() {
3056
+
3057
+ function toEqual(util, customEqualityTesters) {
3058
+ customEqualityTesters = customEqualityTesters || [];
3059
+
3060
+ return {
3061
+ compare: function(actual, expected) {
3062
+ var result = {
3063
+ pass: false
3064
+ };
3065
+
3066
+ result.pass = util.equals(actual, expected, customEqualityTesters);
3067
+
3068
+ return result;
3069
+ }
3070
+ };
3071
+ }
3072
+
3073
+ return toEqual;
3074
+ };
3075
+
3076
+ getJasmineRequireObj().toHaveBeenCalled = function(j$) {
3077
+
3078
+ function toHaveBeenCalled() {
3079
+ return {
3080
+ compare: function(actual) {
3081
+ var result = {};
3082
+
3083
+ if (!j$.isSpy(actual)) {
3084
+ throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.');
3085
+ }
3086
+
3087
+ if (arguments.length > 1) {
3088
+ throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith');
3089
+ }
3090
+
3091
+ result.pass = actual.calls.any();
3092
+
3093
+ result.message = result.pass ?
3094
+ 'Expected spy ' + actual.and.identity() + ' not to have been called.' :
3095
+ 'Expected spy ' + actual.and.identity() + ' to have been called.';
3096
+
3097
+ return result;
3098
+ }
3099
+ };
3100
+ }
3101
+
3102
+ return toHaveBeenCalled;
3103
+ };
3104
+
3105
+ getJasmineRequireObj().toHaveBeenCalledTimes = function(j$) {
3106
+
3107
+ function toHaveBeenCalledTimes() {
3108
+ return {
3109
+ compare: function(actual, expected) {
3110
+ if (!j$.isSpy(actual)) {
3111
+ throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.');
3112
+ }
3113
+
3114
+ var args = Array.prototype.slice.call(arguments, 0),
3115
+ result = { pass: false };
3116
+
3117
+ if(!expected){
3118
+ throw new Error('Expected times failed is required as an argument.');
3119
+ }
3120
+
3121
+ actual = args[0];
3122
+ var calls = actual.calls.count();
3123
+ var timesMessage = expected === 1 ? 'once' : expected + ' times';
3124
+ result.pass = calls === expected;
3125
+ result.message = result.pass ?
3126
+ 'Expected spy ' + actual.and.identity() + ' not to have been called ' + timesMessage + '. It was called ' + calls + ' times.' :
3127
+ 'Expected spy ' + actual.and.identity() + ' to have been called ' + timesMessage + '. It was called ' + calls + ' times.';
3128
+ return result;
3129
+ }
3130
+ };
3131
+ }
3132
+
3133
+ return toHaveBeenCalledTimes;
3134
+ };
3135
+
3136
+ getJasmineRequireObj().toHaveBeenCalledWith = function(j$) {
3137
+
3138
+ function toHaveBeenCalledWith(util, customEqualityTesters) {
3139
+ return {
3140
+ compare: function() {
3141
+ var args = Array.prototype.slice.call(arguments, 0),
3142
+ actual = args[0],
3143
+ expectedArgs = args.slice(1),
3144
+ result = { pass: false };
3145
+
3146
+ if (!j$.isSpy(actual)) {
3147
+ throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.');
3148
+ }
3149
+
3150
+ if (!actual.calls.any()) {
3151
+ result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but it was never called.'; };
3152
+ return result;
3153
+ }
3154
+
3155
+ if (util.contains(actual.calls.allArgs(), expectedArgs, customEqualityTesters)) {
3156
+ result.pass = true;
3157
+ result.message = function() { return 'Expected spy ' + actual.and.identity() + ' not to have been called with ' + j$.pp(expectedArgs) + ' but it was.'; };
3158
+ } else {
3159
+ result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but actual calls were ' + j$.pp(actual.calls.allArgs()).replace(/^\[ | \]$/g, '') + '.'; };
3160
+ }
3161
+
3162
+ return result;
3163
+ }
3164
+ };
3165
+ }
3166
+
3167
+ return toHaveBeenCalledWith;
3168
+ };
3169
+
3170
+ getJasmineRequireObj().toMatch = function(j$) {
3171
+
3172
+ function toMatch() {
3173
+ return {
3174
+ compare: function(actual, expected) {
3175
+ if (!j$.isString_(expected) && !j$.isA_('RegExp', expected)) {
3176
+ throw new Error('Expected is not a String or a RegExp');
3177
+ }
3178
+
3179
+ var regexp = new RegExp(expected);
3180
+
3181
+ return {
3182
+ pass: regexp.test(actual)
3183
+ };
3184
+ }
3185
+ };
3186
+ }
3187
+
3188
+ return toMatch;
3189
+ };
3190
+
3191
+ getJasmineRequireObj().toThrow = function(j$) {
3192
+
3193
+ function toThrow(util) {
3194
+ return {
3195
+ compare: function(actual, expected) {
3196
+ var result = { pass: false },
3197
+ threw = false,
3198
+ thrown;
3199
+
3200
+ if (typeof actual != 'function') {
3201
+ throw new Error('Actual is not a Function');
3202
+ }
3203
+
3204
+ try {
3205
+ actual();
3206
+ } catch (e) {
3207
+ threw = true;
3208
+ thrown = e;
3209
+ }
3210
+
3211
+ if (!threw) {
3212
+ result.message = 'Expected function to throw an exception.';
3213
+ return result;
3214
+ }
3215
+
3216
+ if (arguments.length == 1) {
3217
+ result.pass = true;
3218
+ result.message = function() { return 'Expected function not to throw, but it threw ' + j$.pp(thrown) + '.'; };
3219
+
3220
+ return result;
3221
+ }
3222
+
3223
+ if (util.equals(thrown, expected)) {
3224
+ result.pass = true;
3225
+ result.message = function() { return 'Expected function not to throw ' + j$.pp(expected) + '.'; };
3226
+ } else {
3227
+ result.message = function() { return 'Expected function to throw ' + j$.pp(expected) + ', but it threw ' + j$.pp(thrown) + '.'; };
3228
+ }
3229
+
3230
+ return result;
3231
+ }
3232
+ };
3233
+ }
3234
+
3235
+ return toThrow;
3236
+ };
3237
+
3238
+ getJasmineRequireObj().toThrowError = function(j$) {
3239
+ function toThrowError () {
3240
+ return {
3241
+ compare: function(actual) {
3242
+ var threw = false,
3243
+ pass = {pass: true},
3244
+ fail = {pass: false},
3245
+ thrown;
3246
+
3247
+ if (typeof actual != 'function') {
3248
+ throw new Error('Actual is not a Function');
3249
+ }
3250
+
3251
+ var errorMatcher = getMatcher.apply(null, arguments);
3252
+
3253
+ try {
3254
+ actual();
3255
+ } catch (e) {
3256
+ threw = true;
3257
+ thrown = e;
3258
+ }
3259
+
3260
+ if (!threw) {
3261
+ fail.message = 'Expected function to throw an Error.';
3262
+ return fail;
3263
+ }
3264
+
3265
+ if (!(thrown instanceof Error)) {
3266
+ fail.message = function() { return 'Expected function to throw an Error, but it threw ' + j$.pp(thrown) + '.'; };
3267
+ return fail;
3268
+ }
3269
+
3270
+ if (errorMatcher.hasNoSpecifics()) {
3271
+ pass.message = 'Expected function not to throw an Error, but it threw ' + j$.fnNameFor(thrown) + '.';
3272
+ return pass;
3273
+ }
3274
+
3275
+ if (errorMatcher.matches(thrown)) {
3276
+ pass.message = function() {
3277
+ return 'Expected function not to throw ' + errorMatcher.errorTypeDescription + errorMatcher.messageDescription() + '.';
3278
+ };
3279
+ return pass;
3280
+ } else {
3281
+ fail.message = function() {
3282
+ return 'Expected function to throw ' + errorMatcher.errorTypeDescription + errorMatcher.messageDescription() +
3283
+ ', but it threw ' + errorMatcher.thrownDescription(thrown) + '.';
3284
+ };
3285
+ return fail;
3286
+ }
3287
+ }
3288
+ };
3289
+
3290
+ function getMatcher() {
3291
+ var expected = null,
3292
+ errorType = null;
3293
+
3294
+ if (arguments.length == 2) {
3295
+ expected = arguments[1];
3296
+ if (isAnErrorType(expected)) {
3297
+ errorType = expected;
3298
+ expected = null;
3299
+ }
3300
+ } else if (arguments.length > 2) {
3301
+ errorType = arguments[1];
3302
+ expected = arguments[2];
3303
+ if (!isAnErrorType(errorType)) {
3304
+ throw new Error('Expected error type is not an Error.');
3305
+ }
3306
+ }
3307
+
3308
+ if (expected && !isStringOrRegExp(expected)) {
3309
+ if (errorType) {
3310
+ throw new Error('Expected error message is not a string or RegExp.');
3311
+ } else {
3312
+ throw new Error('Expected is not an Error, string, or RegExp.');
3313
+ }
3314
+ }
3315
+
3316
+ function messageMatch(message) {
3317
+ if (typeof expected == 'string') {
3318
+ return expected == message;
3319
+ } else {
3320
+ return expected.test(message);
3321
+ }
3322
+ }
3323
+
3324
+ return {
3325
+ errorTypeDescription: errorType ? j$.fnNameFor(errorType) : 'an exception',
3326
+ thrownDescription: function(thrown) {
3327
+ var thrownName = errorType ? j$.fnNameFor(thrown.constructor) : 'an exception',
3328
+ thrownMessage = '';
3329
+
3330
+ if (expected) {
3331
+ thrownMessage = ' with message ' + j$.pp(thrown.message);
3332
+ }
3333
+
3334
+ return thrownName + thrownMessage;
3335
+ },
3336
+ messageDescription: function() {
3337
+ if (expected === null) {
3338
+ return '';
3339
+ } else if (expected instanceof RegExp) {
3340
+ return ' with a message matching ' + j$.pp(expected);
3341
+ } else {
3342
+ return ' with message ' + j$.pp(expected);
3343
+ }
3344
+ },
3345
+ hasNoSpecifics: function() {
3346
+ return expected === null && errorType === null;
3347
+ },
3348
+ matches: function(error) {
3349
+ return (errorType === null || error instanceof errorType) &&
3350
+ (expected === null || messageMatch(error.message));
3351
+ }
3352
+ };
3353
+ }
3354
+
3355
+ function isStringOrRegExp(potential) {
3356
+ return potential instanceof RegExp || (typeof potential == 'string');
3357
+ }
3358
+
3359
+ function isAnErrorType(type) {
3360
+ if (typeof type !== 'function') {
3361
+ return false;
3362
+ }
3363
+
3364
+ var Surrogate = function() {};
3365
+ Surrogate.prototype = type.prototype;
3366
+ return (new Surrogate()) instanceof Error;
3367
+ }
3368
+ }
3369
+
3370
+ return toThrowError;
3371
+ };
3372
+
3373
+ getJasmineRequireObj().interface = function(jasmine, env) {
3374
+ var jasmineInterface = {
3375
+ describe: function(description, specDefinitions) {
3376
+ return env.describe(description, specDefinitions);
3377
+ },
3378
+
3379
+ xdescribe: function(description, specDefinitions) {
3380
+ return env.xdescribe(description, specDefinitions);
3381
+ },
3382
+
3383
+ fdescribe: function(description, specDefinitions) {
3384
+ return env.fdescribe(description, specDefinitions);
3385
+ },
3386
+
3387
+ it: function() {
3388
+ return env.it.apply(env, arguments);
3389
+ },
3390
+
3391
+ xit: function() {
3392
+ return env.xit.apply(env, arguments);
3393
+ },
3394
+
3395
+ fit: function() {
3396
+ return env.fit.apply(env, arguments);
3397
+ },
3398
+
3399
+ beforeEach: function() {
3400
+ return env.beforeEach.apply(env, arguments);
3401
+ },
3402
+
3403
+ afterEach: function() {
3404
+ return env.afterEach.apply(env, arguments);
3405
+ },
3406
+
3407
+ beforeAll: function() {
3408
+ return env.beforeAll.apply(env, arguments);
3409
+ },
3410
+
3411
+ afterAll: function() {
3412
+ return env.afterAll.apply(env, arguments);
3413
+ },
3414
+
3415
+ expect: function(actual) {
3416
+ return env.expect(actual);
3417
+ },
3418
+
3419
+ pending: function() {
3420
+ return env.pending.apply(env, arguments);
3421
+ },
3422
+
3423
+ fail: function() {
3424
+ return env.fail.apply(env, arguments);
3425
+ },
3426
+
3427
+ spyOn: function(obj, methodName) {
3428
+ return env.spyOn(obj, methodName);
3429
+ },
3430
+
3431
+ jsApiReporter: new jasmine.JsApiReporter({
3432
+ timer: new jasmine.Timer()
3433
+ }),
3434
+
3435
+ jasmine: jasmine
3436
+ };
3437
+
3438
+ jasmine.addCustomEqualityTester = function(tester) {
3439
+ env.addCustomEqualityTester(tester);
3440
+ };
3441
+
3442
+ jasmine.addMatchers = function(matchers) {
3443
+ return env.addMatchers(matchers);
3444
+ };
3445
+
3446
+ jasmine.clock = function() {
3447
+ return env.clock;
3448
+ };
3449
+
3450
+ return jasmineInterface;
3451
+ };
3452
+
3453
+ getJasmineRequireObj().version = function() {
3454
+ return '2.4.1';
3455
+ };