class ActionView::RenderParser::RipperRenderParser

def parse_render_from_options(options_hash)

def parse_render_from_options(options_hash)
  renders = []
  keys = options_hash.keys
  if (keys & RENDER_TYPE_KEYS).size < 1
    # Must have at least one of render keys
    return nil
  end
  if (keys - ALL_KNOWN_KEYS).any?
    # de-opt in case of unknown option
    return nil
  end
  render_type = (keys & RENDER_TYPE_KEYS)[0]
  node = options_hash[render_type]
  if node.string?
    template = resolve_path_directory(node.to_string)
  else
    if node.variable_reference?
      dependency = node.variable_name.sub(/\A(?:\$|@{1,2})/, "")
    elsif node.vcall?
      dependency = node.variable_name
    elsif node.call?
      dependency = node.call_method_name
    else
      return
    end
    object_template = true
    template = "#{dependency.pluralize}/#{dependency.singularize}"
  end
  return unless template
  if spacer_template = render_template_with_spacer?(options_hash)
    virtual_path = partial_to_virtual_path(:partial, spacer_template)
    renders << virtual_path
  end
  if options_hash.key?(:object) || options_hash.key?(:collection) || object_template
    return nil if options_hash.key?(:object) && options_hash.key?(:collection)
    return nil unless options_hash.key?(:partial)
  end
  virtual_path = partial_to_virtual_path(render_type, template)
  renders << virtual_path
  # Support for rendering multiple templates (i.e. a partial with a layout)
  if layout_template = render_template_with_layout?(render_type, options_hash)
    virtual_path = partial_to_virtual_path(:layout, layout_template)
    renders << virtual_path
  end
  renders
end