Sha256: bc2bde903a96e921ed6ca2b1b078780059b6e9f21fff1f98015ae2274fba4206

Contents?: true

Size: 1.58 KB

Versions: 2

Compression:

Stored size: 1.58 KB

Contents

# frozen_string_literal: true

require 'active_support/core_ext/object/blank'
require 'eac_templates/sources/directory'
require 'eac_templates/sources/file'
require 'eac_templates/sources/internal_set'
require 'eac_templates/errors/not_found'

module EacTemplates
  module Sources
    class Set
      class << self
        def default
          @default ||= new
        end
      end

      # @param subpath [Pathname]
      # @return [EacTemplates::Sources::Directory]
      def directory(subpath)
        ::EacTemplates::Sources::Directory.by_subpath(self, nil, subpath, source_set: self)
      end

      # @param subpath [Pathname]
      # @return [EacTemplates::Sources::Directory]
      def file(subpath)
        ::EacTemplates::Sources::File.by_subpath(self, nil, subpath, source_set: self)
      end

      def template(subpath, required = true) # rubocop:disable Style/OptionalBooleanParameter
        found_file = file(subpath)
        return found_file if found_file.found?

        found_directory = directory(subpath)
        return found_directory if found_directory.found?

        return nil unless required

        raise_template_not_found(subpath)
      end

      # @return [EacTemplates::Sources::InternalSet]
      def included_paths
        @included_paths ||= ::EacTemplates::Sources::InternalSet.new
      end

      private

      def raise_template_not_found(subpath)
        raise ::EacTemplates::Errors::NotFound,
              'Template not found for subpath ' \
              "\"#{subpath}\" (Included paths: #{included_paths.to_a.join(::File::PATH_SEPARATOR)})"
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 2 rubygems

Version Path
eac_templates-0.7.0 lib/eac_templates/sources/set.rb
eac_tools-0.91.0 sub/eac_templates/lib/eac_templates/sources/set.rb