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
|
@@ -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
|
|
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,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
|