Изменить yardoc serialized_path

#ruby #yard

#ruby #ярд

Вопрос:

Прямо сейчас Yardoc будет генерировать документы, подобные: doc/ModuleName.html , doc/ModuleName/ClassName.html и doc/ModuleName/ClassName/method_name.html Мне было интересно, как я могу настроить serialized_path (без того, чтобы обезьяна исправляла все), чтобы сделать что-то вроде: doc/ModuleName/index.html doc/ModuleName/ClassName/index.html и doc/ModuleName/ClassName/method_name/index.html

Комментарии:

1. Почему вы хотите это сделать? Если это для более красивых URL-адресов, вы можете добиться этого с помощью перезаписи.

2. @slartibartfast Допустим, я принимаю это предложение, тогда я бы застрял с неаккуратными URL-адресами и вынужден вручную редактировать кучу ссылок или перенаправлять на 301 (что опять же просто неаккуратно), что совсем не идеально…

3. Переписывая, я имел в виду что-то на уровне конфигурации сервера. Вы можете добавить правило перезаписи, которое говорит что-то вроде «если нет файла с таким именем, попробуйте добавить .html». Даже на общих (apache) хостингах вы, вероятно, можете добавить такое правило в свой локальный .htaccess

4. @slartibartfast И я не это имел в виду? Я думаю, вы немного запутались, поэтому позвольте мне прояснить для вас. Ссылки выводятся как ModuleName/ClassName.html , или../_index.html (пока я не исправил это — просто используя _) Я не хочу этого, я не буду использовать грязный интерфейсный хак для создания красивых URL-адресов (которые все равно оставят выводимые ссылки относительными и к файлам .html и снова потребуют другого грязного интерфейсного хака до 301), который создает беспорядок для управления, что создает период беспорядка. Я не поклонник грязных хаков, потому что их всегда нужно исправлять позже, затягивание разработки — это плохо: P

Ответ №1:

Вам нужно будет исправить ошибку (из того, что я заметил, после 2 дней поиска я не нашел другого способа), так что … создайте файл с именем yardoc_pretty-uris.rb и когда вы запустите yardoc do -e yardo_pretty-print.rb .

содержимое yardoc_pretty-uris.rb:

 module YARD
  module Serializers
    class FileSystemSerializer
      def serialized_path(object)
        return object if object.is_a?(String)

        if object.is_a?(CodeObjects::ExtraFileObject)
          fspath = ["file.#{object.name}.#{@extension}"]
        else
          objname = "top-level-namespace"
          objname = object.name.to_s if object != YARD::Registry.root

          # Make this shit pretty URL's prease.....
          fspath = [objname, "index.#{@extension}"]

          if object.namespace amp;amp; object.namespace.path != ""
            fspath.unshift(*object.namespace.path.split(CodeObjects::NSEP))
          end
        end

        fspath.map! do |part|
          part.downcase!
          part.gsub(/[^0-9a-zA-Z-_.]/, '')
        end

        File.join(fspath)
      end
    end
  end
end