Sha256: ed6e3e5830a1609df9835544dbb352bf5959a02f10ae0ed7865f2756ce18c62c

Contents?: true

Size: 1.1 KB

Versions: 4

Compression:

Stored size: 1.1 KB

Contents

require 'spec/helper/wrap'

class SpecLayout
  attr_accessor :base, :layout, :files

  def initialize(base, layout)
    @base, @layout = base, layout
  end

  def run
    SpecWrap.new(@files).run
  end

  def gather
    @files = gather_files(@base, @layout)
  end

  def gather_files(base, layout)
    files = Set.new
    base = File.expand_path(base)

    layout.each do |key, value|
      if value.is_a?(Hash)
        files += gather_files(base/key, value)
      else
        glob = base/key/"#{value}.rb"
        files += Dir[glob].map{|f| File.expand_path(f)}
      end
    end

    files.reject{|f| File.directory?(f)}
  end

  def clean
    @files = clean_files(@files, @layout)
  end

  def clean_files(files, layout)
    layout.each do |key, value|
      if value.is_a?(Hash)
        clean_files(files, value)
      elsif files
        files.dup.each do |file|
          name = File.basename(file, File.extname(file))
          dir = file.gsub(File.extname(file), '')
          if name == key and File.directory?(dir)
            files.delete(file)
          end
        end
      end
    end

    files
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
ramaze-0.1.0 spec/helper/layout.rb
ramaze-0.1.3 spec/helper/layout.rb
ramaze-0.1.2 spec/helper/layout.rb
ramaze-0.1.1 spec/helper/layout.rb