refinerycms-core 2.0.10 → 2.1.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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/refinery/admin.js.erb +126 -234
- data/app/assets/javascripts/refinery/ajaxy_pagination.js.coffee +1 -1
- data/app/assets/javascripts/refinery/boot_wym.js.erb +4 -8
- data/app/assets/javascripts/refinery/core.js +1 -1
- data/app/assets/javascripts/refinery/interface.js.coffee.erb +3 -16
- data/app/assets/javascripts/refinery/modal_dialogs.js.erb +0 -3
- data/app/assets/javascripts/refinery/nestedsortables.js +312 -312
- data/app/assets/javascripts/refinery/refinery.js.erb +14 -15
- data/app/assets/javascripts/refinery/site_bar.js +3 -9
- data/app/assets/javascripts/refinery/sortable_list.js +145 -0
- data/app/assets/javascripts/refinery/sortable_menu.js.coffee +3 -4
- data/app/assets/javascripts/refinery/submit_continue.js.coffee.erb +1 -2
- data/app/assets/javascripts/refinery/tree.js +3 -3
- data/app/assets/javascripts/refinery/wymeditor.js +6 -6
- data/{public → app/assets/javascripts}/wymeditor/GPL-license.txt +0 -0
- data/{public → app/assets/javascripts}/wymeditor/MIT-license.txt +0 -0
- data/{public → app/assets/javascripts}/wymeditor/README +0 -0
- data/app/assets/javascripts/wymeditor/browsers/mozilla.js.erb +10 -11
- data/app/assets/javascripts/wymeditor/browsers/webkit.js.erb +17 -18
- data/app/assets/javascripts/wymeditor/classes.js.erb +3 -5
- data/app/assets/javascripts/wymeditor/functions.js.erb +5 -1
- data/app/assets/javascripts/wymeditor/prototypes.js.erb +0 -3
- data/app/assets/javascripts/wymeditor/setup.js.erb +5 -5
- data/app/assets/javascripts/wymeditor/skins/refinery/skin.js +1 -4
- data/app/assets/javascripts/wymeditor/validators.js.erb +3 -2
- data/app/assets/stylesheets/{formatting.css.scss → refinery/formatting.css.scss} +0 -0
- data/app/assets/stylesheets/refinery/layout.css.scss +41 -11
- data/app/assets/stylesheets/{theme.css.scss → refinery/theme.css.scss} +0 -0
- data/app/controllers/refinery/sitemap_controller.rb +1 -5
- data/app/helpers/refinery/admin_helper.rb +6 -0
- data/app/helpers/refinery/image_helper.rb +2 -1
- data/app/helpers/refinery/menu_helper.rb +0 -49
- data/app/helpers/refinery/meta_helper.rb +7 -3
- data/app/helpers/refinery/site_bar_helper.rb +3 -15
- data/app/models/refinery/core/base_model.rb +2 -0
- data/{lib → app/presenters}/refinery/base_presenter.rb +1 -2
- data/app/views/layouts/application.html.erb +8 -7
- data/app/views/refinery/_content_page.html.erb +1 -1
- data/app/views/refinery/_google_analytics.html.erb +12 -5
- data/app/views/refinery/_head.html.erb +11 -15
- data/app/views/refinery/_header.html.erb +1 -4
- data/app/views/refinery/_javascripts.html.erb +14 -8
- data/app/views/refinery/_site_bar.html.erb +4 -4
- data/app/views/refinery/admin/_form_advanced_options_menu.html.erb +12 -0
- data/app/views/refinery/admin/_javascripts.html.erb +13 -1
- data/app/views/refinery/admin/_locale_picker.html.erb +11 -0
- data/app/views/refinery/admin/_make_sortable.html.erb +8 -5
- data/app/views/refinery/admin/_search.html.erb +1 -7
- data/app/views/refinery/admin/_search_header.html.erb +1 -0
- data/app/views/refinery/admin/_wysiwyg.html.erb +16 -0
- data/config/initializers/will_paginate_monkeypatch.rb +1 -1
- data/config/locales/bg.yml +5 -1
- data/config/locales/cs.yml +5 -1
- data/config/locales/da.yml +5 -1
- data/config/locales/de.yml +7 -3
- data/config/locales/el.yml +5 -1
- data/config/locales/en.yml +7 -1
- data/config/locales/es.yml +5 -1
- data/config/locales/fi.yml +5 -1
- data/config/locales/fr.yml +5 -1
- data/config/locales/hu.yml +82 -0
- data/config/locales/it.yml +38 -34
- data/config/locales/ja.yml +5 -1
- data/config/locales/ko.yml +5 -1
- data/config/locales/lt.yml +5 -1
- data/config/locales/lv.yml +5 -1
- data/config/locales/nb.yml +5 -1
- data/config/locales/nl.yml +36 -29
- data/config/locales/pl.yml +8 -1
- data/config/locales/pt-BR.yml +7 -3
- data/config/locales/pt.yml +82 -0
- data/config/locales/rs.yml +5 -1
- data/config/locales/ru.yml +5 -1
- data/config/locales/sk.yml +10 -3
- data/config/locales/sl.yml +5 -1
- data/config/locales/sv.yml +5 -1
- data/config/locales/tr.yml +82 -0
- data/config/locales/uk.yml +77 -0
- data/config/locales/vi.yml +5 -1
- data/config/locales/zh-CN.yml +5 -1
- data/config/locales/zh-TW.yml +5 -1
- data/config/routes.rb +3 -3
- data/lib/generators/refinery/cms/cms_generator.rb +29 -0
- data/lib/generators/refinery/cms/templates/.gitignore +1 -0
- data/lib/generators/refinery/cms/templates/app/views/sitemap/index.xml.builder +13 -13
- data/lib/generators/refinery/core/templates/config/initializers/refinery/core.rb.erb +8 -12
- data/lib/generators/refinery/dummy/templates/rails/database.yml +3 -3
- data/lib/generators/refinery/engine/engine_generator.rb +8 -12
- data/lib/generators/refinery/engine/templates/Gemfile +5 -39
- data/lib/generators/refinery/engine/templates/app/controllers/refinery/namespace/admin/plural_name_controller.rb.erb +4 -4
- data/lib/generators/refinery/engine/templates/app/models/refinery/namespace/singular_name.rb.erb +2 -3
- data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/_actions.html.erb +1 -1
- data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/_form.html.erb +31 -33
- data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/_records.html.erb +1 -3
- data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/_singular_name.html.erb +2 -2
- data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/index.html.erb +1 -1
- data/lib/generators/refinery/engine/templates/config/locales/cs.yml +28 -0
- data/lib/generators/refinery/engine/templates/config/locales/it.yml +28 -0
- data/lib/generators/refinery/engine/templates/config/locales/nl.yml +6 -6
- data/lib/generators/refinery/engine/templates/config/locales/tr.yml +28 -0
- data/lib/generators/refinery/engine/templates/config/routes.rb.erb +2 -2
- data/lib/generators/refinery/engine/templates/db/seeds.rb.erb +1 -1
- data/lib/generators/refinery/engine/templates/lib/generators/refinery/extension_plural_name_generator.rb.erb +1 -1
- data/lib/generators/refinery/engine/templates/lib/refinery/plural_name/engine.rb.erb +1 -1
- data/lib/generators/refinery/engine/templates/spec/{requests → features}/refinery/namespace/admin/plural_name_spec.rb.erb +1 -1
- data/lib/generators/refinery/engine/templates/spec/spec_helper.rb +25 -49
- data/lib/generators/refinery/form/form_generator.rb +1 -13
- data/lib/generators/refinery/form/templates/app/models/refinery/namespace/singular_name.rb.erb +0 -4
- data/lib/generators/refinery/form/templates/app/views/refinery/namespace/admin/plural_name/_records.html.erb +2 -2
- data/lib/generators/refinery/form/templates/app/views/refinery/namespace/admin/plural_name/spam.html.erb +7 -6
- data/lib/generators/refinery/form/templates/config/locales/nl.yml +29 -29
- data/lib/generators/refinery/form/templates/config/locales/tr.yml +78 -0
- data/lib/generators/refinery/form/templates/config/routes.rb.erb +1 -1
- data/lib/generators/refinery/form/templates/db/migrate/1_create_plural_name.rb.erb +2 -6
- data/lib/generators/refinery/form/templates/db/seeds.rb.erb +1 -1
- data/lib/generators/refinery/form/templates/lib/refinery/plural_name/engine.rb.erb +1 -1
- data/lib/generators/refinery/form/templates/refinerycms-plural_name.gemspec +2 -5
- data/lib/refinery.rb +191 -0
- data/lib/refinery/admin/base_controller.rb +27 -16
- data/lib/refinery/application_controller.rb +15 -47
- data/lib/refinery/cli.rb +48 -27
- data/lib/refinery/core.rb +7 -183
- data/lib/refinery/core/configuration.rb +17 -9
- data/lib/refinery/core/engine.rb +11 -47
- data/lib/refinery/crud.rb +81 -66
- data/lib/refinery/engine.rb +52 -55
- data/lib/refinery/ext/action_view/helpers/form_builder.rb +2 -0
- data/lib/refinery/extension_generation.rb +208 -110
- data/lib/refinery/menu.rb +16 -7
- data/lib/refinery/menu_item.rb +56 -54
- data/lib/refinery/plugin.rb +11 -3
- data/lib/refinery/plugins.rb +14 -1
- data/lib/refinery/version.rb +3 -3
- data/refinerycms-core.gemspec +11 -10
- data/spec/controllers/refinery/admin/dummy_controller_spec.rb +57 -0
- data/spec/controllers/refinery/admin/refinery_core_controller_spec.rb +3 -4
- data/spec/controllers/refinery/sitemap_controller_spec.rb +1 -14
- data/spec/{requests → features}/refinery/admin/custom_assets_spec.rb +1 -1
- data/spec/{requests → features}/refinery/admin/dialogs_spec.rb +1 -1
- data/spec/features/refinery/admin/xhr_paging_spec.rb +55 -0
- data/spec/features/refinery/application_layout_spec.rb +19 -0
- data/spec/features/refinery/core_spec.rb +14 -0
- data/spec/{requests → features}/refinery/site_bar_spec.rb +1 -1
- data/spec/helpers/refinery/meta_helper_spec.rb +25 -0
- data/spec/lib/generators/refinery/cms/cms_generator_spec.rb +61 -0
- data/spec/lib/generators/refinery/engine/engine_generator_multiple_resources_spec.rb +28 -1
- data/spec/lib/generators/refinery/engine/engine_generator_sanity_check_spec.rb +7 -7
- data/spec/lib/generators/refinery/engine/engine_generator_spec.rb +69 -8
- data/spec/lib/generators/refinery/engine/engine_generator_with_i18n_spec.rb +0 -2
- data/spec/lib/generators/refinery/form/form_generator_spec.rb +9 -1
- data/spec/lib/refinery/application_controller_spec.rb +48 -63
- data/spec/lib/refinery/cli_spec.rb +136 -0
- data/spec/lib/refinery/core/configuration_spec.rb +17 -0
- data/spec/lib/refinery/core_spec.rb +19 -13
- data/spec/lib/refinery/crud_spec.rb +0 -4
- data/spec/lib/refinery/menu_spec.rb +16 -26
- data/spec/support/refinery.rb +6 -1
- data/{app → vendor}/assets/javascripts/jquery/GPL-LICENSE.txt +0 -0
- data/{app → vendor}/assets/javascripts/jquery/MIT-LICENSE.txt +0 -0
- data/vendor/assets/javascripts/jquery/jquery.browser.js +49 -0
- data/{app → vendor}/assets/javascripts/jquery/jquery.html5-placeholder-shim.js +0 -0
- data/{app → vendor}/assets/javascripts/jquery/jquery.jcarousel.js +0 -0
- data/{app → vendor}/assets/javascripts/jquery/jquery.textTruncate.js +0 -0
- data/{app → vendor}/assets/javascripts/jquery/jquery.timers.js +0 -0
- data/{app → vendor}/assets/javascripts/modernizr-min.js +0 -0
- metadata +231 -78
- data/app/assets/images/refinery/resolve_digital_footer_logo.png +0 -0
- data/app/assets/javascripts/dd_belatedpng.js +0 -13
- data/app/assets/javascripts/jquery/jquery.corner.js +0 -345
- data/app/assets/stylesheets/application.css.scss +0 -55
- data/app/assets/stylesheets/home.css.scss +0 -3
- data/app/views/refinery/_ie6check.html.erb +0 -63
- data/app/views/refinery/_menu.html.erb +0 -20
- data/app/views/refinery/_menu_branch.html.erb +0 -19
- data/lib/generators/refinery/engine/templates/Guardfile +0 -27
- data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/_locale_picker.html.erb +0 -11
- data/lib/refinery/catch_all_routes.rb +0 -3
- data/lib/tasks/yard.rake +0 -30
- data/spec/requests/refinery/admin/controller_restriction_spec.rb +0 -27
- data/spec/requests/refinery/search_spec.rb +0 -71
|
@@ -4,15 +4,15 @@ module Refinery
|
|
|
4
4
|
module Admin
|
|
5
5
|
module BaseController
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
def self.included(base)
|
|
8
|
+
base.layout :layout?
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
base.before_filter :require_refinery_users!, :force_ssl!,
|
|
11
|
+
:authenticate_refinery_user!, :restrict_plugins,
|
|
12
|
+
:restrict_controller
|
|
13
|
+
base.after_filter :store_location?, :only => [:index] # for redirect_back_or_default
|
|
11
14
|
|
|
12
|
-
|
|
13
|
-
after_filter :store_location?, :except => [:new, :create, :edit, :update, :destroy, :update_positions] # for redirect_back_or_default
|
|
14
|
-
|
|
15
|
-
helper_method :searching?, :group_by_date
|
|
15
|
+
base.helper_method :searching?, :group_by_date
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def admin?
|
|
@@ -23,7 +23,11 @@ module Refinery
|
|
|
23
23
|
params[:search].present?
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
protected
|
|
27
|
+
|
|
28
|
+
def force_ssl!
|
|
29
|
+
redirect_to :protocol => 'https' if Refinery::Core.force_ssl && !request.ssl?
|
|
30
|
+
end
|
|
27
31
|
|
|
28
32
|
def group_by_date(records)
|
|
29
33
|
new_records = []
|
|
@@ -37,6 +41,10 @@ module Refinery
|
|
|
37
41
|
new_records
|
|
38
42
|
end
|
|
39
43
|
|
|
44
|
+
def require_refinery_users!
|
|
45
|
+
redirect_to refinery.signup_path if just_installed? && controller_name != 'users'
|
|
46
|
+
end
|
|
47
|
+
|
|
40
48
|
def restrict_plugins
|
|
41
49
|
current_length = (plugins = current_refinery_user.authorized_plugins).length
|
|
42
50
|
|
|
@@ -51,26 +59,29 @@ module Refinery
|
|
|
51
59
|
end
|
|
52
60
|
|
|
53
61
|
def restrict_controller
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
path = params[:controller].gsub('admin/', '')
|
|
57
|
-
unless ::Refinery::Plugins.active.any? {|plugin| path =~ Regexp.new(plugin.menu_match) }
|
|
58
|
-
logger.warn "'#{current_refinery_user.username}' tried to access '#{path}' but was rejected."
|
|
62
|
+
unless allow_controller? params[:controller].gsub 'admin/', ''
|
|
63
|
+
logger.warn "'#{current_refinery_user.username}' tried to access '#{params[:controller]}' but was rejected."
|
|
59
64
|
error_404
|
|
60
65
|
end
|
|
61
66
|
end
|
|
62
67
|
|
|
63
|
-
|
|
68
|
+
private
|
|
69
|
+
|
|
70
|
+
def allow_controller?(controller_path)
|
|
71
|
+
::Refinery::Plugins.active.any? {|plugin|
|
|
72
|
+
Regexp.new(plugin.menu_match) === controller_path
|
|
73
|
+
}
|
|
74
|
+
end
|
|
64
75
|
|
|
65
76
|
def layout?
|
|
66
|
-
"refinery/admin#{
|
|
77
|
+
"refinery/admin#{'_dialog' if from_dialog?}"
|
|
67
78
|
end
|
|
68
79
|
|
|
69
80
|
# Check whether it makes sense to return the user to the last page they
|
|
70
81
|
# were at instead of the default e.g. refinery_admin_pages_path
|
|
71
82
|
# right now we just want to snap back to index actions and definitely not to dialogues.
|
|
72
83
|
def store_location?
|
|
73
|
-
store_location unless
|
|
84
|
+
store_location unless request.xhr? || from_dialog?
|
|
74
85
|
end
|
|
75
86
|
|
|
76
87
|
# Override authorized? so that only users with the Refinery role can admin the website.
|
|
@@ -1,42 +1,29 @@
|
|
|
1
1
|
module Refinery
|
|
2
2
|
module ApplicationController
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
def self.included(base) # Extend controller
|
|
5
|
+
base.helper_method :home_page?, :local_request?, :just_installed?,
|
|
6
|
+
:from_dialog?, :admin?, :login?
|
|
5
7
|
|
|
6
|
-
|
|
7
|
-
helper_method :home_page?,
|
|
8
|
-
:local_request?,
|
|
9
|
-
:just_installed?,
|
|
10
|
-
:from_dialog?,
|
|
11
|
-
:admin?,
|
|
12
|
-
:login?
|
|
8
|
+
base.protect_from_forgery # See ActionController::RequestForgeryProtection
|
|
13
9
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
send :include, Refinery::Crud # basic create, read, update and delete methods
|
|
17
|
-
|
|
18
|
-
send :before_filter, :refinery_user_required?
|
|
19
|
-
|
|
20
|
-
send :before_filter, :force_ssl?, :if => :admin?
|
|
21
|
-
|
|
22
|
-
send :after_filter, :store_current_location!,
|
|
23
|
-
:if => Proc.new {|c| send(:refinery_user?) }
|
|
10
|
+
base.send :include, Refinery::Crud # basic create, read, update and delete methods
|
|
24
11
|
|
|
25
12
|
if Refinery::Core.rescue_not_found
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
13
|
+
base.rescue_from ActiveRecord::RecordNotFound,
|
|
14
|
+
::AbstractController::ActionNotFound,
|
|
15
|
+
ActionView::MissingTemplate,
|
|
16
|
+
:with => :error_404
|
|
30
17
|
end
|
|
31
18
|
end
|
|
32
19
|
|
|
33
20
|
def admin?
|
|
34
|
-
|
|
21
|
+
%r{^admin/} === controller_name
|
|
35
22
|
end
|
|
36
23
|
|
|
37
24
|
def error_404(exception=nil)
|
|
38
25
|
# fallback to the default 404.html page.
|
|
39
|
-
file = Rails.root.join
|
|
26
|
+
file = Rails.root.join 'public', '404.html'
|
|
40
27
|
file = Refinery.roots(:'refinery/core').join('public', '404.html') unless file.exist?
|
|
41
28
|
render :file => file.cleanpath.to_s.gsub(%r{#{file.extname}$}, ''),
|
|
42
29
|
:layout => false, :status => 404, :formats => [:html]
|
|
@@ -48,7 +35,7 @@ module Refinery
|
|
|
48
35
|
end
|
|
49
36
|
|
|
50
37
|
def home_page?
|
|
51
|
-
|
|
38
|
+
%r{^#{Regexp.escape(request.path)}} === refinery.root_path
|
|
52
39
|
end
|
|
53
40
|
|
|
54
41
|
def just_installed?
|
|
@@ -56,45 +43,26 @@ module Refinery
|
|
|
56
43
|
end
|
|
57
44
|
|
|
58
45
|
def local_request?
|
|
59
|
-
Rails.env.development?
|
|
46
|
+
Rails.env.development? || /(::1)|(127.0.0.1)|((192.168).*)/ === request.remote_ip
|
|
60
47
|
end
|
|
61
48
|
|
|
62
49
|
def login?
|
|
63
|
-
(
|
|
50
|
+
(/^(user|session)(|s)/ === controller_name && !admin?) || just_installed?
|
|
64
51
|
end
|
|
65
52
|
|
|
66
53
|
protected
|
|
67
54
|
|
|
68
|
-
def force_ssl?
|
|
69
|
-
redirect_to :protocol => 'https' if !request.ssl? && Refinery::Core.force_ssl
|
|
70
|
-
end
|
|
71
|
-
|
|
72
55
|
# use a different model for the meta information.
|
|
73
56
|
def present(model)
|
|
74
57
|
@meta = presenter_for(model).new(model)
|
|
75
58
|
end
|
|
76
59
|
|
|
77
|
-
def presenter_for(model, default
|
|
60
|
+
def presenter_for(model, default=BasePresenter)
|
|
78
61
|
return default if model.nil?
|
|
79
62
|
|
|
80
63
|
"#{model.class.name}Presenter".constantize
|
|
81
64
|
rescue NameError
|
|
82
65
|
default
|
|
83
66
|
end
|
|
84
|
-
|
|
85
|
-
def refinery_user_required?
|
|
86
|
-
if just_installed? and controller_name != 'users'
|
|
87
|
-
redirect_to refinery.new_refinery_user_registration_path
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
private
|
|
92
|
-
|
|
93
|
-
def store_current_location!
|
|
94
|
-
if admin? and request.get? and !request.xhr? and !from_dialog?
|
|
95
|
-
# ensure that we don't redirect to AJAX or POST/PUT/DELETE urls
|
|
96
|
-
session[:refinery_return_to] = request.path.sub('//', '/')
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
67
|
end
|
|
100
68
|
end
|
data/lib/refinery/cli.rb
CHANGED
|
@@ -4,6 +4,14 @@ module Refinery
|
|
|
4
4
|
class CLI < Thor
|
|
5
5
|
include Thor::Actions
|
|
6
6
|
|
|
7
|
+
no_tasks do
|
|
8
|
+
def source_paths
|
|
9
|
+
Refinery::Plugins.registered.pathnames.map{|p|
|
|
10
|
+
%w(app vendor).map{|dir| p.join(dir, @override_kind[:dir])}
|
|
11
|
+
}.flatten.uniq
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
7
15
|
OVERRIDES = {
|
|
8
16
|
:view => {
|
|
9
17
|
:glob => '*.{erb,builder}',
|
|
@@ -20,6 +28,11 @@ module Refinery
|
|
|
20
28
|
:dir => 'models',
|
|
21
29
|
:desc => 'model',
|
|
22
30
|
},
|
|
31
|
+
:helper => {
|
|
32
|
+
:glob => '*.rb',
|
|
33
|
+
:dir => 'helpers',
|
|
34
|
+
:desc => 'helper',
|
|
35
|
+
},
|
|
23
36
|
:presenter => {
|
|
24
37
|
:glob => '*.rb',
|
|
25
38
|
:dir => 'presenters',
|
|
@@ -31,7 +44,7 @@ module Refinery
|
|
|
31
44
|
:desc => 'javascript',
|
|
32
45
|
},
|
|
33
46
|
:stylesheet => {
|
|
34
|
-
:glob => '*.css
|
|
47
|
+
:glob => '*.css{,.scss}',
|
|
35
48
|
:dir => 'assets/stylesheets',
|
|
36
49
|
:desc => 'stylesheet',
|
|
37
50
|
},
|
|
@@ -52,6 +65,7 @@ module Refinery
|
|
|
52
65
|
:stylesheet => %w(home refinery/site_bar),
|
|
53
66
|
:controller => %w(pages),
|
|
54
67
|
:model => %w(page refinery/page),
|
|
68
|
+
:helper => %w(site_bar refinery/site_bar_helper),
|
|
55
69
|
:presenter => %w(refinery/page_presenter)
|
|
56
70
|
}.each do |type, examples|
|
|
57
71
|
examples.each do |example|
|
|
@@ -62,7 +76,7 @@ module Refinery
|
|
|
62
76
|
|
|
63
77
|
desc "uncrudify", "shows you the code that your controller using crudify is running for a given action"
|
|
64
78
|
def uncrudify(controller, action)
|
|
65
|
-
unless (controller_name = controller).present?
|
|
79
|
+
unless (controller_name = controller).present? && (action = action).present?
|
|
66
80
|
abort <<-HELPDOC.strip_heredoc
|
|
67
81
|
You didn't specify anything to uncrudify. Here's some examples:
|
|
68
82
|
rake refinery:uncrudify controller=refinery/admin/pages action=create
|
|
@@ -78,19 +92,19 @@ module Refinery
|
|
|
78
92
|
end
|
|
79
93
|
|
|
80
94
|
crud_lines = Refinery.roots(:'refinery/core').join('lib', 'refinery', 'crud.rb').read
|
|
81
|
-
if (matches = crud_lines.scan(/(\ +)(def #{action}.+?protected)/m).first).present?
|
|
95
|
+
if (matches = crud_lines.scan(/(\ +)(def #{action}.+?protected)/m).first).present? &&
|
|
82
96
|
(method_lines = "#{matches.last.split(%r{^#{matches.first}end}).first.strip}\nend".split("\n")).many?
|
|
83
|
-
indent = method_lines.second.index
|
|
84
|
-
crud_method = method_lines.join("\n").gsub
|
|
97
|
+
indent = method_lines.second.index %r{[^ ]}
|
|
98
|
+
crud_method = method_lines.join("\n").gsub /^#{" " * indent}/, " "
|
|
85
99
|
|
|
86
100
|
crud_options = controller_class.try(:crudify_options) || {}
|
|
87
|
-
crud_method.gsub!
|
|
88
|
-
crud_method.gsub!
|
|
89
|
-
crud_method.gsub!
|
|
90
|
-
crud_method.gsub!
|
|
91
|
-
crud_method.gsub!
|
|
92
|
-
crud_method.gsub!
|
|
93
|
-
crud_method.gsub!
|
|
101
|
+
crud_method.gsub! '#{options[:redirect_to_url]}', crud_options[:redirect_to_url].to_s
|
|
102
|
+
crud_method.gsub! '#{options[:conditions].inspect}', crud_options[:conditions].inspect
|
|
103
|
+
crud_method.gsub! '#{options[:title_attribute]}', crud_options[:title_attribute]
|
|
104
|
+
crud_method.gsub! '#{singular_name}', crud_options[:singular_name]
|
|
105
|
+
crud_method.gsub! '#{class_name}', crud_options[:class_name]
|
|
106
|
+
crud_method.gsub! '#{plural_name}', crud_options[:plural_name]
|
|
107
|
+
crud_method.gsub! '\\#{', '#{'
|
|
94
108
|
|
|
95
109
|
puts crud_method
|
|
96
110
|
end
|
|
@@ -99,26 +113,33 @@ module Refinery
|
|
|
99
113
|
private
|
|
100
114
|
|
|
101
115
|
def _override(kind, which)
|
|
102
|
-
override_kind = OVERRIDES[kind]
|
|
103
|
-
pattern = "{refinery#{File::SEPARATOR},}#{which.split("/").join(File::SEPARATOR)}#{override_kind[:glob]}"
|
|
104
|
-
looking_for = ::Refinery::Plugins.registered.pathnames.map{|p| p.join("app", override_kind[:dir], pattern).to_s}
|
|
105
|
-
|
|
106
|
-
# copy in the matches
|
|
107
|
-
if (matches = looking_for.map{|d| Dir[d]}.flatten.compact.uniq).any?
|
|
108
|
-
matches.each do |match|
|
|
109
|
-
dir = match.split("/app/#{override_kind[:dir]}/").last.split('/')
|
|
110
|
-
file = dir.pop # get rid of the file.
|
|
111
|
-
dir = dir.join(File::SEPARATOR) # join directory back together
|
|
116
|
+
@override_kind = OVERRIDES[kind]
|
|
112
117
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
118
|
+
matcher = [
|
|
119
|
+
"{refinery#{File::SEPARATOR},}",
|
|
120
|
+
which.split('/').join(File::SEPARATOR),
|
|
121
|
+
@override_kind[:glob]
|
|
122
|
+
].flatten.join
|
|
116
123
|
|
|
117
|
-
|
|
124
|
+
if (matches = find_relative_matches(matcher)).present?
|
|
125
|
+
matches.each do |match|
|
|
126
|
+
copy_file match, Rails.root.join('app', @override_kind[:dir], match)
|
|
118
127
|
end
|
|
119
128
|
else
|
|
120
|
-
puts "Couldn't match any #{override_kind[:desc]} files in any extensions like #{which}"
|
|
129
|
+
puts "Couldn't match any #{@override_kind[:desc]} files in any extensions like #{which}"
|
|
121
130
|
end
|
|
122
131
|
end
|
|
132
|
+
|
|
133
|
+
def find_matches(pattern)
|
|
134
|
+
Set.new source_paths.map {|path| Dir[path.join(pattern)] }.flatten
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def find_relative_matches(pattern)
|
|
138
|
+
find_matches(pattern).map {|match| strip_source_paths(match) }
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def strip_source_paths(match)
|
|
142
|
+
match.gsub Regexp.new(source_paths.join('\/?|')), ''
|
|
143
|
+
end
|
|
123
144
|
end
|
|
124
145
|
end
|
data/lib/refinery/core.rb
CHANGED
|
@@ -1,190 +1,9 @@
|
|
|
1
|
-
require '
|
|
2
|
-
require 'rbconfig'
|
|
1
|
+
require File.expand_path('../../refinery', __FILE__)
|
|
3
2
|
require 'truncate_html'
|
|
4
3
|
require 'will_paginate'
|
|
4
|
+
require 'refinery/i18n'
|
|
5
5
|
|
|
6
6
|
module Refinery
|
|
7
|
-
WINDOWS = !!(RbConfig::CONFIG['host_os'] =~ %r!(msdos|mswin|djgpp|mingw)!) unless defined? WINDOWS
|
|
8
|
-
|
|
9
|
-
require 'refinery/errors'
|
|
10
|
-
|
|
11
|
-
autoload :Activity, 'refinery/activity'
|
|
12
|
-
autoload :ApplicationController, 'refinery/application_controller'
|
|
13
|
-
autoload :Engine, 'refinery/engine'
|
|
14
|
-
autoload :Menu, 'refinery/menu'
|
|
15
|
-
autoload :MenuItem, 'refinery/menu_item'
|
|
16
|
-
autoload :Plugin, 'refinery/plugin'
|
|
17
|
-
autoload :Plugins, 'refinery/plugins'
|
|
18
|
-
autoload :Version, 'refinery/version'
|
|
19
|
-
autoload :Crud, 'refinery/crud'
|
|
20
|
-
autoload :BasePresenter, 'refinery/base_presenter'
|
|
21
|
-
|
|
22
|
-
require 'refinery/ext/action_view/helpers/form_builder'
|
|
23
|
-
require 'refinery/ext/action_view/helpers/form_helper'
|
|
24
|
-
require 'refinery/ext/action_view/helpers/form_tag_helper'
|
|
25
|
-
|
|
26
|
-
module Admin
|
|
27
|
-
autoload :BaseController, 'refinery/admin/base_controller'
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
autoload :CmsGenerator, 'generators/refinery/cms/cms_generator'
|
|
31
|
-
autoload :DummyGenerator, 'generators/refinery/dummy/dummy_generator'
|
|
32
|
-
autoload :CoreGenerator, 'generators/refinery/core/core_generator'
|
|
33
|
-
autoload :EngineGenerator, 'generators/refinery/engine/engine_generator'
|
|
34
|
-
|
|
35
|
-
class << self
|
|
36
|
-
@@extensions = []
|
|
37
|
-
|
|
38
|
-
# Returns an array of modules representing currently registered Refinery Engines
|
|
39
|
-
#
|
|
40
|
-
# Example:
|
|
41
|
-
# Refinery.extensions => [Refinery::Core, Refinery::Pages]
|
|
42
|
-
def extensions
|
|
43
|
-
@@extensions
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
# Register an extension with Refinery
|
|
47
|
-
#
|
|
48
|
-
# Example:
|
|
49
|
-
# Refinery.register_extension(Refinery::Core)
|
|
50
|
-
def register_extension(const)
|
|
51
|
-
return if extension_registered?(const)
|
|
52
|
-
|
|
53
|
-
validate_extension!(const)
|
|
54
|
-
|
|
55
|
-
@@extensions << const
|
|
56
|
-
end
|
|
57
|
-
alias_method :register_engine, :register_extension
|
|
58
|
-
|
|
59
|
-
# Unregister an extension from Refinery
|
|
60
|
-
#
|
|
61
|
-
# Example:
|
|
62
|
-
# Refinery.unregister_extension(Refinery::Core)
|
|
63
|
-
def unregister_extension(const)
|
|
64
|
-
@@extensions.delete(const)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
# Returns true if an extension is currently registered with Refinery
|
|
68
|
-
#
|
|
69
|
-
# Example:
|
|
70
|
-
# Refinery.extension_registered?(Refinery::Core)
|
|
71
|
-
def extension_registered?(const)
|
|
72
|
-
@@extensions.include?(const)
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
# Constructs a deprecation warning message and warns with Kernel#warn
|
|
76
|
-
#
|
|
77
|
-
# Example:
|
|
78
|
-
# Refinery.deprecate('foo') => "The use of 'foo' is deprecated"
|
|
79
|
-
#
|
|
80
|
-
# An options parameter can be specified to construct a more detailed deprecation message
|
|
81
|
-
#
|
|
82
|
-
# Options:
|
|
83
|
-
# when - version that this deprecated feature will be removed
|
|
84
|
-
# replacement - a replacement for what is being deprecated
|
|
85
|
-
# caller - who called the deprecated feature
|
|
86
|
-
#
|
|
87
|
-
# Example:
|
|
88
|
-
# Refinery.deprecate('foo', :when => 'tomorrow', :replacement => 'bar') =>
|
|
89
|
-
# "The use of 'foo' is deprecated and will be removed at version 2.0. Please use 'bar' instead."
|
|
90
|
-
def deprecate(what, options = {})
|
|
91
|
-
# Build a warning.
|
|
92
|
-
warning = "\n-- DEPRECATION WARNING --\n"
|
|
93
|
-
warning << "The use of '#{what}' is deprecated"
|
|
94
|
-
warning << " and will be removed at version #{options[:when]}" if options[:when]
|
|
95
|
-
warning << "."
|
|
96
|
-
warning << "\nPlease use #{options[:replacement]} instead." if options[:replacement]
|
|
97
|
-
|
|
98
|
-
# See if we can trace where this happened
|
|
99
|
-
if options[:caller]
|
|
100
|
-
whos_calling = options[:caller].detect{|c| c =~ %r{#{Rails.root.to_s}}}.inspect.to_s.split(':in').first
|
|
101
|
-
warning << "\nCalled from: #{whos_calling}\n"
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
# Give stern talking to.
|
|
105
|
-
warn warning
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
def i18n_enabled?
|
|
109
|
-
!!(defined?(::Refinery::I18n) && ::Refinery::I18n.enabled?)
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
# Returns a Pathname to the root of the Refinery CMS project
|
|
113
|
-
def root
|
|
114
|
-
@root ||= Pathname.new(File.expand_path('../../../../', __FILE__))
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
# Returns an array of Pathnames pointing to the root directory of each extension that
|
|
118
|
-
# has been registered with Refinery.
|
|
119
|
-
#
|
|
120
|
-
# Example:
|
|
121
|
-
# Refinery.roots => [#<Pathname:/Users/Reset/Code/refinerycms/core>, #<Pathname:/Users/Reset/Code/refinerycms/pages>]
|
|
122
|
-
#
|
|
123
|
-
# An optional extension_name parameter can be specified to return just the Pathname for
|
|
124
|
-
# the specified extension. This can be represented in Constant, Symbol, or String form.
|
|
125
|
-
#
|
|
126
|
-
# Example:
|
|
127
|
-
# Refinery.roots(Refinery::Core) => #<Pathname:/Users/Reset/Code/refinerycms/core>
|
|
128
|
-
# Refinery.roots(:'refinery/core') => #<Pathname:/Users/Reset/Code/refinerycms/core>
|
|
129
|
-
# Refinery.roots("refinery/core") => #<Pathname:/Users/Reset/Code/refinerycms/core>
|
|
130
|
-
def roots(extension_name = nil)
|
|
131
|
-
return @roots ||= self.extensions.map(&:root) if extension_name.nil?
|
|
132
|
-
|
|
133
|
-
extension_name.to_s.camelize.constantize.root
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
def version
|
|
137
|
-
Refinery::Version.to_s
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
# Returns string version of url helper path. We need this to temporarily support namespaces
|
|
141
|
-
# like Refinery::Image and Refinery::Blog::Post
|
|
142
|
-
#
|
|
143
|
-
# Example:
|
|
144
|
-
# Refinery.route_for_model(Refinery::Image) => "admin_image_path"
|
|
145
|
-
# Refinery.route_for_model(Refinery::Image, {:plural => true}) => "admin_images_path"
|
|
146
|
-
# Refinery.route_for_model(Refinery::Blog::Post) => "blog_admin_post_path"
|
|
147
|
-
# Refinery.route_for_model(Refinery::Blog::Post, {:plural => true}) => "blog_admin_posts_path"
|
|
148
|
-
# Refinery.route_for_model(Refinery::Blog::Post, {:admin => false}) => "blog_post_path"
|
|
149
|
-
def route_for_model(klass, options = {})
|
|
150
|
-
if [TrueClass, FalseClass].include? options.class
|
|
151
|
-
options = {:plural => options}
|
|
152
|
-
Refinery.deprecate "[Refinery.route_for_model] 'plural' argument",
|
|
153
|
-
:when => '2.1',
|
|
154
|
-
:replacement => '{:plural => false}'
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
options = {:plural => false, :admin => true}.merge options
|
|
158
|
-
|
|
159
|
-
klass = klass.constantize if klass.respond_to?(:constantize)
|
|
160
|
-
active_name = ActiveModel::Name.new klass, (Refinery if klass.parents.include?(Refinery))
|
|
161
|
-
|
|
162
|
-
if options[:admin]
|
|
163
|
-
# Most of the time this gets rid of 'refinery'
|
|
164
|
-
parts = active_name.underscore.split('/').reject{|name|
|
|
165
|
-
active_name.singular_route_key.exclude?(name)
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
# Get the singular resource_name from the url parts
|
|
169
|
-
resource_name = parts.pop
|
|
170
|
-
resource_name = resource_name.pluralize if options[:plural]
|
|
171
|
-
|
|
172
|
-
[parts.join("_"), "admin", resource_name, "path"].reject(&:blank?).join "_"
|
|
173
|
-
else
|
|
174
|
-
path = options[:plural] ? active_name.route_key : active_name.singular_route_key
|
|
175
|
-
|
|
176
|
-
[path, 'path'].join '_'
|
|
177
|
-
end
|
|
178
|
-
end
|
|
179
|
-
|
|
180
|
-
private
|
|
181
|
-
def validate_extension!(const)
|
|
182
|
-
unless const.respond_to?(:root) && const.root.is_a?(Pathname)
|
|
183
|
-
raise InvalidEngineError, "Engine must define a root accessor that returns a pathname to its root"
|
|
184
|
-
end
|
|
185
|
-
end
|
|
186
|
-
end
|
|
187
|
-
|
|
188
7
|
module Core
|
|
189
8
|
require 'refinery/core/engine'
|
|
190
9
|
require 'refinery/core/configuration'
|
|
@@ -196,3 +15,8 @@ module Refinery
|
|
|
196
15
|
end
|
|
197
16
|
end
|
|
198
17
|
end
|
|
18
|
+
|
|
19
|
+
# this require has to be down here
|
|
20
|
+
# see https://github.com/refinery/refinerycms/issues/2273
|
|
21
|
+
require 'decorators'
|
|
22
|
+
require 'jquery-rails'
|