georgia 0.7.0

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 (366) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +27 -0
  4. data/Rakefile +27 -0
  5. data/app/assets/fonts/georgia/signika-bold-webfont.eot +0 -0
  6. data/app/assets/fonts/georgia/signika-bold-webfont.svg +1711 -0
  7. data/app/assets/fonts/georgia/signika-bold-webfont.ttf +0 -0
  8. data/app/assets/fonts/georgia/signika-bold-webfont.woff +0 -0
  9. data/app/assets/fonts/georgia/signika-light-webfont.eot +0 -0
  10. data/app/assets/fonts/georgia/signika-light-webfont.svg +1680 -0
  11. data/app/assets/fonts/georgia/signika-light-webfont.ttf +0 -0
  12. data/app/assets/fonts/georgia/signika-light-webfont.woff +0 -0
  13. data/app/assets/fonts/georgia/signika-regular-webfont.eot +0 -0
  14. data/app/assets/fonts/georgia/signika-regular-webfont.svg +1746 -0
  15. data/app/assets/fonts/georgia/signika-regular-webfont.ttf +0 -0
  16. data/app/assets/fonts/georgia/signika-regular-webfont.woff +0 -0
  17. data/app/assets/images/georgia/bg-body-bar.jpg +0 -0
  18. data/app/assets/images/georgia/checkmark.png +0 -0
  19. data/app/assets/images/georgia/content-types/avi.jpg +0 -0
  20. data/app/assets/images/georgia/content-types/css.jpg +0 -0
  21. data/app/assets/images/georgia/content-types/csv.jpg +0 -0
  22. data/app/assets/images/georgia/content-types/doc.jpg +0 -0
  23. data/app/assets/images/georgia/content-types/docx.jpg +0 -0
  24. data/app/assets/images/georgia/content-types/eps.jpg +0 -0
  25. data/app/assets/images/georgia/content-types/gif.jpg +0 -0
  26. data/app/assets/images/georgia/content-types/gz.jpg +0 -0
  27. data/app/assets/images/georgia/content-types/html.jpg +0 -0
  28. data/app/assets/images/georgia/content-types/jpg.jpg +0 -0
  29. data/app/assets/images/georgia/content-types/mp3.jpg +0 -0
  30. data/app/assets/images/georgia/content-types/ods.jpg +0 -0
  31. data/app/assets/images/georgia/content-types/odt.jpg +0 -0
  32. data/app/assets/images/georgia/content-types/pdf.jpg +0 -0
  33. data/app/assets/images/georgia/content-types/png.jpg +0 -0
  34. data/app/assets/images/georgia/content-types/ppt.jpg +0 -0
  35. data/app/assets/images/georgia/content-types/pptx.jpg +0 -0
  36. data/app/assets/images/georgia/content-types/rar.jpg +0 -0
  37. data/app/assets/images/georgia/content-types/tar.jpg +0 -0
  38. data/app/assets/images/georgia/content-types/txt.jpg +0 -0
  39. data/app/assets/images/georgia/content-types/wav.jpg +0 -0
  40. data/app/assets/images/georgia/content-types/xls.jpg +0 -0
  41. data/app/assets/images/georgia/content-types/zip.jpg +0 -0
  42. data/app/assets/images/georgia/down_arrow.gif +0 -0
  43. data/app/assets/images/georgia/grippy_large.png +0 -0
  44. data/app/assets/images/georgia/indeterminate.png +0 -0
  45. data/app/assets/images/georgia/logo.png +0 -0
  46. data/app/assets/images/georgia/select2-spinner.gif +0 -0
  47. data/app/assets/images/georgia/select2.png +0 -0
  48. data/app/assets/images/georgia/select2x2.png +0 -0
  49. data/app/assets/images/georgia/transparent.jpg +0 -0
  50. data/app/assets/images/georgia/up_arrow.gif +0 -0
  51. data/app/assets/images/ui-bg_glass_75_ffffff_1x400.png +0 -0
  52. data/app/assets/javascripts/georgia/application.js +20 -0
  53. data/app/assets/javascripts/georgia/bootstrap-vendor.js.coffee +13 -0
  54. data/app/assets/javascripts/georgia/ckeditor/config.js +22 -0
  55. data/app/assets/javascripts/georgia/components/asset-replacer.js.coffee +25 -0
  56. data/app/assets/javascripts/georgia/components/asset-uploader.js.coffee +44 -0
  57. data/app/assets/javascripts/georgia/components/flash.js.coffee +15 -0
  58. data/app/assets/javascripts/georgia/components/forms/menu.js.coffee +66 -0
  59. data/app/assets/javascripts/georgia/components/forms/revision.js.coffee +22 -0
  60. data/app/assets/javascripts/georgia/components/forms/spinning.js.coffee +51 -0
  61. data/app/assets/javascripts/georgia/components/media-library.js.coffee +57 -0
  62. data/app/assets/javascripts/georgia/components/portlets/link.js.coffee +14 -0
  63. data/app/assets/javascripts/georgia/components/portlets/slide.js.coffee +38 -0
  64. data/app/assets/javascripts/georgia/components/portlets/widget.js.coffee +47 -0
  65. data/app/assets/javascripts/georgia/components/position_sort.js.coffee +20 -0
  66. data/app/assets/javascripts/georgia/components/tables/checkbox.js.coffee +123 -0
  67. data/app/assets/javascripts/georgia/components/tables/media.js.coffee +59 -0
  68. data/app/assets/javascripts/georgia/components/tables/messages.js.coffee +59 -0
  69. data/app/assets/javascripts/georgia/components/tables/pages.js.coffee +93 -0
  70. data/app/assets/javascripts/georgia/components/tags.js.coffee +36 -0
  71. data/app/assets/javascripts/georgia/components/widget.js.coffee +32 -0
  72. data/app/assets/javascripts/georgia/featured-image.js.coffee +8 -0
  73. data/app/assets/javascripts/georgia/keybindings.js.coffee +42 -0
  74. data/app/assets/javascripts/georgia/toggle.js.coffee +4 -0
  75. data/app/assets/javascripts/georgia/vendor/bootstrap-datetimepicker.js +28 -0
  76. data/app/assets/javascripts/georgia/vendor/jquery.mjs.nestedSortable.js +608 -0
  77. data/app/assets/javascripts/georgia/vendor/jquery.ui.touch-punch.js +160 -0
  78. data/app/assets/javascripts/georgia/vendor/moment.js +6 -0
  79. data/app/assets/stylesheets/georgia/application.css.scss +16 -0
  80. data/app/assets/stylesheets/georgia/components/_box.scss +29 -0
  81. data/app/assets/stylesheets/georgia/components/_button.scss +60 -0
  82. data/app/assets/stylesheets/georgia/components/_checkbox.scss +48 -0
  83. data/app/assets/stylesheets/georgia/components/_form.scss +8 -0
  84. data/app/assets/stylesheets/georgia/components/_help.scss +4 -0
  85. data/app/assets/stylesheets/georgia/components/_icon.scss +7 -0
  86. data/app/assets/stylesheets/georgia/components/_input.scss +48 -0
  87. data/app/assets/stylesheets/georgia/components/_label.scss +4 -0
  88. data/app/assets/stylesheets/georgia/components/_modal.scss +14 -0
  89. data/app/assets/stylesheets/georgia/components/_nav-list.scss +13 -0
  90. data/app/assets/stylesheets/georgia/components/_note.scss +31 -0
  91. data/app/assets/stylesheets/georgia/components/_portlet.scss +57 -0
  92. data/app/assets/stylesheets/georgia/components/_progress.scss +4 -0
  93. data/app/assets/stylesheets/georgia/components/_state.scss +17 -0
  94. data/app/assets/stylesheets/georgia/components/_table.scss +8 -0
  95. data/app/assets/stylesheets/georgia/components/_transparent.scss +3 -0
  96. data/app/assets/stylesheets/georgia/layout/_base.scss +94 -0
  97. data/app/assets/stylesheets/georgia/layout/_devise.scss +5 -0
  98. data/app/assets/stylesheets/georgia/mixins/_clearfix.scss +12 -0
  99. data/app/assets/stylesheets/georgia/mixins/_ellipsis.scss +8 -0
  100. data/app/assets/stylesheets/georgia/mixins/_inflectors.scss +1 -0
  101. data/app/assets/stylesheets/georgia/mixins/_opacity.scss +6 -0
  102. data/app/assets/stylesheets/georgia/mixins/_utilities.scss +13 -0
  103. data/app/assets/stylesheets/georgia/modules/_facets.scss +4 -0
  104. data/app/assets/stylesheets/georgia/modules/_footer.scss +9 -0
  105. data/app/assets/stylesheets/georgia/modules/_form_with_helpers.scss +17 -0
  106. data/app/assets/stylesheets/georgia/modules/_header.scss +66 -0
  107. data/app/assets/stylesheets/georgia/modules/_link.scss +51 -0
  108. data/app/assets/stylesheets/georgia/modules/_login.scss +7 -0
  109. data/app/assets/stylesheets/georgia/modules/_media.scss +55 -0
  110. data/app/assets/stylesheets/georgia/modules/_menu.scss +7 -0
  111. data/app/assets/stylesheets/georgia/modules/_message.scss +53 -0
  112. data/app/assets/stylesheets/georgia/modules/_notifications.scss +26 -0
  113. data/app/assets/stylesheets/georgia/modules/_pages.scss +7 -0
  114. data/app/assets/stylesheets/georgia/modules/_pagination.scss +41 -0
  115. data/app/assets/stylesheets/georgia/modules/_results.scss +46 -0
  116. data/app/assets/stylesheets/georgia/modules/_revision.scss +18 -0
  117. data/app/assets/stylesheets/georgia/modules/_sidebar.scss +71 -0
  118. data/app/assets/stylesheets/georgia/modules/_slide.scss +11 -0
  119. data/app/assets/stylesheets/georgia/modules/_subpage.scss +25 -0
  120. data/app/assets/stylesheets/georgia/modules/_users.scss +3 -0
  121. data/app/assets/stylesheets/georgia/modules/_widget.scss +45 -0
  122. data/app/assets/stylesheets/georgia/overrides/_select2.scss +5 -0
  123. data/app/assets/stylesheets/georgia/settings/_base.scss +6 -0
  124. data/app/assets/stylesheets/georgia/settings/_colors.scss +41 -0
  125. data/app/assets/stylesheets/georgia/settings/_fonts.scss +3 -0
  126. data/app/assets/stylesheets/georgia/settings/_z-index.scss +7 -0
  127. data/app/assets/stylesheets/georgia/vendor/_autocomplete.scss +50 -0
  128. data/app/assets/stylesheets/georgia/vendor/_bootstrap-datetimepicker.scss +174 -0
  129. data/app/assets/stylesheets/georgia/vendor/_select2.scss +18 -0
  130. data/app/assets/stylesheets/georgia/vendor/_tooltip.scss +98 -0
  131. data/app/controllers/georgia/api/media_controller.rb +18 -0
  132. data/app/controllers/georgia/api/tags_controller.rb +22 -0
  133. data/app/controllers/georgia/application_controller.rb +25 -0
  134. data/app/controllers/georgia/concerns/frontendable.rb +45 -0
  135. data/app/controllers/georgia/concerns/helpers.rb +28 -0
  136. data/app/controllers/georgia/dashboard_controller.rb +14 -0
  137. data/app/controllers/georgia/links_controller.rb +13 -0
  138. data/app/controllers/georgia/media_controller.rb +101 -0
  139. data/app/controllers/georgia/menus_controller.rb +80 -0
  140. data/app/controllers/georgia/messages_controller.rb +74 -0
  141. data/app/controllers/georgia/pages_controller.rb +180 -0
  142. data/app/controllers/georgia/revisions_controller.rb +89 -0
  143. data/app/controllers/georgia/slides_controller.rb +13 -0
  144. data/app/controllers/georgia/ui_associations_controller.rb +12 -0
  145. data/app/controllers/georgia/users/sessions_controller.rb +7 -0
  146. data/app/controllers/georgia/users_controller.rb +51 -0
  147. data/app/controllers/georgia/widgets_controller.rb +67 -0
  148. data/app/controllers/messages_controller.rb +29 -0
  149. data/app/decorators/ckeditor/asset_decorator.rb +13 -0
  150. data/app/decorators/ckeditor/assets_decorator.rb +4 -0
  151. data/app/decorators/ckeditor/picture_decorator.rb +9 -0
  152. data/app/decorators/ckeditor/pictures_decorator.rb +4 -0
  153. data/app/decorators/georgia/application_decorator.rb +6 -0
  154. data/app/decorators/georgia/link_decorator.rb +9 -0
  155. data/app/decorators/georgia/links_decorator.rb +4 -0
  156. data/app/decorators/georgia/message_decorator.rb +21 -0
  157. data/app/decorators/georgia/messages_decorator.rb +4 -0
  158. data/app/decorators/georgia/page_decorator.rb +31 -0
  159. data/app/decorators/georgia/pages_decorator.rb +4 -0
  160. data/app/decorators/georgia/revision_decorator.rb +28 -0
  161. data/app/decorators/georgia/slide_decorator.rb +4 -0
  162. data/app/decorators/georgia/widget_decorator.rb +4 -0
  163. data/app/decorators/pagination_decorator.rb +3 -0
  164. data/app/decorators/sunspot/highlighted_hit_decorator.rb +29 -0
  165. data/app/helpers/georgia/checkboxes_helper.rb +13 -0
  166. data/app/helpers/georgia/devise_helper.rb +15 -0
  167. data/app/helpers/georgia/facets_helper.rb +35 -0
  168. data/app/helpers/georgia/forms_helper.rb +68 -0
  169. data/app/helpers/georgia/header_helper.rb +10 -0
  170. data/app/helpers/georgia/internationalization_helper.rb +32 -0
  171. data/app/helpers/georgia/menus_helper.rb +20 -0
  172. data/app/helpers/georgia/messages_helper.rb +9 -0
  173. data/app/helpers/georgia/meta_tags_helper.rb +22 -0
  174. data/app/helpers/georgia/modals_helper.rb +7 -0
  175. data/app/helpers/georgia/pages_helper.rb +22 -0
  176. data/app/helpers/georgia/pagination_helper.rb +10 -0
  177. data/app/helpers/georgia/routes_helper.rb +25 -0
  178. data/app/helpers/georgia/sidebar_helper.rb +13 -0
  179. data/app/helpers/georgia/states_helper.rb +17 -0
  180. data/app/helpers/georgia/twitter_helper.rb +24 -0
  181. data/app/helpers/georgia/ui_helper.rb +51 -0
  182. data/app/mailers/georgia/notifier.rb +33 -0
  183. data/app/models/ability.rb +19 -0
  184. data/app/models/ckeditor/asset.rb +61 -0
  185. data/app/models/ckeditor/attachment_file.rb +7 -0
  186. data/app/models/ckeditor/picture.rb +15 -0
  187. data/app/models/georgia/clone.rb +101 -0
  188. data/app/models/georgia/concerns/cacheable.rb +18 -0
  189. data/app/models/georgia/concerns/contentable.rb +22 -0
  190. data/app/models/georgia/concerns/indexable.rb +67 -0
  191. data/app/models/georgia/concerns/orderable.rb +21 -0
  192. data/app/models/georgia/concerns/publishable.rb +35 -0
  193. data/app/models/georgia/concerns/revisionable.rb +38 -0
  194. data/app/models/georgia/concerns/slugable.rb +46 -0
  195. data/app/models/georgia/concerns/statable.rb +64 -0
  196. data/app/models/georgia/concerns/taggable.rb +19 -0
  197. data/app/models/georgia/concerns/templatable.rb +20 -0
  198. data/app/models/georgia/concerns/treeable.rb +26 -0
  199. data/app/models/georgia/content.rb +15 -0
  200. data/app/models/georgia/link.rb +27 -0
  201. data/app/models/georgia/menu.rb +13 -0
  202. data/app/models/georgia/message.rb +47 -0
  203. data/app/models/georgia/page.rb +20 -0
  204. data/app/models/georgia/revision.rb +22 -0
  205. data/app/models/georgia/role.rb +10 -0
  206. data/app/models/georgia/slide.rb +13 -0
  207. data/app/models/georgia/status.rb +29 -0
  208. data/app/models/georgia/ui_association.rb +27 -0
  209. data/app/models/georgia/ui_section.rb +12 -0
  210. data/app/models/georgia/user.rb +27 -0
  211. data/app/models/georgia/widget.rb +32 -0
  212. data/app/parsers/georgia/menu_ancestry_parser.rb +41 -0
  213. data/app/policies/georgia/policy.rb +17 -0
  214. data/app/policies/georgia/revision_policy.rb +53 -0
  215. data/app/presenters/georgia/active_facet_presenter.rb +25 -0
  216. data/app/presenters/georgia/facet_presenter.rb +26 -0
  217. data/app/presenters/georgia/link_portlet.rb +101 -0
  218. data/app/presenters/georgia/list_facet_presenter.rb +32 -0
  219. data/app/presenters/georgia/media_library_presenter.rb +44 -0
  220. data/app/presenters/georgia/message_actions_presenter.rb +51 -0
  221. data/app/presenters/georgia/page_actions_presenter.rb +94 -0
  222. data/app/presenters/georgia/pagination_presenter.rb +58 -0
  223. data/app/presenters/georgia/portlet.rb +30 -0
  224. data/app/presenters/georgia/presenter.rb +17 -0
  225. data/app/presenters/georgia/sidebar_link_presenter.rb +55 -0
  226. data/app/presenters/georgia/single_active_facet_presenter.rb +10 -0
  227. data/app/presenters/georgia/slide_portlet.rb +79 -0
  228. data/app/presenters/georgia/subpage_portlet.rb +36 -0
  229. data/app/presenters/georgia/warning_message.rb +55 -0
  230. data/app/presenters/georgia/widget_portlet.rb +75 -0
  231. data/app/sweepers/navigation_sweeper.rb +12 -0
  232. data/app/uploaders/ckeditor_attachment_file_uploader.rb +16 -0
  233. data/app/uploaders/ckeditor_picture_uploader.rb +36 -0
  234. data/app/uploaders/georgia/attachment_uploader.rb +16 -0
  235. data/app/views/georgia/api/media/pictures.html.erb +17 -0
  236. data/app/views/georgia/ckeditor/assets/_asset.html.erb +23 -0
  237. data/app/views/georgia/ckeditor/attachment_files/_attachment_file.html.erb +1 -0
  238. data/app/views/georgia/ckeditor/pictures/_picture.html.erb +26 -0
  239. data/app/views/georgia/dashboard/panels/_messages.html.erb +30 -0
  240. data/app/views/georgia/dashboard/panels/_reviews.html.erb +24 -0
  241. data/app/views/georgia/dashboard/show.html.erb +18 -0
  242. data/app/views/georgia/header/_dashboard.html.erb +1 -0
  243. data/app/views/georgia/header/_media.html.erb +3 -0
  244. data/app/views/georgia/header/_messages.html.erb +3 -0
  245. data/app/views/georgia/header/_navigation.html.erb +3 -0
  246. data/app/views/georgia/header/_pages.html.erb +3 -0
  247. data/app/views/georgia/header/_users.html.erb +3 -0
  248. data/app/views/georgia/header/_widgets.html.erb +3 -0
  249. data/app/views/georgia/links/show.html.erb +1 -0
  250. data/app/views/georgia/media/_header.html.erb +27 -0
  251. data/app/views/georgia/media/create.js.erb +1 -0
  252. data/app/views/georgia/media/edit.html.erb +74 -0
  253. data/app/views/georgia/media/search.html.erb +36 -0
  254. data/app/views/georgia/media/sidebar/_facets.html.erb +12 -0
  255. data/app/views/georgia/menus/_menu.html.erb +7 -0
  256. data/app/views/georgia/menus/create.js.erb +5 -0
  257. data/app/views/georgia/menus/edit.html.erb +37 -0
  258. data/app/views/georgia/menus/index.html.erb +36 -0
  259. data/app/views/georgia/messages/_message.html.erb +26 -0
  260. data/app/views/georgia/messages/destroy.js.erb +3 -0
  261. data/app/views/georgia/messages/search.html.erb +58 -0
  262. data/app/views/georgia/messages/show.html.erb +46 -0
  263. data/app/views/georgia/notifier/notify_admins.html.erb +10 -0
  264. data/app/views/georgia/notifier/notify_editors.html.erb +10 -0
  265. data/app/views/georgia/notifier/notify_support.html.erb +9 -0
  266. data/app/views/georgia/pages/_header.html.erb +22 -0
  267. data/app/views/georgia/pages/_page.html.erb +19 -0
  268. data/app/views/georgia/pages/_subpage.html.erb +1 -0
  269. data/app/views/georgia/pages/create.js.erb +6 -0
  270. data/app/views/georgia/pages/search.html.erb +32 -0
  271. data/app/views/georgia/pages/settings.html.erb +79 -0
  272. data/app/views/georgia/pages/templates/_custom.html.erb +7 -0
  273. data/app/views/georgia/pages/templates/_default.html.erb +7 -0
  274. data/app/views/georgia/pages/templates/_one-column.html.erb +7 -0
  275. data/app/views/georgia/pages/templates/_sidebar-left.html.erb +10 -0
  276. data/app/views/georgia/pages/templates/_sidebar-right.html.erb +10 -0
  277. data/app/views/georgia/revisions/_revision.html.erb +11 -0
  278. data/app/views/georgia/revisions/edit.html.erb +36 -0
  279. data/app/views/georgia/revisions/fields/_content.html.erb +43 -0
  280. data/app/views/georgia/revisions/fields/_slides.html.erb +19 -0
  281. data/app/views/georgia/revisions/fields/_template.html.erb +8 -0
  282. data/app/views/georgia/revisions/fields/_ui_section.html.erb +14 -0
  283. data/app/views/georgia/revisions/fields/_widgets.html.erb +11 -0
  284. data/app/views/georgia/revisions/index.html.erb +25 -0
  285. data/app/views/georgia/shared/_messages.html.erb +11 -0
  286. data/app/views/georgia/shared/modals/_media_library.html.erb +35 -0
  287. data/app/views/georgia/shared/modals/_menu.html.erb +20 -0
  288. data/app/views/georgia/shared/modals/_page.html.erb +20 -0
  289. data/app/views/georgia/shared/modals/_progress.html.erb +15 -0
  290. data/app/views/georgia/shared/modals/_widget.html.erb +24 -0
  291. data/app/views/georgia/shared/search/_messages.html.erb +4 -0
  292. data/app/views/georgia/slides/new.html.erb +1 -0
  293. data/app/views/georgia/ui_associations/new.html.erb +1 -0
  294. data/app/views/georgia/users/_form.html.erb +27 -0
  295. data/app/views/georgia/users/_user.html.erb +9 -0
  296. data/app/views/georgia/users/edit.html.erb +22 -0
  297. data/app/views/georgia/users/index.html.erb +25 -0
  298. data/app/views/georgia/users/new.html.erb +19 -0
  299. data/app/views/georgia/users/registrations/new.html.erb +20 -0
  300. data/app/views/georgia/users/sessions/new.html.erb +17 -0
  301. data/app/views/georgia/widgets/_widget.html.erb +35 -0
  302. data/app/views/georgia/widgets/create.js.erb +5 -0
  303. data/app/views/georgia/widgets/index.html.erb +31 -0
  304. data/app/views/layouts/georgia/_footer.html.erb +7 -0
  305. data/app/views/layouts/georgia/_head.html.erb +15 -0
  306. data/app/views/layouts/georgia/_header.html.erb +40 -0
  307. data/app/views/layouts/georgia/_messages.html.erb +7 -0
  308. data/app/views/layouts/georgia/_sidebar.html.erb +9 -0
  309. data/app/views/layouts/georgia/application.html.erb +16 -0
  310. data/app/views/layouts/georgia/devise.html.erb +11 -0
  311. data/app/views/menus/_dropdown_group.html.erb +10 -0
  312. data/app/views/menus/_dropdown_link.html.erb +3 -0
  313. data/app/views/menus/_dropdown_menu.html.erb +11 -0
  314. data/app/views/menus/_link.html.erb +1 -0
  315. data/app/views/menus/_menu.html.erb +7 -0
  316. data/app/views/messages/create.js.erb +0 -0
  317. data/app/workers/spam_worker.rb +12 -0
  318. data/config/initializers/acts_as_taggable_on.rb +19 -0
  319. data/config/initializers/ckeditor.rb +18 -0
  320. data/config/initializers/devise.rb +254 -0
  321. data/config/initializers/inflections.rb +3 -0
  322. data/config/initializers/revisions.rb +5 -0
  323. data/config/initializers/simple_form.rb +79 -0
  324. data/config/locales/georgia.en.yml +4 -0
  325. data/config/routes.rb +79 -0
  326. data/db/migrate/001_create_ckeditor_assets.rb +25 -0
  327. data/db/migrate/002_create_georgia_contents.rb +18 -0
  328. data/db/migrate/003_create_georgia_links.rb +12 -0
  329. data/db/migrate/004_create_georgia_menus.rb +10 -0
  330. data/db/migrate/005_create_georgia_messages.rb +21 -0
  331. data/db/migrate/006_create_georgia_pages.rb +21 -0
  332. data/db/migrate/007_create_georgia_revisions.rb +12 -0
  333. data/db/migrate/008_create_georgia_roles.rb +10 -0
  334. data/db/migrate/009_create_georgia_slides.rb +11 -0
  335. data/db/migrate/010_create_georgia_ui_associations.rb +13 -0
  336. data/db/migrate/011_create_georgia_ui_sections.rb +9 -0
  337. data/db/migrate/012_create_georgia_users.rb +24 -0
  338. data/db/migrate/013_create_georgia_widgets.rb +9 -0
  339. data/db/migrate/014_create_roles_users.rb +11 -0
  340. data/db/migrate/015_create_tags.rb +20 -0
  341. data/lib/generators/georgia/install/install_generator.rb +60 -0
  342. data/lib/generators/georgia/install/templates/Procfile +1 -0
  343. data/lib/generators/georgia/install/templates/README +14 -0
  344. data/lib/generators/georgia/install/templates/app/controllers/pages_controller.rb +13 -0
  345. data/lib/generators/georgia/install/templates/config/initializers/georgia.rb +15 -0
  346. data/lib/generators/georgia/upgrade/templates/add_anti_spam_to_messages.rb +12 -0
  347. data/lib/generators/georgia/upgrade/templates/add_contents_counter_cache_to_images.rb +15 -0
  348. data/lib/generators/georgia/upgrade/templates/add_public_to_georgia_pages.rb +8 -0
  349. data/lib/generators/georgia/upgrade/templates/add_state_to_georgia_pages.rb +13 -0
  350. data/lib/generators/georgia/upgrade/templates/create_georgia_revisions.rb +12 -0
  351. data/lib/generators/georgia/upgrade/upgrade_generator.rb +34 -0
  352. data/lib/georgia.rb +23 -0
  353. data/lib/georgia/assets.rb +8 -0
  354. data/lib/georgia/assets/cloud_files_connection.rb +22 -0
  355. data/lib/georgia/assets/transferable_picture.rb +51 -0
  356. data/lib/georgia/engine.rb +58 -0
  357. data/lib/georgia/paths.rb +22 -0
  358. data/lib/georgia/version.rb +3 -0
  359. data/lib/tasks/assets.rake +106 -0
  360. data/lib/tasks/georgia.rake +61 -0
  361. data/lib/tasks/install.rake +19 -0
  362. data/lib/tasks/sidekiq.rake +8 -0
  363. data/lib/tasks/solr.rake +30 -0
  364. data/lib/tasks/upgrade.rake +39 -0
  365. data/lib/templates/erb/scaffold/_form.html.erb +13 -0
  366. metadata +857 -0
@@ -0,0 +1,46 @@
1
+ require 'active_support/concern'
2
+
3
+ module Georgia
4
+ module Concerns
5
+ module Slugable
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+
10
+ attr_accessible :slug, :url
11
+
12
+ validates :slug, format: {with: /^[a-zA-Z0-9_-]+$/, message: 'can only consist of letters, numbers, dash (-) and underscore (_)'}#, uniqueness: {scope: [:ancestry, :type], message: 'has already been taken'}
13
+
14
+ before_validation :sanitize_slug
15
+ after_save :update_url
16
+
17
+ # Must stay public for #update_url on descendants
18
+ def set_url
19
+ self.update_column(:url, '/' + self.ancestry_url)
20
+ end
21
+
22
+ protected
23
+
24
+ def sanitize_slug
25
+ self.slug ||= ''
26
+ self.slug.gsub!(/^\/*/, '').gsub!(/\/*$/, '')
27
+ end
28
+
29
+ def update_url
30
+ if slug_changed? or ancestry_changed?
31
+ self.set_url
32
+ self.descendants.each(&:set_url) if !self.new_record? and self.has_children?
33
+ end
34
+ end
35
+
36
+ def ancestry_url
37
+ (ancestors + [self]).map(&:slug).join('/')
38
+ end
39
+
40
+ end
41
+
42
+ module ClassMethods
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,64 @@
1
+ require 'active_support/concern'
2
+
3
+ module Georgia
4
+ module Concerns
5
+ module Statable
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+
10
+ attr_accessible :state
11
+ state_machine :state, initial: :draft do
12
+
13
+ state :published
14
+ state :draft
15
+ state :review
16
+ state :revision
17
+
18
+ # Drafts
19
+ event :review do
20
+ transition all => :review
21
+ end
22
+
23
+ # Reviews
24
+ event :approve do
25
+ transition [:draft, :review] => :published
26
+ end
27
+ event :decline do
28
+ transition :review => :draft
29
+ end
30
+
31
+ # Published
32
+ event :store do
33
+ transition :published => :revision
34
+ end
35
+ event :unpublish do
36
+ transition :published => :draft
37
+ end
38
+
39
+ # Revisions
40
+ event :restore do
41
+ transition :revision => :published
42
+ end
43
+
44
+ before_transition any => :published do |revision, transition|
45
+ revision.revisionable.approve_revision(revision)
46
+ end
47
+
48
+ end
49
+
50
+ scope :published, with_states(:published)
51
+ scope :drafts, with_states(:draft)
52
+ scope :reviews, with_states(:review)
53
+ scope :stored, with_states(:revision)
54
+
55
+ def status_name
56
+ warn "[DEPRECATION] `status_name` is deprecated. Please use `human_state_name` instead."
57
+ human_state_name
58
+ end
59
+
60
+ end
61
+
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,19 @@
1
+ require 'active_support/concern'
2
+
3
+ module Georgia
4
+ module Concerns
5
+ module Taggable
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+
10
+ acts_as_taggable_on :tags
11
+ attr_accessible :tag_list
12
+
13
+ end
14
+
15
+ module ClassMethods
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ require 'active_support/concern'
2
+
3
+ module Georgia
4
+ module Concerns
5
+ module Templatable
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+
10
+ attr_accessible :template
11
+
12
+ validates :template, inclusion: {in: Georgia.templates, message: "%{value} is not a valid template" }
13
+
14
+ end
15
+
16
+ module ClassMethods
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,26 @@
1
+ require 'active_support/concern'
2
+
3
+ module Georgia
4
+ module Concerns
5
+ module Treeable
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+
10
+ has_ancestry orphan_strategy: :rootify
11
+ attr_accessible :parent_id
12
+
13
+ end
14
+
15
+ module ClassMethods
16
+
17
+ def update_tree(tree)
18
+ tree.each do |id, attributes|
19
+ update(id, attributes)
20
+ end
21
+ end
22
+
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,15 @@
1
+ module Georgia
2
+ class Content < ActiveRecord::Base
3
+
4
+ acts_as_taggable_on :keywords
5
+ attr_accessible :keyword_list
6
+
7
+ attr_accessible :title, :text, :excerpt, :keywords, :locale, :image_id
8
+
9
+ validates :title, length: {maximum: 255}
10
+
11
+ belongs_to :contentable, polymorphic: true
12
+ belongs_to :image, class_name: Ckeditor::Picture
13
+
14
+ end
15
+ end
@@ -0,0 +1,27 @@
1
+ module Georgia
2
+ class Link < ActiveRecord::Base
3
+
4
+ include Concerns::Contentable
5
+
6
+ belongs_to :menu, class_name: Georgia::Menu, touch: true
7
+
8
+ acts_as_list scope: :menu
9
+ has_ancestry orphan_strategy: :adopt
10
+ attr_accessible :parent_id, :menu_id
11
+
12
+ scope :ordered, order('position ASC')
13
+
14
+ before_validation :ensure_forward_slash, on: :create
15
+
16
+ def ensure_forward_slash
17
+ self.contents.each do |content|
18
+ content.text.insert(0, '/') unless content.text =~ Regexp.new('(^/)|(^http)')
19
+ end
20
+ end
21
+
22
+ # returns only the last part of the url
23
+ def slug
24
+ @slug ||= text.match(/([\w-]*)$/)[0]
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,13 @@
1
+ module Georgia
2
+ class Menu < ActiveRecord::Base
3
+
4
+ attr_accessible :name
5
+
6
+ validates :name, presence: true
7
+
8
+ has_many :links, dependent: :destroy
9
+ accepts_nested_attributes_for :links, allow_destroy: true
10
+ attr_accessible :links_attributes
11
+
12
+ end
13
+ end
@@ -0,0 +1,47 @@
1
+ module Georgia
2
+ class Message < ActiveRecord::Base
3
+
4
+ attr_accessible :name, :email, :subject, :message, :attachment, :phone
5
+ delegate :url, :current_path, :size, :content_type, :filename, to: :attachment
6
+
7
+ validates :name, presence: true
8
+ validates :email, format: /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
9
+ validates :message, presence: true
10
+
11
+ mount_uploader :attachment, Georgia::AttachmentUploader
12
+
13
+ # Anti Spam: check https://github.com/joshfrench/rakismet for more details
14
+ include Rakismet::Model
15
+ rakismet_attrs author: :name, author_email: :email, content: :message, comment_type: 'message'
16
+ attr_accessible :user_ip, :user_agent, :referrer, :spam, :verified_at
17
+ attr_accessor :permalink, :author_url
18
+
19
+ scope :spam, where(spam: true)
20
+ scope :ham, where(spam: false)
21
+ scope :latest, order("created_at DESC")
22
+
23
+ # Search
24
+ searchable do
25
+ text :name
26
+ text :email
27
+ text :message
28
+ text :subject
29
+ text :phone
30
+ string :spam do
31
+ status
32
+ end
33
+ # For sorting:
34
+ string :name
35
+ string :email
36
+ string :phone
37
+ string :subject
38
+ string :message
39
+ time :created_at
40
+ end
41
+
42
+ def status
43
+ @status ||= spam ? 'spam' : 'clean'
44
+ end
45
+
46
+ end
47
+ end
@@ -0,0 +1,20 @@
1
+ module Georgia
2
+ class Page < ActiveRecord::Base
3
+
4
+ include Georgia::Concerns::Taggable
5
+ include Georgia::Concerns::Orderable
6
+ include Georgia::Concerns::Slugable
7
+ include Georgia::Concerns::Revisionable
8
+ include Georgia::Concerns::Publishable
9
+ include Georgia::Concerns::Indexable
10
+ include Georgia::Concerns::Treeable
11
+ include Georgia::Concerns::Cacheable
12
+
13
+ acts_as_list scope: :parent #override Concerns::Orderable to include scope
14
+
15
+ paginates_per 20
16
+
17
+ scope :not_self, ->(page) {where('georgia_pages.id != ?', page.id)}
18
+
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ module Georgia
2
+ class Revision < ActiveRecord::Base
3
+
4
+ include Georgia::Concerns::Contentable
5
+ include Georgia::Concerns::Templatable
6
+ include Georgia::Concerns::Statable
7
+
8
+ has_one :page, foreign_key: :revision_id
9
+ belongs_to :revisionable, polymorphic: true, touch: true
10
+
11
+ has_many :slides, dependent: :destroy, foreign_key: :page_id
12
+ accepts_nested_attributes_for :slides, allow_destroy: true
13
+ attr_accessible :slides_attributes
14
+
15
+ has_many :ui_associations, dependent: :destroy, foreign_key: :page_id
16
+ accepts_nested_attributes_for :ui_associations, allow_destroy: true
17
+ attr_accessible :ui_associations_attributes
18
+
19
+ has_many :widgets, through: :ui_associations
20
+
21
+ end
22
+ end
@@ -0,0 +1,10 @@
1
+ module Georgia
2
+ class Role < ActiveRecord::Base
3
+
4
+ attr_accessible :name
5
+
6
+ has_and_belongs_to_many :users
7
+
8
+ validates :name, presence: true, uniqueness: true
9
+ end
10
+ end
@@ -0,0 +1,13 @@
1
+ module Georgia
2
+ class Slide < ActiveRecord::Base
3
+
4
+ include Georgia::Concerns::Contentable
5
+ include Georgia::Concerns::Orderable
6
+
7
+ acts_as_list scope: :page
8
+ attr_accessible :page_id
9
+ belongs_to :revision, foreign_key: :page_id
10
+ validates :page_id, presence: true
11
+
12
+ end
13
+ end
@@ -0,0 +1,29 @@
1
+ module Georgia
2
+ class Status < ActiveRecord::Base
3
+
4
+ PUBLISHED = 'Published'
5
+ DRAFT = 'Draft'
6
+ PENDING_REVIEW = 'Pending Review'
7
+
8
+ has_many :pages
9
+
10
+ attr_accessible :name, :label, :icon
11
+
12
+ validates :name, presence: true
13
+
14
+ scope :published, where(name: PUBLISHED)
15
+ scope :draft, where(name: DRAFT)
16
+ scope :pending_review, where(name: PENDING_REVIEW)
17
+
18
+ def published?
19
+ self.name == PUBLISHED
20
+ end
21
+ def draft?
22
+ self.name == DRAFT
23
+ end
24
+ def pending_review?
25
+ self.name == PENDING_REVIEW
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,27 @@
1
+ module Georgia
2
+ class UiAssociation < ActiveRecord::Base
3
+
4
+ include Georgia::Concerns::Orderable
5
+ acts_as_list scope: :page
6
+
7
+ belongs_to :revision, class_name: Georgia::Revision, foreign_key: :page_id
8
+ belongs_to :widget
9
+ belongs_to :ui_section
10
+
11
+ attr_accessible :position, :widget_id, :ui_section_id, :page_id
12
+
13
+ scope :for_revision, lambda {|revision| where(page_id: revision.id)}
14
+
15
+ validate :associations
16
+
17
+ protected
18
+
19
+ # Validations
20
+ def associations
21
+ errors.add(:base, "An association to a page is required.") unless page_id.present?
22
+ errors.add(:base, "An association to a UI Section is required.") unless ui_section_id.present?
23
+ errors.add(:base, "An association to a Widget is required.") unless widget_id.present?
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,12 @@
1
+ module Georgia
2
+ class UiSection < ActiveRecord::Base
3
+ attr_accessible :name
4
+
5
+ has_many :ui_associations, dependent: :destroy
6
+ has_many :widgets, through: :ui_associations
7
+ has_many :revisions, through: :ui_associations
8
+ has_many :pages, through: :revisions
9
+
10
+ validates :name, presence: true, uniqueness: true
11
+ end
12
+ end
@@ -0,0 +1,27 @@
1
+ module Georgia
2
+ class User < ActiveRecord::Base
3
+ devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
4
+
5
+ attr_accessible :first_name, :last_name, :email, :password, :password_confirmation, :remember_me, :role_ids
6
+
7
+ has_and_belongs_to_many :roles, class_name: Georgia::Role
8
+
9
+ def has_role? role
10
+ return false unless role
11
+ @role_names ||= roles.map(&:name)
12
+ @role_names.include? role.to_s.titleize
13
+ end
14
+
15
+ scope :admins, includes(:roles).where(georgia_roles: {name: 'Admin'})
16
+ scope :editors, includes(:roles).where(georgia_roles: {name: 'Editor'})
17
+
18
+ def name
19
+ [first_name, last_name].join(' ')
20
+ end
21
+
22
+ def roles_names
23
+ roles.map(&:name).join(', ')
24
+ end
25
+
26
+ end
27
+ end