#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