Sha256: b65d4042b83dbd596a9541c09ff82690f079a05cca260738b41687a30b6f4cb3

Contents?: true

Size: 1.07 KB

Versions: 18

Compression:

Stored size: 1.07 KB

Contents

# frozen_string_literal: true

require 'pathname'
require 'yaml'
require 'json'

module Esse
  class TemplateLoader
    EXT_PARSER = {
      'json' => ->(file) { MultiJson.load(File.read(file)) },
      'yaml' => ->(file) { YAML.load_file(file) },
      'yml' => ->(file) { YAML.load_file(file) },
    }.freeze

    def initialize(directories, extensions: EXT_PARSER.keys)
      @directories = Array(directories).map do |dir|
        dir.is_a?(Pathname) ? dir : Pathname.new(dir)
      end
      @extensions = extensions
    end

    # Look for files into the @directories using some file pattern.
    def read(*patterns)
      path = nil
      @directories.each do |dir|
        patterns.find do |pattern|
          path = Dir[dir.join("#{pattern}.{#{@extensions.join(',')}}")].first
          break if path
        end
        break if path
      end
      load(path) if path
    end

    protected

    def load(file)
      parser = EXT_PARSER[File.extname(file).sub(/^\./, '')]
      return unless parser

      parser.call(file)
    rescue MultiJson::ParseError
      nil
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
esse-0.4.0.rc4 lib/esse/template_loader.rb
esse-0.4.0.rc3 lib/esse/template_loader.rb
esse-0.4.0.rc2 lib/esse/template_loader.rb
esse-0.4.0.rc1 lib/esse/template_loader.rb
esse-0.3.5 lib/esse/template_loader.rb
esse-0.3.4 lib/esse/template_loader.rb
esse-0.3.3 lib/esse/template_loader.rb
esse-0.3.2 lib/esse/template_loader.rb
esse-0.3.1 lib/esse/template_loader.rb
esse-0.3.0 lib/esse/template_loader.rb
esse-0.2.6 lib/esse/template_loader.rb
esse-0.2.5 lib/esse/template_loader.rb
esse-0.2.4 lib/esse/template_loader.rb
esse-0.2.3 lib/esse/template_loader.rb
esse-0.0.5 lib/esse/template_loader.rb
esse-0.0.4 lib/esse/template_loader.rb
esse-0.0.3 lib/esse/template_loader.rb
esse-0.0.2 lib/esse/template_loader.rb