class Spark::Rake::SpeckTask

Attributes

batteries[RW]
description[RW]
files[RW]
name[RW]

Public Class Methods

new(name = :specks, batteries = Array.new) { |self| ... } click to toggle source
# File lib/spark/rake/speck_task.rb, line 14
def initialize name = :specks, batteries = Array.new
  @name = name
  @batteries = batteries.is_a?(Array) ? batteries : [batteries]
  @files = []
  @description = "Recursively runs all unbound Specks"
  
  yield self if block_given?
  @files << 'specifications/**/*_specs.rb' if @files.empty?
  
  self.files += ENV['SPECK_FILES'].split(/[ ,]/) if ENV['SPECK_FILES']
  
  define
end

Public Instance Methods

define() click to toggle source
# File lib/spark/rake/speck_task.rb, line 28
def define
  desc @description
  task @name do
    # TODO: AND SUDDENLY, UGLY CODES! KILOBYTES OF THEM!
    [@files].flatten.map {|p| p.include?("*") ? Dir[p] : p }.flatten
      .each {|f| require File.expand_path(f) }
    
    targets = @batteries.empty? ? Speck::unbound : @batteries
    checks = targets.inject(Array.new) do |acc, target|
      puts '-~- ' * 10 + '*' + ' -~-' * 10 if targets.size > 1
      target = target.call if target.respond_to? :call
      acc << Spark.playback(target)
    end
    puts '-~- ' * 10 + '*' + ' -~-' * 10 if targets.size > 1
    
    if targets.size == 0
      puts 'No specifications found.'
      exit 1
    end
    
    exit(1) if checks.map {|c| c[:failed] ? c[:failed].size : 0 }
      .inject {|acc,e| acc + e } > 0
  end
end