atreides 2.0.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 (309) hide show
  1. data/LICENSE +7 -0
  2. data/README.rdoc +1 -0
  3. data/app/assets/javascripts/atreides/admin.js +22 -0
  4. data/app/assets/javascripts/atreides/admin_base.js.erb +247 -0
  5. data/app/assets/javascripts/atreides/admin_edit.js +9 -0
  6. data/app/assets/javascripts/atreides/application.js +15 -0
  7. data/app/assets/javascripts/atreides/comments.coffee +50 -0
  8. data/app/assets/javascripts/atreides/public.js +24 -0
  9. data/app/assets/javascripts/atreides/public_base.js.erb +119 -0
  10. data/app/assets/javascripts/atreides/terryblr.js +57 -0
  11. data/app/assets/stylesheets/atreides/admin.css +21 -0
  12. data/app/assets/stylesheets/atreides/admin_base.css.erb +1762 -0
  13. data/app/assets/stylesheets/atreides/application.css +13 -0
  14. data/app/assets/stylesheets/atreides/formtastic_changes.css +10 -0
  15. data/app/assets/stylesheets/atreides/iphone-checkboxes.css.erb +97 -0
  16. data/app/assets/stylesheets/atreides/jBreadCrumb.css +109 -0
  17. data/app/assets/stylesheets/atreides/public.css +15 -0
  18. data/app/assets/stylesheets/atreides/public_base.css +101 -0
  19. data/app/assets/stylesheets/atreides/swfupload.css.erb +63 -0
  20. data/app/controllers/admin/atreides/comments_controller.rb +47 -0
  21. data/app/controllers/admin/atreides/content_parts_controller.rb +43 -0
  22. data/app/controllers/admin/atreides/dropbox_controller.rb +40 -0
  23. data/app/controllers/admin/atreides/features_controller.rb +63 -0
  24. data/app/controllers/admin/atreides/github_controller.rb +35 -0
  25. data/app/controllers/admin/atreides/links_controller.rb +3 -0
  26. data/app/controllers/admin/atreides/messages_controller.rb +3 -0
  27. data/app/controllers/admin/atreides/orders_controller.rb +35 -0
  28. data/app/controllers/admin/atreides/pages_controller.rb +59 -0
  29. data/app/controllers/admin/atreides/photos_controller.rb +79 -0
  30. data/app/controllers/admin/atreides/posts_controller.rb +109 -0
  31. data/app/controllers/admin/atreides/products_controller.rb +39 -0
  32. data/app/controllers/admin/atreides/sessions_controller.rb +7 -0
  33. data/app/controllers/admin/atreides/sizes_controller.rb +4 -0
  34. data/app/controllers/admin/atreides/tags_controller.rb +20 -0
  35. data/app/controllers/admin/atreides/users_controller.rb +50 -0
  36. data/app/controllers/admin/atreides/videos_controller.rb +53 -0
  37. data/app/controllers/atreides/admin_controller.rb +96 -0
  38. data/app/controllers/atreides/admin_home_controller.rb +211 -0
  39. data/app/controllers/atreides/application_controller.rb +93 -0
  40. data/app/controllers/atreides/comments_controller.rb +43 -0
  41. data/app/controllers/atreides/home_controller.rb +71 -0
  42. data/app/controllers/atreides/likes_controller.rb +44 -0
  43. data/app/controllers/atreides/pages_controller.rb +34 -0
  44. data/app/controllers/atreides/posts_controller.rb +119 -0
  45. data/app/controllers/atreides/public_controller.rb +43 -0
  46. data/app/helpers/admin/atreides/comments_helper.rb +8 -0
  47. data/app/helpers/admin/atreides/dropbox_helper.rb +42 -0
  48. data/app/helpers/admin/atreides/features_helper.rb +4 -0
  49. data/app/helpers/admin/atreides/github_helper.rb +43 -0
  50. data/app/helpers/admin/atreides/links_helper.rb +4 -0
  51. data/app/helpers/admin/atreides/messages_helper.rb +4 -0
  52. data/app/helpers/admin/atreides/orders_helper.rb +30 -0
  53. data/app/helpers/admin/atreides/pages_helper.rb +17 -0
  54. data/app/helpers/admin/atreides/photos_helper.rb +14 -0
  55. data/app/helpers/admin/atreides/posts_helper.rb +41 -0
  56. data/app/helpers/admin/atreides/products_helper.rb +37 -0
  57. data/app/helpers/admin/atreides/sizes_helper.rb +4 -0
  58. data/app/helpers/admin/atreides/user_sessions_helper.rb +4 -0
  59. data/app/helpers/admin/atreides/users_helper.rb +8 -0
  60. data/app/helpers/admin/atreides/videos_helper.rb +4 -0
  61. data/app/helpers/atreides/admin_helper.rb +243 -0
  62. data/app/helpers/atreides/admin_home_helper.rb +4 -0
  63. data/app/helpers/atreides/application_helper.rb +210 -0
  64. data/app/helpers/atreides/home_helper.rb +4 -0
  65. data/app/helpers/atreides/posts_helper.rb +119 -0
  66. data/app/inputs/files_input.rb +13 -0
  67. data/app/inputs/price_input.rb +18 -0
  68. data/app/inputs/underline_input.rb +16 -0
  69. data/app/models/atreides/ability.rb +24 -0
  70. data/app/models/atreides/comment.rb +93 -0
  71. data/app/models/atreides/content_part.rb +107 -0
  72. data/app/models/atreides/feature.rb +90 -0
  73. data/app/models/atreides/github.rb +74 -0
  74. data/app/models/atreides/like.rb +35 -0
  75. data/app/models/atreides/line_item.rb +4 -0
  76. data/app/models/atreides/link.rb +32 -0
  77. data/app/models/atreides/message.rb +34 -0
  78. data/app/models/atreides/order.rb +209 -0
  79. data/app/models/atreides/page.rb +114 -0
  80. data/app/models/atreides/photo.rb +130 -0
  81. data/app/models/atreides/post.rb +271 -0
  82. data/app/models/atreides/product.rb +75 -0
  83. data/app/models/atreides/site.rb +59 -0
  84. data/app/models/atreides/size.rb +44 -0
  85. data/app/models/atreides/tag.rb +31 -0
  86. data/app/models/atreides/tweet.rb +123 -0
  87. data/app/models/atreides/user.rb +129 -0
  88. data/app/models/atreides/video.rb +206 -0
  89. data/app/models/atreides/vote.rb +43 -0
  90. data/app/models/fb_post_publisher_job.rb +72 -0
  91. data/app/models/settings.rb +19 -0
  92. data/app/models/tumblr_post_publisher_job.rb +75 -0
  93. data/app/models/tw_post_publisher_job.rb +54 -0
  94. data/app/views/admin/_edit_head_content.html.haml +2 -0
  95. data/app/views/admin/atreides/comments/_line.html.haml +60 -0
  96. data/app/views/admin/atreides/comments/_sidebar.html.haml +52 -0
  97. data/app/views/admin/atreides/comments/create.js.haml +1 -0
  98. data/app/views/admin/atreides/comments/index.html.haml +34 -0
  99. data/app/views/admin/atreides/content_parts/_form.html.haml +21 -0
  100. data/app/views/admin/atreides/content_parts/_photos.html.haml +18 -0
  101. data/app/views/admin/atreides/content_parts/_text.html.haml +1 -0
  102. data/app/views/admin/atreides/content_parts/_videos.html.haml +12 -0
  103. data/app/views/admin/atreides/content_parts/destroy.js.haml +3 -0
  104. data/app/views/admin/atreides/content_parts/edit.html.haml +0 -0
  105. data/app/views/admin/atreides/content_parts/new.html.haml +0 -0
  106. data/app/views/admin/atreides/content_parts/new.js.haml +11 -0
  107. data/app/views/admin/atreides/dropbox/_uploader.html.haml +134 -0
  108. data/app/views/admin/atreides/dropbox/list.html.haml +27 -0
  109. data/app/views/admin/atreides/dropbox/setup.html.haml +8 -0
  110. data/app/views/admin/atreides/features/_form.html.haml +60 -0
  111. data/app/views/admin/atreides/features/edit.html.haml +1 -0
  112. data/app/views/admin/atreides/features/index.html.haml +24 -0
  113. data/app/views/admin/atreides/features/new.html.haml +1 -0
  114. data/app/views/admin/atreides/github/index.html.haml +26 -0
  115. data/app/views/admin/atreides/github/show.html.haml +19 -0
  116. data/app/views/admin/atreides/likes/create.js.haml +2 -0
  117. data/app/views/admin/atreides/orders/_sidebar.html.haml +20 -0
  118. data/app/views/admin/atreides/orders/edit.html.haml +52 -0
  119. data/app/views/admin/atreides/orders/index.html.haml +8 -0
  120. data/app/views/admin/atreides/pages/_form.html.haml +31 -0
  121. data/app/views/admin/atreides/pages/edit.html.haml +3 -0
  122. data/app/views/admin/atreides/pages/index.html.haml +15 -0
  123. data/app/views/admin/atreides/pages/index.js.haml +4 -0
  124. data/app/views/admin/atreides/pages/new.html.haml +2 -0
  125. data/app/views/admin/atreides/photos/create.js.haml +18 -0
  126. data/app/views/admin/atreides/photos/destroy.js.haml +3 -0
  127. data/app/views/admin/atreides/posts/_archives.html.haml +19 -0
  128. data/app/views/admin/atreides/posts/_form.html.haml +66 -0
  129. data/app/views/admin/atreides/posts/_form_buttons.html.haml +9 -0
  130. data/app/views/admin/atreides/posts/_form_sidebar.html.haml +85 -0
  131. data/app/views/admin/atreides/posts/edit.html.haml +2 -0
  132. data/app/views/admin/atreides/posts/index.html.haml +24 -0
  133. data/app/views/admin/atreides/posts/index.js.haml +1 -0
  134. data/app/views/admin/atreides/posts/new.html.haml +2 -0
  135. data/app/views/admin/atreides/products/edit.html.haml +69 -0
  136. data/app/views/admin/atreides/products/index.html.haml +31 -0
  137. data/app/views/admin/atreides/sessions/new.html.haml +13 -0
  138. data/app/views/admin/atreides/user_sessions/new.html.haml +10 -0
  139. data/app/views/admin/atreides/users/_form.html.haml +19 -0
  140. data/app/views/admin/atreides/users/edit.html.haml +6 -0
  141. data/app/views/admin/atreides/users/index.html.haml +11 -0
  142. data/app/views/admin/atreides/users/new.html.haml +6 -0
  143. data/app/views/admin/atreides/users/show.html.haml +4 -0
  144. data/app/views/admin/atreides/videos/create.js.haml +9 -0
  145. data/app/views/admin/atreides/videos/destroy.js.haml +3 -0
  146. data/app/views/admin/common/_archive_sidebar.html.haml +29 -0
  147. data/app/views/admin/common/_list_table.html.erb +37 -0
  148. data/app/views/admin/common/_list_table_row.html.erb +18 -0
  149. data/app/views/admin/common/_pagination.html.erb +1 -0
  150. data/app/views/admin/common/_search_form.html.erb +6 -0
  151. data/app/views/admin/common/access_denied.html.haml +1 -0
  152. data/app/views/atreides/admin/_content_nav.html.haml +8 -0
  153. data/app/views/atreides/admin_home/_analytics.html.haml +93 -0
  154. data/app/views/atreides/admin_home/_fb_page_likes_analytics_tbody.haml +10 -0
  155. data/app/views/atreides/admin_home/_fb_page_views_analytics_tbody.haml +10 -0
  156. data/app/views/atreides/admin_home/_top_landing_pages_analytics_tbody.haml +14 -0
  157. data/app/views/atreides/admin_home/_top_referrers_analytics_tbody.haml +12 -0
  158. data/app/views/atreides/admin_home/_tweets_analytics_tbody.html.haml +8 -0
  159. data/app/views/atreides/admin_home/_visitors_analytics_tbody.html.haml +12 -0
  160. data/app/views/atreides/admin_home/index.html.haml +57 -0
  161. data/app/views/atreides/admin_home/search.html.haml +11 -0
  162. data/app/views/atreides/admin_home/setup.html.haml +15 -0
  163. data/app/views/atreides/common/_gallery_params.xml.erb +174 -0
  164. data/app/views/atreides/common/slideshow.xml.haml +6 -0
  165. data/app/views/atreides/errors/404.html.haml +10 -0
  166. data/app/views/atreides/errors/500.html.haml +4 -0
  167. data/app/views/atreides/home/index.html.haml +30 -0
  168. data/app/views/atreides/home/index.js.haml +1 -0
  169. data/app/views/atreides/home/robots.txt.erb +5 -0
  170. data/app/views/atreides/home/sitemap.xml.builder +35 -0
  171. data/app/views/atreides/pages/show.html.haml +3 -0
  172. data/app/views/atreides/posts/_archives.html.haml +19 -0
  173. data/app/views/atreides/posts/_featured_posts.html.haml +10 -0
  174. data/app/views/atreides/posts/_list.html.haml +9 -0
  175. data/app/views/atreides/posts/archives.html.haml +3 -0
  176. data/app/views/atreides/posts/archives.js.haml +1 -0
  177. data/app/views/atreides/posts/gallery_params.xml.haml +1 -0
  178. data/app/views/atreides/posts/index.atom.builder +22 -0
  179. data/app/views/atreides/posts/index.html.haml +13 -0
  180. data/app/views/atreides/posts/index.rss.builder +21 -0
  181. data/app/views/atreides/posts/show.html.haml +23 -0
  182. data/app/views/atreides/posts/tagged.html.haml +4 -0
  183. data/app/views/atreides/posts/tagged.js.haml +1 -0
  184. data/app/views/layouts/admin.html.haml +62 -0
  185. data/app/views/layouts/application.html.haml +37 -0
  186. data/app/views/layouts/atreides/application.html.erb +14 -0
  187. data/app/views/layouts/public.html.haml +39 -0
  188. data/config/cucumber.yml +11 -0
  189. data/config/locales/en.yml +236 -0
  190. data/config/locales/fr.yml +199 -0
  191. data/config/routes.rb +119 -0
  192. data/lib/assets/images/atreides/admin/add.png +0 -0
  193. data/lib/assets/images/atreides/admin/add_btn.png +0 -0
  194. data/lib/assets/images/atreides/admin/add_dashboard.png +0 -0
  195. data/lib/assets/images/atreides/admin/add_photo_button_sprite.png +0 -0
  196. data/lib/assets/images/atreides/admin/add_photos_btn.png +0 -0
  197. data/lib/assets/images/atreides/admin/background.png +0 -0
  198. data/lib/assets/images/atreides/admin/calendar.png +0 -0
  199. data/lib/assets/images/atreides/admin/chevron.gif +0 -0
  200. data/lib/assets/images/atreides/admin/chevron_overlay.png +0 -0
  201. data/lib/assets/images/atreides/admin/choose_photos_button_sprite.png +0 -0
  202. data/lib/assets/images/atreides/admin/content_bg.png +0 -0
  203. data/lib/assets/images/atreides/admin/content_bg_edit_form.png +0 -0
  204. data/lib/assets/images/atreides/admin/content_part_break.png +0 -0
  205. data/lib/assets/images/atreides/admin/content_part_drop_target.png +0 -0
  206. data/lib/assets/images/atreides/admin/content_part_icons.png +0 -0
  207. data/lib/assets/images/atreides/admin/content_part_photos.png +0 -0
  208. data/lib/assets/images/atreides/admin/content_part_text.png +0 -0
  209. data/lib/assets/images/atreides/admin/content_part_videos.png +0 -0
  210. data/lib/assets/images/atreides/admin/content_top_edit_form.png +0 -0
  211. data/lib/assets/images/atreides/admin/dashboard-indicator.gif +0 -0
  212. data/lib/assets/images/atreides/admin/dashboard_controls_activity.png +0 -0
  213. data/lib/assets/images/atreides/admin/dashboard_controls_customize.png +0 -0
  214. data/lib/assets/images/atreides/admin/dashboard_controls_drafts.png +0 -0
  215. data/lib/assets/images/atreides/admin/dashboard_controls_open.png +0 -0
  216. data/lib/assets/images/atreides/admin/dashboard_controls_posts.png +0 -0
  217. data/lib/assets/images/atreides/admin/dashboard_controls_queue.png +0 -0
  218. data/lib/assets/images/atreides/admin/dashboard_nav_border.png +0 -0
  219. data/lib/assets/images/atreides/admin/delete_bg.png +0 -0
  220. data/lib/assets/images/atreides/admin/down_arrow.png +0 -0
  221. data/lib/assets/images/atreides/admin/dropbox_big.jpg +0 -0
  222. data/lib/assets/images/atreides/admin/dropbox_btn.png +0 -0
  223. data/lib/assets/images/atreides/admin/dropbox_folder.png +0 -0
  224. data/lib/assets/images/atreides/admin/dropbox_icon.gif +0 -0
  225. data/lib/assets/images/atreides/admin/dropbox_icon.png +0 -0
  226. data/lib/assets/images/atreides/admin/expand_collapse.png +0 -0
  227. data/lib/assets/images/atreides/admin/form_sidebar_divider.png +0 -0
  228. data/lib/assets/images/atreides/admin/grey_hatch_bg.png +0 -0
  229. data/lib/assets/images/atreides/admin/header.png +0 -0
  230. data/lib/assets/images/atreides/admin/icon_dropbox.gif +0 -0
  231. data/lib/assets/images/atreides/admin/icon_home.gif +0 -0
  232. data/lib/assets/images/atreides/admin/input_bg.gif +0 -0
  233. data/lib/assets/images/atreides/admin/large_loading.gif +0 -0
  234. data/lib/assets/images/atreides/admin/new_content_icons.png +0 -0
  235. data/lib/assets/images/atreides/admin/off.png +0 -0
  236. data/lib/assets/images/atreides/admin/on.png +0 -0
  237. data/lib/assets/images/atreides/admin/page_icon.png +0 -0
  238. data/lib/assets/images/atreides/admin/permalink.png +0 -0
  239. data/lib/assets/images/atreides/admin/photos-display-type-gallery.png +0 -0
  240. data/lib/assets/images/atreides/admin/photos-display-type-photos.png +0 -0
  241. data/lib/assets/images/atreides/admin/product.png +0 -0
  242. data/lib/assets/images/atreides/admin/remove.png +0 -0
  243. data/lib/assets/images/atreides/admin/resize.png +0 -0
  244. data/lib/assets/images/atreides/admin/save_btn.png +0 -0
  245. data/lib/assets/images/atreides/admin/search_icon.png +0 -0
  246. data/lib/assets/images/atreides/admin/select_arrows.png +0 -0
  247. data/lib/assets/images/atreides/admin/slider.png +0 -0
  248. data/lib/assets/images/atreides/admin/slider_center.png +0 -0
  249. data/lib/assets/images/atreides/admin/slider_left.png +0 -0
  250. data/lib/assets/images/atreides/admin/slider_right.png +0 -0
  251. data/lib/assets/images/atreides/admin/sprite.png +0 -0
  252. data/lib/assets/images/atreides/admin/upload_btn.png +0 -0
  253. data/lib/assets/images/atreides/admin/video_bg.png +0 -0
  254. data/lib/assets/images/atreides/blank.gif +0 -0
  255. data/lib/assets/images/atreides/closelabel.png +0 -0
  256. data/lib/assets/images/atreides/loading.gif +0 -0
  257. data/lib/assets/images/atreides/sprite.png +0 -0
  258. data/lib/assets/images/atreides/tipsy.gif +0 -0
  259. data/lib/atreides.rb +82 -0
  260. data/lib/atreides/base/aasmstates.rb +117 -0
  261. data/lib/atreides/base/base.rb +40 -0
  262. data/lib/atreides/base/taggable.rb +43 -0
  263. data/lib/atreides/base/validation.rb +23 -0
  264. data/lib/atreides/configuration.rb +61 -0
  265. data/lib/atreides/engine.rb +41 -0
  266. data/lib/atreides/extendable.rb +12 -0
  267. data/lib/atreides/i18n_helpers.rb +65 -0
  268. data/lib/atreides/railties/tasks.rake +68 -0
  269. data/lib/atreides/time_formats.rb +19 -0
  270. data/lib/atreides/validators.rb +15 -0
  271. data/lib/atreides/version.rb +4 -0
  272. data/lib/generators/atreides/USAGE +0 -0
  273. data/lib/generators/atreides/atreides_generator.rb +58 -0
  274. data/lib/generators/templates/Procfile +2 -0
  275. data/lib/generators/templates/add_role_to_users.rb +16 -0
  276. data/lib/generators/templates/add_userid_to_resources.rb +15 -0
  277. data/lib/generators/templates/create_comments.rb +19 -0
  278. data/lib/generators/templates/create_content_parts.rb +66 -0
  279. data/lib/generators/templates/create_features.rb +21 -0
  280. data/lib/generators/templates/create_likes.rb +16 -0
  281. data/lib/generators/templates/create_line_items.rb +21 -0
  282. data/lib/generators/templates/create_links.rb +16 -0
  283. data/lib/generators/templates/create_messages.rb +24 -0
  284. data/lib/generators/templates/create_orders.rb +31 -0
  285. data/lib/generators/templates/create_pages.rb +31 -0
  286. data/lib/generators/templates/create_photos.rb +22 -0
  287. data/lib/generators/templates/create_posts.rb +38 -0
  288. data/lib/generators/templates/create_products.rb +24 -0
  289. data/lib/generators/templates/create_sessions.rb +16 -0
  290. data/lib/generators/templates/create_sites.rb +35 -0
  291. data/lib/generators/templates/create_sizes.rb +16 -0
  292. data/lib/generators/templates/create_tweets.rb +25 -0
  293. data/lib/generators/templates/create_videos.rb +24 -0
  294. data/lib/generators/templates/create_votes.rb +20 -0
  295. data/lib/generators/templates/delayed_job.rb +5 -0
  296. data/lib/generators/templates/devise_create_users.rb +42 -0
  297. data/lib/generators/templates/disqussion.rb +30 -0
  298. data/lib/generators/templates/em-net-http_override.rb +74 -0
  299. data/lib/generators/templates/initializer.rb +21 -0
  300. data/lib/generators/templates/new_relic.rb +6 -0
  301. data/lib/generators/templates/oembed.yml +63 -0
  302. data/lib/generators/templates/settings.yml +110 -0
  303. data/lib/generators/templates/string_extensions.rb +20 -0
  304. data/lib/generators/templates/unicorn.rb +2 -0
  305. data/lib/tasks/atreides_tasks.rake +4 -0
  306. data/lib/tasks/cucumber.rake +58 -0
  307. data/lib/tasks/tasks.rake +403 -0
  308. data/lib/tasks/yard.rake +18 -0
  309. metadata +1458 -0
@@ -0,0 +1,12 @@
1
+ module Atreides
2
+ module Extendable
3
+ extend ActiveSupport::Concern
4
+
5
+ included do |base|
6
+ base.class_exec {
7
+ public
8
+ Atreides.configuration.inject_overrides base
9
+ }
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,65 @@
1
+ require 'unicode_utils'
2
+
3
+ module Atreides
4
+
5
+ # Implement a series of helpers to translate Atreides.
6
+ # These are injected into ActionView::Helpers::TranslationHelper
7
+ module I18nHelpers
8
+
9
+ def self.included(recipient)
10
+ recipient.class_eval do
11
+
12
+ def atreides_translate *args
13
+ options = args.extract_options!
14
+ scope_ = options.fetch(:scope, [])
15
+ # puts "ttt: #{args[0]}, scope_: #{scope_.inspect}"
16
+ if args[0].to_s.starts_with?('.') && scope_.include?('atreides')
17
+ # puts "already correctly scoped"
18
+ args << options
19
+ translate(*args)
20
+ else
21
+ # puts "re-scoping"
22
+ raise "NotImplemented" unless scope_.empty?
23
+ options[:scope] = 'atreides'
24
+ args << options
25
+ translate(*args)
26
+ end
27
+ end
28
+
29
+ def capitalize(str)
30
+ str.sub str.first, UnicodeUtils.upcase(str.first, I18n.locale)
31
+ end
32
+
33
+ def atreides_translate_capitalize(*args)
34
+ capitalize atreides_translate(*args)
35
+ end
36
+
37
+ def atreides_translate_titleize(*args)
38
+ if I18n.locale == :en
39
+ UnicodeUtils.titlecase atreides_translate(*args), I18n.locale
40
+ else
41
+ capitalize atreides_translate(*args)
42
+ end
43
+ end
44
+
45
+ alias :tt :atreides_translate
46
+ alias :ttc :atreides_translate_capitalize
47
+ alias :ttt :atreides_translate_titleize
48
+
49
+ if recipient.respond_to? :helper_method
50
+ helper_method :atreides_translate, :atreides_translate_capitalize, :atreides_translate_titleize
51
+ helper_method :tt, :ttc, :ttt
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ module ActionView
59
+ module Helpers
60
+ module TranslationHelper
61
+ unloadable
62
+ include Atreides::I18nHelpers
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,68 @@
1
+ module ActiveRecord
2
+ class Migration
3
+ class << self
4
+ def copy(destination, sources, options = {})
5
+ copied = []
6
+
7
+ FileUtils.mkdir_p(destination) unless File.exists?(destination)
8
+
9
+ destination_migrations = ActiveRecord::Migrator.migrations(destination)
10
+ last = destination_migrations.last
11
+ sources.each do |name, path|
12
+ source_migrations = ActiveRecord::Migrator.migrations(path)
13
+
14
+ source_migrations.each do |migration|
15
+ source = File.read(migration.filename)
16
+ source = "# This migration comes from #{name} (originally #{migration.version})\n#{source}"
17
+
18
+ if duplicate = destination_migrations.detect { |m| m.name == migration.name }
19
+ options[:on_skip].call(name, migration) if File.read(duplicate.filename) != source && options[:on_skip]
20
+ next
21
+ end
22
+
23
+ # migration.version = next_migration_number(last ? last.version + 1 : 0).to_i
24
+ new_path = File.join(destination, "#{migration.version}_#{migration.name.underscore}.rb")
25
+ old_path, migration.filename = migration.filename, new_path
26
+ last = migration
27
+
28
+ FileUtils.cp(old_path, migration.filename)
29
+ copied << migration
30
+ options[:on_copy].call(name, migration, old_path) if options[:on_copy]
31
+ destination_migrations << migration
32
+ end
33
+ end
34
+
35
+ copied
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ # class Hash
42
+ # def to_query
43
+ # result = []
44
+ # each do |k, v|
45
+ # result << "#{k}=#{v}"
46
+ # end
47
+ # result.join("&")
48
+ # end
49
+ # end
50
+
51
+ namespace :atreides do
52
+ namespace :install do
53
+ desc "Copy migrations from Atreides to application"
54
+ task :migrations => :"db:load_config" do
55
+
56
+ # Adapted from rails edge activerecord/lib/active_record/railties/databases.rake
57
+ on_skip = Proc.new do |name, migration|
58
+ puts "NOTE: Migration #{migration.name} from #{name} has been skipped. Migration with the same name already exists."
59
+ end
60
+
61
+ on_copy = Proc.new do |name, migration, old_path|
62
+ puts "Copied migration #{migration.name} from #{name}"
63
+ end
64
+
65
+ ActiveRecord::Migration.copy( 'db/migrate', { 'atreides' => Atreides::Engine.new.paths['db/migrate'].first }, :on_skip => on_skip, :on_copy => on_copy)
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,19 @@
1
+ Time::DATE_FORMATS[:default] = "%d %B %Y %I:%M %p"
2
+ Time::DATE_FORMATS[:month_and_year] = "%B %Y"
3
+ Time::DATE_FORMATS[:short_ordinal] = lambda { |time| time.strftime("%B #{time.day.ordinalize}") }
4
+ Time::DATE_FORMATS[:month_and_day_ordinal] = "%d %b"
5
+ Time::DATE_FORMATS[:long_ordinal] = lambda { |time|
6
+ time.strftime("#{time.day.ordinalize}, %b %Y %I:%M %p (#{Time.zone.utc_offset==-18000 ? 'EST' : Time.zone.name})")
7
+ }
8
+ Time::DATE_FORMATS[:date_ordinal] = lambda { |time|
9
+ time.strftime("%d %b '%y")
10
+ }
11
+ Time::DATE_FORMATS[:long_date_ordinal] = lambda { |time|
12
+ time.strftime("%B #{time.day.ordinalize} %Y")
13
+ }
14
+ Time::DATE_FORMATS[:datetime_ordinal] = lambda { |time|
15
+ time.strftime("%d %b '%y %I:%M %p")
16
+ }
17
+ Time::DATE_FORMATS[:short_month_and_year] = "%b %Y"
18
+ Time::DATE_FORMATS[:month_and_day] = "%B %d"
19
+ Time::DATE_FORMATS[:day] = "%d"
@@ -0,0 +1,15 @@
1
+ # Custom validator checking for an email address
2
+ class EmailValidator < ActiveModel::EachValidator
3
+ def validate_each(record, attribute, value) #:nodoc:
4
+ record.errors[attribute] << (options[:message] || "is not an email") unless
5
+ value =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
6
+ end
7
+ end
8
+
9
+ # Custom validator checking for an URL
10
+ class UrlValidator < ActiveModel::EachValidator
11
+ def validate_each(record, attribute, value) #:nodoc:
12
+ record.errors[attribute] << (options[:message] || "is not a url") unless
13
+ value =~ URI::regexp(%w(http https))
14
+ end
15
+ end
@@ -0,0 +1,4 @@
1
+ # Version string of the Atreides engine
2
+ module Atreides
3
+ VERSION = "2.0.0".freeze
4
+ end
File without changes
@@ -0,0 +1,58 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/migration'
3
+ require 'rails/generators/active_record/migration'
4
+
5
+ module Atreides
6
+ module Generators
7
+ class AtreidesGenerator < Rails::Generators::Base
8
+ namespace "atreides"
9
+ include Rails::Generators::Migration
10
+
11
+ def self.source_root
12
+ @source_root ||= File.join(File.dirname(__FILE__), '..', 'templates')
13
+ end
14
+
15
+ # Implement the required interface for Rails::Generators::Migration.
16
+ def self.next_migration_number(dirname)
17
+ next_migration_number = current_migration_number(dirname) + 1
18
+ if ActiveRecord::Base.timestamped_migrations
19
+ [Time.now.utc.strftime("%Y%m%d%H%M%S"), "%.14d" % next_migration_number].max
20
+ else
21
+ "%.3d" % next_migration_number
22
+ end
23
+ end
24
+
25
+ def create_migration_file
26
+ generate('acts_as_taggable_on:migration')
27
+ generate('delayed_job:active_record')
28
+ generate('devise:install')
29
+
30
+ %w(create_videos create_photos create_orders create_posts
31
+ create_pages create_likes create_comments create_messages
32
+ create_features create_products create_line_items create_links
33
+ create_votes create_tweets create_sessions create_sites
34
+ create_content_parts add_userid_to_resources devise_create_users
35
+ add_role_to_users).each do |f|
36
+ src = "#{f}.rb"
37
+ dst = "db/migrate/#{src}"
38
+ migration_template(src, dst) rescue puts $!
39
+ end
40
+ end
41
+
42
+ def create_configuration_file
43
+ copy_file 'initializer.rb', 'config/initializers/atreides.rb'
44
+ copy_file 'string_extensions.rb', 'config/initializers/string_extensions.rb'
45
+ copy_file 'new_relic.rb', 'config/initializers/new_relic.rb'
46
+ copy_file 'unicorn.rb', 'config/unicorn.rb'
47
+ copy_file 'settings.yml', 'config/settings.yml'
48
+ copy_file 'oembed.yml', 'config/oembed.yml'
49
+ copy_file 'delayed_job.rb', 'config/initializers/delayed_job.rb'
50
+ copy_file 'disqussion.rb', 'config/initializers/disqussion.rb'
51
+ copy_file 'Procfile', 'Procfile'
52
+ gsub_file 'config/application.rb', 'config.active_record.whitelist_attributes = true', 'config.active_record.whitelist_attributes = false'
53
+ remove_file 'public/index.html'
54
+ remove_file 'assets/images/rails.png'
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,2 @@
1
+ web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
2
+ worker: bundle exec rake jobs:work
@@ -0,0 +1,16 @@
1
+ class AddRoleToUsers < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :users, :role, :string
4
+ Atreides::User.where(:admin => true).each do |user|
5
+ user.role = :admin
6
+ user.save
7
+ end
8
+ remove_column :users, :admin
9
+ end
10
+
11
+ def self.down
12
+ add_column :users, :admin, :boolean, :default => false
13
+ Atreides::User.where(:role => :admin).each {|user| user.update_attributes!(:admin => true)}
14
+ remove_column :users, :role
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ class AddUseridToResources < ActiveRecord::Migration
2
+ def self.up
3
+ %w(posts pages).each do |table|
4
+ add_column table.to_sym, :author_id, :integer
5
+ add_column table.to_sym, :last_editor_id, :integer
6
+ end
7
+ end
8
+
9
+ def self.down
10
+ %w(posts pages).each do |table|
11
+ remove_column table.to_sym, :author_id
12
+ remove_column table.to_sym, :last_editor_id
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,19 @@
1
+ class CreateComments < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :comments, :force => true do |t|
4
+ t.string :title, :limit => 50, :default => ""
5
+ t.text :comment, :default => ""
6
+ t.references :commentable, :polymorphic => true
7
+ t.integer :user_id
8
+ t.datetime :moderated_at
9
+ t.timestamps
10
+ end
11
+ add_index :comments, :commentable_type
12
+ add_index :comments, :commentable_id
13
+ add_index :comments, :user_id
14
+ end
15
+
16
+ def self.down
17
+ drop_table :comments
18
+ end
19
+ end
@@ -0,0 +1,66 @@
1
+ class CreateContentParts < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :content_parts, :force => true do |t|
4
+ t.text :body, :default => ""
5
+ t.references :contentable, :polymorphic => true
6
+ t.string :display_type
7
+ t.string :content_type
8
+ t.integer :display_order, :default => 0
9
+ t.timestamps
10
+ end
11
+
12
+ # Update videos table
13
+ add_column :videos, :content_part_id, :integer
14
+ # Migrate old videos to new content-parts
15
+ # ...
16
+
17
+ # Migrate posts bodies to content-parts
18
+ Atreides::Post.where("post_type = 'post' AND body is not null").all.each do |p|
19
+ p.parts.create(:content_type => 'text', :body => p.body)
20
+ end
21
+
22
+ # Migrate posts bodies to content-parts
23
+ Atreides::Post.where("post_type = 'photos'").all.each do |p|
24
+ photos = Atreides::Photo.where({:photoable_id => p.id, :photoable_type => 'Atreides::Post'}).all
25
+ p.parts.create(:content_type => 'photos', :photos => photos)
26
+ p.parts.create(:content_type => 'text', :body => p.body) if p.body?
27
+ end
28
+
29
+ Atreides::Post.where("post_type = 'videos'").all.each do |p|
30
+ videos = Atreides::Video.where({:post_id => p.id}).all
31
+ p.parts.create(:content_type => 'videos', :videos => p.videos)
32
+ p.parts.create(:content_type => 'text', :body => p.body) if p.body?
33
+ end
34
+
35
+ remove_column :videos, :post_id
36
+ remove_column :posts, :body
37
+ remove_column :posts, :post_type
38
+
39
+ end
40
+
41
+ def self.down
42
+ add_column :videos, :post_id, :integer
43
+ # Migrate videos directly to posts
44
+ # ...
45
+ remove_column :videos, :content_part_id
46
+
47
+ add_column :posts, :body, :text
48
+ add_column :posts, :post_type, :string
49
+ # Migrate content-parts to posts body and post_type
50
+ Atreides::ContentPart.where("contentable_id is not null").each do |p|
51
+ next if p.contentable.nil?
52
+ post = p.contentable
53
+ case p.content_type.to_sym
54
+ when :text
55
+ post.body = p.body
56
+ when :photos
57
+ post.photos = p.photos
58
+ when :videos
59
+ post.videos = p.videos
60
+ end
61
+ post.save
62
+ end
63
+
64
+ drop_table :content_parts
65
+ end
66
+ end
@@ -0,0 +1,21 @@
1
+ class CreateFeatures < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :features, :force => true do |t|
4
+ t.string :title
5
+ t.integer :photo_id
6
+ t.integer :post_id
7
+ t.integer :display_order, :default => 0
8
+ t.string :state
9
+ t.string :caption
10
+ t.string :url
11
+ t.datetime :published_at
12
+ t.timestamps
13
+ end
14
+ add_index :features, :photo_id
15
+ add_index :features, :post_id
16
+ end
17
+
18
+ def self.down
19
+ drop_table :features
20
+ end
21
+ end
@@ -0,0 +1,16 @@
1
+ class CreateLikes < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :likes, :force => true do |t|
4
+ t.references :likeable, :polymorphic => true
5
+ t.integer :user_id
6
+ t.timestamps
7
+ end
8
+ add_index :likes, :likeable_type
9
+ add_index :likes, :likeable_id
10
+ add_index :likes, :user_id
11
+ end
12
+
13
+ def self.down
14
+ drop_table :likes
15
+ end
16
+ end
@@ -0,0 +1,21 @@
1
+ class CreateLineItems < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :line_items, :force => true do |t|
4
+ t.integer :product_id
5
+ t.integer :order_id
6
+ t.integer :user_id
7
+ t.string :size
8
+ t.integer :price_cents, :default => 0
9
+ t.string :price_currency
10
+ t.integer :qty, :default => 0
11
+ t.timestamps
12
+ end
13
+ add_index :line_items, :order_id
14
+ add_index :line_items, :product_id
15
+ add_index :line_items, :user_id
16
+ end
17
+
18
+ def self.down
19
+ drop_table :line_items
20
+ end
21
+ end