Inclinação (kramdown) impedindo o processamento do ERB ao renderizar uma redução

Estou construindo um site comIntermediário. Estou armazenando muitas informações em arquivos de dados, pois utilizarei as mesmas informações em várias páginas. Parciais não funcionariam para mim, pois o mesmo texto dos dados pode ser usado com diferentes tags HTML ou ligeiramente modificado para páginas diferentes.

eu quero escreverremarcação em arquivos de dados e depois usenos modelos HAML para páginas específicas. Quando tento criar links relativos a outras páginas enquanto uso uma referência a outro arquivo de dados, o HTML resultante não é o que deveria ser.

data/pages.yaml:

pageA:
  link: /it-can-change-A.html
  name: PageA name
  info: Some other related info

pageB:
  link: /subject-to-change-B.html
  name: PageB name
  info: Some other related info

pageC:
  link: /some-C.html
  name: PageC name
  info: Some other related info

data/faq.yaml:

testcase: Some text with [internal link to page A](ref.pageA). And *another* [internal reference](ref.pageB).

verbatim: Some text with [internal link to page A](/it-can-change-A.html). And *another* [internal reference](/subject-to-change-B.html).

Enquanto tentava encontrar a causa raiz desse problema, testei várias maneiras de "extrair" links relativos do arquivo de dados e colocá-los no modelo HAML. Meu objetivo final é fazer com que o caso (5) funcione.

Comentei os resultados de cada pedaço de código diretamente no meutest.html.md.erb.haml:

Observe que o HAML precisa ser processado antes do ERB; portanto, .haml precisa ser a última extensão. Se as extensões .erb e .haml mudarem de lugar, os casos (3) e (4) abaixo produzirão uma saída diferente.

/ Pure ERB; ERB is processed before markdown => :)
(1) This is just some text with [ERB link to first page](<%= data.pages.pageA.link %>) and *another* one [to second page](<%= data.pages.pageB.link %>). 

/ ERB inside HAML tag; markdown is not processed => :|
.haml
    (2) This is just some text with [ERB link to first page](<%= data.pages.pageA.link %>) and *another* one [to second page](<%= data.pages.pageB.link %>). 

/ Helper used WITHOUT a tag; ERB is processed before markdown => :)
(3)
= refonly(data.faq.testcase) 

/ Helper used WITH a tag; ERB is processed, but markdown is not => :|
.question1
    (4)
    = refonly(data.faq.testcase)

/ "Tilt-powered" helper used WITHIN a tag; trying to process markdown with Tilt results in "%=%20data.pages.pageA.link%20%" links. Expected behavior: ERB should be processed first, then Tilt should process markdown with actual relative links being the same as in .question1 above => :(
.question2
    (5)
    = mymarkdown(data.faq.testcase)

/ Helper with Tilt to process verbatim text; markdown is processed correctly => :)
.question3
    (6)
    = justmarkdown(data.faq.verbatim)

Ajudantes usados no modelo acima:

def refonly(text)
    text.gsub(/ref\.(page[A-Z])/,"<\%= data.pages.\\1.link %>")
end

def mymarkdown(text)
    newtext = refonly(text)
    Tilt['markdown'].new(context: @app) { newtext }.render
end

def justmarkdown(text)
    Tilt['markdown'].new(context: @app) { text }.render
end

O objetivo do primeiro auxiliar é alterar a referência de fácil gravação no arquivo de dados (ref.pageName) para o código ERB, igual ao usado em (1). O objetivo do segundo auxiliar é reduzir a margem no caso em que.md&nbsp;a própria extensão do modelo falha ao renderizá-la automaticamente. O objetivo do último auxiliar é mostrar que o Tilt pode renderizar texto literalmente corretamente em (6), mas quando aceita o mesmo texto que uma variável, não pode fornecer a mesma saída em (5).

A. Quando eu uso "ERB puro" (1), ourefonly&nbsp;auxiliar sem tag HAML (3), a saída é a esperada: o caminho relativo é originado do arquivo de dados e a marcação é processada pelo mecanismo de marcação padrão (kramdown), graças a.md&nbsp;extensão de modelo.

B. Quando tento usar a marca HAML, diretamente com o código ERB (2) ou comrefonly&nbsp;auxiliar (4), o ERB é processado corretamente e colocado na saída. No entanto, a redução não é processada por algum motivo automaticamente, mesmo que.md&nbsp;extensão é usada diretamente após.html, portanto, a redução deve ser processada após a conclusão dos bits HAML e ERB.

C. Para "forçar" a renderização de remarcação, estou usando o Tilt no meu segundo auxiliar. Minha intenção era passar o texto retornado porrefonly&nbsp;(que possui sintaxe de remarcação correta com o link pretendido extraído dos dados) para o Tilt. Minha expectativa era que o Tilt simplesmente processasse o texto literal passado em (5), assim como em (6). Em vez disso, o link resultante aponta para%=%20data.pages.pageA.link%20%, que parece ser um código HTML para exibir o código ERB literalmente. Então, parece passarnewtext&nbsp;A variável to Tilt de alguma forma interrompe o processamento do ERB e o código do ERB é passado diretamente para a remarcação.

Minhasprimário&nbsp;A questão é: como posso garantir que o Tilt obtenha o texto correto com um link relativo (conforme retornado porrefonly) e produz a produção esperada em (5)?

Minhassecundário&nbsp;pergunta: por que a redução não é processada automaticamente pelo Middleman nos casos descritos em B.?

Suponho que a resposta para minha pergunta principal exija conhecimento de Ruby e Tilt, enquanto a resposta para minha pergunta secundária requer conhecimento de Middleman. Embora a solução para o meu problema principal seja ótima, a resposta à pergunta secundária pode permitir ignorar completamente a Tilt e, portanto, resolver o problema de uma maneira mais fácil.