Sha256: 1a4381ba476a127f99e5c682aa36d80f7b943da1049aef6efc4d32d62ad1fcfb

Contents?: true

Size: 1.71 KB

Versions: 4

Compression:

Stored size: 1.71 KB

Contents

require 'hanami/utils/load_paths'

module Hanami
  module Assets
    # Configuration settings
    #
    # @since 0.1.0
    # @api private
    module Config
      # Source directories for a specific application
      #
      # @since 0.1.0
      # @api private
      #
      # @see Hanami::Assets.duplicate
      # @see http://www.rubydoc.info/gems/hanami-utils/Hanami/Utils/LoadPaths
      #
      # TODO The perf of this class is poor, consider to improve it.
      class Sources < Utils::LoadPaths
        # @since 0.3.0
        # @api private
        SKIPPED_FILE_PREFIX = '_'.freeze

        # @since 0.1.0
        # @api private
        attr_writer :root

        # @since 0.1.0
        # @api private
        def initialize(root)
          super()
          @root = root
        end

        # @since 0.1.0
        # @api private
        def map
          [].tap do |result|
            each do |source|
              result << yield(source)
            end
          end
        end

        # @since 0.1.0
        # @api private
        def find(filename)
          result = files(filename).first
          result = Pathname.new(result) unless result.nil?
          result
        end

        # @since 0.1.0
        # @api private
        def files(name = nil)
          result = []

          Dir.glob(map { |source| "#{source}#{::File::SEPARATOR}**#{::File::SEPARATOR}#{name}*" }).each do |file|
            next if ::File.directory?(file) || ::File.basename(file).start_with?(SKIPPED_FILE_PREFIX)
            result << file
          end

          result
        end

        private

        # @since 0.1.0
        # @api private
        def realpath(path)
          @root.join(path).realpath
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
hanami-assets-1.0.0.beta2 lib/hanami/assets/config/sources.rb
hanami-assets-1.0.0.beta1 lib/hanami/assets/config/sources.rb
hanami-assets-0.4.0 lib/hanami/assets/config/sources.rb
hanami-assets-0.3.0 lib/hanami/assets/config/sources.rb