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.
- data/LICENSE +7 -0
- data/README.rdoc +1 -0
- data/app/assets/javascripts/atreides/admin.js +22 -0
- data/app/assets/javascripts/atreides/admin_base.js.erb +247 -0
- data/app/assets/javascripts/atreides/admin_edit.js +9 -0
- data/app/assets/javascripts/atreides/application.js +15 -0
- data/app/assets/javascripts/atreides/comments.coffee +50 -0
- data/app/assets/javascripts/atreides/public.js +24 -0
- data/app/assets/javascripts/atreides/public_base.js.erb +119 -0
- data/app/assets/javascripts/atreides/terryblr.js +57 -0
- data/app/assets/stylesheets/atreides/admin.css +21 -0
- data/app/assets/stylesheets/atreides/admin_base.css.erb +1762 -0
- data/app/assets/stylesheets/atreides/application.css +13 -0
- data/app/assets/stylesheets/atreides/formtastic_changes.css +10 -0
- data/app/assets/stylesheets/atreides/iphone-checkboxes.css.erb +97 -0
- data/app/assets/stylesheets/atreides/jBreadCrumb.css +109 -0
- data/app/assets/stylesheets/atreides/public.css +15 -0
- data/app/assets/stylesheets/atreides/public_base.css +101 -0
- data/app/assets/stylesheets/atreides/swfupload.css.erb +63 -0
- data/app/controllers/admin/atreides/comments_controller.rb +47 -0
- data/app/controllers/admin/atreides/content_parts_controller.rb +43 -0
- data/app/controllers/admin/atreides/dropbox_controller.rb +40 -0
- data/app/controllers/admin/atreides/features_controller.rb +63 -0
- data/app/controllers/admin/atreides/github_controller.rb +35 -0
- data/app/controllers/admin/atreides/links_controller.rb +3 -0
- data/app/controllers/admin/atreides/messages_controller.rb +3 -0
- data/app/controllers/admin/atreides/orders_controller.rb +35 -0
- data/app/controllers/admin/atreides/pages_controller.rb +59 -0
- data/app/controllers/admin/atreides/photos_controller.rb +79 -0
- data/app/controllers/admin/atreides/posts_controller.rb +109 -0
- data/app/controllers/admin/atreides/products_controller.rb +39 -0
- data/app/controllers/admin/atreides/sessions_controller.rb +7 -0
- data/app/controllers/admin/atreides/sizes_controller.rb +4 -0
- data/app/controllers/admin/atreides/tags_controller.rb +20 -0
- data/app/controllers/admin/atreides/users_controller.rb +50 -0
- data/app/controllers/admin/atreides/videos_controller.rb +53 -0
- data/app/controllers/atreides/admin_controller.rb +96 -0
- data/app/controllers/atreides/admin_home_controller.rb +211 -0
- data/app/controllers/atreides/application_controller.rb +93 -0
- data/app/controllers/atreides/comments_controller.rb +43 -0
- data/app/controllers/atreides/home_controller.rb +71 -0
- data/app/controllers/atreides/likes_controller.rb +44 -0
- data/app/controllers/atreides/pages_controller.rb +34 -0
- data/app/controllers/atreides/posts_controller.rb +119 -0
- data/app/controllers/atreides/public_controller.rb +43 -0
- data/app/helpers/admin/atreides/comments_helper.rb +8 -0
- data/app/helpers/admin/atreides/dropbox_helper.rb +42 -0
- data/app/helpers/admin/atreides/features_helper.rb +4 -0
- data/app/helpers/admin/atreides/github_helper.rb +43 -0
- data/app/helpers/admin/atreides/links_helper.rb +4 -0
- data/app/helpers/admin/atreides/messages_helper.rb +4 -0
- data/app/helpers/admin/atreides/orders_helper.rb +30 -0
- data/app/helpers/admin/atreides/pages_helper.rb +17 -0
- data/app/helpers/admin/atreides/photos_helper.rb +14 -0
- data/app/helpers/admin/atreides/posts_helper.rb +41 -0
- data/app/helpers/admin/atreides/products_helper.rb +37 -0
- data/app/helpers/admin/atreides/sizes_helper.rb +4 -0
- data/app/helpers/admin/atreides/user_sessions_helper.rb +4 -0
- data/app/helpers/admin/atreides/users_helper.rb +8 -0
- data/app/helpers/admin/atreides/videos_helper.rb +4 -0
- data/app/helpers/atreides/admin_helper.rb +243 -0
- data/app/helpers/atreides/admin_home_helper.rb +4 -0
- data/app/helpers/atreides/application_helper.rb +210 -0
- data/app/helpers/atreides/home_helper.rb +4 -0
- data/app/helpers/atreides/posts_helper.rb +119 -0
- data/app/inputs/files_input.rb +13 -0
- data/app/inputs/price_input.rb +18 -0
- data/app/inputs/underline_input.rb +16 -0
- data/app/models/atreides/ability.rb +24 -0
- data/app/models/atreides/comment.rb +93 -0
- data/app/models/atreides/content_part.rb +107 -0
- data/app/models/atreides/feature.rb +90 -0
- data/app/models/atreides/github.rb +74 -0
- data/app/models/atreides/like.rb +35 -0
- data/app/models/atreides/line_item.rb +4 -0
- data/app/models/atreides/link.rb +32 -0
- data/app/models/atreides/message.rb +34 -0
- data/app/models/atreides/order.rb +209 -0
- data/app/models/atreides/page.rb +114 -0
- data/app/models/atreides/photo.rb +130 -0
- data/app/models/atreides/post.rb +271 -0
- data/app/models/atreides/product.rb +75 -0
- data/app/models/atreides/site.rb +59 -0
- data/app/models/atreides/size.rb +44 -0
- data/app/models/atreides/tag.rb +31 -0
- data/app/models/atreides/tweet.rb +123 -0
- data/app/models/atreides/user.rb +129 -0
- data/app/models/atreides/video.rb +206 -0
- data/app/models/atreides/vote.rb +43 -0
- data/app/models/fb_post_publisher_job.rb +72 -0
- data/app/models/settings.rb +19 -0
- data/app/models/tumblr_post_publisher_job.rb +75 -0
- data/app/models/tw_post_publisher_job.rb +54 -0
- data/app/views/admin/_edit_head_content.html.haml +2 -0
- data/app/views/admin/atreides/comments/_line.html.haml +60 -0
- data/app/views/admin/atreides/comments/_sidebar.html.haml +52 -0
- data/app/views/admin/atreides/comments/create.js.haml +1 -0
- data/app/views/admin/atreides/comments/index.html.haml +34 -0
- data/app/views/admin/atreides/content_parts/_form.html.haml +21 -0
- data/app/views/admin/atreides/content_parts/_photos.html.haml +18 -0
- data/app/views/admin/atreides/content_parts/_text.html.haml +1 -0
- data/app/views/admin/atreides/content_parts/_videos.html.haml +12 -0
- data/app/views/admin/atreides/content_parts/destroy.js.haml +3 -0
- data/app/views/admin/atreides/content_parts/edit.html.haml +0 -0
- data/app/views/admin/atreides/content_parts/new.html.haml +0 -0
- data/app/views/admin/atreides/content_parts/new.js.haml +11 -0
- data/app/views/admin/atreides/dropbox/_uploader.html.haml +134 -0
- data/app/views/admin/atreides/dropbox/list.html.haml +27 -0
- data/app/views/admin/atreides/dropbox/setup.html.haml +8 -0
- data/app/views/admin/atreides/features/_form.html.haml +60 -0
- data/app/views/admin/atreides/features/edit.html.haml +1 -0
- data/app/views/admin/atreides/features/index.html.haml +24 -0
- data/app/views/admin/atreides/features/new.html.haml +1 -0
- data/app/views/admin/atreides/github/index.html.haml +26 -0
- data/app/views/admin/atreides/github/show.html.haml +19 -0
- data/app/views/admin/atreides/likes/create.js.haml +2 -0
- data/app/views/admin/atreides/orders/_sidebar.html.haml +20 -0
- data/app/views/admin/atreides/orders/edit.html.haml +52 -0
- data/app/views/admin/atreides/orders/index.html.haml +8 -0
- data/app/views/admin/atreides/pages/_form.html.haml +31 -0
- data/app/views/admin/atreides/pages/edit.html.haml +3 -0
- data/app/views/admin/atreides/pages/index.html.haml +15 -0
- data/app/views/admin/atreides/pages/index.js.haml +4 -0
- data/app/views/admin/atreides/pages/new.html.haml +2 -0
- data/app/views/admin/atreides/photos/create.js.haml +18 -0
- data/app/views/admin/atreides/photos/destroy.js.haml +3 -0
- data/app/views/admin/atreides/posts/_archives.html.haml +19 -0
- data/app/views/admin/atreides/posts/_form.html.haml +66 -0
- data/app/views/admin/atreides/posts/_form_buttons.html.haml +9 -0
- data/app/views/admin/atreides/posts/_form_sidebar.html.haml +85 -0
- data/app/views/admin/atreides/posts/edit.html.haml +2 -0
- data/app/views/admin/atreides/posts/index.html.haml +24 -0
- data/app/views/admin/atreides/posts/index.js.haml +1 -0
- data/app/views/admin/atreides/posts/new.html.haml +2 -0
- data/app/views/admin/atreides/products/edit.html.haml +69 -0
- data/app/views/admin/atreides/products/index.html.haml +31 -0
- data/app/views/admin/atreides/sessions/new.html.haml +13 -0
- data/app/views/admin/atreides/user_sessions/new.html.haml +10 -0
- data/app/views/admin/atreides/users/_form.html.haml +19 -0
- data/app/views/admin/atreides/users/edit.html.haml +6 -0
- data/app/views/admin/atreides/users/index.html.haml +11 -0
- data/app/views/admin/atreides/users/new.html.haml +6 -0
- data/app/views/admin/atreides/users/show.html.haml +4 -0
- data/app/views/admin/atreides/videos/create.js.haml +9 -0
- data/app/views/admin/atreides/videos/destroy.js.haml +3 -0
- data/app/views/admin/common/_archive_sidebar.html.haml +29 -0
- data/app/views/admin/common/_list_table.html.erb +37 -0
- data/app/views/admin/common/_list_table_row.html.erb +18 -0
- data/app/views/admin/common/_pagination.html.erb +1 -0
- data/app/views/admin/common/_search_form.html.erb +6 -0
- data/app/views/admin/common/access_denied.html.haml +1 -0
- data/app/views/atreides/admin/_content_nav.html.haml +8 -0
- data/app/views/atreides/admin_home/_analytics.html.haml +93 -0
- data/app/views/atreides/admin_home/_fb_page_likes_analytics_tbody.haml +10 -0
- data/app/views/atreides/admin_home/_fb_page_views_analytics_tbody.haml +10 -0
- data/app/views/atreides/admin_home/_top_landing_pages_analytics_tbody.haml +14 -0
- data/app/views/atreides/admin_home/_top_referrers_analytics_tbody.haml +12 -0
- data/app/views/atreides/admin_home/_tweets_analytics_tbody.html.haml +8 -0
- data/app/views/atreides/admin_home/_visitors_analytics_tbody.html.haml +12 -0
- data/app/views/atreides/admin_home/index.html.haml +57 -0
- data/app/views/atreides/admin_home/search.html.haml +11 -0
- data/app/views/atreides/admin_home/setup.html.haml +15 -0
- data/app/views/atreides/common/_gallery_params.xml.erb +174 -0
- data/app/views/atreides/common/slideshow.xml.haml +6 -0
- data/app/views/atreides/errors/404.html.haml +10 -0
- data/app/views/atreides/errors/500.html.haml +4 -0
- data/app/views/atreides/home/index.html.haml +30 -0
- data/app/views/atreides/home/index.js.haml +1 -0
- data/app/views/atreides/home/robots.txt.erb +5 -0
- data/app/views/atreides/home/sitemap.xml.builder +35 -0
- data/app/views/atreides/pages/show.html.haml +3 -0
- data/app/views/atreides/posts/_archives.html.haml +19 -0
- data/app/views/atreides/posts/_featured_posts.html.haml +10 -0
- data/app/views/atreides/posts/_list.html.haml +9 -0
- data/app/views/atreides/posts/archives.html.haml +3 -0
- data/app/views/atreides/posts/archives.js.haml +1 -0
- data/app/views/atreides/posts/gallery_params.xml.haml +1 -0
- data/app/views/atreides/posts/index.atom.builder +22 -0
- data/app/views/atreides/posts/index.html.haml +13 -0
- data/app/views/atreides/posts/index.rss.builder +21 -0
- data/app/views/atreides/posts/show.html.haml +23 -0
- data/app/views/atreides/posts/tagged.html.haml +4 -0
- data/app/views/atreides/posts/tagged.js.haml +1 -0
- data/app/views/layouts/admin.html.haml +62 -0
- data/app/views/layouts/application.html.haml +37 -0
- data/app/views/layouts/atreides/application.html.erb +14 -0
- data/app/views/layouts/public.html.haml +39 -0
- data/config/cucumber.yml +11 -0
- data/config/locales/en.yml +236 -0
- data/config/locales/fr.yml +199 -0
- data/config/routes.rb +119 -0
- data/lib/assets/images/atreides/admin/add.png +0 -0
- data/lib/assets/images/atreides/admin/add_btn.png +0 -0
- data/lib/assets/images/atreides/admin/add_dashboard.png +0 -0
- data/lib/assets/images/atreides/admin/add_photo_button_sprite.png +0 -0
- data/lib/assets/images/atreides/admin/add_photos_btn.png +0 -0
- data/lib/assets/images/atreides/admin/background.png +0 -0
- data/lib/assets/images/atreides/admin/calendar.png +0 -0
- data/lib/assets/images/atreides/admin/chevron.gif +0 -0
- data/lib/assets/images/atreides/admin/chevron_overlay.png +0 -0
- data/lib/assets/images/atreides/admin/choose_photos_button_sprite.png +0 -0
- data/lib/assets/images/atreides/admin/content_bg.png +0 -0
- data/lib/assets/images/atreides/admin/content_bg_edit_form.png +0 -0
- data/lib/assets/images/atreides/admin/content_part_break.png +0 -0
- data/lib/assets/images/atreides/admin/content_part_drop_target.png +0 -0
- data/lib/assets/images/atreides/admin/content_part_icons.png +0 -0
- data/lib/assets/images/atreides/admin/content_part_photos.png +0 -0
- data/lib/assets/images/atreides/admin/content_part_text.png +0 -0
- data/lib/assets/images/atreides/admin/content_part_videos.png +0 -0
- data/lib/assets/images/atreides/admin/content_top_edit_form.png +0 -0
- data/lib/assets/images/atreides/admin/dashboard-indicator.gif +0 -0
- data/lib/assets/images/atreides/admin/dashboard_controls_activity.png +0 -0
- data/lib/assets/images/atreides/admin/dashboard_controls_customize.png +0 -0
- data/lib/assets/images/atreides/admin/dashboard_controls_drafts.png +0 -0
- data/lib/assets/images/atreides/admin/dashboard_controls_open.png +0 -0
- data/lib/assets/images/atreides/admin/dashboard_controls_posts.png +0 -0
- data/lib/assets/images/atreides/admin/dashboard_controls_queue.png +0 -0
- data/lib/assets/images/atreides/admin/dashboard_nav_border.png +0 -0
- data/lib/assets/images/atreides/admin/delete_bg.png +0 -0
- data/lib/assets/images/atreides/admin/down_arrow.png +0 -0
- data/lib/assets/images/atreides/admin/dropbox_big.jpg +0 -0
- data/lib/assets/images/atreides/admin/dropbox_btn.png +0 -0
- data/lib/assets/images/atreides/admin/dropbox_folder.png +0 -0
- data/lib/assets/images/atreides/admin/dropbox_icon.gif +0 -0
- data/lib/assets/images/atreides/admin/dropbox_icon.png +0 -0
- data/lib/assets/images/atreides/admin/expand_collapse.png +0 -0
- data/lib/assets/images/atreides/admin/form_sidebar_divider.png +0 -0
- data/lib/assets/images/atreides/admin/grey_hatch_bg.png +0 -0
- data/lib/assets/images/atreides/admin/header.png +0 -0
- data/lib/assets/images/atreides/admin/icon_dropbox.gif +0 -0
- data/lib/assets/images/atreides/admin/icon_home.gif +0 -0
- data/lib/assets/images/atreides/admin/input_bg.gif +0 -0
- data/lib/assets/images/atreides/admin/large_loading.gif +0 -0
- data/lib/assets/images/atreides/admin/new_content_icons.png +0 -0
- data/lib/assets/images/atreides/admin/off.png +0 -0
- data/lib/assets/images/atreides/admin/on.png +0 -0
- data/lib/assets/images/atreides/admin/page_icon.png +0 -0
- data/lib/assets/images/atreides/admin/permalink.png +0 -0
- data/lib/assets/images/atreides/admin/photos-display-type-gallery.png +0 -0
- data/lib/assets/images/atreides/admin/photos-display-type-photos.png +0 -0
- data/lib/assets/images/atreides/admin/product.png +0 -0
- data/lib/assets/images/atreides/admin/remove.png +0 -0
- data/lib/assets/images/atreides/admin/resize.png +0 -0
- data/lib/assets/images/atreides/admin/save_btn.png +0 -0
- data/lib/assets/images/atreides/admin/search_icon.png +0 -0
- data/lib/assets/images/atreides/admin/select_arrows.png +0 -0
- data/lib/assets/images/atreides/admin/slider.png +0 -0
- data/lib/assets/images/atreides/admin/slider_center.png +0 -0
- data/lib/assets/images/atreides/admin/slider_left.png +0 -0
- data/lib/assets/images/atreides/admin/slider_right.png +0 -0
- data/lib/assets/images/atreides/admin/sprite.png +0 -0
- data/lib/assets/images/atreides/admin/upload_btn.png +0 -0
- data/lib/assets/images/atreides/admin/video_bg.png +0 -0
- data/lib/assets/images/atreides/blank.gif +0 -0
- data/lib/assets/images/atreides/closelabel.png +0 -0
- data/lib/assets/images/atreides/loading.gif +0 -0
- data/lib/assets/images/atreides/sprite.png +0 -0
- data/lib/assets/images/atreides/tipsy.gif +0 -0
- data/lib/atreides.rb +82 -0
- data/lib/atreides/base/aasmstates.rb +117 -0
- data/lib/atreides/base/base.rb +40 -0
- data/lib/atreides/base/taggable.rb +43 -0
- data/lib/atreides/base/validation.rb +23 -0
- data/lib/atreides/configuration.rb +61 -0
- data/lib/atreides/engine.rb +41 -0
- data/lib/atreides/extendable.rb +12 -0
- data/lib/atreides/i18n_helpers.rb +65 -0
- data/lib/atreides/railties/tasks.rake +68 -0
- data/lib/atreides/time_formats.rb +19 -0
- data/lib/atreides/validators.rb +15 -0
- data/lib/atreides/version.rb +4 -0
- data/lib/generators/atreides/USAGE +0 -0
- data/lib/generators/atreides/atreides_generator.rb +58 -0
- data/lib/generators/templates/Procfile +2 -0
- data/lib/generators/templates/add_role_to_users.rb +16 -0
- data/lib/generators/templates/add_userid_to_resources.rb +15 -0
- data/lib/generators/templates/create_comments.rb +19 -0
- data/lib/generators/templates/create_content_parts.rb +66 -0
- data/lib/generators/templates/create_features.rb +21 -0
- data/lib/generators/templates/create_likes.rb +16 -0
- data/lib/generators/templates/create_line_items.rb +21 -0
- data/lib/generators/templates/create_links.rb +16 -0
- data/lib/generators/templates/create_messages.rb +24 -0
- data/lib/generators/templates/create_orders.rb +31 -0
- data/lib/generators/templates/create_pages.rb +31 -0
- data/lib/generators/templates/create_photos.rb +22 -0
- data/lib/generators/templates/create_posts.rb +38 -0
- data/lib/generators/templates/create_products.rb +24 -0
- data/lib/generators/templates/create_sessions.rb +16 -0
- data/lib/generators/templates/create_sites.rb +35 -0
- data/lib/generators/templates/create_sizes.rb +16 -0
- data/lib/generators/templates/create_tweets.rb +25 -0
- data/lib/generators/templates/create_videos.rb +24 -0
- data/lib/generators/templates/create_votes.rb +20 -0
- data/lib/generators/templates/delayed_job.rb +5 -0
- data/lib/generators/templates/devise_create_users.rb +42 -0
- data/lib/generators/templates/disqussion.rb +30 -0
- data/lib/generators/templates/em-net-http_override.rb +74 -0
- data/lib/generators/templates/initializer.rb +21 -0
- data/lib/generators/templates/new_relic.rb +6 -0
- data/lib/generators/templates/oembed.yml +63 -0
- data/lib/generators/templates/settings.yml +110 -0
- data/lib/generators/templates/string_extensions.rb +20 -0
- data/lib/generators/templates/unicorn.rb +2 -0
- data/lib/tasks/atreides_tasks.rake +4 -0
- data/lib/tasks/cucumber.rake +58 -0
- data/lib/tasks/tasks.rake +403 -0
- data/lib/tasks/yard.rake +18 -0
- metadata +1458 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
data/lib/atreides.rb
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
require 'inherited_resources'
|
|
2
|
+
require 'haml'
|
|
3
|
+
require 'formtastic'
|
|
4
|
+
require 'settingslogic'
|
|
5
|
+
require 'will_paginate'
|
|
6
|
+
require 'acts_as_commentable'
|
|
7
|
+
require 'validates_email_format_of'
|
|
8
|
+
require 'dropbox_sdk'
|
|
9
|
+
require 'analytical'
|
|
10
|
+
require 'jquery-rails'
|
|
11
|
+
require 'aws/s3'
|
|
12
|
+
require 'devise'
|
|
13
|
+
require 'oauth2'
|
|
14
|
+
|
|
15
|
+
require 'cancan'
|
|
16
|
+
# TODO: pull request in CanCan
|
|
17
|
+
module CanCan
|
|
18
|
+
# For use with Inherited Resources
|
|
19
|
+
class InheritedResource < ControllerResource # :nodoc:
|
|
20
|
+
# defer this directly to Inherited Resources
|
|
21
|
+
def load_collection
|
|
22
|
+
@controller.send(:collection)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def resource_instance=(instance)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# def resource_instance
|
|
29
|
+
# @controller.send(:resource) if load_instance?
|
|
30
|
+
# end
|
|
31
|
+
|
|
32
|
+
def collection_instance=(instance)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def collection_instance
|
|
36
|
+
@controller.send :collection
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
require File.expand_path('atreides/engine', File.dirname(__FILE__)) if defined?(Rails) && Rails::VERSION::MAJOR == 3
|
|
42
|
+
|
|
43
|
+
require "acts-as-taggable-on"
|
|
44
|
+
require "paperclip"
|
|
45
|
+
require "dynamic_form"
|
|
46
|
+
require "gattica"
|
|
47
|
+
require "delayed_job"
|
|
48
|
+
require 'mini_fb'
|
|
49
|
+
|
|
50
|
+
[ 'atreides/configuration',
|
|
51
|
+
'atreides/extendable',
|
|
52
|
+
'atreides/validators',
|
|
53
|
+
'atreides/time_formats',
|
|
54
|
+
"atreides/i18n_helpers",
|
|
55
|
+
'atreides/base/base',
|
|
56
|
+
'atreides/base/taggable',
|
|
57
|
+
'atreides/base/aasmstates',
|
|
58
|
+
'atreides/base/validation',
|
|
59
|
+
].each do |path|
|
|
60
|
+
require File.expand_path(path, File.dirname(__FILE__))
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
module Atreides
|
|
64
|
+
class << self
|
|
65
|
+
|
|
66
|
+
# Modify configuration
|
|
67
|
+
# Example:
|
|
68
|
+
# Atreides.configure do |config|
|
|
69
|
+
# config.user_model = 'MyUser'
|
|
70
|
+
# end
|
|
71
|
+
def configure
|
|
72
|
+
yield configuration
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Accessor for Atreides::Configuration
|
|
76
|
+
def configuration
|
|
77
|
+
@configuration ||= Configuration.new
|
|
78
|
+
end
|
|
79
|
+
alias :config :configuration
|
|
80
|
+
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
module Atreides
|
|
2
|
+
class Base < ActiveRecord::Base
|
|
3
|
+
|
|
4
|
+
#
|
|
5
|
+
# Common class responsible for the management of Atreides model states. The focus is on managing the states between creation and publication of content.
|
|
6
|
+
#
|
|
7
|
+
module AasmStates
|
|
8
|
+
def self.included(recipient)
|
|
9
|
+
recipient.class_eval do
|
|
10
|
+
require 'aasm'
|
|
11
|
+
include ::AASM
|
|
12
|
+
aasm_column :state
|
|
13
|
+
aasm_initial_state :pending
|
|
14
|
+
aasm_state :pending
|
|
15
|
+
aasm_state :drafted
|
|
16
|
+
aasm_state :queued
|
|
17
|
+
aasm_state :published, :enter => :do_publish
|
|
18
|
+
|
|
19
|
+
aasm_event :publish do
|
|
20
|
+
transitions :from => [:pending, :drafted, :queued], :to => :published
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
aasm_event :draft do
|
|
24
|
+
transitions :from => [:pending, :published, :queued], :to => :drafted
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
aasm_event :queue do
|
|
28
|
+
transitions :from => [:pending, :published, :drafted], :to => :queued
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
#
|
|
32
|
+
# Validation
|
|
33
|
+
#
|
|
34
|
+
validates :state, :inclusion => { :in => aasm_states.map(&:name).compact.map(&:to_s) }
|
|
35
|
+
|
|
36
|
+
#
|
|
37
|
+
# Scopes
|
|
38
|
+
#
|
|
39
|
+
aasm_states.map(&:name).each do |state|
|
|
40
|
+
scope state, where(:state => state.to_s)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
scope :by_state, lambda { |state|
|
|
44
|
+
where(:state => state.to_s)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
scope :live, lambda {
|
|
48
|
+
# Needs to be sep variable or AR will cache the first time and it'll never change
|
|
49
|
+
where("#{table_name}.state = 'published' and #{table_name}.published_at <= ?", Time.zone.now)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
#
|
|
53
|
+
# Callbacks
|
|
54
|
+
#
|
|
55
|
+
after_initialize :set_initial_state
|
|
56
|
+
|
|
57
|
+
# Make sure that the state of all objects are set after initialization
|
|
58
|
+
def set_initial_state
|
|
59
|
+
# Touch the state attribute and if missing reload
|
|
60
|
+
self.state rescue self.reload
|
|
61
|
+
|
|
62
|
+
self.state ||= self.class.aasm_initial_state
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
before_validation :stringify_state
|
|
66
|
+
def stringify_state
|
|
67
|
+
self.state = state.to_s if state?
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
#
|
|
71
|
+
# Methods
|
|
72
|
+
#
|
|
73
|
+
|
|
74
|
+
# Create a list if states used in a HTML select drop-down
|
|
75
|
+
def states_for_select
|
|
76
|
+
[
|
|
77
|
+
[I18n.t(:publish_now, :scope => [:model, :states]).capitalize, :publish_now],
|
|
78
|
+
[I18n.t(:drafted, :scope => [:model, :states]).capitalize, :drafted],
|
|
79
|
+
# ["Add to queue", :queued],
|
|
80
|
+
[I18n.t(:published_at, :scope => [:model, :states]).capitalize, :published_at]
|
|
81
|
+
]
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Set state.
|
|
85
|
+
# If the value is 'published' then update the published_at attribute to now
|
|
86
|
+
def state=(value)
|
|
87
|
+
case value.to_s.to_sym
|
|
88
|
+
when :publish_now
|
|
89
|
+
self[:state] = "published"
|
|
90
|
+
self.published_at = Time.zone.now
|
|
91
|
+
when :published_at
|
|
92
|
+
self[:state] = "published"
|
|
93
|
+
else
|
|
94
|
+
self[:state] = value if self.class.aasm_states.map(&:name).include?(value.to_s.to_sym)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Has this object been published? Is it live?
|
|
99
|
+
def live?
|
|
100
|
+
self.published? and self.published_at? and self.published_at < Time.zone.now
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# Is this object schedule to be published on a date?
|
|
104
|
+
def publish_on_date?
|
|
105
|
+
self.published? and self.published_at?
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
private
|
|
109
|
+
|
|
110
|
+
# Override this in local models
|
|
111
|
+
def do_publish
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module Atreides
|
|
2
|
+
|
|
3
|
+
# Base class inherited by every model in Atreides
|
|
4
|
+
class Base < ActiveRecord::Base
|
|
5
|
+
|
|
6
|
+
#
|
|
7
|
+
# Includes
|
|
8
|
+
#
|
|
9
|
+
include ActiveModel::Validations
|
|
10
|
+
|
|
11
|
+
#
|
|
12
|
+
# Class definitions
|
|
13
|
+
#
|
|
14
|
+
self.abstract_class = true
|
|
15
|
+
|
|
16
|
+
# Give a string identifying the model based on it's properties.
|
|
17
|
+
# In order:
|
|
18
|
+
# - _slug_ if it has a property *slug*
|
|
19
|
+
# - _id-name_ if it has a property *name*
|
|
20
|
+
# - _id-title_ if it has a property *title*
|
|
21
|
+
# - _id_ otherwise
|
|
22
|
+
# @return A string describing an instance of a model
|
|
23
|
+
def to_param
|
|
24
|
+
return slug.to_s if self.respond_to?(:slug) and !slug.blank?
|
|
25
|
+
return "#{id}-#{name.to_s.parameterize}" if self.respond_to?(:name) and self.name?
|
|
26
|
+
return "#{id}-#{title.to_s.parameterize}" if self.respond_to?(:title) and self.title?
|
|
27
|
+
id.to_s
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Give a DOM friendly ID for an object. This is used extensively with UI Javascript behaviours.
|
|
31
|
+
# @param [Prefix] prefix the id with a custom name. Defaults to the objects model name.
|
|
32
|
+
# @return [String] the dom id
|
|
33
|
+
def dom_id(prefix=nil)
|
|
34
|
+
display_id = new_record? ? "new" : id
|
|
35
|
+
prefix ||= self.class.name.demodulize
|
|
36
|
+
prefix != :bare ? "#{prefix.to_s.parameterize('_')}_#{display_id}" : display_id
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module Atreides
|
|
2
|
+
class Base < ActiveRecord::Base
|
|
3
|
+
|
|
4
|
+
#
|
|
5
|
+
# Module providing common tagging functionality. Uses the _acts_as_taggable_ mixin.
|
|
6
|
+
#
|
|
7
|
+
module Taggable
|
|
8
|
+
def self.included(recipient)
|
|
9
|
+
recipient.class_eval do
|
|
10
|
+
|
|
11
|
+
# Throws errors if table doesn't exist on first project setup
|
|
12
|
+
if recipient.table_exists?
|
|
13
|
+
acts_as_taggable
|
|
14
|
+
|
|
15
|
+
if Rails.env.development? || Rails.env.staging?
|
|
16
|
+
Settings.load! # Needed for dev env when reloading class caches
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
if defined?(Settings.tags[self.table_name]) && defined?(Settings.tags[self.table_name]['groups'])
|
|
20
|
+
acts_as_taggable_on Settings.tags[self.table_name]['groups']
|
|
21
|
+
scope :tagged, lambda { |tags|
|
|
22
|
+
tags_sql = tags.is_a?(Array) ? tags.map{|t|"'#{t}'"}.join(",") : "'#{tags}'"
|
|
23
|
+
select("#{table_name}.*").
|
|
24
|
+
joins("JOIN taggings ON taggings.taggable_id = #{table_name}.id AND taggings.taggable_type IN ('#{to_s}')").
|
|
25
|
+
where("taggings.tag_id in (SELECT id from tags where LOWER(name) IN (#{tags_sql.downcase}))")
|
|
26
|
+
}
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Add callback to normalize tags
|
|
31
|
+
before_save :normalize_tags
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def normalize_tags
|
|
36
|
+
self.tag_list = self.tag_list.map(&:parameterize)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Atreides
|
|
2
|
+
class Base < ActiveRecord::Base
|
|
3
|
+
|
|
4
|
+
#
|
|
5
|
+
# Module providing common validations functionality.
|
|
6
|
+
#
|
|
7
|
+
module Validation
|
|
8
|
+
def self.included(recipient)
|
|
9
|
+
recipient.class_eval do
|
|
10
|
+
before_validation :update_slug
|
|
11
|
+
|
|
12
|
+
# Sets the object's slug. Slugs are used to create SEO friendly URLs.
|
|
13
|
+
def update_slug
|
|
14
|
+
# Set slug if not set
|
|
15
|
+
if respond_to?(:slug) and respond_to?(:title)
|
|
16
|
+
self.slug = title? ? title.parameterize : id if !slug? or slug.match(/^\d+$/)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
class Atreides::Configuration
|
|
2
|
+
attr_accessor :user_model
|
|
3
|
+
attr_accessor :admin_route_prefix
|
|
4
|
+
attr_accessor :admin_route_redirect
|
|
5
|
+
|
|
6
|
+
@@overrides ||= {}
|
|
7
|
+
@@overriden_from ||= {}
|
|
8
|
+
|
|
9
|
+
# Configuration defaults
|
|
10
|
+
def initialize
|
|
11
|
+
@user_model = 'User'
|
|
12
|
+
@admin_route_prefix = 'admin'
|
|
13
|
+
@admin_route_redirect = "/#{@admin_route_prefix}/pages"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def overrides
|
|
17
|
+
@@overrides
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def override *args
|
|
21
|
+
from = caller[0]
|
|
22
|
+
overrides = args.extract_options!
|
|
23
|
+
args.each { |arg| overrides[arg] = arg.to_sym }
|
|
24
|
+
overrides.each do | atreides_classname, host_concern_name |
|
|
25
|
+
unless atreides_classname.to_s.starts_with? 'Atreides::'
|
|
26
|
+
atreides_classname = "Atreides::#{atreides_classname}"
|
|
27
|
+
end
|
|
28
|
+
@@overrides[atreides_classname.to_sym] = [] if @@overrides[atreides_classname.to_sym].nil?
|
|
29
|
+
@@overrides[atreides_classname.to_sym] << host_concern_name
|
|
30
|
+
@@overriden_from[atreides_classname.to_sym] = from
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def inject_overrides atreides_class
|
|
35
|
+
# Rails.logger.debug { "Injecting overrides in class #{atreides_class.inspect} !" }
|
|
36
|
+
|
|
37
|
+
modules = @@overrides[atreides_class.to_s.to_sym] || []
|
|
38
|
+
|
|
39
|
+
modules.uniq.each do |hostapp_module_name|
|
|
40
|
+
begin
|
|
41
|
+
host_module = hostapp_module_name.to_s.constantize
|
|
42
|
+
# puts "\t\tInjecting #{host_module} into #{atreides_class}"
|
|
43
|
+
atreides_class.instance_eval {
|
|
44
|
+
include host_module
|
|
45
|
+
}
|
|
46
|
+
rescue NameError => e
|
|
47
|
+
from = @overriden_from[atreides_class.to_s.to_sym] rescue "---"
|
|
48
|
+
puts <<-ERR
|
|
49
|
+
Atreides configuration error !
|
|
50
|
+
Following Atreides's configuration, here: #{from.inspect}
|
|
51
|
+
|
|
52
|
+
Atreides's' '#{atreides_class.to_s}' class should be overriden by a class named #{hostapp_module_name.inspect}.
|
|
53
|
+
|
|
54
|
+
This #{hostapp_module_name.inspect} class could not be loaded !
|
|
55
|
+
|
|
56
|
+
ERR
|
|
57
|
+
raise e
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require "rails"
|
|
2
|
+
|
|
3
|
+
module Atreides
|
|
4
|
+
class Engine < Rails::Engine
|
|
5
|
+
paths['db/migrate'] = 'db/migrate'
|
|
6
|
+
# paths['atreides/base'] = 'atreides/base'
|
|
7
|
+
paths['app/inputs'] = 'app/inputs'
|
|
8
|
+
|
|
9
|
+
# Since the database can't be set up when running the generators,
|
|
10
|
+
# we move the models path to autoload instead of eager_load.
|
|
11
|
+
# otherwise, we would get "could not find table 'xxxx'" exceptions.
|
|
12
|
+
config.eager_load_paths -= [ paths["app/models"].first ]
|
|
13
|
+
config.autoload_paths << paths["app/models"].first
|
|
14
|
+
config.autoload_paths += %W(#{Rails.root}/app/atreides/models)
|
|
15
|
+
config.eager_load_paths += [ paths["app/inputs"].first ]
|
|
16
|
+
|
|
17
|
+
# Force routes to be loaded if we are doing any eager load.
|
|
18
|
+
config.before_eager_load { |app| app.reload_routes! }
|
|
19
|
+
|
|
20
|
+
initializer :load_overrides do
|
|
21
|
+
filename = File.expand_path('config/initializers/overrides', Rails.root)
|
|
22
|
+
require filename if File.exists?(filename)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
initializer "atreides.asset_pipeline" do |app|
|
|
26
|
+
app.config.assets.precompile += %w( atreides/admin_edit.js atreides/admin.js atreides/public.js atreides/admin.css atreides/public.css )
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
initializer 'atreides.formtastic.inputs' do
|
|
30
|
+
load_path = paths['app/inputs'].first
|
|
31
|
+
matcher = /\A#{Regexp.escape(load_path)}\/(.*)\.rb\Z/
|
|
32
|
+
Dir.glob("#{load_path}/**/*.rb").sort.each do |file|
|
|
33
|
+
require_dependency file.sub(matcher, '\1')
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
rake_tasks do
|
|
38
|
+
load 'atreides/railties/tasks.rake'
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|