From 4b28211ea04ff4d0bc8823e163bf0c0eb34b091c Mon Sep 17 00:00:00 2001 From: Braulio Bhavamitra Date: Sat, 26 Sep 2015 18:09:50 -0300 Subject: [PATCH] rails4: fix a case where partial_for_class is not working for plugins --- app/helpers/application_helper.rb | 32 ++------------------------------ app/helpers/partials_helper.rb | 43 +++++++++++++++++++++++++++++++++++++++++++ app/views/cms/edit.html.erb | 2 +- 3 files changed, 46 insertions(+), 31 deletions(-) create mode 100644 app/helpers/partials_helper.rb diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 9cc1c7a..d53d85e 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -10,6 +10,8 @@ module ApplicationHelper include UrlHelper + include PartialsHelper + include ModalHelper include BoxesHelper @@ -283,36 +285,6 @@ module ApplicationHelper concat(content_tag('div', capture(&block).to_s + tag('br', :style => 'clear: left;'), options)) end - - def partial_for_class_in_view_path(klass, view_path, prefix = nil, suffix = nil) - return nil if klass.nil? - name = [prefix, klass.name.underscore, suffix].compact.map(&:to_s).join('_') - - search_name = String.new(name) - if search_name.include?("/") - search_name.gsub!(/(\/)([^\/]*)$/,'\1_\2') - name = File.join(params[:controller], name) if defined?(params) && params[:controller] - else - search_name = "_" + search_name - end - - path = defined?(params) && params[:controller] ? File.join(view_path, params[:controller], search_name + '.html.erb') : File.join(view_path, search_name + '.html.erb') - return name if File.exists?(File.join(path)) - - partial_for_class_in_view_path(klass.superclass, view_path, prefix, suffix) - end - - def partial_for_class(klass, prefix=nil, suffix=nil) - raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?' if klass.nil? - name = klass.name.underscore - controller.view_paths.each do |view_path| - partial = partial_for_class_in_view_path(klass, view_path, prefix, suffix) - return partial if partial - end - - raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?' - end - def render_profile_actions klass name = klass.to_s.underscore begin diff --git a/app/helpers/partials_helper.rb b/app/helpers/partials_helper.rb new file mode 100644 index 0000000..76c8080 --- /dev/null +++ b/app/helpers/partials_helper.rb @@ -0,0 +1,43 @@ +module PartialsHelper + + def partial_for_class_in_view_path(klass, view_path, prefix = nil, suffix = nil) + return nil if klass.nil? + name = [prefix, klass.name.underscore, suffix].compact.map(&:to_s).join('_') + + search_name = String.new(name) + if search_name.include?("/") + search_name.gsub!(/(\/)([^\/]*)$/,'\1_\2') + name = File.join(params[:controller], name) if defined?(params) && params[:controller] + else + search_name = "_" + search_name + end + + path = defined?(params) && params[:controller] ? File.join(view_path, params[:controller], search_name + '.html.erb') : File.join(view_path, search_name + '.html.erb') + return name if File.exists?(File.join(path)) + + partial_for_class_in_view_path(klass.superclass, view_path, prefix, suffix) + end + + def partial_for_class(klass, prefix=nil, suffix=nil) + raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?' if klass.nil? + name = klass.name.underscore + controller.view_paths.each do |view_path| + partial = partial_for_class_in_view_path(klass, view_path, prefix, suffix) + return partial if partial + end + + raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?' + end + + def render_partial_for_class klass, *args + raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?' if klass.nil? + begin + partial = klass.name.underscore + partial = "#{params[:controller]}/#{partial}" if params[:controller] and partial.index '/' + return render partial, *args + rescue ActionView::MissingTemplate + return render_partial_for_class klass.superclass, *args + end + end + +end diff --git a/app/views/cms/edit.html.erb b/app/views/cms/edit.html.erb index a7b6660..9812e4b 100644 --- a/app/views/cms/edit.html.erb +++ b/app/views/cms/edit.html.erb @@ -9,7 +9,7 @@ <%= hidden_field_tag('success_back_to', @success_back_to) %> - <%= render :partial => partial_for_class(@article.class), :locals => { :f => f } %> + <%= render_partial_for_class @article.class, f: f %> <% if environment.is_portal_community?(profile) %>
-- libgit2 0.21.2