virgo 0.1

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 (309) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +37 -0
  4. data/app/assets/javascripts/tinymce/manifest.coffee +1 -0
  5. data/app/assets/javascripts/tinymce/plugins/image_manager/plugin.coffee +234 -0
  6. data/app/assets/javascripts/virgo/admin/page_modules/edit_form.coffee +4 -0
  7. data/app/assets/javascripts/virgo/admin/page_modules/edit_subject_form.coffee +29 -0
  8. data/app/assets/javascripts/virgo/admin/posts/edit_locking.coffee +35 -0
  9. data/app/assets/javascripts/virgo/admin/posts/form.coffee +183 -0
  10. data/app/assets/javascripts/virgo/admin/slides/form.coffee +27 -0
  11. data/app/assets/javascripts/virgo/admin/slideshows/form.coffee +26 -0
  12. data/app/assets/javascripts/virgo/admin_only.coffee +1 -0
  13. data/app/assets/javascripts/virgo/application.coffee +51 -0
  14. data/app/assets/javascripts/virgo/common.coffee +83 -0
  15. data/app/assets/javascripts/virgo/common/character_counter.coffee +27 -0
  16. data/app/assets/javascripts/virgo/components/header.coffee +47 -0
  17. data/app/assets/javascripts/virgo/components/media_modal.coffee +151 -0
  18. data/app/assets/javascripts/virgo/components/share_bar.coffee +53 -0
  19. data/app/assets/javascripts/virgo/components/slideshow.coffee +35 -0
  20. data/app/assets/javascripts/virgo/lib/jquery-ui-multiselect.js +342 -0
  21. data/app/assets/javascripts/virgo/lib/jquery.browser.js +184 -0
  22. data/app/assets/javascripts/virgo/lib/jquery.cookie.js +114 -0
  23. data/app/assets/javascripts/virgo/lib/jquery.pjax.js +932 -0
  24. data/app/assets/javascripts/virgo/lib/jquery_ext.coffee +0 -0
  25. data/app/assets/javascripts/virgo/lib/manifest.coffee +5 -0
  26. data/app/assets/javascripts/virgo/lib/ouibounce.js +194 -0
  27. data/app/assets/javascripts/virgo/page_modules.coffee +175 -0
  28. data/app/assets/javascripts/virgo/posts/show.coffee +32 -0
  29. data/app/assets/stylesheets/tinymce/skin.sass +2 -0
  30. data/app/assets/stylesheets/tinymce/skins/railspress/content.min.sass +82 -0
  31. data/app/assets/stylesheets/tinymce/skins/railspress/fonts/tinymce-small.eot +0 -0
  32. data/app/assets/stylesheets/tinymce/skins/railspress/fonts/tinymce-small.svg +62 -0
  33. data/app/assets/stylesheets/tinymce/skins/railspress/fonts/tinymce-small.ttf +0 -0
  34. data/app/assets/stylesheets/tinymce/skins/railspress/fonts/tinymce-small.woff +0 -0
  35. data/app/assets/stylesheets/tinymce/skins/railspress/fonts/tinymce.eot +0 -0
  36. data/app/assets/stylesheets/tinymce/skins/railspress/fonts/tinymce.svg +63 -0
  37. data/app/assets/stylesheets/tinymce/skins/railspress/fonts/tinymce.ttf +0 -0
  38. data/app/assets/stylesheets/tinymce/skins/railspress/fonts/tinymce.woff +0 -0
  39. data/app/assets/stylesheets/tinymce/skins/railspress/img/anchor.gif +0 -0
  40. data/app/assets/stylesheets/tinymce/skins/railspress/img/loader.gif +0 -0
  41. data/app/assets/stylesheets/tinymce/skins/railspress/img/object.gif +0 -0
  42. data/app/assets/stylesheets/tinymce/skins/railspress/img/trans.gif +0 -0
  43. data/app/assets/stylesheets/tinymce/skins/railspress/skin.min.sass +1703 -0
  44. data/app/assets/stylesheets/virgo/_common.sass +65 -0
  45. data/app/assets/stylesheets/virgo/admin.sass +301 -0
  46. data/app/assets/stylesheets/virgo/admin/columns.sass +3 -0
  47. data/app/assets/stylesheets/virgo/admin/images.sass +14 -0
  48. data/app/assets/stylesheets/virgo/admin/media_modal.sass +72 -0
  49. data/app/assets/stylesheets/virgo/admin/post.sass +102 -0
  50. data/app/assets/stylesheets/virgo/admin/slideshow.sass +35 -0
  51. data/app/assets/stylesheets/virgo/admin/users.sass +2 -0
  52. data/app/assets/stylesheets/virgo/admin_only.sass +1 -0
  53. data/app/assets/stylesheets/virgo/application.sass +605 -0
  54. data/app/assets/stylesheets/virgo/columns.sass +51 -0
  55. data/app/assets/stylesheets/virgo/install.sass +15 -0
  56. data/app/assets/stylesheets/virgo/lib/bootstrap/bootstrap-imports.sass +9 -0
  57. data/app/assets/stylesheets/virgo/lib/bootstrap/bootstrap-overrides.sass +51 -0
  58. data/app/assets/stylesheets/virgo/lib/bootstrap/bootstrap-variables.sass +27 -0
  59. data/app/assets/stylesheets/virgo/lib/jquery-ui-multiselect.css +30 -0
  60. data/app/assets/stylesheets/virgo/lib/manifest.sass +3 -0
  61. data/app/assets/stylesheets/virgo/lib/ouibounce.css +222 -0
  62. data/app/assets/stylesheets/virgo/lib/select2-imports.sass +8 -0
  63. data/app/assets/stylesheets/virgo/page_modules.sass +54 -0
  64. data/app/assets/stylesheets/virgo/pages/authors.sass +30 -0
  65. data/app/assets/stylesheets/virgo/posts.sass +782 -0
  66. data/app/assets/stylesheets/virgo/search.sass +36 -0
  67. data/app/assets/stylesheets/virgo/ui.sass +434 -0
  68. data/app/assets/stylesheets/virgo/users.sass +9 -0
  69. data/app/controllers/virgo/admin/base_controller.rb +22 -0
  70. data/app/controllers/virgo/admin/categories_controller.rb +90 -0
  71. data/app/controllers/virgo/admin/columns_controller.rb +65 -0
  72. data/app/controllers/virgo/admin/images_controller.rb +89 -0
  73. data/app/controllers/virgo/admin/media_modal_controller.rb +101 -0
  74. data/app/controllers/virgo/admin/newsletters_controller.rb +37 -0
  75. data/app/controllers/virgo/admin/page_modules_controller.rb +62 -0
  76. data/app/controllers/virgo/admin/pages_controller.rb +6 -0
  77. data/app/controllers/virgo/admin/posts_controller.rb +173 -0
  78. data/app/controllers/virgo/admin/sites_controller.rb +31 -0
  79. data/app/controllers/virgo/admin/slides_controller.rb +71 -0
  80. data/app/controllers/virgo/admin/slideshows_controller.rb +66 -0
  81. data/app/controllers/virgo/admin/tags_controller.rb +98 -0
  82. data/app/controllers/virgo/admin/users/sessions_controller.rb +21 -0
  83. data/app/controllers/virgo/admin/users_controller.rb +84 -0
  84. data/app/controllers/virgo/application_controller.rb +151 -0
  85. data/app/controllers/virgo/categories_controller.rb +20 -0
  86. data/app/controllers/virgo/columns_controller.rb +24 -0
  87. data/app/controllers/virgo/images_controller.rb +9 -0
  88. data/app/controllers/virgo/install_controller.rb +46 -0
  89. data/app/controllers/virgo/page_modules_controller.rb +23 -0
  90. data/app/controllers/virgo/pages_controller.rb +29 -0
  91. data/app/controllers/virgo/posts_controller.rb +101 -0
  92. data/app/controllers/virgo/search_controller.rb +35 -0
  93. data/app/controllers/virgo/subscribers_controller.rb +54 -0
  94. data/app/controllers/virgo/tags_controller.rb +15 -0
  95. data/app/controllers/virgo/users/confirmations_controller.rb +18 -0
  96. data/app/controllers/virgo/users/passwords_controller.rb +31 -0
  97. data/app/controllers/virgo/users/registrations_controller.rb +41 -0
  98. data/app/controllers/virgo/users/sessions_controller.rb +32 -0
  99. data/app/controllers/virgo/users_controller.rb +15 -0
  100. data/app/helpers/virgo/admin/post_helper.rb +54 -0
  101. data/app/helpers/virgo/admin_helper.rb +15 -0
  102. data/app/helpers/virgo/application_helper.rb +124 -0
  103. data/app/helpers/virgo/hooks_helper.rb +30 -0
  104. data/app/helpers/virgo/page_modules_helper.rb +4 -0
  105. data/app/helpers/virgo/post_helper.rb +159 -0
  106. data/app/helpers/virgo/render_helper.rb +33 -0
  107. data/app/helpers/virgo/search_helper.rb +49 -0
  108. data/app/helpers/virgo/shortcode_helper.rb +7 -0
  109. data/app/helpers/virgo/text_helper.rb +12 -0
  110. data/app/helpers/virgo/video_helper.rb +34 -0
  111. data/app/models/concerns/virgo/common/slug_history.rb +36 -0
  112. data/app/models/concerns/virgo/common/uuid.rb +22 -0
  113. data/app/models/concerns/virgo/post/recommendations.rb +15 -0
  114. data/app/models/concerns/virgo/post/search.rb +100 -0
  115. data/app/models/concerns/virgo/user/search.rb +39 -0
  116. data/app/models/virgo/ability.rb +59 -0
  117. data/app/models/virgo/category.rb +44 -0
  118. data/app/models/virgo/column.rb +25 -0
  119. data/app/models/virgo/form_model.rb +19 -0
  120. data/app/models/virgo/image.rb +63 -0
  121. data/app/models/virgo/page_module.rb +42 -0
  122. data/app/models/virgo/page_module_post.rb +8 -0
  123. data/app/models/virgo/post.rb +391 -0
  124. data/app/models/virgo/post_category.rb +8 -0
  125. data/app/models/virgo/post_search.rb +7 -0
  126. data/app/models/virgo/post_tag.rb +10 -0
  127. data/app/models/virgo/site.rb +36 -0
  128. data/app/models/virgo/slide.rb +23 -0
  129. data/app/models/virgo/slideshow.rb +37 -0
  130. data/app/models/virgo/slug_history.rb +5 -0
  131. data/app/models/virgo/subscriber.rb +5 -0
  132. data/app/models/virgo/tag.rb +34 -0
  133. data/app/models/virgo/user.rb +145 -0
  134. data/app/uploaders/virgo/application_uploader.rb +11 -0
  135. data/app/uploaders/virgo/avatar_uploader.rb +21 -0
  136. data/app/uploaders/virgo/featured_image_uploader.rb +28 -0
  137. data/app/uploaders/virgo/image_uploader.rb +40 -0
  138. data/app/uploaders/virgo/slide_uploader.rb +19 -0
  139. data/app/views/layouts/virgo/admin.haml +16 -0
  140. data/app/views/layouts/virgo/admin/site_settings.haml +14 -0
  141. data/app/views/layouts/virgo/application.haml +63 -0
  142. data/app/views/layouts/virgo/errors.haml +42 -0
  143. data/app/views/layouts/virgo/main.haml +5 -0
  144. data/app/views/layouts/virgo/posts.haml +10 -0
  145. data/app/views/virgo/admin/categories/_form.haml +19 -0
  146. data/app/views/virgo/admin/categories/edit.haml +7 -0
  147. data/app/views/virgo/admin/categories/index.haml +38 -0
  148. data/app/views/virgo/admin/categories/modal_form.haml +11 -0
  149. data/app/views/virgo/admin/categories/new.haml +7 -0
  150. data/app/views/virgo/admin/categories/success_modal.haml +14 -0
  151. data/app/views/virgo/admin/columns/_form.haml +30 -0
  152. data/app/views/virgo/admin/columns/edit.haml +1 -0
  153. data/app/views/virgo/admin/columns/index.haml +30 -0
  154. data/app/views/virgo/admin/columns/new.haml +1 -0
  155. data/app/views/virgo/admin/images/_form.haml +46 -0
  156. data/app/views/virgo/admin/images/edit.haml +1 -0
  157. data/app/views/virgo/admin/images/index.haml +32 -0
  158. data/app/views/virgo/admin/images/new.haml +1 -0
  159. data/app/views/virgo/admin/media_modal/_image_settings.haml +17 -0
  160. data/app/views/virgo/admin/media_modal/_library_panel.haml +26 -0
  161. data/app/views/virgo/admin/media_modal/_upload_panel.haml +21 -0
  162. data/app/views/virgo/admin/media_modal/_upload_success.haml +7 -0
  163. data/app/views/virgo/admin/media_modal/index.haml +19 -0
  164. data/app/views/virgo/admin/newsletters/changelog.haml +25 -0
  165. data/app/views/virgo/admin/newsletters/edit.haml +6 -0
  166. data/app/views/virgo/admin/page_modules/edit.haml +33 -0
  167. data/app/views/virgo/admin/page_modules/edit_subject.haml +43 -0
  168. data/app/views/virgo/admin/pages/help.haml +114 -0
  169. data/app/views/virgo/admin/posts/_author_dropdown.haml +1 -0
  170. data/app/views/virgo/admin/posts/_categories_form.haml +7 -0
  171. data/app/views/virgo/admin/posts/_category.haml +22 -0
  172. data/app/views/virgo/admin/posts/_form.haml +201 -0
  173. data/app/views/virgo/admin/posts/_revisions.haml +40 -0
  174. data/app/views/virgo/admin/posts/edit.haml +9 -0
  175. data/app/views/virgo/admin/posts/index.haml +59 -0
  176. data/app/views/virgo/admin/posts/new.haml +1 -0
  177. data/app/views/virgo/admin/posts/revision_detail.haml +28 -0
  178. data/app/views/virgo/admin/posts/revisions.haml +3 -0
  179. data/app/views/virgo/admin/sites/edit.haml +12 -0
  180. data/app/views/virgo/admin/slides/_form.haml +41 -0
  181. data/app/views/virgo/admin/slides/edit.haml +1 -0
  182. data/app/views/virgo/admin/slides/new.haml +1 -0
  183. data/app/views/virgo/admin/slideshows/_form.haml +49 -0
  184. data/app/views/virgo/admin/slideshows/edit.haml +1 -0
  185. data/app/views/virgo/admin/slideshows/index.haml +43 -0
  186. data/app/views/virgo/admin/slideshows/new.haml +1 -0
  187. data/app/views/virgo/admin/tags/_form.haml +16 -0
  188. data/app/views/virgo/admin/tags/edit.haml +7 -0
  189. data/app/views/virgo/admin/tags/index.haml +33 -0
  190. data/app/views/virgo/admin/tags/modal_form.haml +12 -0
  191. data/app/views/virgo/admin/tags/new.haml +7 -0
  192. data/app/views/virgo/admin/tags/success_modal.haml +14 -0
  193. data/app/views/virgo/admin/users/_form.haml +62 -0
  194. data/app/views/virgo/admin/users/edit.haml +1 -0
  195. data/app/views/virgo/admin/users/index.haml +34 -0
  196. data/app/views/virgo/admin/users/new.haml +1 -0
  197. data/app/views/virgo/application/sitemap.xml.builder +0 -0
  198. data/app/views/virgo/authors/_profile_long.haml +13 -0
  199. data/app/views/virgo/authors/_profile_short.haml +10 -0
  200. data/app/views/virgo/categories/show.haml +24 -0
  201. data/app/views/virgo/columns/index.haml +19 -0
  202. data/app/views/virgo/columns/show.haml +18 -0
  203. data/app/views/virgo/common/_admin_navbar.haml +100 -0
  204. data/app/views/virgo/common/_alerts.haml +40 -0
  205. data/app/views/virgo/common/_analytics.html.erb +1 -0
  206. data/app/views/virgo/common/_base_errors.haml +8 -0
  207. data/app/views/virgo/common/_category_heading.haml +26 -0
  208. data/app/views/virgo/common/_disqus.html.erb +24 -0
  209. data/app/views/virgo/common/_disqus_comment_count.html.erb +12 -0
  210. data/app/views/virgo/common/_fb_api.html.erb +30 -0
  211. data/app/views/virgo/common/_fonts.html.erb +1 -0
  212. data/app/views/virgo/common/_footer.haml +13 -0
  213. data/app/views/virgo/common/_footer_javascript.html.erb +0 -0
  214. data/app/views/virgo/common/_header_analytics.html.erb +9 -0
  215. data/app/views/virgo/common/_list_signup.haml +20 -0
  216. data/app/views/virgo/common/_ouibounce_modal.haml +26 -0
  217. data/app/views/virgo/common/_public_nav.haml +58 -0
  218. data/app/views/virgo/common/_search_form.haml +8 -0
  219. data/app/views/virgo/common/_share_bar.haml +45 -0
  220. data/app/views/virgo/common/_user_vars.haml +2 -0
  221. data/app/views/virgo/errors/404.haml +10 -0
  222. data/app/views/virgo/errors/500.haml +10 -0
  223. data/app/views/virgo/images/_shortcode.haml +4 -0
  224. data/app/views/virgo/install/index.haml +58 -0
  225. data/app/views/virgo/install/success.haml +12 -0
  226. data/app/views/virgo/page_modules/_latest_posts.haml +29 -0
  227. data/app/views/virgo/page_modules/_popular_posts.haml +51 -0
  228. data/app/views/virgo/pages/authors.haml +8 -0
  229. data/app/views/virgo/pages/home.haml +0 -0
  230. data/app/views/virgo/pages/show.haml +6 -0
  231. data/app/views/virgo/posts/_author_info.haml +16 -0
  232. data/app/views/virgo/posts/_post_full.haml +63 -0
  233. data/app/views/virgo/posts/_post_short.haml +30 -0
  234. data/app/views/virgo/posts/_post_thumb_box.haml +13 -0
  235. data/app/views/virgo/posts/_recommendations.haml +12 -0
  236. data/app/views/virgo/posts/_sidebar_thumb.haml +4 -0
  237. data/app/views/virgo/posts/index.haml +22 -0
  238. data/app/views/virgo/posts/latest.haml +16 -0
  239. data/app/views/virgo/posts/more.haml +10 -0
  240. data/app/views/virgo/posts/rss.xml.builder +17 -0
  241. data/app/views/virgo/posts/show.haml +17 -0
  242. data/app/views/virgo/search/_form.haml +5 -0
  243. data/app/views/virgo/search/_item.haml +22 -0
  244. data/app/views/virgo/search/index.haml +11 -0
  245. data/app/views/virgo/search/new.haml +4 -0
  246. data/app/views/virgo/shortcode_templates/blockquote.haml +9 -0
  247. data/app/views/virgo/shortcode_templates/h1.haml +1 -0
  248. data/app/views/virgo/shortcode_templates/h2.haml +1 -0
  249. data/app/views/virgo/shortcode_templates/h3.haml +1 -0
  250. data/app/views/virgo/shortcode_templates/h4.haml +1 -0
  251. data/app/views/virgo/shortcode_templates/image.haml +17 -0
  252. data/app/views/virgo/shortcode_templates/pullquote.haml +3 -0
  253. data/app/views/virgo/shortcode_templates/slideshow.haml +35 -0
  254. data/app/views/virgo/shortcode_templates/tweet.haml +3 -0
  255. data/app/views/virgo/shortcode_templates/video.haml +8 -0
  256. data/app/views/virgo/subscribers/_success_modal.haml +13 -0
  257. data/app/views/virgo/subscribers/modal.haml +15 -0
  258. data/app/views/virgo/tags/show.haml +16 -0
  259. data/app/views/virgo/users/confirmations/new.html.haml +10 -0
  260. data/app/views/virgo/users/devise_mailer/confirmation_instructions.html.erb +7 -0
  261. data/app/views/virgo/users/devise_mailer/reset_password_instructions.html.haml +6 -0
  262. data/app/views/virgo/users/devise_mailer/unlock_instructions.html.haml +5 -0
  263. data/app/views/virgo/users/passwords/edit.html.haml +14 -0
  264. data/app/views/virgo/users/passwords/new.html.haml +14 -0
  265. data/app/views/virgo/users/registrations/edit.html.haml +30 -0
  266. data/app/views/virgo/users/registrations/new.html.haml +13 -0
  267. data/app/views/virgo/users/sessions/new.html.haml +12 -0
  268. data/app/views/virgo/users/shared/_links.haml +26 -0
  269. data/app/views/virgo/users/show.haml +11 -0
  270. data/app/views/virgo/users/unlocks/new.html.haml +9 -0
  271. data/config/initializers/action_mailer.rb +7 -0
  272. data/config/initializers/active_record.rb +72 -0
  273. data/config/initializers/active_record_symbolize.rb +18 -0
  274. data/config/initializers/assets.rb +17 -0
  275. data/config/initializers/backtrace_silencers.rb +7 -0
  276. data/config/initializers/carrierwave.rb +36 -0
  277. data/config/initializers/cookies_serializer.rb +3 -0
  278. data/config/initializers/devise.rb +257 -0
  279. data/config/initializers/filter_parameter_logging.rb +4 -0
  280. data/config/initializers/hash.rb +5 -0
  281. data/config/initializers/inflections.rb +16 -0
  282. data/config/initializers/mime_types.rb +4 -0
  283. data/config/initializers/nil_class.rb +13 -0
  284. data/config/initializers/non_digest_assets.rb +3 -0
  285. data/config/initializers/paper_trail.rb +30 -0
  286. data/config/initializers/schema_plus.rb +5 -0
  287. data/config/initializers/session_store.rb +3 -0
  288. data/config/initializers/shortcode.rb +12 -0
  289. data/config/initializers/simple_form.rb +170 -0
  290. data/config/initializers/simple_form_bootstrap.rb +136 -0
  291. data/config/initializers/string.rb +5 -0
  292. data/config/initializers/time_formatting.rb +23 -0
  293. data/config/initializers/wrap_parameters.rb +14 -0
  294. data/config/locales/devise.en.yml +60 -0
  295. data/config/routes.rb +96 -0
  296. data/config/schedule.rb +3 -0
  297. data/db/migrate/20150729174510_create_virgo_schema.rb +225 -0
  298. data/lib/generators/virgo/install/install_generator.rb +16 -0
  299. data/lib/generators/virgo/views/views_generator.rb +22 -0
  300. data/lib/tasks/virgo_tasks.rake +7 -0
  301. data/lib/virgo.rb +4 -0
  302. data/lib/virgo/development_mail_interceptor.rb +6 -0
  303. data/lib/virgo/email_validator.rb +6 -0
  304. data/lib/virgo/engine.rb +73 -0
  305. data/lib/virgo/reduce_validator.rb +6 -0
  306. data/lib/virgo/upload_helpers.rb +89 -0
  307. data/lib/virgo/version.rb +3 -0
  308. data/lib/virgo/view_help.rb +3 -0
  309. metadata +1051 -0
@@ -0,0 +1,35 @@
1
+ module Virgo
2
+ class SearchController < ApplicationController
3
+ skip_before_action :verify_authenticity_token
4
+
5
+ def new
6
+ @search = PostSearch.new
7
+ end
8
+
9
+ def create
10
+ @search = PostSearch.new(post_search_params)
11
+
12
+ if @search.valid?
13
+ redirect_to search_index_path(post_search: post_search_params)
14
+ else
15
+ render :new
16
+ end
17
+ end
18
+
19
+ def index
20
+ if post_search_params.nil?
21
+ redirect_to new_search_path and return
22
+ end
23
+
24
+ @search = PostSearch.new(post_search_params)
25
+
26
+ @posts = Post.search_by_similarity(@search.term).page(page_param)
27
+ end
28
+
29
+ private
30
+
31
+ def post_search_params
32
+ params.permit(post_search: [:term])[:post_search]
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,54 @@
1
+ module Virgo
2
+ class SubscribersController < ApplicationController
3
+ skip_before_action :verify_authenticity_token
4
+
5
+ def create
6
+ @subscriber = Subscriber.new(subscriber_params)
7
+
8
+ if @subscriber.save
9
+ render json: {
10
+ status: :success,
11
+ subscriber: @subscriber,
12
+ html: render_content(partial: '/virgo/subscribers/success_modal')
13
+ }
14
+ else
15
+ render json: {
16
+ status: :err,
17
+ subscriber: @subscriber,
18
+ message: @subscriber.errors.full_messages,
19
+ html: render_content(partial: '/virgo/common/list_signup')
20
+ }
21
+ end
22
+ end
23
+
24
+ def modal
25
+ if request.post?
26
+ @subscriber = Subscriber.new(subscriber_params)
27
+
28
+ if @subscriber.save
29
+ render json: {
30
+ status: :success,
31
+ html: render_content(partial: '/virgo/subscribers/success_modal')
32
+ }
33
+ else
34
+ render json: {
35
+ status: :err,
36
+ html: render_content('/virgo/subscribers/modal', layout: false)
37
+ }
38
+ end
39
+ else
40
+ @subscriber = Subscriber.new
41
+
42
+ render json: {
43
+ html: render_content('/virgo/subscribers/modal', layout: false)
44
+ }
45
+ end
46
+ end
47
+
48
+ private
49
+
50
+ def subscriber_params
51
+ params.permit(subscriber: [:email])[:subscriber]
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,15 @@
1
+ module Virgo
2
+ class TagsController < ApplicationController
3
+ before_action :set_tag
4
+
5
+ def show
6
+ @posts = @tag.posts.publicly_viewable.order(publish_at: :desc).page(page_param)
7
+ end
8
+
9
+ private
10
+
11
+ def set_tag
12
+ @tag = Tag.friendly.find(id_param)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+ module Virgo
2
+ class Users::ConfirmationsController < Devise::ConfirmationsController
3
+ def create
4
+ self.resource = resource_class.send_confirmation_instructions(resource_params)
5
+
6
+ if successfully_sent?(resource)
7
+ respond_with({}, :location => virgo.after_resending_confirmation_instructions_path_for(resource_name))
8
+ else
9
+ respond_with(resource)
10
+ end
11
+ end
12
+
13
+ def resource_params
14
+ params[:user].present? ? params.require(:user).permit(:email, :login, :password,
15
+ :password_confirmation, :reset_password_token) : {}
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,31 @@
1
+ module Virgo
2
+ class Users::PasswordsController < ::Devise::PasswordsController
3
+ skip_before_filter :require_no_authentication
4
+
5
+
6
+ def create
7
+ self.resource = resource_class.find_by_email(params[:user][:email])
8
+
9
+ if resource.nil?
10
+ self.resource = resource_class.new
11
+
12
+ flash.now[:warning] = "No account found matching that email"
13
+
14
+ render "new" and return
15
+ end
16
+
17
+ resource.send_reset_password_instructions
18
+
19
+ if successfully_sent?(resource)
20
+ respond_with({}, :location => virgo.after_sending_reset_password_instructions_path_for(resource_name))
21
+ else
22
+ respond_with(resource)
23
+ end
24
+ end
25
+
26
+ def resource_params
27
+ params[:user].present? ? params.require(:user).permit(:email, :login, :password,
28
+ :password_confirmation, :reset_password_token) : {}
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,41 @@
1
+ module Virgo
2
+ class Users::RegistrationsController < ::Devise::RegistrationsController
3
+ skip_before_filter :require_no_authentication
4
+
5
+ def new
6
+ build_resource({})
7
+ respond_with self.resource
8
+ end
9
+
10
+ # POST /resource
11
+ def create
12
+ self.resource = build_resource(sign_up_params)
13
+
14
+ if resource.save
15
+
16
+ if resource.active_for_authentication?
17
+ set_flash_message :notice, :signed_up if is_navigational_format?
18
+ sign_up(resource_name, resource)
19
+
20
+ if params[:next].present?
21
+ redirect_to(params[:next]) and return
22
+ else
23
+ redirect_to(virgo.root_path) and return
24
+ end
25
+ else
26
+ set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_navigational_format?
27
+ expire_session_data_after_sign_in!
28
+ respond_with resource, :location => virgo.after_inactive_sign_up_path_for(resource)
29
+ end
30
+ else
31
+ clean_up_passwords resource
32
+ respond_with resource
33
+ end
34
+ end
35
+
36
+ def sign_up_params
37
+ params.require(:user).permit(:username, :nickname, :email, :first_name, :last_name, :password,
38
+ :password_confirmation)
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,32 @@
1
+ module Virgo
2
+ class Users::SessionsController < ::Devise::SessionsController
3
+ skip_before_filter :require_no_authentication
4
+
5
+ # GET /resource/sign_in
6
+ def new
7
+ self.resource = resource_class.new(sign_in_params)
8
+ clean_up_passwords(resource)
9
+ respond_with(resource, serialize_options(resource))
10
+ end
11
+
12
+ def create
13
+ self.resource = warden.authenticate!(auth_options)
14
+ sign_in(resource_name, resource)
15
+ flash[:notice] = "You have signed in successfully"
16
+
17
+ if params[:next].present?
18
+ redirect_to params[:next]
19
+ else
20
+ if resource.admin?
21
+ redirect_to virgo.admin_posts_path
22
+ else
23
+ redirect_to virgo.root_path
24
+ end
25
+ end
26
+ end
27
+
28
+ def sign_in_params
29
+ params[:user].present? ? params.require(:user).permit(:username, :email, :first_name, :last_name, :password) : {}
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,15 @@
1
+ module Virgo
2
+ class UsersController < ApplicationController
3
+ before_filter :set_user, only: member_actions
4
+
5
+ def show
6
+ @posts = @user.posts.latest.page(page_param)
7
+ end
8
+
9
+ private
10
+
11
+ def set_user
12
+ @user = User.friendly.find(id_param)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,54 @@
1
+ module Virgo
2
+ module Admin
3
+ module PostHelper
4
+ def admin_post_month_options
5
+ return [] if Post.where.not(publish_at: nil).empty?
6
+
7
+ min_date = Post.minimum(:publish_at).try(:to_date)
8
+ max_date = Time.now.to_date
9
+
10
+ date_range = min_date..max_date
11
+
12
+ month_names = []
13
+ added = {}
14
+
15
+ date_range.map {|d|
16
+ date = Date.new(d.year, d.month, 1)
17
+ if added[date].nil?
18
+ month_names << [date.to_s(:month_and_year), date.to_s(:db)]
19
+ added[date] = true
20
+ end
21
+ }.uniq
22
+
23
+ month_names.reverse
24
+ end
25
+
26
+ def admin_post_category_options(category=nil, depth=0)
27
+ select_options = []
28
+
29
+ if category.nil?
30
+ categories = Category.top_level
31
+ else
32
+ categories = [category]
33
+ end
34
+
35
+ categories.each do |cat|
36
+ # base case
37
+ spaces = (0..depth-1).map{|i| "&nbsp;&nbsp;&nbsp;" }.join("")
38
+ select_option = ["#{spaces}#{cat.name}".html_safe, cat.id]
39
+ select_options << select_option
40
+
41
+ cat.children.each do |child|
42
+ select_options += admin_post_category_options(child, depth + 1)
43
+ end
44
+ end
45
+
46
+ select_options
47
+ end
48
+
49
+ def admin_post_status_options
50
+ Post.status_names
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,15 @@
1
+ module Virgo
2
+ module AdminHelper
3
+ # because pages and posts are actually both "Post" records, we need
4
+ # to use a couple hints to establish whether we're on
5
+ # a posts page or a pages page
6
+ def pages_action?
7
+ params[:filters][:post_type] == 'page' ||
8
+ @post && @post.page?
9
+ end
10
+
11
+ def posts_action?
12
+ (params[:filters][:post_type].blank? || params[:filters][:post_type] == 'post') && (@post.nil? || @post.post?)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,124 @@
1
+ module Virgo
2
+ module ApplicationHelper
3
+ def controller?(*controller)
4
+ controller.include?(params[:controller])
5
+ end
6
+
7
+ def action?(*action)
8
+ action.include?(params[:action])
9
+ end
10
+
11
+ def alerts(options={})
12
+ render_to_string(:partial => "/virgo/common/alerts", locals: options).html_safe
13
+ end
14
+
15
+ def superuser?
16
+ current_user && current_user.superuser?
17
+ end
18
+
19
+ def admin?
20
+ current_user && current_user.admin?
21
+ end
22
+
23
+ def admin_access?
24
+ current_user && current_user.admin_access?
25
+ end
26
+
27
+ def admin_view?
28
+ params[:controller].starts_with?('virgo/admin')
29
+ end
30
+
31
+ def admin_access?
32
+ current_user && current_user.admin_access?
33
+ end
34
+
35
+ def production?
36
+ Rails.env.production?
37
+ end
38
+
39
+ def word_count(text)
40
+ text ||= ""
41
+ text.scan(/\w+/).length
42
+ end
43
+
44
+ def base_errors(record)
45
+ render_to_string(:partial => "/virgo/common/base_errors", locals: {record: record}).html_safe
46
+ end
47
+
48
+ def post_time_format
49
+ "%B %e, %Y at %l:%M%P"
50
+ end
51
+
52
+ # replaces spaces between tags plus newline characters in an html string
53
+ def compact_html(text)
54
+ _text = text.gsub(/\>(?<spaces>\s+)[\n|\<]/) { |m|
55
+ m.gsub($1, "")
56
+ }
57
+ _text.gsub("\n", "").html_safe
58
+ end
59
+
60
+ def expanded_post_url(post, extra_opts={})
61
+ post_detail_url(post)
62
+ end
63
+
64
+ def site_key
65
+ "#{Time.now.beginning_of_day.to_i}-#{Rails.cache.read('site_key')}"
66
+ end
67
+
68
+ def redis_timestamp_key_for(klass, record_id)
69
+ ActiveRecord::Base.redis_timestamp_key_for(klass, record_id)
70
+ end
71
+
72
+ def post_timestamp(post_id)
73
+ Rails.cache.fetch(redis_timestamp_key_for(Virgo::Post, post_id)) do
74
+ "#{redis_timestamp_key_for(Post, post_id)}-#{Time.now.to_i}"
75
+ end
76
+ end
77
+
78
+ def category_timestamp(category_id)
79
+ Rails.cache.fetch(redis_timestamp_key_for(Virgo::Category, category_id)) do
80
+ "#{redis_timestamp_key_for(Category, category_id)}-#{Time.now.to_i}"
81
+ end
82
+ end
83
+
84
+ def column_timestamp(column_id)
85
+ Rails.cache.fetch(redis_timestamp_key_for(Virgo::Column, column_id)) do
86
+ "#{redis_timestamp_key_for(Column, column_id)}-#{Time.now.to_i}"
87
+ end
88
+ end
89
+
90
+ def category_id_param
91
+ params.permit(:category_id)[:category_id]
92
+ end
93
+
94
+ def tabbed_param
95
+ params.permit(:tabbed)[:tabbed].try(:to_bool)
96
+ end
97
+
98
+ def tab_param
99
+ params.permit(:tab)[:tab]
100
+ end
101
+
102
+ def site
103
+ @site ||= Site.instance
104
+ end
105
+
106
+ def decode_html_entities(text)
107
+ @html_entities ||= HTMLEntities.new
108
+ text = text.html_safe.gsub("'", "'") if text.present?
109
+ @html_entities.decode(text)
110
+ end
111
+
112
+ def is_admin_view?
113
+ @_is_admin_view || false
114
+ end
115
+
116
+ def page_url
117
+ _url = "#{request.protocol}#{Rails.application.config.domain}"
118
+
119
+ _url += ":#{request.port}" if request.port.present? && request.port != 80 && request.port != 443
120
+
121
+ _url += request.original_fullpath
122
+ end
123
+ end
124
+ end