Синатра рендеринга .md.erb шаблоны, если есть, в противном случае .md - PullRequest
0 голосов
/ 07 июня 2018

Используя sinatra, я могу сказать ему, чтобы он отображал шаблон уценки, например, view / my_template.md, передавая имя шаблона следующим образом: markdown :my_template.

Но я хочу сначала обработать его с помощью erb-обработки,поэтому мой файл называется view/my_template.md.erb

, но ... я также хочу, чтобы мой код работал в любом случае.Я хочу, чтобы он использовал файл .md.erb, если он есть, но в противном случае - файл .md.

Мне было интересно, есть ли стандартный способ сделать это в sinatra, вместо того, чтобы самому кодировать логику этого отступления.Следующие работы, но, кажется, не элегантны:

get '/route/to/my/page' do
  begin
    # Try to do erb processing into a string with the file view/my_template.md.erb
    md_content = erb :my_template.md, :layout => false
  rescue Errno::ENOENT
    # Set it to use the view/my_template.md file instead
    md_template = :my_template
  end
  # Either way we do the markdown rendering and use the erb layouts
  markdown md_content || md_template, :layout_engine => :erb, :renderer => MARKDOWN_RENDERER
end

Rescue Errno :: ENOENT кажется не элегантным.Также код сбивает с толку, когда я указываю имя с помощью «.md» для того, чтобы он взял файл «.md.erb».

1 Ответ

0 голосов
/ 25 июня 2018

Я не думаю, что существует какое-либо автоматическое определение присутствующих шаблонов или «стандартный» способ сделать то, что вы хотите.Методы рендеринга Sinatra, такие как markown или erb - это просто набор однострочных оболочек вокруг более общего render метода, который выполняет только то, что говорит его название.

В вашем случае, ручное обнаружение предпочтительногошаблон и его тип должны быть простыми и не должны генерировать исключения.

get '/route/to/my/page' do
  tpl_path = Dir.glob('views/my_template.md{,.erb}').sort.last
  tpl_name = File.basename(tpl_path, '.*').to_sym
  tpl_type = File.extname(tpl_path)

  erb_output = erb(tpl_name) if tpl_type == '.erb'
  markdown(erb_output || tpl_name)
end

Dir.glob выберет my_template.md.erb вместо my_template.md.Кроме того, tpl_type позволяет избежать путаницы с оригинальным типом шаблона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...