Commit 4b28211ea04ff4d0bc8823e163bf0c0eb34b091c

Authored by Braulio Bhavamitra
1 parent cbd6f636

rails4: fix a case where partial_for_class is not working for plugins

app/helpers/application_helper.rb
... ... @@ -10,6 +10,8 @@ module ApplicationHelper
10 10  
11 11 include UrlHelper
12 12  
  13 + include PartialsHelper
  14 +
13 15 include ModalHelper
14 16  
15 17 include BoxesHelper
... ... @@ -283,36 +285,6 @@ module ApplicationHelper
283 285 concat(content_tag('div', capture(&block).to_s + tag('br', :style => 'clear: left;'), options))
284 286 end
285 287  
286   -
287   - def partial_for_class_in_view_path(klass, view_path, prefix = nil, suffix = nil)
288   - return nil if klass.nil?
289   - name = [prefix, klass.name.underscore, suffix].compact.map(&:to_s).join('_')
290   -
291   - search_name = String.new(name)
292   - if search_name.include?("/")
293   - search_name.gsub!(/(\/)([^\/]*)$/,'\1_\2')
294   - name = File.join(params[:controller], name) if defined?(params) && params[:controller]
295   - else
296   - search_name = "_" + search_name
297   - end
298   -
299   - path = defined?(params) && params[:controller] ? File.join(view_path, params[:controller], search_name + '.html.erb') : File.join(view_path, search_name + '.html.erb')
300   - return name if File.exists?(File.join(path))
301   -
302   - partial_for_class_in_view_path(klass.superclass, view_path, prefix, suffix)
303   - end
304   -
305   - def partial_for_class(klass, prefix=nil, suffix=nil)
306   - raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?' if klass.nil?
307   - name = klass.name.underscore
308   - controller.view_paths.each do |view_path|
309   - partial = partial_for_class_in_view_path(klass, view_path, prefix, suffix)
310   - return partial if partial
311   - end
312   -
313   - raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?'
314   - end
315   -
316 288 def render_profile_actions klass
317 289 name = klass.to_s.underscore
318 290 begin
... ...
app/helpers/partials_helper.rb 0 → 100644
... ... @@ -0,0 +1,43 @@
  1 +module PartialsHelper
  2 +
  3 + def partial_for_class_in_view_path(klass, view_path, prefix = nil, suffix = nil)
  4 + return nil if klass.nil?
  5 + name = [prefix, klass.name.underscore, suffix].compact.map(&:to_s).join('_')
  6 +
  7 + search_name = String.new(name)
  8 + if search_name.include?("/")
  9 + search_name.gsub!(/(\/)([^\/]*)$/,'\1_\2')
  10 + name = File.join(params[:controller], name) if defined?(params) && params[:controller]
  11 + else
  12 + search_name = "_" + search_name
  13 + end
  14 +
  15 + path = defined?(params) && params[:controller] ? File.join(view_path, params[:controller], search_name + '.html.erb') : File.join(view_path, search_name + '.html.erb')
  16 + return name if File.exists?(File.join(path))
  17 +
  18 + partial_for_class_in_view_path(klass.superclass, view_path, prefix, suffix)
  19 + end
  20 +
  21 + def partial_for_class(klass, prefix=nil, suffix=nil)
  22 + raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?' if klass.nil?
  23 + name = klass.name.underscore
  24 + controller.view_paths.each do |view_path|
  25 + partial = partial_for_class_in_view_path(klass, view_path, prefix, suffix)
  26 + return partial if partial
  27 + end
  28 +
  29 + raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?'
  30 + end
  31 +
  32 + def render_partial_for_class klass, *args
  33 + raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?' if klass.nil?
  34 + begin
  35 + partial = klass.name.underscore
  36 + partial = "#{params[:controller]}/#{partial}" if params[:controller] and partial.index '/'
  37 + return render partial, *args
  38 + rescue ActionView::MissingTemplate
  39 + return render_partial_for_class klass.superclass, *args
  40 + end
  41 + end
  42 +
  43 +end
... ...
app/views/cms/edit.html.erb
... ... @@ -9,7 +9,7 @@
9 9  
10 10 <%= hidden_field_tag('success_back_to', @success_back_to) %>
11 11  
12   - <%= render :partial => partial_for_class(@article.class), :locals => { :f => f } %>
  12 + <%= render_partial_for_class @article.class, f: f %>
13 13  
14 14 <% if environment.is_portal_community?(profile) %>
15 15 <div>
... ...