Sha256: e315b40cae6fcd0fa0f86e5f050249590ee921ca5de87100e13fbe7b24d7f371
Contents?: true
Size: 1.53 KB
Versions: 1
Compression:
Stored size: 1.53 KB
Contents
# frozen_string_literal: true require "tilt" module PUNK module Renderable FORMATS = { html: {renderer: :to_html, extension: "slim"}, json: {renderer: :to_json, extension: "jbuilder"}, csv: {renderer: :to_csv, extension: "rcsv"}, xml: {renderer: :to_xml, extension: "xml.slim"} }.freeze def template(name) @template = name end def render(format) raise NotFound, "unknown format '#{format}'" unless FORMATS.key?(format) send(FORMATS[format][:renderer]) end def to_html(options = {}) _render(:html, options) end def to_json(options = {}) _render(:json, options) end def to_csv(options = {}) _render(:csv, options) end def to_xml(options = {}) _render(:xml, options) end def to_s to_json end def inspect to_s end def to_h ActiveSupport::JSON.decode(to_json).to_h.deep_symbolize_keys end protected def _dir File.join(PUNK.get.app.path, "templates") end private def _path(format) raise InternalServerError, "No template given" unless @template base = File.join(_dir, @template) ext = FORMATS[format][:extension] "#{base}.#{ext}" end def _render(format, options) path = _path(format) raise NotImplemented, "No path for template: #{@template}" unless path Tilt.new(path).render(self, options) rescue LoadError, Errno::ENOENT raise NotFound, "Cannot load template: #{path}" end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
punk-0.4.1 | lib/punk/helpers/renderable.rb |