Sha256: 7daa2c236335365d6bbc66bbf329b38275f098c4147a8eb6c2d0649ee849f775

Contents?: true

Size: 1.07 KB

Versions: 4

Compression:

Stored size: 1.07 KB

Contents

module Undies

  class Source; end

  class NamedSource

    attr_accessor :file, :opts, :proc

    def initialize(*args, &block)
      args << block if block
      self.args = args
    end

    def ==(other_named_source)
      self.file == other_named_source.file &&
      self.opts == other_named_source.opts &&
      self.proc == other_named_source.proc
    end

    def args=(values)
      self.proc, self.opts, self.file = [
        values.last.kind_of?(::Proc)   ? values.pop : nil,
        values.last.kind_of?(::Hash)   ? values.pop : {},
        values.last.kind_of?(::String) ? values.pop : nil
      ]
    end

    def args
      [self.file, self.opts, self.proc]
    end

  end

  # singleton accessors for named sources

  def self.named_sources
    @@sources ||= {}
  end

  def self.named_source(name, *args, &block)
    if args.empty? && block.nil?
      self.named_sources[name]
    else
      self.named_sources[name] = Undies::NamedSource.new(*args, &block)
    end
  end

  def self.source(name)
    if ns = self.named_source(name)
      Undies::Source.new(ns)
    end
  end

end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
undies-2.2.1 lib/undies/named_source.rb
undies-2.2.0 lib/undies/named_source.rb
undies-2.1.0 lib/undies/named_source.rb
undies-2.0.0 lib/undies/named_source.rb