Sha256: 6a3e0554ce87e98b3e03d504d4fce0c93424717c23102c7e9d61eab8b22674c2

Contents?: true

Size: 1.48 KB

Versions: 6

Compression:

Stored size: 1.48 KB

Contents

require 'erb'

module Saga
  class Formatter
    TEMPLATE_PATH = File.expand_path('../../templates', __dir__)

    attr_reader :document
    attr_reader :template_path

    def initialize(document, template_path: nil)
      @document = document
      @template_path ||= template_path || File.join(self.class.template_path, 'default')
    end

    def template
      @template ||= build_template
    end

    def format
      @document.extend(ERB::Util) unless @document.is_a?(ERB::Util)

      if File.exist?(helpers_file)
        @document.instance_eval(File.read(helpers_file))
      end

      template.result(@document._binding)
    end

    def self.format(document, **kwargs)
      formatter = new(document, **kwargs)
      formatter.format
    end

    def self.template_path
      TEMPLATE_PATH
    end

    def self.saga_format(document)
      format(document, template_path: File.join(template_path, 'saga'))
    end

    private

    if RUBY_VERSION < '2.6.0'
      def build_erb
        ERB.new(File.read(template_file), nil, '-')
      end
    else
      def build_erb
        ERB.new(File.read(template_file), trim_mode: '-')
      end
    end

    def build_template
      if File.exist?(template_file)
        build_erb
      else
        raise ArgumentError, "The template at path `#{template_file}' could not be found."
      end
    end

    def helpers_file
      File.join(template_path, 'helpers.rb')
    end

    def template_file
      File.join(template_path, 'document.erb')
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
saga-0.13.2 lib/saga/formatter.rb
saga-0.13.1 lib/saga/formatter.rb
saga-0.13.0 lib/saga/formatter.rb
saga-0.12.2 lib/saga/formatter.rb
saga-0.12.1 lib/saga/formatter.rb
saga-0.12.0 lib/saga/formatter.rb