Commit bb150fb82c7be2e5b6952b38e7a1b40c432c5859

Authored by Braulio Bhavamitra
1 parent 2b56f641

Fix render partial for class to work with searches

Showing 1 changed file with 40 additions and 5 deletions   Show diff stats
app/helpers/partials_helper.rb
... ... @@ -29,14 +29,49 @@ module PartialsHelper
29 29 raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?'
30 30 end
31 31  
32   - def render_partial_for_class klass, *args
  32 +
  33 + def partial_for_class(klass, prefix=nil, suffix=nil)
33 34 raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?' if klass.nil?
  35 + name = klass.name.underscore
  36 + controller.view_paths.each do |view_path|
  37 + partial = partial_for_class_in_view_path(klass, view_path, prefix, suffix)
  38 + return partial if partial
  39 + end
  40 +
  41 + raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?'
  42 + end
  43 +
  44 + ##
  45 + # Calculate partial name with prefix and suffix
  46 + # Togheter with render_partial_for_class,
  47 + # it should replace #partial_for_class_in_view_path in the future
  48 + #
  49 + def partial_name_for underscore, prefix = nil, suffix = nil
  50 + parts = underscore.split '/'
  51 + if prefix or suffix
  52 + partial = [prefix, parts.last, suffix].compact.map(&:to_s).join '_'
  53 + else
  54 + partial = parts.last
  55 + end
  56 + if parts.size > 1
  57 + "#{params[:controller]}/#{parts.first}/#{partial}"
  58 + else
  59 + partial
  60 + end
  61 + end
  62 +
  63 + def render_for_class klass, *args, &block
  64 + raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?' unless klass
34 65 begin
35   - partial = klass.name.underscore
36   - partial = "#{params[:controller]}/#{partial}" if params[:controller] and partial.index '/'
37   - return render partial, *args
  66 + capture klass, &block
38 67 rescue ActionView::MissingTemplate
39   - return render_partial_for_class klass.superclass, *args
  68 + render_for_class klass.superclass, *args, &block
  69 + end
  70 + end
  71 +
  72 + def render_partial_for_class klass, *args
  73 + render_for_class klass do |klass|
  74 + render partial_name_for(klass.name.underscore), *args
40 75 end
41 76 end
42 77  
... ...