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 …
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