Sha256: fa120f9e16970dbf0691ec82f0e50dd0cb3f8a558b7c42bdec49b11c1acd2530

Contents?: true

Size: 1.01 KB

Versions: 3

Compression:

Stored size: 1.01 KB

Contents

module Rake::Funnel::Support
  class Finder
    include Enumerable

    def initialize(search_pattern, task, message = nil)
      @search_pattern = search_pattern
      @task = task
      @message = message
    end

    def each
      block_given? or return enum_for(__method__)
      all_or_default.each { |x| yield x }
    end

    def single_or_default
      first_sln
    end

    def single
      if first_sln.nil?
        raise Rake::Funnel::AmbiguousFileError.new(@message, @task.name, @search_pattern, candidates)
      end

      first_sln
    end

    def all_or_default
      candidates
    end

    def all
      if candidates.empty?
        raise Rake::Funnel::AmbiguousFileError.new(@message, @task.name, @search_pattern, candidates)
      end

      candidates
    end

    private
    def first_sln
      return candidates.first if candidates.one?

      nil
    end

    def candidates
      Dir[*@search_pattern].select { |f| File.file?(f) }.uniq
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rake-funnel-0.0.3.pre lib/rake/funnel/support/finder.rb
rake-funnel-0.0.2.pre lib/rake/funnel/support/finder.rb
rake-funnel-0.0.1.pre lib/rake/funnel/support/finder.rb