Module: Spark
- Defined in:
- lib/spark.rb,
lib/spark/rake/speck_task.rb
Defined Under Namespace
Modules: Rake
Constant Summary collapse
- VERSION =
0
Class Method Summary collapse
-
.playback(target, indent = 0) ⇒ Object
“Plays” a ‘Speck`, or `Speck:Battery`, recursively.
Class Method Details
.playback(target, indent = 0) ⇒ Object
“Plays” a ‘Speck`, or `Speck:Battery`, recursively. This consists of:
-
Printing data about the ‘Speck` or `Battery`
-
Executing the ‘Battery`
-
Executing the ‘Speck`(s)
-
Executing each ‘Check` belonging to the `Speck`(s)
-
Printing data about each ‘Check` and its result
-
Recursively repeating the above for each child ‘Speck` or `Battery`
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/spark.rb', line 17 def self.playback target, indent = 0 if target.respond_to? :specks and target.respond_to? :targets target.specks.each {|speck| Spark::playback speck } target.targets.each {|object, battery| Spark::playback battery } else # TODO: FUCK FUCK FUCK THIS IS UGLY CODE ARRRGH puts (" " * indent) + target.target.inspect if target.target indent += 1 target.execute checks = target.checks.group_by do |check| begin check.execute unless check.status rescue Speck::Exception::CheckFailed end puts (" " * indent) + case check.status when :passed then (" # " + check.status.to_s).green when :failed then (" # " + check.status.to_s).red when :future then (" # " + check.status.to_s).yellow else (" # " + check.status.to_s).cyan end check.status end child_checks = target.children .inject({:passed => [], :failed => []}) do |children_checks, speck| child_checks = Spark::playback speck, indent child_checks.each do |k,v| children_checks[k] ||= Array.new children_checks[k] += v || Array.new end children_checks end child_checks.each do |k,v| checks[k] ||= Array.new checks[k] += v || Array.new end indent -= 1 # TODO: FUCK FUCK FUCK THIS IS EVEN UGLIER THAN THE ABOVE CODE!!!!1!1 total = checks.inject(0) {|t, (k,v)| t + v.size } passed = checks[:passed].size failed = checks[:failed].size other = checks.inject(0) {|t, (k,v)| t += v.size unless [:passed, :failed].include? k; t } puts (" " * indent) + "(#{ checks[:failed].size > 0 ? checks[:passed].size.to_s.red : checks[:passed].size.to_s.green }#{other &&! other.zero? ? '/' + other.to_s.cyan : nil } of #{total})" unless total.zero? return checks end end |