Motor de renderização de documentos

Se você precisa renderizar alguns documentos de vários arquivos com dados específicos

isso pode ser útil para você

você pode construir qualquer tipo de arquivo html, json, txt …

gem rendering_engine

você pode simplesmente

gem install rendering_engine

Como funciona?

RenderingEngine :: Provider pode ser criado com opções:

  • caminho de base base_path (obrigatório)
  • dados dados necessários para preencher o documento (opcional)
  • custom_helper próprio auxiliar de renderização (opcional)

O provedor # obtém o conteúdo de preparação por meio das opções fornecidas:

  • caminho relativo do arquivo caminho relativo para o arquivo (obrigatório)
  • dados dados necessários para preencher o documento (opcional)
  • custom_helper próprio auxiliar de renderização (opcional)

As opções opcionais substituem todas as opções opcionais fornecidas na inicialização do provedor

Objeto de conteúdo de retorno do provedor

  • #source método fornece a fonte do documento
  • #kind método retornar tipo de documento (: original ,: modelo,: desconhecido)

exemplo:


|-- content
| |-- documents
| | |-- cv.html.erb
| | |-- skills.html.erb
| | |-- additional_skils.html
| | |--base
| | | |-- footer.html.erb

fonte cv.html.erb

Pawel N.<br/>
my skils: <%= render "skills.html" %>
<%= render "footer.html.erb" %>

fonte skills.html.erb

C#, Ruby, <%= render "additional_skils.html" %>

additional_skils.html source

Javascript</br>

fonte base / footer.html.erb

<%= 2+2 %>

documento de saída deve ser semelhante a:

Pawel N.<br/>
my skils: C#, Ruby, Javascript</br>
<%= 2+2 %>

quando você deseja obter a fonte original do arquivo, basta fornecer o caminho direto para o arquivo:

  • base / footer.html.erb retorna <% = 2 + 2%>
  • base / footer.html retorna 4

Uso


content_provider
= RenderingEngine::Provider.new(base_path)
content
= content_provider.get(relative_file_path)
content
.source #gets source of file (rendered or orginal)
content
.kind #return (:orginal, :template, :unknown)

exemplo no controlador pode ter a seguinte aparência:

def show
path
= "#{params[:client]}/#{params[:path]}"
data
= params[:data]

content
= content_provider.get(path, data: data)
return not_found if content.unknown?

render text
: content.source
end

def content_provider
@content_provider ||= RenderingEngine::Provider.new(Rails.root.join('app/content'))
end

exemplo com o próprio auxiliar de conteúdo pode ter a seguinte aparência:

class ContentCustomHelpers
def initialize(opts={})
@base_path = opts.fetch(:base_path)
@data = opts[:data]
end

def make_some_stuff
"best line ever!"
end

def render(file_relative_path)
file_path
= File.join(base_path, file_relative_path)

RenderingEngine::Content.new(file_path, data: data, custom_helper: self.class).source
end

attr_reader
:data

private

attr_reader
:base_path
end

uso

provider = RenderingEngine::Provider.new(Rails.root.join('app/content'), custom_helper: ContentCustomHelpers)
provider
.get(path).source

ou

provider = RenderingEngine::Provider.new(Rails.root.join('app/content'))
provider
.get(path, custom_helper: ContentCustomHelpers).source