refinerycms-core 0.9.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/controllers/admin/base_controller.rb +10 -0
- data/app/controllers/admin/dialogs_controller.rb +26 -0
- data/app/controllers/admin/refinery_core_controller.rb +12 -0
- data/app/controllers/application_controller.rb +6 -0
- data/app/controllers/refinery/fast_controller.rb +9 -0
- data/app/controllers/sitemap_controller.rb +14 -0
- data/app/helpers/application_helper.rb +5 -0
- data/app/views/admin/_head.html.erb +43 -0
- data/app/views/admin/_javascripts.html.erb +32 -0
- data/app/views/admin/_menu.html.erb +17 -0
- data/app/views/admin/dialogs/show.html.erb +19 -0
- data/app/views/layouts/admin.html.erb +24 -0
- data/app/views/layouts/admin_dialog.html.erb +14 -0
- data/app/views/layouts/application.html.erb +21 -0
- data/app/views/shared/_content_page.html.erb +63 -0
- data/app/views/shared/_draft_page_message.html.erb +3 -0
- data/app/views/shared/_footer.html.erb +4 -0
- data/app/views/shared/_google_analytics.html.erb +8 -0
- data/app/views/shared/_head.html.erb +42 -0
- data/app/views/shared/_header.html.erb +8 -0
- data/app/views/shared/_html_tag.html.erb +6 -0
- data/app/views/shared/_ie6check.html.erb +63 -0
- data/app/views/shared/_javascripts.html.erb +10 -0
- data/app/views/shared/_menu.html.erb +30 -0
- data/app/views/shared/_menu_branch.html.erb +26 -0
- data/app/views/shared/_message.html.erb +10 -0
- data/app/views/shared/_no_script.html.erb +9 -0
- data/app/views/shared/_site_bar.html.erb +25 -0
- data/app/views/shared/admin/_continue_editing.html.erb +3 -0
- data/app/views/shared/admin/_error_messages.html.erb +16 -0
- data/app/views/shared/admin/_form_actions.html.erb +75 -0
- data/app/views/shared/admin/_image_picker.html.erb +60 -0
- data/app/views/shared/admin/_make_sortable.html.erb +13 -0
- data/app/views/shared/admin/_resource_picker.html.erb +66 -0
- data/app/views/shared/admin/_search.html.erb +6 -0
- data/app/views/shared/admin/_sortable_list.html.erb +7 -0
- data/app/views/shared/admin/_tabbed_fields.html.erb +42 -0
- data/app/views/welcome.html.erb +17 -0
- data/app/views/wymiframe.html.erb +15 -0
- data/config/locales/cs.yml +77 -0
- data/config/locales/da.yml +75 -0
- data/config/locales/de.yml +75 -0
- data/config/locales/el.yml +75 -0
- data/config/locales/en.yml +75 -0
- data/config/locales/es.yml +68 -0
- data/config/locales/fr.yml +72 -0
- data/config/locales/it.yml +96 -0
- data/config/locales/lolcat.yml +68 -0
- data/config/locales/lt.yml +75 -0
- data/config/locales/lv.yml +72 -0
- data/config/locales/nb.yml +75 -0
- data/config/locales/nl.yml +75 -0
- data/config/locales/pl.yml +75 -0
- data/config/locales/pt-BR.yml +72 -0
- data/config/locales/rs.yml +76 -0
- data/config/locales/ru.yml +71 -0
- data/config/locales/sl.yml +72 -0
- data/config/locales/sv.yml +75 -0
- data/config/locales/vi.yml +75 -0
- data/config/locales/zh-CN.yml +75 -0
- data/config/locales/zh-TW.yml +75 -0
- data/config/routes.rb +19 -0
- data/crud.md +197 -0
- data/doc/included-jquery-ui-packages.jpg +0 -0
- data/engines.md +179 -0
- data/features/search.feature +55 -0
- data/features/site_bar.feature +24 -0
- data/features/step_definitions/core_steps.rb +61 -0
- data/features/support/paths.rb +14 -0
- data/features/uploads/beach.jpeg +0 -0
- data/features/uploads/refinery_is_awesome.txt +1 -0
- data/lib/gemspec.rb +43 -0
- data/lib/generators/refinerycms_generator.rb +110 -0
- data/lib/generators/templates/.gitignore +83 -0
- data/lib/generators/templates/app/views/sitemap/index.xml.builder +22 -0
- data/lib/generators/templates/autotest/autotest.rb +17 -0
- data/lib/generators/templates/autotest/discover.rb +2 -0
- data/lib/generators/templates/config/database.yml.mysql +20 -0
- data/lib/generators/templates/config/database.yml.postgresql +57 -0
- data/lib/generators/templates/config/database.yml.sqlite3 +26 -0
- data/lib/generators/templates/config/i18n-js.yml +6 -0
- data/lib/generators/templates/config/initializers/devise.rb +142 -0
- data/lib/generators/templates/config/settings.rb +2 -0
- data/lib/generators/templates/db/seeds.rb +5 -0
- data/lib/refinery/activity.rb +45 -0
- data/lib/refinery/admin/base_controller.rb +111 -0
- data/lib/refinery/admin_base_controller.rb +5 -0
- data/lib/refinery/application.rb +48 -0
- data/lib/refinery/application_controller.rb +120 -0
- data/lib/refinery/application_helper.rb +19 -0
- data/lib/refinery/base_presenter.rb +27 -0
- data/lib/refinery/catch_all_routes.rb +11 -0
- data/lib/refinery/crud.rb +295 -0
- data/lib/refinery/helpers/form_helper.rb +66 -0
- data/lib/refinery/helpers/head_helper.rb +17 -0
- data/lib/refinery/helpers/html_truncation_helper.rb +25 -0
- data/lib/refinery/helpers/image_helper.rb +49 -0
- data/lib/refinery/helpers/menu_helper.rb +68 -0
- data/lib/refinery/helpers/meta_helper.rb +67 -0
- data/lib/refinery/helpers/pagination_helper.rb +16 -0
- data/lib/refinery/helpers/script_helper.rb +36 -0
- data/lib/refinery/helpers/site_bar_helper.rb +24 -0
- data/lib/refinery/helpers/tag_helper.rb +21 -0
- data/lib/refinery/helpers/translation_helper.rb +17 -0
- data/lib/refinery/link_renderer.rb +55 -0
- data/lib/refinery/plugin.rb +106 -0
- data/lib/refinery/plugins.rb +75 -0
- data/lib/refinerycms-core.rb +156 -0
- data/lib/tasks/doc.rake +29 -0
- data/lib/tasks/refinery.rake +231 -0
- data/lib/tasks/yard.rake +30 -0
- data/license.md +21 -0
- data/public/404.html +26 -0
- data/public/422.html +26 -0
- data/public/500.html +26 -0
- data/public/favicon.ico +0 -0
- data/public/images/refinery/add.png +0 -0
- data/public/images/refinery/admin_bg.png +0 -0
- data/public/images/refinery/ajax-loader.gif +0 -0
- data/public/images/refinery/branch-end.gif +0 -0
- data/public/images/refinery/branch-start.gif +0 -0
- data/public/images/refinery/branch.gif +0 -0
- data/public/images/refinery/carousel-left.png +0 -0
- data/public/images/refinery/carousel-right.png +0 -0
- data/public/images/refinery/cross.png +0 -0
- data/public/images/refinery/dialogLoadingAnimation.gif +0 -0
- data/public/images/refinery/header_background.png +0 -0
- data/public/images/refinery/hover-gradient.jpg +0 -0
- data/public/images/refinery/icons/accept.png +0 -0
- data/public/images/refinery/icons/add.png +0 -0
- data/public/images/refinery/icons/ajax-loader.gif +0 -0
- data/public/images/refinery/icons/application_edit.png +0 -0
- data/public/images/refinery/icons/application_go.png +0 -0
- data/public/images/refinery/icons/arrow_left.png +0 -0
- data/public/images/refinery/icons/arrow_switch.png +0 -0
- data/public/images/refinery/icons/arrow_up.png +0 -0
- data/public/images/refinery/icons/bin.png +0 -0
- data/public/images/refinery/icons/bin_closed.png +0 -0
- data/public/images/refinery/icons/cancel.png +0 -0
- data/public/images/refinery/icons/cog_add.png +0 -0
- data/public/images/refinery/icons/cog_edit.png +0 -0
- data/public/images/refinery/icons/cross.png +0 -0
- data/public/images/refinery/icons/delete.png +0 -0
- data/public/images/refinery/icons/doc.png +0 -0
- data/public/images/refinery/icons/down.gif +0 -0
- data/public/images/refinery/icons/edit.png +0 -0
- data/public/images/refinery/icons/email.png +0 -0
- data/public/images/refinery/icons/email_edit.png +0 -0
- data/public/images/refinery/icons/email_go.png +0 -0
- data/public/images/refinery/icons/email_open.png +0 -0
- data/public/images/refinery/icons/eye.png +0 -0
- data/public/images/refinery/icons/folder_page_white.png +0 -0
- data/public/images/refinery/icons/image_add.png +0 -0
- data/public/images/refinery/icons/image_edit.png +0 -0
- data/public/images/refinery/icons/img.png +0 -0
- data/public/images/refinery/icons/information.png +0 -0
- data/public/images/refinery/icons/layout_add.png +0 -0
- data/public/images/refinery/icons/layout_edit.png +0 -0
- data/public/images/refinery/icons/music.png +0 -0
- data/public/images/refinery/icons/page_add.png +0 -0
- data/public/images/refinery/icons/page_edit.png +0 -0
- data/public/images/refinery/icons/page_white_edit.png +0 -0
- data/public/images/refinery/icons/page_white_gear.png +0 -0
- data/public/images/refinery/icons/page_white_put.png +0 -0
- data/public/images/refinery/icons/pdf.png +0 -0
- data/public/images/refinery/icons/ppt.png +0 -0
- data/public/images/refinery/icons/star.png +0 -0
- data/public/images/refinery/icons/tick.png +0 -0
- data/public/images/refinery/icons/up.gif +0 -0
- data/public/images/refinery/icons/user_add.png +0 -0
- data/public/images/refinery/icons/user_comment.png +0 -0
- data/public/images/refinery/icons/user_edit.png +0 -0
- data/public/images/refinery/icons/xls.png +0 -0
- data/public/images/refinery/icons/zip.png +0 -0
- data/public/images/refinery/icons/zoom.png +0 -0
- data/public/images/refinery/logo-large.png +0 -0
- data/public/images/refinery/logo-medium.png +0 -0
- data/public/images/refinery/logo-site-bar.png +0 -0
- data/public/images/refinery/logo-small-medium.png +0 -0
- data/public/images/refinery/logo-small.png +0 -0
- data/public/images/refinery/logo-tiny.png +0 -0
- data/public/images/refinery/logo.png +0 -0
- data/public/images/refinery/nav-3-background.gif +0 -0
- data/public/images/refinery/nav_inactive_background.png +0 -0
- data/public/images/refinery/orange_button.png +0 -0
- data/public/images/refinery/page_bg.png +0 -0
- data/public/images/refinery/resolve_digital_footer_logo.png +0 -0
- data/public/images/refinery/text_field_background.png +0 -0
- data/public/images/refinery/tooltip-nib.gif +0 -0
- data/public/images/refinery/tooltip-nib.png +0 -0
- data/public/images/wymeditor/skins/refinery/arrow_redo.png +0 -0
- data/public/images/wymeditor/skins/refinery/arrow_undo.png +0 -0
- data/public/images/wymeditor/skins/refinery/eye.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-blockquote.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-h1.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-h2.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-h3.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-h4.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-h5.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-h6.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-p.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-pre.png +0 -0
- data/public/images/wymeditor/skins/refinery/link_add.png +0 -0
- data/public/images/wymeditor/skins/refinery/link_break.png +0 -0
- data/public/images/wymeditor/skins/refinery/page_code.png +0 -0
- data/public/images/wymeditor/skins/refinery/page_paste.png +0 -0
- data/public/images/wymeditor/skins/refinery/photo_add.png +0 -0
- data/public/images/wymeditor/skins/refinery/right.png +0 -0
- data/public/images/wymeditor/skins/refinery/style.png +0 -0
- data/public/images/wymeditor/skins/refinery/table_add.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_align_center.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_align_justify.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_align_left.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_align_right.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_bold.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_heading_1.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_heading_2.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_heading_3.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_heading_4.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_heading_5.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_heading_6.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_indent.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_indent_remove.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_italic.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_list_bullets.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_list_numbers.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_paragraph.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_strikethrough.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_subscript.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_superscript.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_underline.png +0 -0
- data/public/images/wymeditor/skins/wymeditor_icon.png +0 -0
- data/public/javascripts/admin.js +7 -0
- data/public/javascripts/application.js +1 -0
- data/public/javascripts/dd_belatedpng.js +13 -0
- data/public/javascripts/i18n-messages.js +2 -0
- data/public/javascripts/jquery-min.js +16 -0
- data/public/javascripts/jquery-ui-custom-min.js +251 -0
- data/public/javascripts/jquery.js +8176 -0
- data/public/javascripts/jquery/GPL-LICENSE.txt +278 -0
- data/public/javascripts/jquery/MIT-LICENSE.txt +20 -0
- data/public/javascripts/jquery/jquery.corner.js +345 -0
- data/public/javascripts/jquery/jquery.html5-placeholder-shim.js +88 -0
- data/public/javascripts/jquery/jquery.jcarousel.js +900 -0
- data/public/javascripts/jquery/jquery.textTruncate.js +174 -0
- data/public/javascripts/jquery/jquery.timers.js +138 -0
- data/public/javascripts/modernizr-min.js +30 -0
- data/public/javascripts/rails.js +175 -0
- data/public/javascripts/refinery/admin.js +1114 -0
- data/public/javascripts/refinery/boot_wym.js +285 -0
- data/public/javascripts/refinery/core.js +18 -0
- data/public/javascripts/refinery/i18n.js +340 -0
- data/public/javascripts/refinery/nestedsortables.js +164 -0
- data/public/javascripts/refinery/serializelist.js +66 -0
- data/public/javascripts/refinery/site_bar.js +16 -0
- data/public/javascripts/refinery/submenu.js +49 -0
- data/public/javascripts/wymeditor/jquery.refinery.wymeditor.js +5156 -0
- data/public/javascripts/wymeditor/lang/ca.js +45 -0
- data/public/javascripts/wymeditor/lang/cs.js +45 -0
- data/public/javascripts/wymeditor/lang/da.js +48 -0
- data/public/javascripts/wymeditor/lang/de.js +45 -0
- data/public/javascripts/wymeditor/lang/en.js +47 -0
- data/public/javascripts/wymeditor/lang/es.js +48 -0
- data/public/javascripts/wymeditor/lang/fa.js +46 -0
- data/public/javascripts/wymeditor/lang/fr.js +45 -0
- data/public/javascripts/wymeditor/lang/he.js +45 -0
- data/public/javascripts/wymeditor/lang/hu.js +45 -0
- data/public/javascripts/wymeditor/lang/it.js +48 -0
- data/public/javascripts/wymeditor/lang/lv.js +47 -0
- data/public/javascripts/wymeditor/lang/nb.js +48 -0
- data/public/javascripts/wymeditor/lang/nl.js +47 -0
- data/public/javascripts/wymeditor/lang/nn.js +45 -0
- data/public/javascripts/wymeditor/lang/pl.js +45 -0
- data/public/javascripts/wymeditor/lang/pt-BR.js +47 -0
- data/public/javascripts/wymeditor/lang/pt.js +45 -0
- data/public/javascripts/wymeditor/lang/rs.js +47 -0
- data/public/javascripts/wymeditor/lang/ru.js +45 -0
- data/public/javascripts/wymeditor/lang/sl.js +47 -0
- data/public/javascripts/wymeditor/lang/sv.js +45 -0
- data/public/javascripts/wymeditor/lang/tr.js +45 -0
- data/public/javascripts/wymeditor/lang/vi.js +47 -0
- data/public/javascripts/wymeditor/lang/zh_cn.js +47 -0
- data/public/javascripts/wymeditor/skins/refinery/skin.js +48 -0
- data/public/robots.txt +3 -0
- data/public/stylesheets/application.css +4 -0
- data/public/stylesheets/formatting.css +4 -0
- data/public/stylesheets/home.css +4 -0
- data/public/stylesheets/refinery/application.css +72 -0
- data/public/stylesheets/refinery/formatting.css +57 -0
- data/public/stylesheets/refinery/home.css +0 -0
- data/public/stylesheets/refinery/refinery.css +1579 -0
- data/public/stylesheets/refinery/site_bar.css +87 -0
- data/public/stylesheets/refinery/submenu.css +22 -0
- data/public/stylesheets/refinery/theme.css +36 -0
- data/public/stylesheets/refinery/tooltips.css +34 -0
- data/public/stylesheets/refinery/ui.css +107 -0
- data/public/stylesheets/theme.css +4 -0
- data/public/stylesheets/wymeditor/skins/refinery/skin.css +528 -0
- data/public/stylesheets/wymeditor/skins/refinery/wymiframe.css +96 -0
- data/public/wymeditor/GPL-license.txt +278 -0
- data/public/wymeditor/MIT-license.txt +20 -0
- data/public/wymeditor/README +35 -0
- data/refinerycms-core.gemspec +391 -0
- data/spec/lib/refinery/plugins_spec.rb +90 -0
- metadata +482 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
module Refinery
|
|
2
|
+
module Engines; end;
|
|
3
|
+
|
|
4
|
+
class Plugin
|
|
5
|
+
|
|
6
|
+
def self.register(&block)
|
|
7
|
+
plugin = self.new
|
|
8
|
+
|
|
9
|
+
yield plugin
|
|
10
|
+
|
|
11
|
+
raise "A plugin MUST have a name!: #{plugin.inspect}" if plugin.name.blank?
|
|
12
|
+
|
|
13
|
+
# Set the root as Rails::Engine.called_from will always be
|
|
14
|
+
# vendor/engines/refinery/lib/refinery
|
|
15
|
+
new_called_from = begin
|
|
16
|
+
# Remove the line number from backtraces making sure we don't leave anything behind
|
|
17
|
+
call_stack = caller.map { |p| p.split(':')[0..-2].join(':') }
|
|
18
|
+
File.dirname(call_stack.detect { |p| p !~ %r[railties[\w\-\.]*/lib/rails|rack[\w\-\.]*/lib/rack] })
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
klass = Class.new(Rails::Engine)
|
|
22
|
+
klass.class_eval <<-RUBY
|
|
23
|
+
def self.called_from; "#{new_called_from}"; end
|
|
24
|
+
RUBY
|
|
25
|
+
Object.const_set(plugin.class_name.to_sym, klass)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
attr_accessor :name, :class_name, :controller, :directory, :url,
|
|
29
|
+
:version, :dashboard, :always_allow_access,
|
|
30
|
+
:menu_match, :hide_from_menu,
|
|
31
|
+
:pathname, :plugin_activity
|
|
32
|
+
attr_reader :description
|
|
33
|
+
|
|
34
|
+
# Returns the class name of the plugin
|
|
35
|
+
def class_name
|
|
36
|
+
@class_name ||= name.camelize
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Returns the internationalized version of the title
|
|
40
|
+
def title
|
|
41
|
+
::I18n.translate(['plugins', name, 'title'].join('.'))
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Returns the internationalized version of the description
|
|
45
|
+
def description
|
|
46
|
+
::I18n.translate(['plugins', name, 'description'].join('.'))
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Retrieve information about how to access the latest activities of this plugin.
|
|
50
|
+
def activity
|
|
51
|
+
self.plugin_activity ||= []
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Stores information that can be used to retrieve the latest activities of this plugin
|
|
55
|
+
def activity=(activities)
|
|
56
|
+
[activities].flatten.each { |activity| add_activity(activity) }
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Returns true, if the user doesn't require plugin access
|
|
60
|
+
def always_allow_access?
|
|
61
|
+
@always_allow_access ||= false
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Special property to indicate that this plugin is the dashboard plugin.
|
|
65
|
+
def dashboard?
|
|
66
|
+
@dashboard ||= false
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Used to highlight the current tab in the admin interface
|
|
70
|
+
def highlighted?(params)
|
|
71
|
+
(params[:controller] =~ self.menu_match) or (self.dashboard? and params[:action] == 'error_404')
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Returns a RegExp that matches, if the current page is part of the plugin.
|
|
75
|
+
def menu_match
|
|
76
|
+
@menu_match ||= /(admin|refinery)\/#{self.name}$/
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Returns a hash that can be used to create a url that points to the administration part of the plugin.
|
|
80
|
+
def url
|
|
81
|
+
return @url if defined?(@url)
|
|
82
|
+
|
|
83
|
+
if self.controller.present?
|
|
84
|
+
@url = {:controller => "/admin/#{self.controller}"}
|
|
85
|
+
elsif self.directory.present?
|
|
86
|
+
@url = {:controller => "/admin/#{self.directory.split('/').pop}"}
|
|
87
|
+
else
|
|
88
|
+
@url = {:controller => "/admin/#{self.name}"}
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Make this protected, so that only Plugin.register can use it.
|
|
93
|
+
protected
|
|
94
|
+
|
|
95
|
+
def add_activity(options)
|
|
96
|
+
(self.plugin_activity ||= []) << Activity::new(options)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def initialize
|
|
100
|
+
# save the pathname to where this plugin is using its lib directory which is standard now.
|
|
101
|
+
depth = RUBY_VERSION >= "1.9.2" ? 4 : 3
|
|
102
|
+
self.pathname = Pathname.new(caller(depth).first.match("(.*)#{File::SEPARATOR}lib")[1])
|
|
103
|
+
Refinery::Plugins.registered << self # add me to the collection of registered plugins
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
module Refinery
|
|
2
|
+
class Plugins < Array
|
|
3
|
+
|
|
4
|
+
def initialize
|
|
5
|
+
@plugins = []
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def find_activity_by_model(model)
|
|
9
|
+
unless (plugin = find_by_model(model)).nil?
|
|
10
|
+
plugin.activity.detect {|activity| activity.class == model}
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def find_by_model(model)
|
|
15
|
+
model = model.constantize if model.is_a? String
|
|
16
|
+
self.detect { |plugin| plugin.activity.any? {|activity| activity.class == model } }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def find_by_name(name)
|
|
20
|
+
self.detect { |plugin| plugin.name == name }
|
|
21
|
+
end
|
|
22
|
+
alias :[] :find_by_name
|
|
23
|
+
|
|
24
|
+
def find_by_title(title)
|
|
25
|
+
self.detect { |plugin| plugin.title == title }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def in_menu
|
|
29
|
+
self.reject{ |p| p.hide_from_menu }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def names
|
|
33
|
+
self.collect { |p| p.name }
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def pathnames
|
|
37
|
+
self.collect { |p| p.pathname }.compact.uniq
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def titles
|
|
41
|
+
self.collect { |p| p.title }
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
class << self
|
|
45
|
+
def active
|
|
46
|
+
@active_plugins ||= self.new
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def always_allowed
|
|
50
|
+
registered.reject { |p| !p.always_allow_access? }
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def registered
|
|
54
|
+
@registered_plugins ||= self.new
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def activate(name)
|
|
58
|
+
active << registered[name] if registered[name] && !active[name]
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def deactivate(name)
|
|
62
|
+
active.delete_if {|p| p.name == name}
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def set_active(names)
|
|
66
|
+
@active_plugins = self.new
|
|
67
|
+
|
|
68
|
+
names.each do |name|
|
|
69
|
+
activate(name)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
require 'acts_as_indexed'
|
|
2
|
+
require 'awesome_nested_set'
|
|
3
|
+
require 'friendly_id'
|
|
4
|
+
require 'truncate_html'
|
|
5
|
+
require 'will_paginate'
|
|
6
|
+
|
|
7
|
+
module Refinery
|
|
8
|
+
autoload :Activity, File.expand_path('../refinery/activity', __FILE__)
|
|
9
|
+
autoload :Application, File.expand_path('../refinery/application', __FILE__)
|
|
10
|
+
autoload :ApplicationController, File.expand_path('../refinery/application_controller', __FILE__)
|
|
11
|
+
autoload :ApplicationHelper, File.expand_path('../refinery/application_helper', __FILE__)
|
|
12
|
+
autoload :Plugin, File.expand_path('../refinery/plugin', __FILE__)
|
|
13
|
+
autoload :Plugins, File.expand_path('../refinery/plugins', __FILE__)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# These have to be specified after the autoload to correct load issues on some systems.
|
|
17
|
+
# As per commit 12af0e3e83a147a87c97bf7b29f343254c5fcb3c
|
|
18
|
+
require 'refinerycms-base'
|
|
19
|
+
require 'refinerycms-generators'
|
|
20
|
+
require 'refinerycms-settings'
|
|
21
|
+
require 'rails/generators'
|
|
22
|
+
require 'rails/generators/migration'
|
|
23
|
+
|
|
24
|
+
module Refinery
|
|
25
|
+
|
|
26
|
+
module Core
|
|
27
|
+
class << self
|
|
28
|
+
def attach_to_application!
|
|
29
|
+
::Rails::Application.subclasses.each do |subclass|
|
|
30
|
+
begin
|
|
31
|
+
subclass.send :include, ::Refinery::Application
|
|
32
|
+
rescue
|
|
33
|
+
$stdout.puts "Refinery CMS couldn't attach to #{subclass.name}."
|
|
34
|
+
$stdout.puts "Error was: #{$!.message}"
|
|
35
|
+
$stdout.puts $!.backtrace
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
attr_accessor :root
|
|
41
|
+
def root
|
|
42
|
+
@root ||= Pathname.new(File.expand_path('../../', __FILE__))
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
class Engine < ::Rails::Engine
|
|
47
|
+
|
|
48
|
+
config.autoload_paths += %W( #{config.root}/lib )
|
|
49
|
+
|
|
50
|
+
# Attach ourselves to the Rails application.
|
|
51
|
+
config.before_configuration do
|
|
52
|
+
::Refinery::Core.attach_to_application!
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Wrap errors in spans and cache vendored assets.
|
|
56
|
+
config.to_prepare do
|
|
57
|
+
# This wraps errors in span not div
|
|
58
|
+
ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
|
|
59
|
+
"<span class=\"fieldWithErrors\">#{html_tag}</span>".html_safe
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# TODO: Is there a better way to cache assets in engines?
|
|
63
|
+
::ActionView::Helpers::AssetTagHelper.module_eval do
|
|
64
|
+
def asset_file_path(path)
|
|
65
|
+
unless File.exist?(return_path = File.join(config.assets_dir, path.split('?').first))
|
|
66
|
+
::Refinery::Plugins.registered.collect{|p| p.pathname}.compact.each do |pathname|
|
|
67
|
+
if File.exist?(plugin_asset_path = File.join(pathname.to_s, 'public', path.split('?').first))
|
|
68
|
+
return_path = plugin_asset_path.to_s
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
return_path
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Register the plugin
|
|
79
|
+
config.after_initialize do
|
|
80
|
+
::Refinery::Plugin.register do |plugin|
|
|
81
|
+
plugin.name ="refinery_core"
|
|
82
|
+
plugin.class_name ="RefineryEngine"
|
|
83
|
+
plugin.version = ::Refinery.version
|
|
84
|
+
plugin.hide_from_menu = true
|
|
85
|
+
plugin.always_allow_access = true
|
|
86
|
+
plugin.menu_match = /(refinery|admin)\/(refinery_core)$/
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Register the dialogs plugin
|
|
90
|
+
::Refinery::Plugin.register do |plugin|
|
|
91
|
+
plugin.name = "refinery_dialogs"
|
|
92
|
+
plugin.version = ::Refinery.version
|
|
93
|
+
plugin.hide_from_menu = true
|
|
94
|
+
plugin.always_allow_access = true
|
|
95
|
+
plugin.menu_match = /(refinery|admin)\/(refinery_)?dialogs/
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Run other initializer code that used to be in config/initializers/
|
|
100
|
+
initializer "serve static assets" do |app|
|
|
101
|
+
app.middleware.insert_after ::ActionDispatch::Static, ::ActionDispatch::Static, "#{root}/public"
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
initializer 'add catch all routes' do |app|
|
|
105
|
+
app.routes_reloader.paths << File.expand_path('../refinery/catch_all_routes.rb', __FILE__)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
initializer 'add presenters' do |app|
|
|
109
|
+
app.config.autoload_paths += [
|
|
110
|
+
Rails.root.join("app", "presenters"),
|
|
111
|
+
Rails.root.join("vendor", "**", "**", "app", "presenters"),
|
|
112
|
+
Refinery.roots.map{|r| r.join("**", "app", "presenters")}
|
|
113
|
+
].flatten
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
initializer "configure acts_as_indexed" do |app|
|
|
117
|
+
ActsAsIndexed.configure do |config|
|
|
118
|
+
config.index_file = Rails.root.join('tmp', 'index')
|
|
119
|
+
config.index_file_depth = 3
|
|
120
|
+
config.min_word_size = 3
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
initializer "fix rack <= 1.2.1" do |app|
|
|
125
|
+
::Rack::Utils.module_eval do
|
|
126
|
+
def escape(s)
|
|
127
|
+
regexp = case
|
|
128
|
+
when RUBY_VERSION >= "1.9" && s.encoding === Encoding.find('UTF-8')
|
|
129
|
+
/([^ a-zA-Z0-9_.-]+)/u
|
|
130
|
+
else
|
|
131
|
+
/([^ a-zA-Z0-9_.-]+)/n
|
|
132
|
+
end
|
|
133
|
+
s.to_s.gsub(regexp) {
|
|
134
|
+
'%'+$1.unpack('H2'*bytesize($1)).join('%').upcase
|
|
135
|
+
}.tr(' ', '+')
|
|
136
|
+
end
|
|
137
|
+
end if ::Rack.version <= "1.2.1"
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
initializer 'set will_paginate link labels' do |app|
|
|
141
|
+
WillPaginate::ViewHelpers.pagination_options[:previous_label] = "«".html_safe
|
|
142
|
+
WillPaginate::ViewHelpers.pagination_options[:next_label] = "»".html_safe
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
initializer 'ensure devise is initialised' do |app|
|
|
146
|
+
unless Rails.root.join('config', 'initializers', 'devise.rb').file?
|
|
147
|
+
load Refinery.roots('core').join(*%w(lib generators templates config initializers devise.rb))
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
::Refinery.engines << 'core'
|
data/lib/tasks/doc.rake
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
namespace :doc do
|
|
2
|
+
|
|
3
|
+
task :app => [:refinery]
|
|
4
|
+
|
|
5
|
+
desc "Generate documentation for the application"
|
|
6
|
+
Rake::RDocTask.new(:refinery) { |rdoc|
|
|
7
|
+
rdoc.title = "Refinery CMS Documentation"
|
|
8
|
+
rdoc.main = "readme.md"
|
|
9
|
+
rdoc.options = ['--inline-source']
|
|
10
|
+
rdoc.rdoc_files.include('lib/**/*.rb',
|
|
11
|
+
'lib/*',
|
|
12
|
+
'app/**/*.rb',
|
|
13
|
+
'db/seeds.rb',
|
|
14
|
+
'config/preinitializer.rb',
|
|
15
|
+
'vendor/engines/images/**/*.rb',
|
|
16
|
+
'vendor/engines/authentication/**/*.rb',
|
|
17
|
+
'vendor/engines/dashboard/**/*.rb',
|
|
18
|
+
'vendor/engines/inquiries/**/*.rb',
|
|
19
|
+
'vendor/engines/news/**/*.rb',
|
|
20
|
+
'vendor/engines/pages/**/*.rb',
|
|
21
|
+
'vendor/engines/refinery/**/*.rb',
|
|
22
|
+
'vendor/engines/refinery_dialogs/**/*.rb',
|
|
23
|
+
'vendor/engines/refinery_settings/**/*.rb',
|
|
24
|
+
'vendor/engines/resources/**/*.rb',
|
|
25
|
+
'vendor/engines/themes/**/*.rb',
|
|
26
|
+
'readme.md', 'license.md', 'vendor/engines/themes/readme.md')
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
end
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
namespace :refinery do
|
|
2
|
+
|
|
3
|
+
desc "Override files for use in an application"
|
|
4
|
+
task :override => :environment do
|
|
5
|
+
require 'fileutils'
|
|
6
|
+
|
|
7
|
+
if (view = ENV["view"]).present?
|
|
8
|
+
pattern = "#{view.split("/").join(File::SEPARATOR)}*.{erb,builder}"
|
|
9
|
+
looking_for = Refinery::Plugins.registered.pathnames.map{|p| p.join("app", "views", pattern).to_s}
|
|
10
|
+
|
|
11
|
+
# copy in the matches
|
|
12
|
+
matches = looking_for.collect{|d| Dir[d]}.flatten.compact.uniq
|
|
13
|
+
if matches.any?
|
|
14
|
+
matches.each do |match|
|
|
15
|
+
dir = match.split("/app/views/").last.split('/')
|
|
16
|
+
file = dir.pop # get rid of the file.
|
|
17
|
+
dir = dir.join(File::SEPARATOR) # join directory back together
|
|
18
|
+
|
|
19
|
+
unless (theme = ENV["theme"]).present?
|
|
20
|
+
destination_dir = Rails.root.join("app", "views", dir)
|
|
21
|
+
else
|
|
22
|
+
destination_dir = Rails.root.join("themes", theme, "views", dir)
|
|
23
|
+
end
|
|
24
|
+
FileUtils.mkdir_p(destination_dir)
|
|
25
|
+
FileUtils.cp match, (destination = File.join(destination_dir, file))
|
|
26
|
+
|
|
27
|
+
puts "Copied view template file to #{destination.gsub("#{Rails.root.to_s}#{File::SEPARATOR}", '')}"
|
|
28
|
+
end
|
|
29
|
+
else
|
|
30
|
+
puts "Couldn't match any view template files in any engines like #{view}"
|
|
31
|
+
end
|
|
32
|
+
elsif (controller = ENV["controller"]).present?
|
|
33
|
+
pattern = "#{controller.split("/").join(File::SEPARATOR)}*.rb"
|
|
34
|
+
looking_for = Refinery::Plugins.registered.pathnames.map{|p| p.join("app", "controllers", pattern).to_s}
|
|
35
|
+
|
|
36
|
+
# copy in the matches
|
|
37
|
+
matches = looking_for.collect{|d| Dir[d]}.flatten.compact.uniq
|
|
38
|
+
if matches.any?
|
|
39
|
+
matches.each do |match|
|
|
40
|
+
dir = match.split("/app/controllers/").last.split('/')
|
|
41
|
+
file = dir.pop # get rid of the file.
|
|
42
|
+
dir = dir.join(File::SEPARATOR) # join directory back together
|
|
43
|
+
|
|
44
|
+
destination_dir = Rails.root.join("app", "controllers", dir)
|
|
45
|
+
FileUtils.mkdir_p(destination_dir)
|
|
46
|
+
FileUtils.cp match, (destination = File.join(destination_dir, file))
|
|
47
|
+
|
|
48
|
+
puts "Copied controller file to #{destination.gsub("#{Rails.root.to_s}#{File::SEPARATOR}", '')}"
|
|
49
|
+
end
|
|
50
|
+
else
|
|
51
|
+
puts "Couldn't match any controller files in any engines like #{controller}"
|
|
52
|
+
end
|
|
53
|
+
elsif (model = ENV["model"]).present?
|
|
54
|
+
pattern = "#{model.split("/").join(File::SEPARATOR)}*.rb"
|
|
55
|
+
looking_for = Refinery::Plugins.registered.pathnames.map{|p| p.join("app", "models", pattern).to_s}
|
|
56
|
+
|
|
57
|
+
# copy in the matches
|
|
58
|
+
matches = looking_for.collect{|d| Dir[d]}.flatten.compact.uniq
|
|
59
|
+
if matches.any?
|
|
60
|
+
matches.each do |match|
|
|
61
|
+
dir = match.split("/app/models/").last.split('/')
|
|
62
|
+
file = dir.pop # get rid of the file.
|
|
63
|
+
dir = dir.join(File::SEPARATOR) # join directory back together
|
|
64
|
+
|
|
65
|
+
destination_dir = Rails.root.join("app", "models", dir)
|
|
66
|
+
FileUtils.mkdir_p(destination_dir)
|
|
67
|
+
FileUtils.cp match, (destination = File.join(destination_dir, file))
|
|
68
|
+
|
|
69
|
+
puts "Copied model file to #{destination.gsub("#{Rails.root.to_s}#{File::SEPARATOR}", '')}"
|
|
70
|
+
end
|
|
71
|
+
else
|
|
72
|
+
puts "Couldn't match any model files in any engines like #{model}"
|
|
73
|
+
end
|
|
74
|
+
elsif (javascripts = ENV["javascript"]).present?
|
|
75
|
+
pattern = "#{javascripts.split("/").join(File::SEPARATOR)}*.js"
|
|
76
|
+
looking_for = Refinery::Plugins.registered.pathnames.map{|p| p.join("public", "javascripts", pattern).to_s}
|
|
77
|
+
|
|
78
|
+
# copy in the matches
|
|
79
|
+
matches = looking_for.collect{|d| Dir[d]}.flatten.compact.uniq
|
|
80
|
+
if matches.any?
|
|
81
|
+
matches.each do |match|
|
|
82
|
+
dir = match.split("/public/javascripts/").last.split('/')
|
|
83
|
+
file = dir.pop # get rid of the file.
|
|
84
|
+
dir = dir.join(File::SEPARATOR) # join directory back together
|
|
85
|
+
|
|
86
|
+
destination_dir = Rails.root.join("public", "javascripts", dir)
|
|
87
|
+
FileUtils.mkdir_p(destination_dir)
|
|
88
|
+
FileUtils.cp match, (destination = File.join(destination_dir, file))
|
|
89
|
+
|
|
90
|
+
puts "Copied javascript file to #{destination.gsub("#{Rails.root.to_s}#{File::SEPARATOR}", '')}"
|
|
91
|
+
end
|
|
92
|
+
else
|
|
93
|
+
puts "Couldn't match any javascript files in any engines like #{javascript}"
|
|
94
|
+
end
|
|
95
|
+
elsif (stylesheets = ENV["stylesheet"]).present?
|
|
96
|
+
pattern = "#{stylesheets.split("/").join(File::SEPARATOR)}*.css"
|
|
97
|
+
looking_for = Refinery::Plugins.registered.pathnames.map{|p| p.join("public", "stylesheets", pattern).to_s}
|
|
98
|
+
|
|
99
|
+
# copy in the matches
|
|
100
|
+
matches = looking_for.collect{|d| Dir[d]}.flatten.compact.uniq
|
|
101
|
+
if matches.any?
|
|
102
|
+
matches.each do |match|
|
|
103
|
+
dir = match.split("/public/stylesheets/").last.split('/')
|
|
104
|
+
file = dir.pop # get rid of the file.
|
|
105
|
+
dir = dir.join(File::SEPARATOR) # join directory back together
|
|
106
|
+
|
|
107
|
+
destination_dir = Rails.root.join("public", "stylesheets", dir)
|
|
108
|
+
FileUtils.mkdir_p(destination_dir)
|
|
109
|
+
FileUtils.cp match, (destination = File.join(destination_dir, file))
|
|
110
|
+
|
|
111
|
+
puts "Copied stylesheet file to #{destination.gsub("#{Rails.root.to_s}#{File::SEPARATOR}", '')}"
|
|
112
|
+
end
|
|
113
|
+
else
|
|
114
|
+
puts "Couldn't match any stylesheet files in any engines like #{stylesheets}"
|
|
115
|
+
end
|
|
116
|
+
else
|
|
117
|
+
puts "You didn't specify anything to override. Here's some examples:"
|
|
118
|
+
{
|
|
119
|
+
:view => ['pages/home', 'pages/home theme=demolicious', '**/*menu', 'shared/_menu_branch'],
|
|
120
|
+
:javascript => %w(jquery),
|
|
121
|
+
:stylesheet => %w(refinery/site_bar),
|
|
122
|
+
:controller => %w(pages),
|
|
123
|
+
:model => %w(page)
|
|
124
|
+
}.each do |type, examples|
|
|
125
|
+
examples.each do |example|
|
|
126
|
+
puts "rake refinery:override #{type}=#{example}"
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
desc "Un-crudify a method on a controller that uses crudify"
|
|
133
|
+
task :uncrudify => :environment do
|
|
134
|
+
if (model_name = ENV["model"]).present? and (action = ENV["action"]).present?
|
|
135
|
+
singular_name = model_name.to_s
|
|
136
|
+
class_name = singular_name.camelize
|
|
137
|
+
plural_name = singular_name.pluralize
|
|
138
|
+
|
|
139
|
+
crud_lines = Refinery.roots('core').join('lib', 'refinery', 'crud.rb').read
|
|
140
|
+
if (matches = crud_lines.scan(/(\ +)(def #{action}.+?protected)/m).first).present? and
|
|
141
|
+
(method_lines = "#{matches.last.split(%r{^#{matches.first}end}).first.strip}\nend".split("\n")).many?
|
|
142
|
+
indent = method_lines.second.index(%r{[^ ]})
|
|
143
|
+
crud_method = method_lines.join("\n").gsub(/^#{" " * indent}/, " ")
|
|
144
|
+
|
|
145
|
+
default_crud_options = ::Refinery::Crud.default_options(model_name)
|
|
146
|
+
crud_method.gsub!('#{options[:redirect_to_url]}', default_crud_options[:redirect_to_url])
|
|
147
|
+
crud_method.gsub!('#{options[:conditions].inspect}', default_crud_options[:conditions].inspect)
|
|
148
|
+
crud_method.gsub!('#{options[:title_attribute]}', default_crud_options[:title_attribute])
|
|
149
|
+
crud_method.gsub!('#{singular_name}', singular_name)
|
|
150
|
+
crud_method.gsub!('#{class_name}', class_name)
|
|
151
|
+
crud_method.gsub!('#{plural_name}', plural_name)
|
|
152
|
+
crud_method.gsub!('\\#{', '#{')
|
|
153
|
+
|
|
154
|
+
puts crud_method
|
|
155
|
+
end
|
|
156
|
+
else
|
|
157
|
+
puts "You didn't specify anything to uncrudify. Here's some examples:"
|
|
158
|
+
puts "rake refinery:uncrudify model=page action=create"
|
|
159
|
+
puts "rake refinery:uncrudify model=product action=new"
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
desc "Update the core files with the gem"
|
|
164
|
+
task :update => :environment do
|
|
165
|
+
verbose = ENV["verbose"] || false
|
|
166
|
+
require 'fileutils'
|
|
167
|
+
|
|
168
|
+
# Clean up mistakes
|
|
169
|
+
if (bad_migration = Rails.root.join('db', 'migrate', '20100913234704_add_cached_slug_to_pages.rb')).file?
|
|
170
|
+
FileUtils::rm bad_migration
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
unless (devise_config = Rails.root.join('config', 'initializers', 'devise.rb')).file?
|
|
174
|
+
devise_config.parent.mkpath
|
|
175
|
+
FileUtils::cp Refinery.roots('core').join(*%w(lib generators templates config initializers devise.rb)),
|
|
176
|
+
devise_config,
|
|
177
|
+
:verbose => verbose
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
(contents = Rails.root.join('Gemfile').read).gsub!("group :test do", "group :development, :test do")
|
|
181
|
+
Rails.root.join('Gemfile').open("w") do |f|
|
|
182
|
+
f.puts contents
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
# copy in any new migrations, except for ones that create schemas (this is an update!)
|
|
186
|
+
# or ones that exist already.
|
|
187
|
+
Rails.root.join("db", "migrate").mkpath
|
|
188
|
+
migrations = Pathname.glob(Refinery.roots.map{|r| r.join("db", "migrate", "*.rb")}).reject{|m|
|
|
189
|
+
m.to_s =~ %r{\d+_create_refinerycms_.+?_schema\.rb} or
|
|
190
|
+
Dir[Rails.root.join('db', 'migrate', "*#{m.split.last.to_s.split(/\d+_/).last}")].any?
|
|
191
|
+
}
|
|
192
|
+
FileUtils::cp migrations,
|
|
193
|
+
Rails.root.join('db', 'migrate').cleanpath.to_s,
|
|
194
|
+
:verbose => verbose
|
|
195
|
+
|
|
196
|
+
Rails.root.join("db", "seeds").mkpath
|
|
197
|
+
Pathname.glob(Refinery.roots.map{|r| r.join('db', 'seeds', '*.rb')}).each do |seed|
|
|
198
|
+
unless (destination = Rails.root.join('db', 'seeds', seed.split.last)).exist?
|
|
199
|
+
FileUtils::cp seed, destination.to_s, :verbose => verbose
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
puts "\n" if verbose
|
|
204
|
+
|
|
205
|
+
unless (ENV["from_installer"] || 'false').to_s == 'true'
|
|
206
|
+
puts "\n=== ACTION REQUIRED ==="
|
|
207
|
+
puts "Please run rake db:migrate to ensure your database is at the correct version.\n"
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
namespace :cache do
|
|
212
|
+
desc "Eliminate existing cache files for javascript and stylesheet resources in default directories"
|
|
213
|
+
task :clear => :environment do
|
|
214
|
+
FileUtils.rm(Dir[Rails.root.join("public", "javascripts", "cache", "[^.]*").cleanpath.to_s])
|
|
215
|
+
FileUtils.rm(Dir[Rails.root.join("public", "stylesheets", "cache", "[^.]*").cleanpath.to_s])
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
desc 'Removes trailing whitespace across the entire application.'
|
|
222
|
+
task :whitespace do
|
|
223
|
+
require 'rbconfig'
|
|
224
|
+
if Config::CONFIG['host_os'] =~ /linux/
|
|
225
|
+
sh %{find . -name '*.*rb' -exec sed -i 's/\t/ /g' {} \\; -exec sed -i 's/ *$//g' {} \\; }
|
|
226
|
+
elsif Config::CONFIG['host_os'] =~ /darwin/
|
|
227
|
+
sh %{find . -name '*.*rb' -exec sed -i '' 's/\t/ /g' {} \\; -exec sed -i '' 's/ *$//g' {} \\; }
|
|
228
|
+
else
|
|
229
|
+
puts "This doesn't work on systems other than OSX or Linux. Please use a custom whitespace tool for your platform '#{Config::CONFIG["host_os"]}'."
|
|
230
|
+
end
|
|
231
|
+
end
|