your_platform 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (704) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +39 -11
  3. data/Rakefile +15 -1
  4. data/app/assets/images/file.png +0 -0
  5. data/app/assets/images/img/excel2013_file_128.png +0 -0
  6. data/app/assets/images/img/excel2013_file_bw_107.png +0 -0
  7. data/app/assets/images/img/excel2013_file_bw_semitransparent_107.png +0 -0
  8. data/app/assets/images/img/glyphicons-halflings-white.png +0 -0
  9. data/app/assets/images/img/glyphicons-halflings.png +0 -0
  10. data/app/assets/images/img/gmaps_yellow_marker.png +0 -0
  11. data/app/assets/images/img/gmaps_yellow_marker_38.png +0 -0
  12. data/app/assets/images/markdown_help.png +0 -0
  13. data/app/assets/images/your_platform/breadcrumb-sep.png +0 -0
  14. data/app/assets/javascripts/app-ng.js.coffee +5 -0
  15. data/app/assets/javascripts/attachments.js +2 -0
  16. data/app/assets/javascripts/controllers-ng/bookmark_list_controller.js.coffee +30 -0
  17. data/app/assets/javascripts/controllers-ng/box_controller.js.coffee +37 -0
  18. data/app/assets/javascripts/controllers-ng/profile_angular.js.coffee +151 -0
  19. data/app/assets/javascripts/directives-ng/box_directive.js.coffee +91 -0
  20. data/app/assets/javascripts/directives-ng/star_tool_directive.js.coffee +111 -0
  21. data/app/assets/javascripts/filters-ng/some_filter.js.coffee +0 -0
  22. data/app/assets/javascripts/jquery.appear-1.1.1.js +138 -0
  23. data/app/assets/javascripts/make-js-more-like-ruby.js.coffee +32 -0
  24. data/app/assets/javascripts/mercury.js +456 -0
  25. data/app/assets/javascripts/models-ng/bookmark.js.coffee +28 -0
  26. data/app/assets/javascripts/services-ng/current_user_bookmarks.js.coffee +39 -0
  27. data/app/assets/javascripts/your_platform.js +27 -0
  28. data/app/assets/javascripts/your_platform/address_labels.js.coffee +40 -0
  29. data/app/assets/javascripts/your_platform/attachments.js.coffee +61 -0
  30. data/app/assets/javascripts/your_platform/auto-completion.js.coffee +90 -0
  31. data/app/assets/javascripts/your_platform/best_in_place.js.coffee +8 -0
  32. data/app/assets/javascripts/your_platform/best_in_place_hyperlinks.js.coffee +25 -0
  33. data/app/assets/javascripts/your_platform/best_in_place_tab_key.js.coffee +28 -0
  34. data/app/assets/javascripts/your_platform/boxes.js.coffee +11 -0
  35. data/app/assets/javascripts/your_platform/change_password.js.coffee +22 -0
  36. data/app/assets/javascripts/your_platform/close_dropdowns.js.coffee +18 -0
  37. data/app/assets/javascripts/your_platform/copy_to_clipboard.js.coffee +6 -0
  38. data/app/assets/javascripts/your_platform/datatables.coffee +112 -0
  39. data/app/assets/javascripts/your_platform/datepicker_settings.js.coffee +16 -0
  40. data/app/assets/javascripts/your_platform/edit_tools.js.coffee +19 -0
  41. data/app/assets/javascripts/your_platform/editable_dbl_click.js.coffee +42 -0
  42. data/app/assets/javascripts/your_platform/events.js.coffee +126 -0
  43. data/app/assets/javascripts/your_platform/fix_textarea.js.coffee +11 -0
  44. data/app/assets/javascripts/your_platform/galleria.js.coffee +112 -0
  45. data/app/assets/javascripts/your_platform/groups.js.coffee +36 -0
  46. data/app/assets/javascripts/your_platform/hidden.js.coffee +5 -0
  47. data/app/assets/javascripts/your_platform/links_to_external_sites.js.coffee +12 -0
  48. data/app/assets/javascripts/your_platform/maps.js.coffee +13 -0
  49. data/app/assets/javascripts/your_platform/may_need_review.js.coffee +10 -0
  50. data/app/assets/javascripts/your_platform/navable_title_rename.js.coffee +17 -0
  51. data/app/assets/javascripts/your_platform/officers.js.coffee +35 -0
  52. data/app/assets/javascripts/your_platform/popovers.js.coffee +38 -0
  53. data/app/assets/javascripts/your_platform/posts.js.coffee +58 -0
  54. data/app/assets/javascripts/your_platform/profile_fields.js.coffee +61 -0
  55. data/app/assets/javascripts/your_platform/search.js.coffee +26 -0
  56. data/app/assets/javascripts/your_platform/tooltips.js.coffee +10 -0
  57. data/app/assets/javascripts/your_platform/turbolinks_loading_spinner.js.coffee +83 -0
  58. data/app/assets/javascripts/your_platform/user_avatars.js.coffee +33 -0
  59. data/app/assets/javascripts/your_platform/user_group_memberships.js.coffee +11 -0
  60. data/app/assets/javascripts/your_platform/user_settings.js.coffee +18 -0
  61. data/app/assets/javascripts/your_platform/users_new.js.coffee +54 -0
  62. data/app/assets/stylesheets/bootstrap_layout.css.sass +3 -0
  63. data/app/assets/stylesheets/bootstrap_layout/attachments.css.sass +3 -0
  64. data/app/assets/stylesheets/bootstrap_layout/boxes.css.sass +11 -0
  65. data/app/assets/stylesheets/bootstrap_layout/breadcrumb.css.sass +25 -0
  66. data/app/assets/stylesheets/bootstrap_layout/category_indicator.css.sass +5 -0
  67. data/app/assets/stylesheets/bootstrap_layout/footer.css.sass +14 -0
  68. data/app/assets/stylesheets/bootstrap_layout/galleria.css.sass +8 -0
  69. data/app/assets/stylesheets/bootstrap_layout/header_bar.css.sass +11 -0
  70. data/app/assets/stylesheets/bootstrap_layout/headings.css.sass +10 -0
  71. data/app/assets/stylesheets/bootstrap_layout/logged_in_bar.css.sass +40 -0
  72. data/app/assets/stylesheets/bootstrap_layout/logo.css.sass +2 -0
  73. data/app/assets/stylesheets/bootstrap_layout/modal_fix.css.sass +8 -0
  74. data/app/assets/stylesheets/bootstrap_layout/profiles.css.sass +10 -0
  75. data/app/assets/stylesheets/bootstrap_layout/session_bar.css.sass +60 -0
  76. data/app/assets/stylesheets/bootstrap_layout/stars.css.sass +4 -0
  77. data/app/assets/stylesheets/bootstrap_layout/turbolinks_progress_bar.css.sass +3 -0
  78. data/app/assets/stylesheets/bootstrap_layout/vertical_menu.css.sass +15 -0
  79. data/app/assets/stylesheets/bootstrap_setup.css.sass +4 -0
  80. data/app/assets/stylesheets/your_platform.css.sass +11 -0
  81. data/app/assets/stylesheets/your_platform/address_labels_modal.css.sass +8 -0
  82. data/app/assets/stylesheets/your_platform/attachments.css.sass +75 -0
  83. data/app/assets/stylesheets/your_platform/authorization_info.css.sass +16 -0
  84. data/app/assets/stylesheets/your_platform/auto-completion.css.sass +3 -0
  85. data/app/assets/stylesheets/your_platform/center.css.sass +14 -0
  86. data/app/assets/stylesheets/your_platform/change_password.css.sass +13 -0
  87. data/app/assets/stylesheets/your_platform/corporate_vita.css.sass +2 -0
  88. data/app/assets/stylesheets/your_platform/datatables.css.sass +23 -0
  89. data/app/assets/stylesheets/your_platform/datepicker.css.sass +2 -0
  90. data/app/assets/stylesheets/your_platform/dropdowns.css.sass +8 -0
  91. data/app/assets/stylesheets/your_platform/events.css.sass +68 -0
  92. data/app/assets/stylesheets/your_platform/forms.css.sass +25 -0
  93. data/app/assets/stylesheets/your_platform/galleria.css.sass +12 -0
  94. data/app/assets/stylesheets/your_platform/groups.css.sass +8 -0
  95. data/app/assets/stylesheets/your_platform/groups_table.css.sass +8 -0
  96. data/app/assets/stylesheets/your_platform/hidden.css.sass +3 -0
  97. data/app/assets/stylesheets/your_platform/images.css.sass +50 -0
  98. data/app/assets/stylesheets/your_platform/last_activities.css.sass +17 -0
  99. data/app/assets/stylesheets/your_platform/latest_members.css.sass +7 -0
  100. data/app/assets/stylesheets/your_platform/login.css.sass +4 -0
  101. data/app/assets/stylesheets/your_platform/maps.css.sass +22 -0
  102. data/app/assets/stylesheets/your_platform/markdown_help.css.sass +5 -0
  103. data/app/assets/stylesheets/your_platform/may_need_review.css.sass +3 -0
  104. data/app/assets/stylesheets/your_platform/pages.css.sass +12 -0
  105. data/app/assets/stylesheets/your_platform/password_strength.css.sass +73 -0
  106. data/app/assets/stylesheets/your_platform/picture_attachments.css.sass +7 -0
  107. data/app/assets/stylesheets/your_platform/popovers.css.sass +13 -0
  108. data/app/assets/stylesheets/your_platform/posts.css.sass +32 -0
  109. data/app/assets/stylesheets/your_platform/profiles.css.sass +153 -0
  110. data/app/assets/stylesheets/your_platform/search_preview.css.sass +4 -0
  111. data/app/assets/stylesheets/your_platform/star_tool.css.sass +2 -0
  112. data/app/assets/stylesheets/your_platform/tooltips.css.sass +7 -0
  113. data/app/assets/stylesheets/your_platform/turbolinks_loading_spinner.css.sass +3 -0
  114. data/app/assets/stylesheets/your_platform/user_avatars.css.sass +8 -0
  115. data/app/assets/stylesheets/your_platform/user_group_memberships.css.sass +4 -0
  116. data/app/assets/stylesheets/your_platform/vertical_nav.css.sass +7 -0
  117. data/app/controllers/activities_controller.rb +6 -0
  118. data/app/controllers/application_controller.rb +236 -0
  119. data/app/controllers/attachments_controller.rb +97 -0
  120. data/app/controllers/blog_posts_controller.rb +50 -0
  121. data/app/controllers/bookmarks_controller.rb +33 -0
  122. data/app/controllers/corporations_controller.rb +22 -0
  123. data/app/controllers/errors_controller.rb +27 -0
  124. data/app/controllers/events_controller.rb +262 -0
  125. data/app/controllers/groups_controller.rb +257 -0
  126. data/app/controllers/officers_controller.rb +28 -0
  127. data/app/controllers/pages_controller.rb +67 -0
  128. data/app/controllers/posts_controller.rb +81 -0
  129. data/app/controllers/profile_fields_controller.rb +132 -0
  130. data/app/controllers/root_controller.rb +35 -0
  131. data/app/controllers/search_controller.rb +149 -0
  132. data/app/controllers/sessions_controller.rb +21 -0
  133. data/app/controllers/setup_controller.rb +80 -0
  134. data/app/controllers/statistics_controller.rb +38 -0
  135. data/app/controllers/status_group_memberships_controller.rb +28 -0
  136. data/app/controllers/terms_of_use_controller.rb +35 -0
  137. data/app/controllers/user_accounts_controller.rb +55 -0
  138. data/app/controllers/user_group_memberships_controller.rb +75 -0
  139. data/app/controllers/user_settings_controller.rb +57 -0
  140. data/app/controllers/users_controller.rb +125 -0
  141. data/app/controllers/workflows_controller.rb +19 -0
  142. data/app/helpers/application_helper.rb +25 -0
  143. data/app/helpers/attachments_helper.rb +2 -0
  144. data/app/helpers/auto_completion_helper.rb +33 -0
  145. data/app/helpers/avatar_helper.rb +70 -0
  146. data/app/helpers/bookmarks_helper.rb +22 -0
  147. data/app/helpers/box_helper.rb +56 -0
  148. data/app/helpers/breadcrumbs_helper.rb +62 -0
  149. data/app/helpers/corporate_vita_helper.rb +34 -0
  150. data/app/helpers/events_helper.rb +28 -0
  151. data/app/helpers/flash_helper.rb +60 -0
  152. data/app/helpers/footer_helper.rb +13 -0
  153. data/app/helpers/galleria_helper.rb +13 -0
  154. data/app/helpers/groups_helper.rb +66 -0
  155. data/app/helpers/horizontal_nav_helper.rb +11 -0
  156. data/app/helpers/i18n_helper.rb +10 -0
  157. data/app/helpers/icon_helper.rb +35 -0
  158. data/app/helpers/mailer_helper.rb +7 -0
  159. data/app/helpers/map_helper.rb +26 -0
  160. data/app/helpers/markdown_helper.rb +22 -0
  161. data/app/helpers/markup_helper.rb +25 -0
  162. data/app/helpers/officers_helper.rb +13 -0
  163. data/app/helpers/password_helper.rb +23 -0
  164. data/app/helpers/profile_field_helper.rb +40 -0
  165. data/app/helpers/profile_helper.rb +69 -0
  166. data/app/helpers/quick_link_helper.rb +53 -0
  167. data/app/helpers/special_pages_helper.rb +9 -0
  168. data/app/helpers/structureable_helper.rb +11 -0
  169. data/app/helpers/sublime_helper.rb +16 -0
  170. data/app/helpers/title_helper.rb +52 -0
  171. data/app/helpers/tool_buttons_helper.rb +74 -0
  172. data/app/helpers/unicode_helper.rb +9 -0
  173. data/app/helpers/users_helper.rb +13 -0
  174. data/app/helpers/vertical_nav_helper.rb +84 -0
  175. data/app/helpers/workflows_helper.rb +37 -0
  176. data/app/mailers/event_mailer.rb +13 -0
  177. data/app/mailers/post_mailer.rb +11 -0
  178. data/app/mailers/user_account_mailer.rb +17 -0
  179. data/app/models/ability.rb +321 -0
  180. data/app/models/active_record_associations_patches.rb +26 -0
  181. data/app/models/active_record_cache_extension.rb +152 -0
  182. data/app/models/active_record_find_by_extension.rb +20 -0
  183. data/app/models/active_record_json_url_extension.rb +51 -0
  184. data/app/models/active_record_metric_events_extension.rb +22 -0
  185. data/app/models/active_record_read_only_extension.rb +35 -0
  186. data/app/models/active_record_update_attributes_bip_extension.rb +24 -0
  187. data/app/models/address_label.rb +50 -0
  188. data/app/models/app_version.rb +49 -0
  189. data/app/models/array.rb +15 -0
  190. data/app/models/attachment.rb +76 -0
  191. data/app/models/bashpass_password.rb +32 -0
  192. data/app/models/blog_post.rb +2 -0
  193. data/app/models/bookmark.rb +67 -0
  194. data/app/models/cache_additions.rb +15 -0
  195. data/app/models/cache_store_extension.rb +78 -0
  196. data/app/models/concerns/user_avatar.rb +16 -0
  197. data/app/models/concerns/user_corporations.rb +44 -0
  198. data/app/models/concerns/user_date_of_birth.rb +74 -0
  199. data/app/models/concerns/user_profile.rb +102 -0
  200. data/app/models/corporation.rb +80 -0
  201. data/app/models/dag_link.rb +29 -0
  202. data/app/models/event.rb +235 -0
  203. data/app/models/flag.rb +18 -0
  204. data/app/models/flagable.rb +62 -0
  205. data/app/models/geo_location.rb +92 -0
  206. data/app/models/group.rb +224 -0
  207. data/app/models/group_mixins/corporations.rb +141 -0
  208. data/app/models/group_mixins/developers.rb +41 -0
  209. data/app/models/group_mixins/everyone.rb +72 -0
  210. data/app/models/group_mixins/guests.rb +61 -0
  211. data/app/models/group_mixins/hidden_users.rb +43 -0
  212. data/app/models/group_mixins/import.rb +321 -0
  213. data/app/models/group_mixins/memberships.rb +207 -0
  214. data/app/models/group_mixins/officers.rb +47 -0
  215. data/app/models/group_mixins/roles.rb +41 -0
  216. data/app/models/horizontal_nav.rb +32 -0
  217. data/app/models/last_seen_activity.rb +10 -0
  218. data/app/models/list_export.rb +359 -0
  219. data/app/models/may_need_review.rb +54 -0
  220. data/app/models/metric_logger.rb +83 -0
  221. data/app/models/nav_node.rb +169 -0
  222. data/app/models/navable.rb +46 -0
  223. data/app/models/object_to_b_extension.rb +12 -0
  224. data/app/models/page.rb +212 -0
  225. data/app/models/password.rb +28 -0
  226. data/app/models/post.rb +199 -0
  227. data/app/models/profile.rb +36 -0
  228. data/app/models/profile_field.rb +196 -0
  229. data/app/models/profile_field_mixins/has_child_profile_fields.rb +114 -0
  230. data/app/models/profile_field_types/about.rb +9 -0
  231. data/app/models/profile_field_types/academic_degree.rb +10 -0
  232. data/app/models/profile_field_types/address.rb +88 -0
  233. data/app/models/profile_field_types/bank_account.rb +12 -0
  234. data/app/models/profile_field_types/competence.rb +7 -0
  235. data/app/models/profile_field_types/custom.rb +12 -0
  236. data/app/models/profile_field_types/date.rb +14 -0
  237. data/app/models/profile_field_types/description.rb +15 -0
  238. data/app/models/profile_field_types/email.rb +20 -0
  239. data/app/models/profile_field_types/employment.rb +24 -0
  240. data/app/models/profile_field_types/general.rb +9 -0
  241. data/app/models/profile_field_types/homepage.rb +19 -0
  242. data/app/models/profile_field_types/name_surrounding.rb +11 -0
  243. data/app/models/profile_field_types/organization.rb +24 -0
  244. data/app/models/profile_field_types/phone.rb +37 -0
  245. data/app/models/profile_field_types/professional_category.rb +8 -0
  246. data/app/models/profile_field_types/study.rb +18 -0
  247. data/app/models/profile_section.rb +49 -0
  248. data/app/models/profileable.rb +58 -0
  249. data/app/models/profileable_mixins/address.rb +118 -0
  250. data/app/models/relationship.rb +78 -0
  251. data/app/models/role.rb +164 -0
  252. data/app/models/setting.rb +9 -0
  253. data/app/models/status_group.rb +28 -0
  254. data/app/models/status_group_membership.rb +189 -0
  255. data/app/models/status_group_membership_info.rb +54 -0
  256. data/app/models/structureable.rb +164 -0
  257. data/app/models/structureable_mixins/has_special_groups.rb +127 -0
  258. data/app/models/structureable_mixins/roles.rb +275 -0
  259. data/app/models/user.rb +878 -0
  260. data/app/models/user_account.rb +162 -0
  261. data/app/models/user_alias.rb +112 -0
  262. data/app/models/user_group_membership.rb +300 -0
  263. data/app/models/user_group_membership_mixins/validity_range.rb +206 -0
  264. data/app/models/user_group_membership_mixins/validity_range_for_indirect_memberships.rb +160 -0
  265. data/app/models/user_mixins/identification.rb +36 -0
  266. data/app/models/user_mixins/memberships.rb +75 -0
  267. data/app/models/workflow.rb +40 -0
  268. data/app/models/workflow_kit/add_to_group_brick.rb +21 -0
  269. data/app/models/workflow_kit/destroy_account_and_end_memberships_if_needed_brick.rb +19 -0
  270. data/app/models/workflow_kit/last_membership_needs_review_brick.rb +19 -0
  271. data/app/models/workflow_kit/mark_as_deceased_brick.rb +17 -0
  272. data/app/models/workflow_kit/remove_from_group_brick.rb +27 -0
  273. data/app/models/workflow_kit/test_brick.rb +13 -0
  274. data/app/pdfs/address_labels_pdf.rb +157 -0
  275. data/app/presenters/base_presenter.rb +52 -0
  276. data/app/presenters/horizontal_nav_presenter.rb +106 -0
  277. data/app/uploaders/attachment_uploader.rb +148 -0
  278. data/app/views/activities/index.html.haml +25 -0
  279. data/app/views/attachments/_attachment.html.haml +20 -0
  280. data/app/views/attachments/_description.html.haml +11 -0
  281. data/app/views/attachments/_documents.html.haml +17 -0
  282. data/app/views/attachments/_drop_field.html.haml +46 -0
  283. data/app/views/attachments/_picture.html.haml +2 -0
  284. data/app/views/attachments/_pictures.html.haml +10 -0
  285. data/app/views/attachments/_video.html.haml +8 -0
  286. data/app/views/attachments/create.js.erb +1 -0
  287. data/app/views/attachments/destroy.js.erb +1 -0
  288. data/app/views/blog_posts/create.js.erb +17 -0
  289. data/app/views/bookmarks/_list.html.haml +7 -0
  290. data/app/views/bookmarks/update.js.erb +4 -0
  291. data/app/views/devise/mailer/reset_password_instructions.html.haml +8 -0
  292. data/app/views/devise/passwords/edit.html.haml +1 -0
  293. data/app/views/devise/passwords/new.html.haml +12 -0
  294. data/app/views/devise/registrations/edit.html.haml +1 -0
  295. data/app/views/devise/sessions/new.html.haml +14 -0
  296. data/app/views/devise/shared/_links.haml +26 -0
  297. data/app/views/errors/show.html.haml +5 -0
  298. data/app/views/errors/unauthorized.html.haml +7 -0
  299. data/app/views/event_mailer/invitation_email.html.erb +63 -0
  300. data/app/views/events/_event_details.html.haml +54 -0
  301. data/app/views/events/_events_lis.html.haml +29 -0
  302. data/app/views/events/_invitation_text.html.erb +8 -0
  303. data/app/views/events/_pictures.html.haml +5 -0
  304. data/app/views/events/_public_index.html.haml +16 -0
  305. data/app/views/events/index.html.haml +24 -0
  306. data/app/views/events/show.html.haml +50 -0
  307. data/app/views/groups/_address_labels_modal.html.haml +27 -0
  308. data/app/views/groups/_export_button.html.haml +66 -0
  309. data/app/views/groups/_group_list.html.haml +25 -0
  310. data/app/views/groups/_member_avatars.html.haml +4 -0
  311. data/app/views/groups/_member_list.html.haml +15 -0
  312. data/app/views/groups/index.html.erb +11 -0
  313. data/app/views/groups/index_mine.html.haml +7 -0
  314. data/app/views/groups/show.html.haml +79 -0
  315. data/app/views/last_seen_activities/_index.html.haml +19 -0
  316. data/app/views/layouts/_add_structureable_additions.html.haml +15 -0
  317. data/app/views/layouts/_box.html.haml +16 -0
  318. data/app/views/layouts/_help_button.html.haml +1 -0
  319. data/app/views/layouts/_role_preview_switcher.html.haml +20 -0
  320. data/app/views/layouts/_session_bar_avatar.html.haml +1 -0
  321. data/app/views/layouts/_vertical_nav.html.haml +5 -0
  322. data/app/views/layouts/bootstrap.html.haml +146 -0
  323. data/app/views/layouts/mercury.html.erb +23 -0
  324. data/app/views/officers/_history_notice.html.haml +4 -0
  325. data/app/views/officers/_officers_box.html.haml +33 -0
  326. data/app/views/officers/_officers_group_entry.html.haml +45 -0
  327. data/app/views/pages/_attachments.html.haml +21 -0
  328. data/app/views/pages/_page.html.haml +28 -0
  329. data/app/views/pages/_pictures.html.haml +2 -0
  330. data/app/views/pages/_videos.html.erb +8 -0
  331. data/app/views/pages/show.html.haml +39 -0
  332. data/app/views/post_mailer/post_email.html.erb +17 -0
  333. data/app/views/posts/_new_post_template_text.html.haml +6 -0
  334. data/app/views/posts/_post.html.haml +13 -0
  335. data/app/views/posts/_post_quote.html.haml +18 -0
  336. data/app/views/posts/_posts.html.haml +6 -0
  337. data/app/views/posts/index.html.haml +9 -0
  338. data/app/views/posts/new.html.haml +42 -0
  339. data/app/views/posts/show.html.haml +8 -0
  340. data/app/views/profile_fields/_postal_address_flag_switch.html.haml +21 -0
  341. data/app/views/profile_fields/_profile_field.html.haml +41 -0
  342. data/app/views/profile_fields/create.js.erb +26 -0
  343. data/app/views/profile_fields/destroy.js.erb +3 -0
  344. data/app/views/profiles/_add_profile_field_button.html.haml +15 -0
  345. data/app/views/profiles/_profile_section_ul.html.haml +8 -0
  346. data/app/views/profiles/_section.html.haml +28 -0
  347. data/app/views/profiles/_send_group_message_button.html.haml +4 -0
  348. data/app/views/root/_latest_members_box.html.haml +19 -0
  349. data/app/views/root/_start_page_elements.html.haml +0 -0
  350. data/app/views/root/_what_is_new.html.haml +21 -0
  351. data/app/views/search/_preview_blog_post.html.haml +1 -0
  352. data/app/views/search/_preview_corporation.html.haml +5 -0
  353. data/app/views/search/_preview_group.html.haml +4 -0
  354. data/app/views/search/_preview_page.html.haml +11 -0
  355. data/app/views/search/_preview_user.html.haml +14 -0
  356. data/app/views/search/index.html.haml +42 -0
  357. data/app/views/setup/index.html.haml +56 -0
  358. data/app/views/shared/_add_structureable.html.haml +22 -0
  359. data/app/views/shared/_authorization_info.html.haml +22 -0
  360. data/app/views/shared/_flags.html.haml +5 -0
  361. data/app/views/shared/_markdown_help.html.haml +4 -0
  362. data/app/views/shared/_search_box.html.haml +2 -0
  363. data/app/views/shared/_upcoming_events.html.haml +33 -0
  364. data/app/views/statistics/index.html.haml +16 -0
  365. data/app/views/statistics/show.html.haml +13 -0
  366. data/app/views/terms_of_use/_checkbox.html.haml +1 -0
  367. data/app/views/terms_of_use/_terms.html.haml +1 -0
  368. data/app/views/terms_of_use/index.html.haml +19 -0
  369. data/app/views/user_account_mailer/welcome_email.html.erb +32 -0
  370. data/app/views/user_accounts/_change_password.html.haml +149 -0
  371. data/app/views/user_accounts/_user_account.html.haml +39 -0
  372. data/app/views/user_group_memberships/_list_item.html.haml +9 -0
  373. data/app/views/user_group_memberships/_memberships_table.html.haml +56 -0
  374. data/app/views/user_group_memberships/_new.html.haml +18 -0
  375. data/app/views/user_group_memberships/create.js.erb +9 -0
  376. data/app/views/user_group_memberships/index.html.haml +5 -0
  377. data/app/views/user_settings/show.html.haml +36 -0
  378. data/app/views/users/_avatar.html.haml +16 -0
  379. data/app/views/users/_communication_box.html.haml +8 -0
  380. data/app/views/users/_corporate_vita.html.haml +23 -0
  381. data/app/views/users/_dead_badge.html.haml +3 -0
  382. data/app/views/users/_deceased_modal.html.haml +24 -0
  383. data/app/views/users/_hidden_badge.html.haml +4 -0
  384. data/app/views/users/_hidden_flag_switch.html.haml +20 -0
  385. data/app/views/users/_special_general_info_fields.html.haml +10 -0
  386. data/app/views/users/_user_corporation_attribute.html.haml +6 -0
  387. data/app/views/users/_user_name_attribute.html.haml +4 -0
  388. data/app/views/users/_user_title.html.haml +5 -0
  389. data/app/views/users/_workflow_triggers.html.haml +23 -0
  390. data/app/views/users/new.html.haml +55 -0
  391. data/app/views/users/show.html.haml +79 -0
  392. data/config/environment.rb +5 -0
  393. data/config/initializers/active_record_cache_extension.rb +1 -0
  394. data/config/initializers/active_record_find_by_extension.rb +1 -0
  395. data/config/initializers/active_record_flagable_extension.rb +2 -0
  396. data/config/initializers/active_record_json_url_extension.rb +1 -0
  397. data/config/initializers/active_record_may_need_review_extension.rb +2 -0
  398. data/config/initializers/active_record_metric_events_extension.rb +1 -0
  399. data/config/initializers/active_record_navable_extension.rb +6 -0
  400. data/config/initializers/active_record_profileable_extension.rb +4 -0
  401. data/config/initializers/active_record_read_only_extension.rb +1 -0
  402. data/config/initializers/active_record_structureable_extension.rb +3 -0
  403. data/config/initializers/active_record_update_attributes_bip_extension.rb +1 -0
  404. data/config/initializers/array_extension.rb +1 -0
  405. data/config/initializers/best_in_place_display_definitions.rb +31 -0
  406. data/config/initializers/cache_store_extension.rb +1 -0
  407. data/config/initializers/devise.rb +240 -0
  408. data/config/initializers/fnordmetric.rb +14 -0
  409. data/config/initializers/formtastic.rb +76 -0
  410. data/config/initializers/group_type_column_patches.rb +11 -0
  411. data/config/initializers/mime_types.rb +1 -0
  412. data/config/initializers/mini_profiler.rb +32 -0
  413. data/config/initializers/object_to_b_extension.rb +1 -0
  414. data/config/initializers/refile.rb +22 -0
  415. data/config/initializers/sidekiq.rb +12 -0
  416. data/config/locales/attachments/de.yml +33 -0
  417. data/config/locales/bookmarks/de.yml +3 -0
  418. data/config/locales/bookmarks/en.yml +3 -0
  419. data/config/locales/common_expressions/de.yml +5 -0
  420. data/config/locales/common_expressions/en.yml +5 -0
  421. data/config/locales/companies/de.yml +4 -0
  422. data/config/locales/companies/en.yml +4 -0
  423. data/config/locales/de.yml +30 -0
  424. data/config/locales/devise/de.yml +60 -0
  425. data/config/locales/devise/en.yml +62 -0
  426. data/config/locales/en.yml +25 -0
  427. data/config/locales/events/de.yml +34 -0
  428. data/config/locales/events/en.yml +34 -0
  429. data/config/locales/forms/de.yml +3 -0
  430. data/config/locales/groups/de.yml +56 -0
  431. data/config/locales/groups/en.yml +47 -0
  432. data/config/locales/officers/de.yml +10 -0
  433. data/config/locales/pages/de.yml +15 -0
  434. data/config/locales/pages/en.yml +14 -0
  435. data/config/locales/pagination/de.yml +6 -0
  436. data/config/locales/pagination/en.yml +5 -0
  437. data/config/locales/password_strength/de.yml +9 -0
  438. data/config/locales/password_strength/en.yml +9 -0
  439. data/config/locales/posts/de.yml +9 -0
  440. data/config/locales/profile_fields/de.yml +78 -0
  441. data/config/locales/profile_fields/en.yml +22 -0
  442. data/config/locales/profiles/de.yml +47 -0
  443. data/config/locales/profiles/en.yml +44 -0
  444. data/config/locales/roles/de.yml +9 -0
  445. data/config/locales/root/de.yml +3 -0
  446. data/config/locales/root/en.yml +3 -0
  447. data/config/locales/search/de.yml +11 -0
  448. data/config/locales/search/en.yml +11 -0
  449. data/config/locales/sessions/de.yml +37 -0
  450. data/config/locales/sessions/en.yml +37 -0
  451. data/config/locales/setup/de.yml +26 -0
  452. data/config/locales/setup/en.yml +26 -0
  453. data/config/locales/statistics/de.yml +6 -0
  454. data/config/locales/terms_of_use/de.yml +6 -0
  455. data/config/locales/tools/de.yml +9 -0
  456. data/config/locales/tools/en.yml +9 -0
  457. data/config/locales/user_accounts/de.yml +16 -0
  458. data/config/locales/user_accounts/en.yml +13 -0
  459. data/config/locales/user_settings/de.yml +9 -0
  460. data/config/locales/users/de.yml +82 -0
  461. data/config/locales/users/en.yml +51 -0
  462. data/config/locales/workflows/de.yml +4 -0
  463. data/config/locales/workflows/en.yml +4 -0
  464. data/config/routes.rb +104 -0
  465. data/db/migrate/20120403002734_create_users.rb +12 -0
  466. data/db/migrate/20120403011601_create_profile_fields.rb +11 -0
  467. data/db/migrate/20120403161549_remove_user_email_column.rb +5 -0
  468. data/db/migrate/20120405222050_encrypt_password.rb +8 -0
  469. data/db/migrate/20120425161138_create_dag_links.rb +14 -0
  470. data/db/migrate/20120425162644_create_pages.rb +10 -0
  471. data/db/migrate/20120426023322_create_groups.rb +9 -0
  472. data/db/migrate/20120426090436_create_nav_nodes.rb +18 -0
  473. data/db/migrate/20120427021934_create_user_accounts.rb +12 -0
  474. data/db/migrate/20120427044338_add_foreign_key_to_user_accounts.rb +7 -0
  475. data/db/migrate/20120427150156_add_group_token.rb +8 -0
  476. data/db/migrate/20120507165551_make_profile_fields_polymorphic.rb +11 -0
  477. data/db/migrate/20120508130729_add_profile_field_acts_as_tree.rb +9 -0
  478. data/db/migrate/20120508152233_change_profile_field_value_to_text.rb +9 -0
  479. data/db/migrate/20120508201550_add_group_internal_token.rb +11 -0
  480. data/db/migrate/20120511090234_create_workflows.rb +9 -0
  481. data/db/migrate/20120701115059_add_password_digest_to_user_accounts.rb +5 -0
  482. data/db/migrate/20120710193308_remove_salt_from_user_accounts.rb +5 -0
  483. data/db/migrate/20120713102445_add_deleted_at_to_dag_links.rb +5 -0
  484. data/db/migrate/20120722005022_create_workflow_kit_workflows.workflow_kit.rb +11 -0
  485. data/db/migrate/20120722005023_create_workflow_kit_steps.workflow_kit.rb +12 -0
  486. data/db/migrate/20120722005024_create_workflow_kit_parameters.workflow_kit.rb +12 -0
  487. data/db/migrate/20120723165226_add_female_to_users.rb +5 -0
  488. data/db/migrate/20120811140509_create_flags.rb +11 -0
  489. data/db/migrate/20120814100529_create_attachments.rb +13 -0
  490. data/db/migrate/20120815205610_add_content_type_and_file_size_to_attachments.rb +6 -0
  491. data/db/migrate/20130118220014_add_relationships_table_without_dag.rb +10 -0
  492. data/db/migrate/20130207214331_create_events.rb +12 -0
  493. data/db/migrate/20130208215253_create_status_group_membership_infos.rb +11 -0
  494. data/db/migrate/20130220184943_create_stars.rb +11 -0
  495. data/db/migrate/20130309193623_add_devise_to_user_accounts.rb +72 -0
  496. data/db/migrate/20130310003840_rename_stars_to_bookmarks.rb +9 -0
  497. data/db/migrate/20130310004622_fix_column_names_for_bookmarks.rb +6 -0
  498. data/db/migrate/20130313211414_create_geo_infos.rb +13 -0
  499. data/db/migrate/20130313234131_create_geo_locations.rb +16 -0
  500. data/db/migrate/20130314011638_drop_geo_infos.rb +5 -0
  501. data/db/migrate/20130315072759_add_invalid_to_geo_location.rb +5 -0
  502. data/db/migrate/20130315073149_exchange_invalid_for_queried_at_in_geo_location.rb +8 -0
  503. data/db/migrate/20130320003051_add_redirect_to_to_page.rb +5 -0
  504. data/db/migrate/20130329231657_create_posts.rb +15 -0
  505. data/db/migrate/20130404223735_add_entire_message_to_posts.rb +5 -0
  506. data/db/migrate/20130409192959_add_author_to_page.rb +5 -0
  507. data/db/migrate/20130908011215_add_type_to_pages.rb +5 -0
  508. data/db/migrate/20131115114715_validity_range_for_dag_links.rb +16 -0
  509. data/db/migrate/20140611170430_create_activities.rb +23 -0
  510. data/db/migrate/20140808223512_create_last_seen_activities.rb +12 -0
  511. data/db/migrate/20141008101744_add_location_to_events.rb +5 -0
  512. data/db/migrate/20141010130344_add_publish_on_website_to_events.rb +6 -0
  513. data/db/migrate/20141010134227_add_auth_token_to_user_accounts.rb +5 -0
  514. data/db/migrate/20141018143323_add_accepted_terms_to_users.rb +6 -0
  515. data/db/migrate/20141018221659_add_author_to_attachments.rb +5 -0
  516. data/db/migrate/20141102223954_add_body_to_groups.rb +5 -0
  517. data/db/migrate/20141110193830_create_settings.rb +17 -0
  518. data/db/migrate/20141202140522_add_indices.rb +6 -0
  519. data/db/migrate/20141209161946_add_keys.rb +20 -0
  520. data/db/migrate/20150127013809_add_incognito_to_users.rb +5 -0
  521. data/db/migrate/20150129194501_add_indices_for_polymorphic_references.rb +13 -0
  522. data/db/migrate/20150304192448_add_type_to_groups.rb +5 -0
  523. data/db/migrate/20150313221004_add_avatar_id_to_users.rb +5 -0
  524. data/lib/best_in_place/controller_extensions.rb +25 -0
  525. data/lib/best_in_place/helper.rb +127 -0
  526. data/lib/tasks/db_bootstrap.rake +37 -0
  527. data/lib/tasks/your_platform_tasks.rake +4 -0
  528. data/lib/templates/erb/scaffold/_form.html.erb +11 -0
  529. data/lib/your_platform.rb +6 -2
  530. data/lib/your_platform/engine.rb +127 -0
  531. data/lib/your_platform/version.rb +1 -1
  532. data/spec/factories/attachment.rb +12 -0
  533. data/spec/factories/blog_post.rb +10 -0
  534. data/spec/factories/company.rb +7 -0
  535. data/spec/factories/corporation.rb +20 -0
  536. data/spec/factories/event.rb +13 -0
  537. data/spec/factories/group.rb +36 -0
  538. data/spec/factories/html_email.eml +1059 -0
  539. data/spec/factories/mail_message.rb +30 -0
  540. data/spec/factories/page.rb +10 -0
  541. data/spec/factories/relationship.rb +13 -0
  542. data/spec/factories/status_group_membership.rb +21 -0
  543. data/spec/factories/user.rb +97 -0
  544. data/spec/factories/workflow.rb +44 -0
  545. data/spec/features/blog_post_spec.rb +46 -0
  546. data/spec/features/corporate_vita_events_spec.rb +114 -0
  547. data/spec/features/corporate_vita_spec.rb +258 -0
  548. data/spec/features/edit_mode_after_clicking_a_link_spec.rb +20 -0
  549. data/spec/features/events_spec.rb +356 -0
  550. data/spec/features/group_export_spec.rb +19 -0
  551. data/spec/features/group_post_spec.rb +89 -0
  552. data/spec/features/groups_of_groups_page_spec.rb +67 -0
  553. data/spec/features/groups_page_spec.rb +66 -0
  554. data/spec/features/groups_table_spec.rb +32 -0
  555. data/spec/features/help_page_spec.rb +22 -0
  556. data/spec/features/intranet_root_page_spec.rb +18 -0
  557. data/spec/features/locales_spec.rb +36 -0
  558. data/spec/features/maps_spec.rb +53 -0
  559. data/spec/features/mini_profiler_spec.rb +37 -0
  560. data/spec/features/officers_spec.rb +61 -0
  561. data/spec/features/page_redirects_spec.rb +23 -0
  562. data/spec/features/page_spec.rb +20 -0
  563. data/spec/features/postal_address_flag_spec.rb +46 -0
  564. data/spec/features/relationships_on_user_page_spec.rb +78 -0
  565. data/spec/features/review_membership_spec.rb +44 -0
  566. data/spec/features/search_field_spec.rb +121 -0
  567. data/spec/features/setup_spec.rb +63 -0
  568. data/spec/features/user_change_date_of_birth_spec.rb +26 -0
  569. data/spec/features/vertical_nav_spec.rb +27 -0
  570. data/spec/features/what_is_new_box_spec.rb +33 -0
  571. data/spec/helpers/attachments_helper_spec.rb +15 -0
  572. data/spec/models/ability_spec.rb +93 -0
  573. data/spec/models/active_record_cache_extension_spec.rb +177 -0
  574. data/spec/models/active_record_find_by_extension_spec.rb +26 -0
  575. data/spec/models/active_record_json_url_extension_spec.rb +79 -0
  576. data/spec/models/address_label_spec.rb +144 -0
  577. data/spec/models/app_version_spec.rb +38 -0
  578. data/spec/models/attachment_spec.rb +5 -0
  579. data/spec/models/bookmark_spec.rb +70 -0
  580. data/spec/models/concerns/user_corporations_spec.rb +71 -0
  581. data/spec/models/corporation_spec.rb +128 -0
  582. data/spec/models/dag_link_spec.rb +48 -0
  583. data/spec/models/event_spec.rb +267 -0
  584. data/spec/models/flag_spec.rb +20 -0
  585. data/spec/models/flagable_spec.rb +55 -0
  586. data/spec/models/geo_location_spec.rb +126 -0
  587. data/spec/models/group_mixins/corporations_spec.rb +95 -0
  588. data/spec/models/group_mixins/everyone_spec.rb +64 -0
  589. data/spec/models/group_mixins/guests_spec.rb +75 -0
  590. data/spec/models/group_mixins/hidden_users_spec.rb +21 -0
  591. data/spec/models/group_mixins/import_spec.rb +93 -0
  592. data/spec/models/group_mixins/memberships_spec.rb +303 -0
  593. data/spec/models/group_mixins/officers_spec.rb +63 -0
  594. data/spec/models/group_mixins/roles_spec.rb +46 -0
  595. data/spec/models/group_spec.rb +341 -0
  596. data/spec/models/list_export_spec.rb +155 -0
  597. data/spec/models/may_need_review_spec.rb +114 -0
  598. data/spec/models/nav_node_spec.rb +277 -0
  599. data/spec/models/navable_spec.rb +54 -0
  600. data/spec/models/page_spec.rb +185 -0
  601. data/spec/models/post_spec.rb +271 -0
  602. data/spec/models/profile_field_mixins/has_child_profile_fields_spec.rb +73 -0
  603. data/spec/models/profile_field_spec.rb +482 -0
  604. data/spec/models/profile_section_spec.rb +89 -0
  605. data/spec/models/profile_spec.rb +74 -0
  606. data/spec/models/profileable_mixins/adress_spec.rb +93 -0
  607. data/spec/models/profileable_spec.rb +152 -0
  608. data/spec/models/relationship_spec.rb +113 -0
  609. data/spec/models/status_group_membership_spec.rb +350 -0
  610. data/spec/models/status_group_spec.rb +103 -0
  611. data/spec/models/structureable_mixins/has_special_groups_spec.rb +479 -0
  612. data/spec/models/structureable_mixins/roles_spec.rb +517 -0
  613. data/spec/models/structureable_spec.rb +128 -0
  614. data/spec/models/user_account_spec.rb +142 -0
  615. data/spec/models/user_alias_spec.rb +57 -0
  616. data/spec/models/user_group_membership_mixins/validity_range_for_indirect_memberships_spec.rb +291 -0
  617. data/spec/models/user_group_membership_mixins/validity_range_spec.rb +293 -0
  618. data/spec/models/user_group_membership_spec.rb +428 -0
  619. data/spec/models/user_mixins/identification_spec.rb +27 -0
  620. data/spec/models/user_mixins/memberships_spec.rb +138 -0
  621. data/spec/models/user_spec.rb +1794 -0
  622. data/spec/old_yp_spec_helper.rb +46 -0
  623. data/spec/spec_helper.rb +350 -0
  624. data/spec/support/auto_complete.rb +22 -0
  625. data/spec/support/capybara/flash_helpers.rb +37 -0
  626. data/spec/support/capybara/profile_steps.rb +73 -0
  627. data/spec/support/capybara/session_steps.rb +53 -0
  628. data/spec/support/capybara/user_account_helpers.rb +15 -0
  629. data/spec/support/debug.rb +8 -0
  630. data/spec/support/devise-controller_macros.rb +15 -0
  631. data/spec/support/geocoder/stubs.rb +60 -0
  632. data/spec/support/press_enter.rb +15 -0
  633. data/spec/support/time_travel.rb +9 -0
  634. data/spec/support/uploads/image-upload.png +0 -0
  635. data/spec/support/uploads/pdf-upload.pdf +0 -0
  636. data/spec/support/wait_for_ajax.rb +39 -0
  637. data/spec/support/wait_for_cache.rb +7 -0
  638. data/spec/uploaders/attachment_uploader_spec.rb +47 -0
  639. data/vendor/assets/images/flags.png +0 -0
  640. data/vendor/assets/images/galleria/classic-loader.gif +0 -0
  641. data/vendor/assets/images/galleria/classic-map.png +0 -0
  642. data/vendor/assets/javascripts/best_in_place_datetime.js.coffee +45 -0
  643. data/vendor/assets/javascripts/galleria-classic.js +100 -0
  644. data/vendor/assets/javascripts/galleria.js +6919 -0
  645. data/vendor/assets/javascripts/gmaps4rails.js +2 -0
  646. data/vendor/assets/javascripts/gmaps4rails/all.js +1 -0
  647. data/vendor/assets/javascripts/gmaps4rails/base.coffee +1 -0
  648. data/vendor/assets/javascripts/gmaps4rails/base/common.coffee +43 -0
  649. data/vendor/assets/javascripts/gmaps4rails/base/configuration.coffee +7 -0
  650. data/vendor/assets/javascripts/gmaps4rails/base/gmaps.coffee +13 -0
  651. data/vendor/assets/javascripts/gmaps4rails/base/interfaces/basic_interface.coffee +15 -0
  652. data/vendor/assets/javascripts/gmaps4rails/base/interfaces/controller_interface.coffee +15 -0
  653. data/vendor/assets/javascripts/gmaps4rails/base/interfaces/map_interface.coffee +27 -0
  654. data/vendor/assets/javascripts/gmaps4rails/base/interfaces/marker_interface.coffee +15 -0
  655. data/vendor/assets/javascripts/gmaps4rails/base/main.coffee +124 -0
  656. data/vendor/assets/javascripts/gmaps4rails/base/main_controller_extensions/circle_controller.coffee +29 -0
  657. data/vendor/assets/javascripts/gmaps4rails/base/main_controller_extensions/kml_controller.coffee +5 -0
  658. data/vendor/assets/javascripts/gmaps4rails/base/main_controller_extensions/marker_controller.coffee +76 -0
  659. data/vendor/assets/javascripts/gmaps4rails/base/main_controller_extensions/polygon_controller.coffee +29 -0
  660. data/vendor/assets/javascripts/gmaps4rails/base/main_controller_extensions/polyline_controller.coffee +29 -0
  661. data/vendor/assets/javascripts/gmaps4rails/base/objects/circle.coffee +12 -0
  662. data/vendor/assets/javascripts/gmaps4rails/base/objects/kml.coffee +8 -0
  663. data/vendor/assets/javascripts/gmaps4rails/base/objects/map.coffee +62 -0
  664. data/vendor/assets/javascripts/gmaps4rails/base/objects/marker.coffee +24 -0
  665. data/vendor/assets/javascripts/gmaps4rails/base/objects/polygon.coffee +11 -0
  666. data/vendor/assets/javascripts/gmaps4rails/base/objects/polyline.coffee +11 -0
  667. data/vendor/assets/javascripts/gmaps4rails/bing.coffee +1 -0
  668. data/vendor/assets/javascripts/gmaps4rails/bing/main.coffee +29 -0
  669. data/vendor/assets/javascripts/gmaps4rails/bing/objects/map.coffee +63 -0
  670. data/vendor/assets/javascripts/gmaps4rails/bing/objects/marker.coffee +78 -0
  671. data/vendor/assets/javascripts/gmaps4rails/bing/shared.coffee +20 -0
  672. data/vendor/assets/javascripts/gmaps4rails/google.coffee +1 -0
  673. data/vendor/assets/javascripts/gmaps4rails/google/main.coffee +47 -0
  674. data/vendor/assets/javascripts/gmaps4rails/google/objects/circle.coffee +38 -0
  675. data/vendor/assets/javascripts/gmaps4rails/google/objects/kml.coffee +16 -0
  676. data/vendor/assets/javascripts/gmaps4rails/google/objects/map.coffee +71 -0
  677. data/vendor/assets/javascripts/gmaps4rails/google/objects/marker.coffee +114 -0
  678. data/vendor/assets/javascripts/gmaps4rails/google/objects/polygon.coffee +38 -0
  679. data/vendor/assets/javascripts/gmaps4rails/google/objects/polyline.coffee +49 -0
  680. data/vendor/assets/javascripts/gmaps4rails/google/shared.coffee +27 -0
  681. data/vendor/assets/javascripts/gmaps4rails/openlayers.coffee +1 -0
  682. data/vendor/assets/javascripts/gmaps4rails/openlayers/main.coffee +138 -0
  683. data/vendor/assets/javascripts/gmaps4rails/openlayers/objects/map.coffee +49 -0
  684. data/vendor/assets/javascripts/gmaps4rails/openlayers/objects/marker.coffee +68 -0
  685. data/vendor/assets/javascripts/gmaps4rails/openlayers/objects/polyline.coffee +39 -0
  686. data/vendor/assets/javascripts/gmaps4rails/openlayers/shared.coffee +19 -0
  687. data/vendor/assets/javascripts/jquery-ui-timepicker-addon.js +2223 -0
  688. data/vendor/assets/javascripts/jquery-ui-timepicker-de.js +26 -0
  689. data/vendor/assets/javascripts/jquery.ui.datepicker-de.js +23 -0
  690. data/vendor/assets/javascripts/password_strength.js +149 -0
  691. data/vendor/assets/javascripts/zxcvbn.js +43 -0
  692. data/vendor/assets/stylesheets/flags.css.scss +259 -0
  693. data/vendor/assets/stylesheets/galleria-classic.css.scss +239 -0
  694. data/vendor/assets/stylesheets/gmaps4rails.css +24 -0
  695. data/vendor/assets/stylesheets/mercury.css +24 -0
  696. data/vendor/scripts/bashpass/README.md +29 -0
  697. data/vendor/scripts/bashpass/bashpass +124 -0
  698. data/vendor/scripts/bashpass/bashpass-APACHE-LICENSE +201 -0
  699. data/vendor/scripts/bashpass/german.dic +40794 -0
  700. metadata +1540 -16
  701. data/.gitignore +0 -17
  702. data/Gemfile +0 -4
  703. data/LICENSE.txt +0 -4
  704. data/your_platform.gemspec +0 -19
@@ -0,0 +1,128 @@
1
+ require 'spec_helper'
2
+
3
+ # We use the Page model here as an example, since it is already represented in the database.
4
+ #
5
+ # class Page < ActiveRecord::Base
6
+ # is_structureable ...
7
+ # ...
8
+ # end
9
+
10
+ describe Structureable do
11
+
12
+ describe ".is_structureable" do
13
+
14
+ before { @node = create( :page ) }
15
+ subject { @node }
16
+
17
+ it "should provide the has_dag_links functionality" do
18
+ subject.should respond_to( :parents, :children, :ancestors, :descendants )
19
+ end
20
+
21
+ it "should provide the has_many_flags functionality" do
22
+ subject.should respond_to( :flags, :add_flag, :remove_flag )
23
+ end
24
+
25
+ it "should make sure that when objects are destroyed, also their dag links are destroyed" do
26
+ @parent = create( :page )
27
+ @parent.child_pages << @node
28
+ @node.destroy
29
+ @parent.links_as_parent.count.should == 0
30
+ end
31
+
32
+ end
33
+
34
+ describe "#move_to" do
35
+ subject { @node.move_to @new_parent }
36
+
37
+ before do
38
+ @parent = create :group
39
+ @new_parent = create :group
40
+ @user = create :user
41
+ end
42
+
43
+ [:group, :page, :event, :user].each do |kind_of_node|
44
+ describe "for a #{kind_of_node} node" do
45
+
46
+ before { @node = create kind_of_node }
47
+
48
+ describe "if the node has no parent" do
49
+ it "should should set the given parent as parent node" do
50
+ @node.parents.should == []
51
+ subject
52
+ @node.reload.parents.should == [@new_parent]
53
+ end
54
+ end
55
+ describe "if the node has one parent" do
56
+ before { @parent << @node }
57
+ it "should remove the old relation" do
58
+ @node.parents.should == [@parent]
59
+ subject
60
+ @node.reload.parents.should_not include @parent
61
+ end
62
+ end
63
+ describe "if the new parent is the old parent" do
64
+ before do
65
+ @parent << @node
66
+ @new_parent = @parent
67
+ end
68
+ it "should not change the existing relation" do
69
+ @links_before = @node.links_as_child
70
+ subject
71
+ @node.reload.links_as_child.should == @links_before
72
+ end
73
+ end
74
+
75
+ end
76
+ end
77
+
78
+ describe "moving a group from a group to a page" do
79
+ before do
80
+ @node = create :group
81
+ @parent = create :group
82
+ @new_parent = create :page
83
+ @parent << @node
84
+ end
85
+ it "should move the object without error" do
86
+ @node.parents.should == [@parent]
87
+ subject
88
+ @node.reload.parents.should_not include @parent
89
+ end
90
+
91
+ describe "when the node has a child user" do
92
+ before { @node << @user }
93
+ it "should keep the group-user relation" do
94
+ subject
95
+ @node.child_users.should == [@user]
96
+ end
97
+ it "should create an ancestor relation between the new parent and the child user" do
98
+ subject
99
+ @user.reload.ancestors.should include @new_parent
100
+ @user.ancestors.should_not include @parent
101
+ end
102
+ end
103
+ end
104
+
105
+ describe "moving a group from a group to another group" do
106
+ before do
107
+ @node = create :group
108
+ @parent = create :group
109
+ @new_parent = create :group
110
+ @parent << @node
111
+ end
112
+
113
+ describe "when the node has a child user" do
114
+ before { @node << @user }
115
+ describe "when the child user is already a child of the new parent" do
116
+ before { @new_parent << @user }
117
+ it "should still work" do
118
+ @user.ancestors.should include @new_parent
119
+ subject
120
+ @user.reload.ancestors.should include @new_parent, @node
121
+ @user.ancestors.should_not include @parent
122
+ end
123
+ end
124
+ end
125
+ end
126
+
127
+ end
128
+ end
@@ -0,0 +1,142 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe UserAccount do
5
+
6
+ before do
7
+ @user = create(:user_with_account)
8
+ @account = @user.account
9
+ end
10
+
11
+ specify "the account should exist at this point" do
12
+ @account.should be
13
+ end
14
+
15
+ describe "#user" do
16
+ subject { @account.user }
17
+ it { should == @user }
18
+ end
19
+
20
+ describe "#id" do
21
+ subject { @account.id }
22
+ it { should_not be_nil }
23
+ end
24
+
25
+ describe "#encrypted_password" do
26
+ subject { @account.encrypted_password }
27
+ describe "just after creating the account" do
28
+ it { should_not be_nil }
29
+ end
30
+ describe "after reloading the account from the database" do
31
+ subject { User.find(@user.id).account.encrypted_password }
32
+ it { should_not be_nil }
33
+ end
34
+ end
35
+
36
+ describe "#password" do
37
+ subject { @account.password }
38
+ describe "just after creating the account" do
39
+ it { should be_kind_of String }
40
+ it { should be_present }
41
+ end
42
+ describe "after reloading the account from the database" do
43
+ subject { User.find(@user.id).account.password }
44
+ describe "in order to protect the password from being read out" do
45
+ it { should == nil }
46
+ end
47
+ end
48
+ end
49
+
50
+ describe '#email=' do
51
+ it 'should not raise an exception when set because it is required by devise for an error case' do
52
+ expect{@account.email = 'invalid@example.org'}.to_not raise_error
53
+ end
54
+ end
55
+
56
+ describe '#identify_user_account' do
57
+ describe 'with invalid login name' do
58
+ it 'should return nil' do
59
+ UserAccount.identify('invalid').should be_nil
60
+ end
61
+ end
62
+
63
+ describe 'with valid email' do
64
+ it 'should return the user account' do
65
+ expect(UserAccount.identify(@user.email)).to eq(@account)
66
+ end
67
+ end
68
+
69
+ describe 'with valid alias' do
70
+ it 'should return the user account' do
71
+ expect(UserAccount.identify(@user.alias)).to eq(@account)
72
+ end
73
+ end
74
+
75
+ describe 'with valid name' do
76
+ it 'should return the user account' do
77
+ expect(UserAccount.identify(@user.name)).to eq(@account)
78
+ end
79
+ end
80
+ end
81
+
82
+ describe "#auth_token" do
83
+ subject { @account.auth_token }
84
+ describe "just after creating the account" do
85
+ it { should be_present }
86
+ it { should be_kind_of String }
87
+ its(:length) { should >= 40 }
88
+ end
89
+ specify "calling it twice should not change the token" do
90
+ token1 = subject
91
+ token2 = subject
92
+ token1.should == token2
93
+ end
94
+ end
95
+
96
+ describe ".identify" do
97
+ before do
98
+ @user1 = create :user_with_account, first_name: "John", last_name: "Doe", email: "john.doe@example.com", :alias => "doe"
99
+ @user2 = create :user_with_account, first_name: "James", last_name: "Doe", email: "james.doe@example.com", :alias => "james.doe"
100
+ end
101
+
102
+ context "for an empty login string" do
103
+ it "should return nil" do
104
+ expect { UserAccount.identify('') == nil }.to be_true
105
+ end
106
+ end
107
+ context "if only one user is matching" do
108
+ it "should return the one matching user account" do
109
+ UserAccount.identify("james.doe").should == @user2.account
110
+ UserAccount.identify("james.doe@example.com").should == @user2.account
111
+ UserAccount.identify("John Doe").should == @user1.account
112
+ end
113
+ end
114
+ context "for multiple users with the same last name" do
115
+ before { @user1.update_attributes(:alias => nil) }
116
+ it "should raise an error" do
117
+ expect { UserAccount.identify('doe') }.to raise_error 'identification_not_unique'
118
+ end
119
+ end
120
+ context "if the last name is identical to the alias (bug fix)" do
121
+ before do
122
+ @user1.destroy # since only @user2 should be present for this test
123
+ @user2.update_attribute(:alias, 'doe')
124
+ end
125
+ specify "prerequisites" do
126
+ @user2.alias.downcase.should == @user2.last_name.downcase
127
+ end
128
+ it "should return the one matching user" do
129
+ UserAccount.identify('doe').should == @user2.account
130
+ end
131
+ end
132
+ context "for several users having the same last name and one of them having the last name as alias (bug fix)" do
133
+ specify "prerequisites" do
134
+ @user1.last_name.downcase.should == @user1.alias.downcase
135
+ @user2.last_name.downcase.should == @user1.last_name.downcase
136
+ end
137
+ it "should return the user identified by the alias" do
138
+ UserAccount.identify("doe").should == @user1.account
139
+ end
140
+ end
141
+ end
142
+ end
@@ -0,0 +1,57 @@
1
+ require 'spec_helper'
2
+
3
+ describe UserAlias do
4
+
5
+ describe ".taken?(alias)" do
6
+ subject { UserAlias.taken?("j.doe") }
7
+ describe "for the alias not being taken" do
8
+ it { should be_false }
9
+ end
10
+ describe "for the alias being taken" do
11
+ before { @user = create(:user, :alias => "j.doe" ) }
12
+ it { should_not be_false }
13
+ it { should == @user }
14
+ end
15
+ end
16
+
17
+ describe "#taken?" do
18
+ subject { UserAlias.new("foo").taken? }
19
+ describe "for the alias not being taken" do
20
+ it { should == false }
21
+ end
22
+ describe "for the alias being taken" do
23
+ before { @user = create(:user, :alias => "foo") }
24
+ it { should_not be_false }
25
+ it { should == @user }
26
+ end
27
+ end
28
+
29
+ describe ".generate_for(user)" do
30
+ before do
31
+ @user = create(:user, first_name: "John", last_name: "Doe")
32
+ end
33
+ subject { UserAlias.generate_for(@user) }
34
+ describe "for no other user with the same last name existing" do
35
+ it { should == "doe" }
36
+ end
37
+ describe "for a user with the same last name existing" do
38
+ before { create(:user, first_name: "Otto", last_name: "Doe") }
39
+ it { should == "j.doe" }
40
+ end
41
+ describe "for a user with the same last name and a first name with the same initial existing" do
42
+ before { create(:user, first_name: "Jane", last_name: "Doe") }
43
+ it { should == "john.doe" }
44
+ end
45
+ describe "for a user with the same first and last names existing" do
46
+ before { create(:user, first_name: "John", last_name: "Doe", :alias => "some_other_alias") }
47
+ describe "for the user having a date of birth given" do
48
+ before { @user.date_of_birth = "1986-01-01".to_date }
49
+ it { should == "john.doe.1986" }
50
+ end
51
+ describe "for the user having no date of birth given" do
52
+ it { should == nil }
53
+ end
54
+ end
55
+ end
56
+
57
+ end
@@ -0,0 +1,291 @@
1
+ require 'spec_helper'
2
+
3
+ describe UserGroupMembershipMixins::ValidityRangeForIndirectMemberships do
4
+
5
+ # Memberships:
6
+ #
7
+ # *-----------------(c)--------------------*
8
+ # |
9
+ # |--------------------|
10
+ # | |
11
+ # *-------(a)--------* |
12
+ # *---------(b)---------*
13
+ #
14
+ # _________________________________________________________
15
+ # t1 t2 t3 time -->
16
+ #
17
+ # Structure:
18
+ #
19
+ # indirect_group ........................... (c)
20
+ # |---------- direct_group ........... (a), (b)
21
+ # |--------- user
22
+ #
23
+ before do
24
+ @user = create(:user)
25
+ @indirect_group = create(:group)
26
+ @direct_group_a = @indirect_group.child_groups.create
27
+ @direct_group_b = @indirect_group.child_groups.create
28
+ @direct_group_a.assign_user @user
29
+ @indirect_membership = UserGroupMembership.find_by_user_and_group(@user, @indirect_group)
30
+ @direct_membership_a = UserGroupMembership.find_by_user_and_group(@user, @direct_group_a)
31
+ @direct_membership_b = @direct_membership_a.move_to_group(@direct_group_b)
32
+ @t1 = 2.hours.ago
33
+ @t2 = 1.hour.ago
34
+ @t3 = nil
35
+ @direct_membership_a.update_attribute(:valid_from, @t1)
36
+ @direct_membership_a.update_attribute(:valid_to, @t2)
37
+ @direct_membership_b.update_attribute(:valid_from, @t2)
38
+ @direct_membership_b.update_attribute(:valid_to, @t3)
39
+ end
40
+
41
+ specify "preliminaries" do
42
+ @direct_membership_a.valid_from.to_i.should < @direct_membership_b.valid_from.to_i
43
+
44
+ #@direct_membership_a.valid_to.should < @direct_membership_b.valid_to
45
+ end
46
+
47
+
48
+ # Validity Range Attributes
49
+ # ====================================================================================================
50
+
51
+ describe "#valid_from" do
52
+ subject { @indirect_membership.valid_from }
53
+ it "should be the valid_from attribute of the earliest direct membership" do
54
+ subject.to_i.should == @direct_membership_a.valid_from.to_i
55
+ end
56
+ end
57
+ describe "#valid_from=" do
58
+ before { @time = 30.minutes.ago }
59
+ subject { @indirect_membership.valid_from = @time }
60
+ it "should set the valid_from attribute of the earliset direct membership" do
61
+ subject
62
+ @indirect_membership.save
63
+ @direct_membership_a.reload.valid_from.to_i.should == @time.to_i
64
+ end
65
+ end
66
+
67
+ describe "#valid_to" do
68
+ subject { @indirect_membership.valid_to }
69
+ it "should be the valid_to attribute of the latest direct membership" do
70
+ subject.to_i.should == @direct_membership_b.valid_to.to_i
71
+ end
72
+ end
73
+ describe "#valid_to=" do
74
+ before { @time = 30.minutes.ago }
75
+ subject { @indirect_membership.valid_to = @time }
76
+ it "should set the valid_to addtirbute of the last direct membership" do
77
+ subject
78
+ @indirect_membership.save
79
+ @direct_membership_b.reload.valid_to.to_i.should == @time.to_i
80
+ end
81
+ end
82
+
83
+ describe "#earliest_direct_membership" do
84
+ subject { @indirect_membership.earliest_direct_membership }
85
+ it { should == @direct_membership_a }
86
+ end
87
+
88
+ describe "#latest_direct_membership" do
89
+ subject { @indirect_membership.latest_direct_membership }
90
+ it { should == @direct_membership_b }
91
+ end
92
+
93
+ describe "#recalculate_validity_range_from_direct_memberships" do
94
+ before do
95
+ @t1 = 10.hours.ago; @t2 = 8.hours.ago; @t3 = 37.minutes.ago
96
+ @direct_membership_a.update_attribute(:valid_from, @t1)
97
+ @direct_membership_a.update_attribute(:valid_to, @t2)
98
+ @direct_membership_b.update_attribute(:valid_from, @t2)
99
+ @direct_membership_b.update_attribute(:valid_to, @t3)
100
+ end
101
+ subject { @indirect_membership.recalculate_validity_range_from_direct_memberships; @indirect_membership.reload }
102
+ it "should make the indirect validity range match the direct memberships' combined range" do
103
+ subject
104
+ @indirect_membership.valid_from.to_i.should == @t1.to_i
105
+ @indirect_membership.valid_to.to_i.should == @t3.to_i
106
+ end
107
+ it "should write the indirect ranges to the database" do
108
+ subject
109
+ @indirect_membership.read_attribute(:valid_from).to_i.should == @t1.to_i
110
+ @indirect_membership.read_attribute(:valid_to).to_i.should == @t3.to_i
111
+ end
112
+ it "should persist in the graph" do
113
+ subject
114
+ DagLink.find(@indirect_membership.id).valid_from.to_i.should == @t1.to_i
115
+ DagLink.find(@indirect_membership.id).valid_to.to_i.should == @t3.to_i
116
+ end
117
+ describe "for the earliest valid_from being nil" do
118
+ before { @direct_membership_a.update_attribute(:valid_from, nil) }
119
+ specify "prelims" do
120
+ @reloaded_direct_membership_a = UserGroupMembership.with_invalid.find(@direct_membership_a.id)
121
+ @reloaded_direct_membership_a.read_attribute(:valid_from).should == nil
122
+ end
123
+ it "should set the indirect valid_from to nil" do
124
+ subject
125
+ @indirect_membership.read_attribute(:valid_from).should == nil
126
+ end
127
+ end
128
+ describe "(bug fix: reproducing status group membership scenario)" do
129
+ # @corporation
130
+ # |------- @intermediate_group
131
+ # |------------ @status_group
132
+ # | |--------- (@user)
133
+ # |
134
+ # |------------ @second_status_group
135
+ # |--------- @user
136
+ before do
137
+ @corporation = create( :corporation, name: "Corporation" )
138
+ @intermediate_group = create( :group, name: "Not a Status Group" )
139
+ @status_group = create( :group, name: "Status Group" )
140
+ @intermediate_group.parent_groups << @corporation
141
+ @status_group.parent_groups << @intermediate_group
142
+ @user = create( :user )
143
+ @status_group.assign_user @user
144
+ @membership = UserGroupMembership.find_by_user_and_group( @user, @status_group )
145
+ @intermediate_group_membership = UserGroupMembership
146
+ .find_by_user_and_group( @user, @intermediate_group )
147
+ @second_status_group = @intermediate_group.child_groups.create(name: "Second Status Group")
148
+ @membership.update_attribute(:valid_from, 1.year.ago)
149
+ @corpo_membership = UserGroupMembership.find_by_user_and_group(@user, @corporation)
150
+ end
151
+ specify "prelims" do
152
+ @user.should be_kind_of User
153
+ @corporation.reload.should be_kind_of Corporation
154
+ @corporation.descendants.should include @intermediate_group, @status_group, @second_status_group, @user
155
+ @intermediate_group.reload.descendants.should include @status_group, @second_status_group, @user
156
+ @status_group.reload.descendants.should include @user
157
+ end
158
+ describe "promoting the membership" do
159
+ subject { @second_membership = @membership.move_to(@second_status_group, at: 20.day.ago) }
160
+ # @membership valid_from: 1.year.ago, valid_to: 20.days.ago
161
+ # @second_membership valid_from: 20.days.ago, valid_to: nil
162
+ # @corpo_membership valid_from: 1.year.ago, valid_to: nil
163
+ before { subject }
164
+
165
+ it "should update the valid_from and valid_to of the indirect membership" do
166
+ @corpo_membership.read_attribute(:valid_from).to_date.should == 1.year.ago.to_date
167
+ @corpo_membership.read_attribute(:valid_to).should == nil
168
+ end
169
+ it "should update the validity range persistent" do
170
+ @reloaded_corpo_membership = UserGroupMembership.find(@corpo_membership.id)
171
+ @reloaded_corpo_membership.should == @corpo_membership
172
+ @reloaded_corpo_membership.valid_from.to_date.should == 1.year.ago.to_date
173
+ @reloaded_corpo_membership.valid_to.should == nil
174
+ end
175
+ it "should update the valid_from and valid_to of the corresponding graph link" do
176
+ @link = DagLink.find(@corpo_membership.id)
177
+ @link.valid_from.to_date.should == 1.year.ago.to_date
178
+ @link.valid_to.should == nil
179
+ end
180
+ it "should update the graph structure" do
181
+ @second_status_group.reload.descendants.should include @user
182
+ @corporation.reload.descendants.should include @user
183
+ end
184
+ it "should update the corporation members correctly" do
185
+ @corporation.members.should include @user
186
+ @user.should be_member_of @corporation
187
+ end
188
+ specify "the corporation members should match the memberships in number" do
189
+ @corporation.memberships.count.should > 0
190
+ @corporation.memberships.count.should == @corporation.members.count
191
+ end
192
+ specify "the indirect membership should be included in the memberships associated with the corporation" do
193
+ @corporation.memberships.should include @corpo_membership
194
+ end
195
+ it "should make no difference if the validity range is forcefully updated" do
196
+ @corpo_membership.read_attribute(:valid_from).to_date.should == 1.year.ago.to_date
197
+ @corpo_membership.read_attribute(:valid_to).should == nil
198
+
199
+ @membership.update_attribute(:valid_from, 1.year.ago)
200
+ @membership.update_attribute(:valid_to, 20.days.ago)
201
+ @second_membership.update_attribute(:valid_from, 20.days.ago)
202
+ @second_membership.update_attribute(:valid_to, nil)
203
+
204
+ @corpo_membership = UserGroupMembership.find(@corpo_membership.id)
205
+ @corpo_membership.read_attribute(:valid_from).to_date.should == 1.year.ago.to_date
206
+ @corpo_membership.read_attribute(:valid_to).should == nil
207
+ end
208
+ end
209
+ end
210
+ end
211
+
212
+
213
+ # Invalidation
214
+ # ====================================================================================================
215
+
216
+ describe "#make_invalid" do
217
+ subject { @indirect_membership.make_invalid }
218
+ it "should raise an error" do
219
+ expect { subject }.to raise_error
220
+ end
221
+ end
222
+ describe "#invalidate" do
223
+ subject { @indirect_membership.invalidate }
224
+ it "should raise an error" do
225
+ expect { subject }.to raise_error
226
+ end
227
+ end
228
+
229
+
230
+ # Validity Check
231
+ # ====================================================================================================
232
+
233
+ describe "#valid_at?(time)" do
234
+ subject { @indirect_membership.valid_at? @time_to_check }
235
+ specify "preliminaries" do
236
+ @indirect_membership.earliest_direct_membership.valid_from.to_i.should == @t1.to_i
237
+ @indirect_membership.earliest_direct_membership.valid_to.to_i.should == @t2.to_i
238
+ @indirect_membership.latest_direct_membership.valid_from.to_i.should == @t2.to_i
239
+ @indirect_membership.latest_direct_membership.valid_to.should == @t3
240
+ end
241
+ it "should return false before the early direct membership" do
242
+ @time_to_check = 3.hours.ago
243
+ subject.should == false
244
+ end
245
+ it "should return true for the duration of the early direct membership" do
246
+ @time_to_check = 1.5.hours.ago
247
+ subject.should == true
248
+ end
249
+ it "should return true for the duration of the late direct membership" do
250
+ @time_to_check = 0.5.hours.ago
251
+ subject.should == true
252
+ end
253
+ end
254
+
255
+
256
+ # Temporal scopes
257
+ # ====================================================================================================
258
+
259
+ describe "#at_time" do
260
+ subject { UserGroupMembership.find_all_by_user(@user).at_time(30.minutes.ago) }
261
+ specify "preliminaries" do
262
+ @direct_membership_a.valid_from.to_i.should == @t1.to_i
263
+ @direct_membership_a.valid_to.to_i.should == @t2.to_i
264
+ @direct_membership_b.valid_from.to_i.should == @t2.to_i
265
+ @direct_membership_b.valid_to.should == @t3
266
+ @indirect_membership.valid_from.to_i.should == @t1.to_i
267
+ @indirect_membership.valid_to.should == @t3
268
+ # @indirect_membership.read_attribute(:valid_from).to_i.should == @t1.to_i
269
+ # @indirect_membership.read_attribute(:valid_to).should == @t3
270
+ end
271
+ it "should find the direct membership" do
272
+ subject.should include @direct_membership_b
273
+ end
274
+ it "should find the indirect membership as well" do
275
+ subject.should include @indirect_membership
276
+ end
277
+ end
278
+
279
+ describe "#only_valid" do
280
+ subject { UserGroupMembership.only_valid.find_all_by_user(@user) }
281
+ it "should find the valid indirect memberships" do
282
+ subject.should include @indirect_membership
283
+ end
284
+ it "should not find the invalid indirect memberships" do
285
+ @direct_membership_b.invalidate at: 20.minutes.ago
286
+ subject.should_not include @indirect_membership
287
+ end
288
+ end
289
+
290
+
291
+ end