spina 0.6.11

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of spina might be problematic. Click here for more details.

Files changed (326) hide show
  1. checksums.yaml +7 -0
  2. data/README.rdoc +3 -0
  3. data/Rakefile +40 -0
  4. data/app/assets/images/spina/admin/logo@2x.png +0 -0
  5. data/app/assets/javascripts/spina/admin/account.js.coffee +15 -0
  6. data/app/assets/javascripts/spina/admin/application.js +8 -0
  7. data/app/assets/javascripts/spina/admin/aviary.js.coffee +26 -0
  8. data/app/assets/javascripts/spina/admin/confirm_delete.js.coffee +24 -0
  9. data/app/assets/javascripts/spina/admin/pages.js.coffee +49 -0
  10. data/app/assets/javascripts/spina/application.js +15 -0
  11. data/app/assets/stylesheets/spina/_mixins.css.scss +34 -0
  12. data/app/assets/stylesheets/spina/_normalize.css +396 -0
  13. data/app/assets/stylesheets/spina/admin/application.css.sass +1 -0
  14. data/app/assets/stylesheets/spina/application.css.sass +6 -0
  15. data/app/controllers/spina/admin/accounts_controller.rb +50 -0
  16. data/app/controllers/spina/admin/admin_controller.rb +36 -0
  17. data/app/controllers/spina/admin/attachments_controller.rb +55 -0
  18. data/app/controllers/spina/admin/inquiries_controller.rb +63 -0
  19. data/app/controllers/spina/admin/page_parts_controller.rb +11 -0
  20. data/app/controllers/spina/admin/pages_controller.rb +92 -0
  21. data/app/controllers/spina/admin/photos_controller.rb +77 -0
  22. data/app/controllers/spina/admin/sessions_controller.rb +30 -0
  23. data/app/controllers/spina/admin/users_controller.rb +64 -0
  24. data/app/controllers/spina/application_controller.rb +26 -0
  25. data/app/controllers/spina/inquiries_controller.rb +30 -0
  26. data/app/controllers/spina/pages_controller.rb +47 -0
  27. data/app/controllers/spina/sitemaps_controller.rb +7 -0
  28. data/app/helpers/spina/admin/accounts_helper.rb +6 -0
  29. data/app/helpers/spina/admin/inquiries_helper.rb +6 -0
  30. data/app/helpers/spina/admin/page_parts_helper.rb +6 -0
  31. data/app/helpers/spina/admin/pages_helper.rb +16 -0
  32. data/app/helpers/spina/admin/photos_helper.rb +6 -0
  33. data/app/helpers/spina/admin/sessions_helper.rb +6 -0
  34. data/app/helpers/spina/admin/users_helper.rb +6 -0
  35. data/app/helpers/spina/application_helper.rb +68 -0
  36. data/app/mailers/spina/inquiry_mailer.rb +19 -0
  37. data/app/models/spina/ability.rb +20 -0
  38. data/app/models/spina/account.rb +72 -0
  39. data/app/models/spina/attachment.rb +28 -0
  40. data/app/models/spina/attachment_collection.rb +15 -0
  41. data/app/models/spina/inquiry.rb +41 -0
  42. data/app/models/spina/layout_part.rb +38 -0
  43. data/app/models/spina/line.rb +6 -0
  44. data/app/models/spina/page.rb +125 -0
  45. data/app/models/spina/page_part.rb +38 -0
  46. data/app/models/spina/photo.rb +23 -0
  47. data/app/models/spina/photo_collection.rb +30 -0
  48. data/app/models/spina/photo_collections_photo.rb +6 -0
  49. data/app/models/spina/spina.rb +7 -0
  50. data/app/models/spina/text.rb +6 -0
  51. data/app/models/spina/user.rb +31 -0
  52. data/app/presenters/spina/pages/menu_presenter.rb +82 -0
  53. data/app/uploaders/spina/file_uploader.rb +56 -0
  54. data/app/uploaders/spina/logo_uploader.rb +52 -0
  55. data/app/uploaders/spina/photo_uploader.rb +42 -0
  56. data/app/views/layouts/spina/admin/application.html.haml +37 -0
  57. data/app/views/layouts/spina/admin/media_library.html.haml +14 -0
  58. data/app/views/layouts/spina/admin/messages.html.haml +22 -0
  59. data/app/views/layouts/spina/admin/settings.html.haml +30 -0
  60. data/app/views/layouts/spina/admin/website.html.haml +26 -0
  61. data/app/views/layouts/spina/email.html.erb +124 -0
  62. data/app/views/layouts/spina/login.html.haml +21 -0
  63. data/app/views/spina/admin/accounts/_form.html.haml +55 -0
  64. data/app/views/spina/admin/accounts/analytics.html.haml +21 -0
  65. data/app/views/spina/admin/accounts/edit.html.haml +1 -0
  66. data/app/views/spina/admin/accounts/social.html.haml +23 -0
  67. data/app/views/spina/admin/accounts/style.html.haml +32 -0
  68. data/app/views/spina/admin/attachments/_attachment.html.haml +7 -0
  69. data/app/views/spina/admin/attachments/_attachment_collection.html.haml +2 -0
  70. data/app/views/spina/admin/attachments/_select.html.haml +25 -0
  71. data/app/views/spina/admin/attachments/_select_collection.html.haml +25 -0
  72. data/app/views/spina/admin/attachments/create.js.erb +5 -0
  73. data/app/views/spina/admin/attachments/index.html.haml +19 -0
  74. data/app/views/spina/admin/attachments/insert.js.erb +5 -0
  75. data/app/views/spina/admin/attachments/insert_collection.js.erb +7 -0
  76. data/app/views/spina/admin/attachments/select.js.erb +2 -0
  77. data/app/views/spina/admin/attachments/select_collection.js.erb +2 -0
  78. data/app/views/spina/admin/inquiries/inbox.html.haml +30 -0
  79. data/app/views/spina/admin/inquiries/index.html.haml +36 -0
  80. data/app/views/spina/admin/inquiries/show.html.haml +23 -0
  81. data/app/views/spina/admin/inquiries/spam.html.haml +36 -0
  82. data/app/views/spina/admin/layout_partables/_line_form.html.haml +4 -0
  83. data/app/views/spina/admin/page_partables/_attachment_collection_form.html.haml +9 -0
  84. data/app/views/spina/admin/page_partables/_attachment_form.html.haml +8 -0
  85. data/app/views/spina/admin/page_partables/_line_form.html.haml +2 -0
  86. data/app/views/spina/admin/page_partables/_photo_collection_form.html.haml +12 -0
  87. data/app/views/spina/admin/page_partables/_photo_form.html.haml +11 -0
  88. data/app/views/spina/admin/page_partables/_text_form.html.haml +21 -0
  89. data/app/views/spina/admin/page_parts/_wysihtml5_link.html.haml +12 -0
  90. data/app/views/spina/admin/page_parts/insert_wysihtml5_link.js +5 -0
  91. data/app/views/spina/admin/page_parts/wysihtml5_link.js +2 -0
  92. data/app/views/spina/admin/pages/_attachment_fields.html.haml +8 -0
  93. data/app/views/spina/admin/pages/_form.html.haml +83 -0
  94. data/app/views/spina/admin/pages/_page.html.haml +17 -0
  95. data/app/views/spina/admin/pages/edit.html.haml +11 -0
  96. data/app/views/spina/admin/pages/index.html.haml +37 -0
  97. data/app/views/spina/admin/pages/new.html.haml +11 -0
  98. data/app/views/spina/admin/pages/update.js.coffee +4 -0
  99. data/app/views/spina/admin/photos/_photo.html.haml +7 -0
  100. data/app/views/spina/admin/photos/_photo_collection.html.haml +5 -0
  101. data/app/views/spina/admin/photos/_photo_collection_select.html.haml +20 -0
  102. data/app/views/spina/admin/photos/_photo_link.html.haml +11 -0
  103. data/app/views/spina/admin/photos/_photo_select.html.haml +20 -0
  104. data/app/views/spina/admin/photos/_wysihtml5_select.html.haml +20 -0
  105. data/app/views/spina/admin/photos/create.js.erb +5 -0
  106. data/app/views/spina/admin/photos/enhance.js +0 -0
  107. data/app/views/spina/admin/photos/index.html.haml +7 -0
  108. data/app/views/spina/admin/photos/insert_photo.js.erb +10 -0
  109. data/app/views/spina/admin/photos/insert_photo_collection.js.erb +23 -0
  110. data/app/views/spina/admin/photos/link.js.erb +2 -0
  111. data/app/views/spina/admin/photos/photo_collection_select.js.erb +2 -0
  112. data/app/views/spina/admin/photos/photo_select.js.erb +2 -0
  113. data/app/views/spina/admin/photos/wysihtml5_insert.js.erb +5 -0
  114. data/app/views/spina/admin/photos/wysihtml5_select.js.erb +2 -0
  115. data/app/views/spina/admin/sessions/new.html.haml +4 -0
  116. data/app/views/spina/admin/shared/_navigation.html.haml +16 -0
  117. data/app/views/spina/admin/shared/_notifications.html.haml +16 -0
  118. data/app/views/spina/admin/users/_form.html.haml +54 -0
  119. data/app/views/spina/admin/users/edit.html.haml +1 -0
  120. data/app/views/spina/admin/users/index.html.haml +21 -0
  121. data/app/views/spina/admin/users/new.html.haml +1 -0
  122. data/app/views/spina/inquiries/create.html.haml +2 -0
  123. data/app/views/spina/inquiries/index.html.haml +19 -0
  124. data/app/views/spina/inquiry_mailer/inquiry.html.haml +15 -0
  125. data/app/views/spina/pages/_page.html.haml +3 -0
  126. data/app/views/spina/pages/homepage.html.haml +3 -0
  127. data/app/views/spina/pages/robots.text.erb +4 -0
  128. data/app/views/spina/pages/show.html.haml +1 -0
  129. data/app/views/spina/shared/_admin_bar.html.haml +4 -0
  130. data/app/views/spina/shared/_analytics.html.erb +11 -0
  131. data/app/views/spina/shared/_navigation.html.haml +3 -0
  132. data/app/views/spina/shared/_social.html.haml +5 -0
  133. data/app/views/spina/sitemaps/show.xml.builder +18 -0
  134. data/config/initializers/time_formats.rb +1 -0
  135. data/config/locales/en.yml +10 -0
  136. data/config/locales/nl.yml +213 -0
  137. data/config/routes.rb +88 -0
  138. data/db/migrate/20130412140449_create_spina_pages.rb +15 -0
  139. data/db/migrate/20130412140656_change_columns_pages.rb +6 -0
  140. data/db/migrate/20130412173041_create_spina_users.rb +12 -0
  141. data/db/migrate/20130412175403_create_spina_page_parts.rb +12 -0
  142. data/db/migrate/20130412175531_change_admin_of_users.rb +5 -0
  143. data/db/migrate/20130412180027_create_spina_page_includes.rb +12 -0
  144. data/db/migrate/20130412182257_create_spina_photos.rb +9 -0
  145. data/db/migrate/20130412191946_create_spina_accounts.rb +16 -0
  146. data/db/migrate/20130414145608_create_spina_inquiries.rb +13 -0
  147. data/db/migrate/20130422094248_add_theme_to_spina_accounts.rb +5 -0
  148. data/db/migrate/20130422161041_remove_theme_from_spina_accounts.rb +5 -0
  149. data/db/migrate/20130422194143_change_default_value_column_archived_inquiries.rb +5 -0
  150. data/db/migrate/20130425080630_change_page_includes.rb +8 -0
  151. data/db/migrate/20130426122705_add_parent_id_to_spina_pages.rb +5 -0
  152. data/db/migrate/20130426133425_change_colum_n_spina_pages_again.rb +5 -0
  153. data/db/migrate/20130426133606_bring_out_the_nukes.rb +6 -0
  154. data/db/migrate/20130429092708_add_name_to_spina_pages.rb +5 -0
  155. data/db/migrate/20130429124414_change_column_stomme_onzin.rb +6 -0
  156. data/db/migrate/20130503072744_add_last_logged_in_to_users.rb +5 -0
  157. data/db/migrate/20130503073613_change_column_spina_users.rb +5 -0
  158. data/db/migrate/20130503104857_create_spina_spina_files.rb +9 -0
  159. data/db/migrate/20130503105356_add_file_to_spina_page_parts.rb +5 -0
  160. data/db/migrate/20130503105943_change_columns_spina_files.rb +6 -0
  161. data/db/migrate/20130503110240_fix_namespaces.rb +12 -0
  162. data/db/migrate/20130503133649_create_spina_galleries.rb +10 -0
  163. data/db/migrate/20130504163456_add_seo_title_to_spina_pages.rb +5 -0
  164. data/db/migrate/20130516132913_add_spam_to_spina_inquiries.rb +5 -0
  165. data/db/migrate/20130523132347_add_page_partable_to_spina_page_parts.rb +137 -0
  166. data/db/migrate/20130527124130_remove_deprecated_columns_from_spina_page_parts.rb +11 -0
  167. data/db/migrate/20130715151201_switch_to_nested_sets_instead_of_position_pages.rb +10 -0
  168. data/db/migrate/20130719120007_add_skip_to_first_child_and_templates_to_spina_pages.rb +7 -0
  169. data/db/migrate/20130719121520_add_draft_to_spina_pages.rb +5 -0
  170. data/db/migrate/20130719122139_add_link_url_to_spina_pages.rb +5 -0
  171. data/db/migrate/20130719134545_rename_spina_file_to_attachments.rb +9 -0
  172. data/db/migrate/20130725111749_add_ancestry_to_spina_pages.rb +10 -0
  173. data/db/migrate/20130730185527_add_materialized_path_to_spina_pages.rb +5 -0
  174. data/db/migrate/20130918133920_change_column_page_parts.rb +6 -0
  175. data/db/migrate/20130919074011_create_spina_texts.rb +9 -0
  176. data/db/migrate/20130919074023_create_spina_lines.rb +9 -0
  177. data/db/migrate/20130919074838_remove_column_from_spina_page_parts.rb +5 -0
  178. data/db/migrate/20131210122702_change_column_spina_texts.rb +5 -0
  179. data/db/migrate/20131212080016_add_required_stuff_to_spina_accounts.rb +6 -0
  180. data/db/migrate/20140225141812_create_layout_parts.rb +12 -0
  181. data/db/migrate/20140225151146_add_account_id_to_spina_layout_parts.rb +5 -0
  182. data/db/migrate/20140407095608_add_active_to_spina_pages.rb +5 -0
  183. data/db/migrate/20140711154425_add_robots_allowed_to_spina_accounts.rb +5 -0
  184. data/db/migrate/20140718095419_add_position_to_spina_photo_collections_photos.rb +5 -0
  185. data/db/seeds.rb +14 -0
  186. data/lib/spina.rb +1 -0
  187. data/lib/spina/engine.rb +67 -0
  188. data/lib/spina/plugin.rb +10 -0
  189. data/lib/spina/theme.rb +21 -0
  190. data/lib/spina/version.rb +3 -0
  191. data/lib/tasks/spina_tasks.rake +12 -0
  192. data/test/dummy/README.rdoc +261 -0
  193. data/test/dummy/Rakefile +7 -0
  194. data/test/dummy/app/assets/javascripts/application.js +15 -0
  195. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  196. data/test/dummy/app/controllers/application_controller.rb +3 -0
  197. data/test/dummy/app/helpers/application_helper.rb +2 -0
  198. data/test/dummy/config.ru +4 -0
  199. data/test/dummy/config/application.rb +50 -0
  200. data/test/dummy/config/boot.rb +10 -0
  201. data/test/dummy/config/database.yml +26 -0
  202. data/test/dummy/config/environment.rb +5 -0
  203. data/test/dummy/config/environments/development.rb +41 -0
  204. data/test/dummy/config/environments/production.rb +70 -0
  205. data/test/dummy/config/environments/test.rb +36 -0
  206. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  207. data/test/dummy/config/initializers/inflections.rb +15 -0
  208. data/test/dummy/config/initializers/mime_types.rb +5 -0
  209. data/test/dummy/config/initializers/secret_token.rb +8 -0
  210. data/test/dummy/config/initializers/session_store.rb +8 -0
  211. data/test/dummy/config/initializers/spina.rb +7 -0
  212. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  213. data/test/dummy/config/locales/en.yml +5 -0
  214. data/test/dummy/config/locales/nl.yml +214 -0
  215. data/test/dummy/config/routes.rb +4 -0
  216. data/test/dummy/db/migrate/20130412140523_create_spina_pages.spina.rb +16 -0
  217. data/test/dummy/db/migrate/20130412140723_change_columns_pages.spina.rb +7 -0
  218. data/test/dummy/db/migrate/20130412175127_create_spina_users.spina.rb +13 -0
  219. data/test/dummy/db/migrate/20130412175554_create_spina_page_parts.spina.rb +13 -0
  220. data/test/dummy/db/migrate/20130412175555_change_admin_of_users.spina.rb +6 -0
  221. data/test/dummy/db/migrate/20130412180101_create_spina_page_includes.spina.rb +13 -0
  222. data/test/dummy/db/migrate/20130412182303_create_spina_photos.spina.rb +10 -0
  223. data/test/dummy/db/migrate/20130412191955_create_spina_accounts.spina.rb +17 -0
  224. data/test/dummy/db/migrate/20130414145616_create_spina_inquiries.spina.rb +14 -0
  225. data/test/dummy/db/migrate/20130422094426_add_theme_to_spina_accounts.spina.rb +6 -0
  226. data/test/dummy/db/migrate/20130422161301_remove_theme_from_spina_accounts.spina.rb +6 -0
  227. data/test/dummy/db/migrate/20130422194211_change_default_value_column_archived_inquiries.spina.rb +6 -0
  228. data/test/dummy/db/migrate/20130425080933_change_page_includes.spina.rb +9 -0
  229. data/test/dummy/db/migrate/20130426122731_add_parent_id_to_spina_pages.spina.rb +6 -0
  230. data/test/dummy/db/migrate/20130426132453_change_column_spina_pages.spina.rb +6 -0
  231. data/test/dummy/db/migrate/20130426133450_change_colum_n_spina_pages_again.spina.rb +6 -0
  232. data/test/dummy/db/migrate/20130426133636_bring_out_the_nukes.spina.rb +7 -0
  233. data/test/dummy/db/migrate/20130429092958_add_name_to_spina_pages.spina.rb +6 -0
  234. data/test/dummy/db/migrate/20130503072811_change_column_stomme_onzin.spina.rb +7 -0
  235. data/test/dummy/db/migrate/20130503072850_add_last_logged_in_to_users.spina.rb +6 -0
  236. data/test/dummy/db/migrate/20130503073738_change_column_spina_users.spina.rb +6 -0
  237. data/test/dummy/db/migrate/20130503104917_create_spina_spina_files.spina.rb +10 -0
  238. data/test/dummy/db/migrate/20130503105407_add_file_to_spina_page_parts.spina.rb +6 -0
  239. data/test/dummy/db/migrate/20130503110055_change_columns_spina_files.spina.rb +7 -0
  240. data/test/dummy/db/migrate/20130503110354_fix_namespaces.spina.rb +13 -0
  241. data/test/dummy/db/migrate/20130503135202_create_spina_galleries.spina.rb +11 -0
  242. data/test/dummy/db/migrate/20130504171717_add_seo_title_to_spina_pages.spina.rb +6 -0
  243. data/test/dummy/db/migrate/20130516132920_add_spam_to_spina_inquiries.spina.rb +6 -0
  244. data/test/dummy/db/migrate/20130524104253_add_page_partable_to_spina_page_parts.spina.rb +131 -0
  245. data/test/dummy/db/migrate/20130528195734_remove_deprecated_columns_from_spina_page_parts.spina.rb +14 -0
  246. data/test/dummy/db/migrate/20130715152615_switch_to_nested_sets_instead_of_position_pages.spina.rb +11 -0
  247. data/test/dummy/db/migrate/20130719120131_add_skip_to_first_child_and_templates_to_spina_pages.spina.rb +8 -0
  248. data/test/dummy/db/migrate/20130719121553_add_draft_to_spina_pages.spina.rb +6 -0
  249. data/test/dummy/db/migrate/20130719122158_add_link_url_to_spina_pages.spina.rb +6 -0
  250. data/test/dummy/db/migrate/20130719134709_rename_spina_file_to_attachments.spina.rb +10 -0
  251. data/test/dummy/db/migrate/20130725112244_add_ancestry_to_spina_pages.spina.rb +11 -0
  252. data/test/dummy/db/migrate/20130730185551_add_materialized_path_to_spina_pages.spina.rb +6 -0
  253. data/test/dummy/db/migrate/20130918133920_change_column_page_parts.spina.rb +6 -0
  254. data/test/dummy/db/migrate/20130919074011_create_spina_texts.spina.rb +9 -0
  255. data/test/dummy/db/migrate/20130919074023_create_spina_lines.spina.rb +9 -0
  256. data/test/dummy/db/migrate/20130919074838_remove_column_from_spina_page_parts.spina.rb +5 -0
  257. data/test/dummy/db/migrate/20131210122702_change_column_spina_texts.rb +5 -0
  258. data/test/dummy/db/migrate/20131212080016_add_required_stuff_to_spina_accounts.rb +6 -0
  259. data/test/dummy/db/migrate/20140225141812_create_layout_parts.rb +12 -0
  260. data/test/dummy/db/migrate/20140225151146_add_account_id_to_spina_layout_parts.rb +5 -0
  261. data/test/dummy/db/migrate/20140407095608_add_active_to_spina_pages.rb +5 -0
  262. data/test/dummy/db/schema.rb +141 -0
  263. data/test/dummy/db/seeds.rb +1 -0
  264. data/test/dummy/public/404.html +26 -0
  265. data/test/dummy/public/422.html +26 -0
  266. data/test/dummy/public/500.html +25 -0
  267. data/test/dummy/public/favicon.ico +0 -0
  268. data/test/dummy/script/rails +6 -0
  269. data/test/fixtures/spina/accounts.yml +21 -0
  270. data/test/fixtures/spina/galleries.yml +9 -0
  271. data/test/fixtures/spina/inquiries.yml +15 -0
  272. data/test/fixtures/spina/lines.yml +7 -0
  273. data/test/fixtures/spina/page_includes.yml +13 -0
  274. data/test/fixtures/spina/page_parts.yml +13 -0
  275. data/test/fixtures/spina/pages.yml +19 -0
  276. data/test/fixtures/spina/photo_collection_files.yml +11 -0
  277. data/test/fixtures/spina/photo_collections.yml +11 -0
  278. data/test/fixtures/spina/photos.yml +7 -0
  279. data/test/fixtures/spina/texts.yml +7 -0
  280. data/test/fixtures/spina/users.yml +13 -0
  281. data/test/functional/spina/accounts_controller_test.rb +9 -0
  282. data/test/functional/spina/inquiries_controller_test.rb +9 -0
  283. data/test/functional/spina/page_parts_controller_test.rb +9 -0
  284. data/test/functional/spina/pages_controller_test.rb +9 -0
  285. data/test/functional/spina/photos_controller_test.rb +9 -0
  286. data/test/functional/spina/sessions_controller_test.rb +9 -0
  287. data/test/functional/spina/spina/inquiry_mailer_test.rb +9 -0
  288. data/test/functional/spina/users_controller_test.rb +9 -0
  289. data/test/integration/navigation_test.rb +10 -0
  290. data/test/models/spina/line_test.rb +9 -0
  291. data/test/models/spina/text_test.rb +9 -0
  292. data/test/spina_test.rb +7 -0
  293. data/test/support/images/after sun 2.jpg +0 -0
  294. data/test/support/images/after sun.jpg +0 -0
  295. data/test/support/images/amygdalus.jpg +0 -0
  296. data/test/support/images/at sunset-1.jpg +0 -0
  297. data/test/support/images/colorfull.jpg +0 -0
  298. data/test/support/images/nature tree.jpg +0 -0
  299. data/test/support/images/orchid.jpg +0 -0
  300. data/test/support/images/smooth.jpg +0 -0
  301. data/test/support/images/soft.jpg +0 -0
  302. data/test/support/images/spring memory.jpg +0 -0
  303. data/test/support/images/spring purple.jpg +0 -0
  304. data/test/support/images/spring.jpg +0 -0
  305. data/test/support/images/yew-tree.jpg +0 -0
  306. data/test/test_helper.rb +15 -0
  307. data/test/unit/helpers/spina/accounts_helper_test.rb +6 -0
  308. data/test/unit/helpers/spina/inquiries_helper_test.rb +6 -0
  309. data/test/unit/helpers/spina/page_parts_helper_test.rb +6 -0
  310. data/test/unit/helpers/spina/pages_helper_test.rb +6 -0
  311. data/test/unit/helpers/spina/photos_helper_test.rb +6 -0
  312. data/test/unit/helpers/spina/sessions_helper_test.rb +6 -0
  313. data/test/unit/helpers/spina/users_helper_test.rb +6 -0
  314. data/test/unit/spina/account_test.rb +9 -0
  315. data/test/unit/spina/file_collection_file_test.rb +9 -0
  316. data/test/unit/spina/gallery_test.rb +9 -0
  317. data/test/unit/spina/inquiry_test.rb +9 -0
  318. data/test/unit/spina/page_include_test.rb +9 -0
  319. data/test/unit/spina/page_part_test.rb +9 -0
  320. data/test/unit/spina/page_test.rb +9 -0
  321. data/test/unit/spina/photo_collection_file_test.rb +9 -0
  322. data/test/unit/spina/photo_collection_test.rb +9 -0
  323. data/test/unit/spina/photo_test.rb +9 -0
  324. data/test/unit/spina/spina/file_test.rb +9 -0
  325. data/test/unit/spina/user_test.rb +9 -0
  326. metadata +676 -0
@@ -0,0 +1,38 @@
1
+ module Spina
2
+ class LayoutPart < ActiveRecord::Base
3
+ include ApplicationHelper
4
+
5
+ belongs_to :account
6
+ belongs_to :layout_partable, polymorphic: true
7
+
8
+ accepts_nested_attributes_for :layout_partable, allow_destroy: true
9
+ attr_accessor :position
10
+
11
+ validates_presence_of :name, :layout_partable_type, :title
12
+ validates_uniqueness_of :name, scope: :account_id
13
+
14
+ scope :sorted, -> { order(:position) }
15
+
16
+ def to_s
17
+ name
18
+ end
19
+
20
+ def position(theme)
21
+ layout_parts = theme.config.layout_template[:layout_parts]
22
+ layout_parts.index { |layout_part| layout_part == self.name }.to_i
23
+ end
24
+
25
+ def content
26
+ self.layout_partable.try(:content) || self.layout_partable
27
+ end
28
+
29
+ def layout_partable_attributes=(attributes)
30
+ if self.layout_partable.present?
31
+ self.layout_partable.update_attributes(attributes)
32
+ else
33
+ self.layout_partable = self.layout_partable_type.constantize.create(attributes)
34
+ end
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,6 @@
1
+ module Spina
2
+ class Line < ActiveRecord::Base
3
+ has_many :page_parts, as: :page_partable
4
+ has_many :layout_parts, as: :layout_partable
5
+ end
6
+ end
@@ -0,0 +1,125 @@
1
+ module Spina
2
+ class Page < ActiveRecord::Base
3
+ extend FriendlyId
4
+
5
+ has_ancestry orphan_strategy: :adopt # i.e. added to the parent of deleted node
6
+
7
+ friendly_id :slug_candidates, use: [:slugged, :finders]
8
+
9
+ has_many :page_parts, dependent: :destroy
10
+
11
+ before_validation :ensure_title
12
+ before_save :set_materialized_path
13
+ before_save :ancestry_is_nil
14
+ after_save :save_children
15
+
16
+ accepts_nested_attributes_for :page_parts, allow_destroy: true
17
+ validates_presence_of :title
18
+
19
+ scope :sorted, -> { order('position') }
20
+ scope :custom_pages, -> { where(deletable: false) }
21
+ scope :live, -> { where(draft: false, active: true) }
22
+ scope :in_menu, -> { where(show_in_menu: true) }
23
+ scope :active, -> { where(active: true) }
24
+
25
+ def slug_candidates
26
+ [
27
+ :title,
28
+ [:title, :id]
29
+ ]
30
+ end
31
+
32
+ def should_generate_new_friendly_id?
33
+ title_changed?
34
+ end
35
+
36
+ def to_s
37
+ name
38
+ end
39
+
40
+ def custom_page?
41
+ !deletable
42
+ end
43
+
44
+ def set_materialized_path
45
+ self.materialized_path = generate_materialized_path
46
+ end
47
+
48
+ def save_children
49
+ self.children.each { |child| child.save }
50
+ end
51
+
52
+ def menu_title
53
+ read_attribute(:menu_title).blank? ? title : read_attribute(:menu_title)
54
+ end
55
+
56
+ def seo_title
57
+ read_attribute(:seo_title).blank? ? title : read_attribute(:seo_title)
58
+ end
59
+
60
+ def page_part(page_part)
61
+ page_part = page_parts.where(name: page_part[:name]).first || page_parts.build(page_part)
62
+ page_part.page_partable = page_part.page_partable_type.constantize.new unless page_part.page_partable.present?
63
+ page_part
64
+ end
65
+
66
+ def has_content?(page_part)
67
+ content(page_part).present?
68
+ end
69
+
70
+ def content(page_part)
71
+ page_part = page_parts.where(name: page_part).first
72
+ page_part.try(:content)
73
+ end
74
+
75
+ def live?
76
+ !draft? && active?
77
+ end
78
+
79
+ def previous_sibling
80
+ self.siblings.where('position < ?', self.position).sorted.last
81
+ end
82
+
83
+ def next_sibling
84
+ self.siblings.where('position > ?', self.position).sorted.first
85
+ end
86
+
87
+ def deactivate!
88
+ self.active = false
89
+ self.save
90
+ end
91
+
92
+ def activate!
93
+ self.active = true
94
+ self.save
95
+ end
96
+
97
+ private
98
+
99
+ def generate_materialized_path
100
+ if self.name == 'homepage'
101
+ "/"
102
+ else
103
+ case self.depth
104
+ when 0
105
+ "/#{slug}"
106
+ when 1
107
+ "/#{self.parent.slug}/#{slug}"
108
+ when 2
109
+ "/#{self.parent.parent.try(:slug)}/#{self.parent.slug}/#{slug}"
110
+ end
111
+ end
112
+ end
113
+
114
+ def ancestry_is_nil
115
+ if self.ancestry && self.ancestry.empty?
116
+ self.ancestry = nil
117
+ end
118
+ end
119
+
120
+ def ensure_title
121
+ self.title = self.name.capitalize if self.title.blank? && self.name.present?
122
+ end
123
+
124
+ end
125
+ end
@@ -0,0 +1,38 @@
1
+ module Spina
2
+ class PagePart < ActiveRecord::Base
3
+ include ApplicationHelper
4
+
5
+ belongs_to :page
6
+ belongs_to :page_partable, polymorphic: true
7
+
8
+ accepts_nested_attributes_for :page_partable, allow_destroy: true
9
+ attr_accessor :position
10
+
11
+ validates_presence_of :name, :page_partable_type, :title
12
+ validates_uniqueness_of :name, scope: :page_id
13
+
14
+ scope :sorted, -> { order(:position) }
15
+
16
+ def to_s
17
+ name
18
+ end
19
+
20
+ def position(theme)
21
+ page_parts = theme.config.view_templates[self.page.try(:view_template) || "show"][:page_parts]
22
+ page_parts.index { |page_part| page_part == self.name }.to_i
23
+ end
24
+
25
+ def content
26
+ self.page_partable.try(:content) || self.page_partable
27
+ end
28
+
29
+ def page_partable_attributes=(attributes)
30
+ if self.page_partable.present?
31
+ self.page_partable.assign_attributes(attributes)
32
+ else
33
+ self.page_partable = self.page_partable_type.constantize.new(attributes)
34
+ end
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,23 @@
1
+ module Spina
2
+ class Photo < ActiveRecord::Base
3
+ mount_uploader :file, PhotoUploader
4
+
5
+ has_many :page_parts, as: :page_partable
6
+ has_many :photo_collections_photos
7
+ has_many :photo_collections, through: :photo_collections_photos
8
+
9
+ scope :sorted, -> { order('created_at DESC') }
10
+ scope :sorted_by_photo_collection, -> { order('position') }
11
+
12
+ validates_presence_of :file
13
+
14
+ def name
15
+ file.file.filename
16
+ end
17
+
18
+ def content
19
+ self
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,30 @@
1
+ module Spina
2
+ class PhotoCollection < ActiveRecord::Base
3
+
4
+ has_one :page_part, as: :page_partable
5
+ has_many :photo_collections_photos, autosave: true
6
+ has_many :photos, through: :photo_collections_photos
7
+
8
+ attr_reader :photo_tokens, :photo_positions
9
+ accepts_nested_attributes_for :photos, allow_destroy: true
10
+
11
+ def photo_tokens=(ids)
12
+ self.photo_ids = ids.split(",")
13
+ end
14
+
15
+ def photo_positions=(positions)
16
+ positions = positions.split(",")
17
+ self.photo_collections_photos.each do |photo|
18
+ photo.position = positions.index(photo.photo.try(:id).try(:to_s))
19
+ end
20
+ logger.info self.photo_collections_photos.inspect
21
+ end
22
+
23
+ alias_method :old_update_attributes, :update_attributes
24
+ def update_attributes(attributes)
25
+ self.photos.clear if attributes.reject{|key,value| key == "id" }.blank?
26
+ old_update_attributes(attributes)
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,6 @@
1
+ module Spina
2
+ class PhotoCollectionsPhoto < ActiveRecord::Base
3
+ belongs_to :photo
4
+ belongs_to :photo_collection
5
+ end
6
+ end
@@ -0,0 +1,7 @@
1
+ module Spina
2
+ module Spina
3
+ def self.table_name_prefix
4
+ 'spina_'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ module Spina
2
+ class Text < ActiveRecord::Base
3
+ has_many :page_parts, as: :page_partable
4
+ has_many :layout_parts, as: :layout_partable
5
+ end
6
+ end
@@ -0,0 +1,31 @@
1
+ module Spina
2
+ class User < ActiveRecord::Base
3
+ has_secure_password
4
+
5
+ validates_presence_of :name, :email
6
+ validates_presence_of :password, on: :create
7
+ validate :uniqueness_of_email
8
+ validates :email, format: { with:/\A[^@]+@[^@]+\z/, message: 'is geen geldig emailadres' }
9
+
10
+ def admin?
11
+ admin
12
+ end
13
+
14
+ def to_s
15
+ name
16
+ end
17
+
18
+ def update_last_logged_in!
19
+ self.last_logged_in = Time.now
20
+ self.save!
21
+ end
22
+
23
+ private
24
+
25
+ def uniqueness_of_email
26
+ if email_changed? && User.where(email: email).exists?
27
+ errors.add(:email, I18n.t('errors.messages.taken'))
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,82 @@
1
+ # require 'active_support/core_ext/string'
2
+ require 'active_support/configurable'
3
+ require 'action_view/helpers/tag_helper'
4
+ require 'action_view/helpers/url_helper'
5
+
6
+ module Spina
7
+ module Pages
8
+ class MenuPresenter
9
+ include ActionView::Helpers::TagHelper
10
+ include ActionView::Helpers::UrlHelper
11
+ include ActiveSupport::Configurable
12
+
13
+ config_accessor :list_tag, :list_wrapper, :list_item_tag, :list_item_css, :selected_css, :current_css, :first_css, :last_css
14
+
15
+ self.list_tag = :ul
16
+ self.list_item_tag = :li
17
+ self.list_item_css = nil
18
+ self.list_wrapper = false
19
+ self.selected_css = :selected
20
+ self.current_css = :current
21
+ self.first_css = :first
22
+ self.last_css = :last
23
+
24
+ attr_accessor :context, :collection, :current_menu_item
25
+ delegate :output_buffer, :output_buffer=, to: :context
26
+
27
+ def initialize(collection, context, current_menu_item=nil)
28
+ @collection = collection
29
+ @context = context
30
+ @current_menu_item = current_menu_item
31
+ @selected_menu_items = [@current_menu_item] + @current_menu_item.try(:ancestors)
32
+ end
33
+
34
+ def to_html
35
+ render_list_wrapper(collection) if collection.present?
36
+ end
37
+
38
+ private
39
+
40
+ def render_list_wrapper(menu_items)
41
+ if menu_items.any?
42
+ if list_wrapper
43
+ content_tag(:div) do
44
+ render_menu_items(menu_items)
45
+ end
46
+ else
47
+ render_menu_items(menu_items)
48
+ end
49
+ end
50
+ end
51
+
52
+ def render_menu_items(menu_items)
53
+ content_tag(list_tag) do
54
+ menu_items.each_with_index.inject(ActiveSupport::SafeBuffer.new) do |buffer, (item, index)|
55
+ buffer << render_menu_item(item, index, menu_items.length)
56
+ end
57
+ end
58
+ end
59
+
60
+ def render_menu_item(menu_item, index, menu_items_length)
61
+ content_tag(list_item_tag, class: menu_item_css(menu_item[0], index, menu_items_length)) do
62
+ buffer = ActiveSupport::SafeBuffer.new
63
+ buffer << link_to(menu_item[0].menu_title, "#{menu_item[0].materialized_path}")
64
+ buffer << render_list_wrapper(menu_item[1])
65
+ buffer
66
+ end
67
+ end
68
+
69
+ def menu_item_css(menu_item, index, menu_items_length)
70
+ css = []
71
+ css << list_item_css
72
+ css << selected_css if (@selected_menu_items.present? && @selected_menu_items.include?(menu_item) )
73
+ css << current_css if @current_menu_item == menu_item
74
+ css << first_css if index == 0
75
+ css << last_css if index + 1 == menu_items_length
76
+
77
+ css.reject(&:blank?).presence
78
+ end
79
+
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,56 @@
1
+ # encoding: utf-8
2
+ module Spina
3
+ class FileUploader < CarrierWave::Uploader::Base
4
+
5
+ # Include RMagick or MiniMagick support:
6
+ # include CarrierWave::RMagick
7
+ # include CarrierWave::MiniMagick
8
+
9
+ # Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility:
10
+ # include Sprockets::Helpers::RailsHelper
11
+ # include Sprockets::Helpers::IsolatedHelper
12
+
13
+ # Choose what kind of storage to use for this uploader:
14
+ storage :file
15
+ # storage :fog
16
+
17
+ # Override the directory where uploaded files will be stored.
18
+ # This is a sensible default for uploaders that are meant to be mounted:
19
+ def store_dir
20
+ "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
21
+ end
22
+
23
+ # Provide a default URL as a default if there hasn't been a file uploaded:
24
+ # def default_url
25
+ # # For Rails 3.1+ asset pipeline compatibility:
26
+ # # asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
27
+ #
28
+ # "/images/fallback/" + [version_name, "default.png"].compact.join('_')
29
+ # end
30
+
31
+ # Process files as they are uploaded:
32
+ # process :scale => [200, 300]
33
+ #
34
+ # def scale(width, height)
35
+ # # do something
36
+ # end
37
+
38
+ # Create different versions of your uploaded files:
39
+ # version :thumb do
40
+ # process :scale => [50, 50]
41
+ # end
42
+
43
+ # Add a white list of extensions which are allowed to be uploaded.
44
+ # For images you might use something like this:
45
+ # def extension_white_list
46
+ # %w(jpg jpeg gif png)
47
+ # end
48
+
49
+ # Override the filename of the uploaded files:
50
+ # Avoid using model.id or version_name here, see uploader/store.rb for details.
51
+ # def filename
52
+ # "something.jpg" if original_filename
53
+ # end
54
+
55
+ end
56
+ end