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,271 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+ require 'action_mailer/base'
4
+
5
+ describe Post do
6
+
7
+ pending "post specs (deactivated for the moment)"
8
+
9
+ # def build_text_only_message
10
+ # build(:mail_message_to_group)
11
+ # end
12
+ # def build_multipart_message
13
+ # build(:html_mail_message)
14
+ # end
15
+ #
16
+ # def create_post_from_message( message, options = {} )
17
+ # Post.create_from_message(message)
18
+ # end
19
+ #
20
+ # def create_text_only_post
21
+ # create_post_from_message(build_text_only_message)
22
+ # end
23
+ # def create_multipart_post
24
+ # create_post_from_message(build_multipart_message)
25
+ # end
26
+ #
27
+ # describe ".create_from_message" do
28
+ # describe "for text-only messages" do
29
+ #
30
+ # before { @message = build_text_only_message }
31
+ # subject { Post.create_from_message(@message) }
32
+ #
33
+ # it "should create a new Post" do
34
+ # Post.count.should == 0
35
+ # subject
36
+ # Post.count.should == 1
37
+ # end
38
+ #
39
+ # describe "for an author found in the database" do
40
+ # before do
41
+ # @author = create( :user )
42
+ # @author.email = @message.from.first
43
+ # @author.save
44
+ # end
45
+ # its(:author) { should == @author }
46
+ # end
47
+ #
48
+ # its(:subject) { should == @message.subject }
49
+ # its(:subject) { should be_kind_of String }
50
+ #
51
+ # its(:sent_at) { should == @message.date }
52
+ # its(:sent_at) { should be_kind_of Time }
53
+ #
54
+ # its(:text) { should == @message.body.decoded }
55
+ #
56
+ # it "should store the entire message for later re-deliveries" do
57
+ # subject.entire_message.should == @message
58
+ # end
59
+ #
60
+ # describe "for an existing group with matching token" do
61
+ # before do
62
+ # # the email used is sent to test-group@exmaple.com
63
+ # @group = create(:group, name: "Test Group")
64
+ # end
65
+ # its(:group) { should == @group }
66
+ # end
67
+ # end
68
+ # describe "for a multipart message" do
69
+ # before { @message = build_multipart_message }
70
+ # subject { create_post_from_message(@message) }
71
+ # its(:entire_message) { should == @message }
72
+ # end
73
+ # end
74
+ #
75
+ # describe ".create_from_message#text" do
76
+ # subject { Post.create_from_message(@message).text }
77
+ # describe "for text-only messages" do
78
+ # before { @message = build_text_only_message }
79
+ # it { should == @message.body.decoded }
80
+ # end
81
+ # describe "for html messages" do
82
+ # before { @message = build_multipart_message }
83
+ # it "should not include mail headers" do
84
+ # subject.should_not include("Return-Path:")
85
+ # end
86
+ # it "should not include multipart separators" do
87
+ # subject.should_not include("--Apple-Mail=")
88
+ # end
89
+ # it "should include html tags" do
90
+ # subject.should include("<div>")
91
+ # end
92
+ # it "should include the text" do
93
+ # # have a look at the spec/factories/mail_message/html_email.eml file.
94
+ # subject.should include("Liebe Freunde",
95
+ # "es ist mir ein besonderes Vergnügen",
96
+ # "Viele Grüße!",
97
+ # "Fiedl Z! E06")
98
+ # end
99
+ # it "should be UTF-8 encoded" do
100
+ # subject.encoding.to_s.should == "UTF-8"
101
+ # end
102
+ # it "should not include html, head or body tag, since this would cause problems embedded in an html document" do
103
+ # subject.should_not include "<html"
104
+ # subject.should_not include "<head"
105
+ # subject.should_not include "<body"
106
+ # end
107
+ # end
108
+ # end
109
+ #
110
+ # describe ".create_from_message#text_without_html_tags" do
111
+ # subject { Post.create_from_message(@message).text_without_html_tags }
112
+ # describe "for html messages" do
113
+ # before { @message = build(:html_mail_message) }
114
+ # it "should include the text" do
115
+ # # have a look at the spec/factories/mail_message/html_email.eml file.
116
+ # subject.should include("Liebe Freunde",
117
+ # "es ist mir ein besonderes Vergnügen",
118
+ # "Viele Grüße!",
119
+ # "Fiedl Z! E06")
120
+ # end
121
+ # it "should not include html tags" do
122
+ # subject.should_not include "<html"
123
+ # subject.should_not include "<body"
124
+ # subject.should_not include "<div"
125
+ # end
126
+ # end
127
+ # end
128
+ #
129
+ # describe "#author=" do
130
+ # before { @post = Post.new }
131
+ #
132
+ # describe "for a matching user existing: " do
133
+ # before { @user = create(:user) }
134
+ #
135
+ # describe "for the parameter being a user" do
136
+ # subject { @post.author = @user }
137
+ # it "should set the author as this user" do
138
+ # @post.author.should == nil
139
+ # subject
140
+ # @post.author.should == @user
141
+ # end
142
+ # end
143
+ #
144
+ # describe "for the parameter being an email string" do
145
+ # subject { @post.author = @user.email.to_str }
146
+ # it "should set the author User found by the email string" do
147
+ # @post.author.should == nil
148
+ # subject
149
+ # @post.author.should == @user
150
+ # end
151
+ # end
152
+ # end
153
+ # end
154
+ #
155
+ # describe "#author" do
156
+ # before { @post = Post.new }
157
+ # subject { @post.author }
158
+ # describe "for the author being set as User" do
159
+ # before do
160
+ # @user = create(:user)
161
+ # @post.author = @user
162
+ # end
163
+ # it { should == @user }
164
+ # end
165
+ # describe "for the author being given as string" do
166
+ # before do
167
+ # @user_string = "Foo Bar <foo.bar@example.com>"
168
+ # @post.author = @user_string
169
+ # end
170
+ # it { should == @user_string }
171
+ # it { should == @post.external_author }
172
+ # end
173
+ # end
174
+ #
175
+ #
176
+ # # Delivering Post as Email to All Group Members
177
+ # # ==========================================================================================
178
+ #
179
+ # describe "Delivering Group Mails: " do
180
+ #
181
+ # message_types = [ :build_text_only_message, :build_multipart_message ]
182
+ # message_types.each do |message_type|
183
+ #
184
+ # describe "#{message_type}: " do
185
+ #
186
+ # before do
187
+ # @message = self.send(message_type)
188
+ # # the email used is sent to test-group@exmaple.com
189
+ # @group = create(:group, name: "Test Group")
190
+ # @group.child_users << create(:user) << create(:user)
191
+ # @users = @group.child_users
192
+ # @post = Post.create_from_message(@message)
193
+ # end
194
+ #
195
+ # specify "preliminaries" do
196
+ # @message.should be_kind_of Mail::Message
197
+ # @post.should be_kind_of Post
198
+ # end
199
+ #
200
+ # describe "#messages_to_deliver_to_mailing_list_members" do
201
+ # subject { @post.messages_to_deliver_to_mailing_list_members }
202
+ #
203
+ # it "should be an Array of Mail Messages" do
204
+ # subject.should be_kind_of Array
205
+ # subject.first.should be_kind_of Mail::Message
206
+ # end
207
+ # it "should contain one message per group member" do
208
+ # subject.count.should == @users.count
209
+ # end
210
+ # end
211
+ #
212
+ # describe "#modified_subject" do
213
+ # subject { @post.modified_subject }
214
+ # describe "for a clean subject" do
215
+ # before { @post.subject = "My Fancy Subject" }
216
+ # it { should == "[Test Group] My Fancy Subject" }
217
+ # end
218
+ # describe "for a Re: subject" do
219
+ # before { @post.subject = "Re: [Test Group] My Fancy Subject" }
220
+ # it { should == "Re: [Test Group] My Fancy Subject" }
221
+ # end
222
+ # end
223
+ #
224
+ # describe "#mailing_list_footer" do
225
+ # subject { @post.mailing_list_footer }
226
+ # it { should include @group.name }
227
+ # it "should containt the group's url" do
228
+ # @group.url.present?.should == true
229
+ # subject.should include @group.url
230
+ # end
231
+ # end
232
+ #
233
+ # describe "#message_for_email_delivery_to_user" do
234
+ # before { @user = @users.first }
235
+ # subject { @post.message_for_email_delivery_to_user(@user) }
236
+ #
237
+ # it { should be_kind_of Mail::Message }
238
+ # it "should preserve multipart character" do
239
+ # subject.multipart?.should == @message.multipart?
240
+ # end
241
+ # it "should have the modified subject" do
242
+ # subject.subject.should == @post.modified_subject
243
+ # end
244
+ # it "should still have the group as the recipient" do
245
+ # subject.to.should == @message.to
246
+ # end
247
+ # it "should have the user's email as envelop recipient" do
248
+ # subject.smtp_envelope_to.should be_kind_of Array
249
+ # subject.smtp_envelope_to.should include @user.email
250
+ # subject.smtp_envelope_to.first.should include "@"
251
+ # end
252
+ #
253
+ # it "should contain the mailing list footer" do
254
+ # if subject.multipart?
255
+ # subject.parts.last.body_in_utf8.should include @post.mailing_list_footer
256
+ # else
257
+ # subject.body_in_utf8.should include @post.mailing_list_footer
258
+ # end
259
+ # end
260
+ # end
261
+ # end
262
+ # end
263
+ # end
264
+
265
+ # We might have to deal with this, but after switching back to the main mail gem,
266
+ # since this fix is not contained in the branch we are currently using.
267
+ # See: Gemfile, gem 'mail'.
268
+ #
269
+ pending "check for added '=', https://github.com/mikel/mail/issues/533"
270
+
271
+ end
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+
3
+ module ProfileFieldTypes
4
+ class TestProfileField < ProfileField
5
+
6
+ has_child_profile_fields :field_a, :field_b
7
+ end
8
+ end
9
+
10
+ describe ProfileFieldMixins::HasChildProfileFields do
11
+
12
+ before do
13
+ @profile_field = ProfileFieldTypes::TestProfileField.new
14
+ end
15
+
16
+ subject { @profile_field }
17
+ it { should respond_to( :field_a ) }
18
+ it { should respond_to( :field_a= ) }
19
+ it { should respond_to( :field_b ) }
20
+ it { should respond_to( :field_b= ) }
21
+
22
+ describe "#field_a=" do
23
+ before { @new_value = "New Value" }
24
+ subject { @profile_field.field_a = @new_value }
25
+ it "should set the field_a value" do
26
+ subject
27
+ @profile_field.field_a.should == @new_value
28
+ end
29
+ it "should set the value of the associated child" do
30
+ @profile_field.children.first.value.should_not == @new_value if @profile_field.children.first
31
+ subject
32
+ @profile_field.children.first.value.should == @new_value
33
+ end
34
+ specify "saving should make the value persistent" do
35
+ subject
36
+ @profile_field.save
37
+ ProfileField.find(@profile_field.id).field_a.should == @new_value
38
+ end
39
+ end
40
+
41
+ describe "#field_a" do
42
+ before { @new_value = "Foo Bar" }
43
+ subject { @profile_field.field_a }
44
+ describe "after setting the value using the setter" do
45
+ before { @profile_field.field_a = @new_value }
46
+ it { should == @new_value }
47
+ end
48
+ describe "after setting the child's value manually" do
49
+ before { @profile_field.find_or_build_child_by_key( :field_a ).value = @new_value }
50
+ it { should == @new_value }
51
+ end
52
+ end
53
+
54
+ describe "#save" do
55
+ subject { @profile_field.save }
56
+ it "should also save the child profile fields" do
57
+ subject
58
+ @profile_field.children.count.should == 2
59
+ @profile_field.children.first.label.should == "field_a"
60
+ @profile_field.children.second.label.should == "field_b"
61
+ end
62
+ end
63
+
64
+ describe ".create" do
65
+ subject { @profile_field = ProfileFieldTypes::TestProfileField.create }
66
+ it "should create the children as well" do
67
+ subject
68
+ @profile_field.children.count.should == 2
69
+ ProfileField.find(@profile_field.id).children.count.should == 2
70
+ end
71
+ end
72
+
73
+ end
@@ -0,0 +1,482 @@
1
+ require 'spec_helper'
2
+
3
+ # General Profile Field
4
+ # ==========================================================================================
5
+
6
+ describe ProfileField do
7
+
8
+ subject { ProfileField.new }
9
+
10
+ describe "accessible attributes" do
11
+ [ :label, :type, :value ].each do |attr|
12
+ it { should respond_to( attr ) }
13
+ it { should respond_to( "#{attr}=".to_sym ) }
14
+ end
15
+ end
16
+
17
+ it { should respond_to( :profileable ) }
18
+
19
+ describe "#profileable" do
20
+ describe "for un-structured or parent profile fields" do
21
+ it "should return just the assigned profileable" do
22
+ @user = create(:user)
23
+ @profile_field = @user.profile_fields.create(label: "Address", type: "ProfileFieldTypes::Address")
24
+ @profile_field.profileable.should == @user
25
+ end
26
+ end
27
+ describe "for child profile fields" do
28
+ it "should return the parent's profileable" do
29
+ @user = create(:user)
30
+ @profile_field = @user.profile_fields.create(label: "Bank Account", type: 'ProfileFieldTypes::BankAccount').becomes(ProfileFieldTypes::BankAccount)
31
+ @profile_field.account_holder = "John Doe"
32
+ @child_profile_field = @profile_field.children.first
33
+ @child_profile_field.profileable.should == @user
34
+ end
35
+ end
36
+ end
37
+
38
+ describe "acts_as_tree" do
39
+ it { should respond_to( :parent ) }
40
+ it { should respond_to( :children ) }
41
+ end
42
+
43
+ it { should respond_to( :display_html ) }
44
+
45
+
46
+ end
47
+
48
+
49
+ # Custom Contact Information
50
+ # ==========================================================================================
51
+
52
+ describe ProfileFieldTypes::Custom do
53
+ describe ".create" do
54
+ subject { ProfileFieldTypes::Custom.create( label: "Custom Contact Information" ) }
55
+ its( 'children.count' ) { should == 0 }
56
+ end
57
+ end
58
+
59
+
60
+ # Organisation Membership Information
61
+ # ==========================================================================================
62
+
63
+ describe ProfileFieldTypes::Organization do
64
+ before do
65
+ @organization = ProfileFieldTypes::Organization.create()
66
+ end
67
+
68
+ subject { @organization }
69
+
70
+ # Here it is only tested whether the methods exist. The functionality is
71
+ # provided by the same mechanism as tested unter the BankAccount section.
72
+
73
+ it { should respond_to( :to ) }
74
+ it { should respond_to( :to= ) }
75
+ it { should respond_to( :from ) }
76
+ it { should respond_to( :from= ) }
77
+ it { should respond_to( :role ) }
78
+ it { should respond_to( :role= ) }
79
+
80
+ describe "#cached(:children_count)" do
81
+ subject { @organization.cached(:children_count) }
82
+ it { should == 3 }
83
+ end
84
+ end
85
+
86
+
87
+ # Email Contact Information
88
+ # ==========================================================================================
89
+
90
+ describe ProfileFieldTypes::Email do
91
+ before do
92
+ @email = ProfileFieldTypes::Email.create( label: "Email" )
93
+ end
94
+
95
+ describe "#children.count" do
96
+ subject { @email.children.count }
97
+ it { should == 0 }
98
+ end
99
+
100
+ describe "#cached(:children_count)" do
101
+ subject { @email.cached(:children_count) }
102
+ it { should == 0 }
103
+ end
104
+
105
+ end
106
+
107
+
108
+ # Address Information
109
+ # ==========================================================================================
110
+
111
+ describe ProfileFieldTypes::Address do
112
+
113
+ before do
114
+ @address_field = ProfileFieldTypes::Address.new( label: "Address of the Brandenburg Gate",
115
+ value: "Pariser Platz 1\n 10117 Berlin" )
116
+ end
117
+ subject { @address_field }
118
+
119
+ describe "#display_html" do
120
+ subject { @address_field.display_html }
121
+ it "should have a line-break in it" do
122
+ subject.should include( "<br />" )
123
+ end
124
+ end
125
+
126
+ describe "#geo_location" do
127
+ subject { @address_field.geo_location }
128
+ it { should be_kind_of GeoLocation }
129
+ end
130
+
131
+ describe "#find_geo_location" do
132
+ subject { @address_field.find_geo_location }
133
+ describe "before saving, before geocoding" do
134
+ it { should == nil }
135
+ end
136
+ describe "after saving, before geocoding" do
137
+ it { should == nil }
138
+ end
139
+ describe "before saving, after geocoding" do
140
+ before { @address_field.geocode }
141
+ it { should be_kind_of GeoLocation }
142
+ its( :country_code ) { should == "DE" }
143
+ its( :queried_at ) { should be_kind_of Time }
144
+ end
145
+ describe "after saving, after geocoding" do
146
+ before { @address_field.save; @address_field.geocode }
147
+ it { should be_kind_of GeoLocation }
148
+ its( :country_code ) { should == "DE" }
149
+ its( :queried_at ) { should be_kind_of Time }
150
+ end
151
+ end
152
+
153
+ describe "#find_or_create_geo_location" do
154
+ subject { @address_field.find_or_create_geo_location }
155
+ describe "even before explicit geocoding" do
156
+ it { should be_kind_of GeoLocation }
157
+ end
158
+ end
159
+
160
+ describe "#geocoded?" do
161
+ subject { @address_field.geocoded? }
162
+ describe "for a new address field" do
163
+ it { should == false }
164
+ end
165
+ describe "after geocoding" do
166
+ before { @address_field.geocode }
167
+ it { should == true }
168
+ end
169
+ describe "after #find_or_create_geo_location" do
170
+ before { @address_field.find_or_create_geo_location }
171
+ it { should == true }
172
+ end
173
+ describe "after #find_geo_location" do
174
+ before { @address_field.find_geo_location }
175
+ it { should == false }
176
+ end
177
+ describe "after #geo_location" do
178
+ before { @address_field.geo_location }
179
+ it { should == true }
180
+ end
181
+ end
182
+
183
+ describe "#geo_location" do
184
+ subject { @address_field.geo_location }
185
+ describe "for a new address field" do
186
+ it "should perform a query" do
187
+ @address_field.geocoded?.should == false
188
+ subject
189
+ @address_field.geocoded?.should == true
190
+ end
191
+ end
192
+ describe "for an already geocoded address field" do
193
+ before { @address_field.geocode }
194
+ it "should not query again" do
195
+ @queried_at = @address_field.geo_location.queried_at
196
+ time_travel 2.seconds
197
+ subject
198
+ @address_field.geo_location.queried_at.should_not > @queried_at
199
+ end
200
+ end
201
+ end
202
+
203
+ describe "#geocode" do
204
+ subject { @address_field.geocode }
205
+ it "should perform a query" do
206
+ @address_field.geocoded?.should == false
207
+ subject
208
+ @address_field.geocoded?.should == true
209
+ end
210
+ end
211
+
212
+ its( :gmaps4rails_address ) { should == @address_field.value }
213
+
214
+ describe "after saving" do
215
+ before { @address_field.save }
216
+
217
+ specify "latitude and longitude should be correct" do
218
+ subject.latitude.round(4).should == 52.5163
219
+ subject.longitude.round(4).should == 13.3778
220
+ end
221
+
222
+ its( :country ) { should == "Germany" }
223
+ its( :country_code ) { should == "DE" }
224
+ its( :city ) { should == "Berlin" }
225
+ its( :postal_code ) { should == "10117" }
226
+ its( :plz ) { should == "10117" }
227
+
228
+ end
229
+
230
+ describe "postal address: " do
231
+ before do
232
+ @user = create(:user)
233
+ @profile_field = @user.profile_fields.create(type: "ProfileFieldTypes::Address").becomes ProfileFieldTypes::Address
234
+ @another_profile_field = @user.profile_fields.create(type: "ProfileFieldTypes::Address").becomes ProfileFieldTypes::Address
235
+ end
236
+ describe "#postal_address" do
237
+ subject { @profile_field.postal_address }
238
+ describe "for the address field being the primary postal address" do
239
+ before { @profile_field.postal_address = true }
240
+ it { should == true }
241
+ end
242
+ describe "for the address field not being the primary postal address" do
243
+ before { @profile_field.postal_address = false }
244
+ it { should == false }
245
+ end
246
+ end
247
+ describe "#postal_address=" do
248
+ describe "true" do
249
+ subject { @profile_field.postal_address = true }
250
+ it "should mark the profile field as postal address" do
251
+ subject
252
+ @profile_field.postal_address?.should == true
253
+ end
254
+ describe "for another address having been the primary postal address" do
255
+ before { @another_profile_field.postal_address = true }
256
+ it "should unmark the other address fields" do
257
+ subject
258
+ @another_profile_field.reload.postal_address?.should == false
259
+ end
260
+ end
261
+ end
262
+ describe "false" do
263
+ subject { @profile_field.postal_address = false }
264
+ describe "for the profile field being marked as primary postal address" do
265
+ before { @profile_field.postal_address = true }
266
+ it "should mark the profile field as no postal address" do
267
+ subject
268
+ @profile_field.reload.postal_address?.should == false
269
+ end
270
+ end
271
+ it "should leave the other address fields alone" do
272
+ expect { subject }.not_to change { @another_profile_field.postal_address? }
273
+ end
274
+ end
275
+ end
276
+ describe "#postal_address?" do
277
+ subject { @profile_field.postal_address? }
278
+ it "should be the same as #postal_address" do
279
+ subject.should == @profile_field.postal_address
280
+ @profile_field.postal_address = true
281
+ @profile_field.reload.postal_address.should == true
282
+ @profile_field.postal_address?.should == true
283
+ @profile_field.postal_address = false
284
+ @profile_field.reload.postal_address.should == false
285
+ @profile_field.postal_address?.should == false
286
+ end
287
+ end
288
+ describe "#clear_postal_address" do
289
+ before { @another_profile_field.postal_address = true }
290
+ subject { @profile_field.clear_postal_address }
291
+ it "should remove all postal_address marks from this user's address fields" do
292
+ subject
293
+ @profile_field.reload.postal_address?.should == false
294
+ @another_profile_field.reload.postal_address?.should == false
295
+ end
296
+ end
297
+ end
298
+
299
+ end
300
+
301
+
302
+ # Employment Information
303
+ # ==========================================================================================
304
+
305
+ describe ProfileFieldTypes::Employment do
306
+ before { @profile_field = ProfileFieldTypes::Employment.new }
307
+ subject { @profile_field }
308
+
309
+ it { should respond_to :from, :to, :organization, :position, :task }
310
+ it { should respond_to :from=, :to=, :organization=, :position=, :task= }
311
+
312
+ describe "#from" do
313
+ subject { @profile_field.from }
314
+ describe "before setting" do
315
+ it { should == nil }
316
+ end
317
+ describe "after setting" do
318
+ before { @profile_field.from = 6.years.ago }
319
+ it { should be_kind_of Date }
320
+ end
321
+ end
322
+
323
+ describe "#to" do
324
+ subject { @profile_field.to }
325
+ describe "before setting" do
326
+ it { should == nil }
327
+ end
328
+ describe "after setting" do
329
+ before { @profile_field.to = 6.years.ago }
330
+ it { should be_kind_of Date }
331
+ end
332
+ end
333
+
334
+ end
335
+
336
+
337
+ # Bank Account Information
338
+ # ==========================================================================================
339
+
340
+ describe ProfileFieldTypes::BankAccount do
341
+
342
+ before do
343
+ @bank_account = ProfileFieldTypes::BankAccount.create( label: "Bank Account" )
344
+ end
345
+ subject { @bank_account }
346
+
347
+ describe ".create" do
348
+ subject { ProfileFieldTypes::BankAccount.create( label: "Bank Account" ) }
349
+
350
+ it "should create 6 children" do
351
+ subject.children.count.should == 6
352
+ end
353
+ it "should create the correct labels for the children" do
354
+ subject.children.collect { |child| child.label }.should ==
355
+ [ I18n.t( :account_holder ), I18n.t( :account_number ), I18n.t( :bank_code ),
356
+ I18n.t( :credit_institution ), I18n.t( :iban ), I18n.t( :bic ) ]
357
+ end
358
+
359
+ end
360
+
361
+ describe "#account_holder" do
362
+ before do
363
+ @account_holder = "John Doe"
364
+ @bank_account.account_holder = @account_holder
365
+ end
366
+ subject { @bank_account.account_holder }
367
+ it { should == @account_holder }
368
+ end
369
+
370
+ describe "#account_holder=" do
371
+ before do
372
+ @new_account_holder = "Johnny Doe"
373
+ end
374
+ it "should set the account holder" do
375
+ @bank_account.account_holder = @new_account_holder
376
+ @bank_account.account_holder.should == @new_account_holder
377
+ end
378
+ end
379
+
380
+ describe "other child profile field accessors" do
381
+ before { @profile_field = @bank_account }
382
+ [ :account_holder, :account_number, :bank_code,
383
+ :credit_institution, :iban, :bic ].each do |attr|
384
+ describe "getter method" do
385
+ before do
386
+ @value = "This is a value"
387
+ @profile_field.send( "#{attr}=".to_sym, @value )
388
+ end
389
+ subject { @profile_field.send( attr ) }
390
+ it { should == @value }
391
+ end
392
+ describe "setter method" do
393
+ before { @new_value = "New Value" }
394
+ it "should set the value" do
395
+ @profile_field.send( "#{attr}=".to_sym, @new_value )
396
+ @profile_field.send( attr ).should == @new_value
397
+ end
398
+ end
399
+ end
400
+ end
401
+
402
+ describe "#cached(:children_count)" do
403
+ subject { @bank_account.cached(:children_count) }
404
+ it { should == 6 }
405
+ end
406
+
407
+ end
408
+
409
+ # Description Field
410
+ # ==========================================================================================
411
+
412
+ describe ProfileFieldTypes::Description do
413
+ before { @description_field = ProfileFieldTypes::Description.create( label: "Heraldic Animal",
414
+ value: "The heraldic animal of the organisation is a fox." ) }
415
+ subject { @description_field }
416
+ its( :display_html ) { should include( @description_field.value ) }
417
+ end
418
+
419
+
420
+ # Phone Number Field
421
+ # ==========================================================================================
422
+
423
+ describe ProfileFieldTypes::Phone do
424
+
425
+ describe "international number with leading 00" do
426
+ subject { ProfileFieldTypes::Phone.create( value: "0049800123456789" ) }
427
+ its( :value ) { should == "+49 800 123 456789" } # on the basis of E164
428
+ end
429
+
430
+ describe "international number with leading +" do
431
+ subject { ProfileFieldTypes::Phone.create( value: "+49 800 123456789" ) }
432
+ its( :value ) { should == "+49 800 123 456789" } # on the basis of E164
433
+ end
434
+
435
+ describe "national number" do
436
+ subject { ProfileFieldTypes::Phone.create( value: "0800123456789" ) }
437
+ it "should not be formatted, since the country is not unique" do
438
+ subject.value.should == "0800123456789"
439
+ end
440
+ end
441
+
442
+ end
443
+
444
+
445
+ # Homepage Field
446
+ # ==========================================================================================
447
+
448
+ describe ProfileFieldTypes::Homepage do
449
+
450
+ subject { ProfileFieldTypes::Homepage.create( value: "example.com" ) }
451
+
452
+ its( :display_html ) { should == "<a href=\"http://example.com\">http://example.com</a>" }
453
+
454
+ end
455
+
456
+
457
+ # Date Field
458
+ # ==========================================================================================
459
+
460
+ describe ProfileFieldTypes::Date do
461
+ before { @date_field = ProfileFieldTypes::Date.create }
462
+ describe "#value" do
463
+ subject { @date_field.value }
464
+ describe "if unset" do
465
+ it { should == nil }
466
+ end
467
+ describe "if set to a date" do
468
+ before { @date_field.value = 24.years.ago.to_date }
469
+ it "should be a localized date String" do
470
+ subject.should be_kind_of String
471
+ subject.to_date.should == 24.years.ago.to_date
472
+ end
473
+ end
474
+ describe "if set to a localized date string" do
475
+ before { @date_field.value = I18n.localize(24.years.ago.to_date) }
476
+ it "should be a localized date String" do
477
+ subject.should be_kind_of String
478
+ subject.to_date.should == 24.years.ago.to_date
479
+ end
480
+ end
481
+ end
482
+ end