class BenchmarkSpec
Attributes
after_hooks[RW]
before_hooks[RW]
config[RW]
description[RW]
execution[RW]
formatter[RW]
nested_specs[RW]
reports[RW]
tasks[RW]
Public Class Methods
configure(&block)
click to toggle source
# File lib/benchmark_spec.rb, line 41 def configure(&block) BenchmarkSpec.config_proc = block end
describe(description, &block)
click to toggle source
# File lib/benchmark_spec.rb, line 55 def describe(description, &block) $benchmarks ||= [] $benchmarks << BenchmarkSpec.new(description, execution: block) end
evaluate_all()
click to toggle source
# File lib/benchmark_spec.rb, line 60 def evaluate_all return unless $benchmarks $benchmarks.each {|b| b.evaluate} end
load_files_recursively(path)
click to toggle source
# File lib/benchmark_spec.rb, line 45 def load_files_recursively(path) Dir[path].each do |file| if File.directory? file load_files_recursively file + "/*" else require file if File.basename(file).match /benchmark\.rb$/ end end end
new(description, opts = {})
click to toggle source
# File lib/benchmark_spec.rb, line 23 def initialize(description, opts = {}) @description = description @execution = opts[:execution] @before_hooks = opts[:before_hooks] || {} @after_hooks = opts[:after_hooks] || {} @tasks = [] @nested_specs = [] @reports = [] @formatter = opts[:formatter] || OutputFormatter.new @config ||= {} instance_exec @config, &config_proc if config_proc end
run(args = [])
click to toggle source
# File lib/benchmark_spec.rb, line 66 def run(args = []) base_path = Dir.pwd files_to_run = args.map{|path| "#{base_path}/#{path}"} files_to_run = ["#{base_path}/benchmark"] if files_to_run.empty? files_to_run.each do |f| load_files_recursively(f) end OutputFormatter.title("Benchmark Spec") evaluate_all OutputFormatter.title("Results") ensure ReportPresenter.print_results($benchmarks) end
Public Instance Methods
after(hook = :each, &block)
click to toggle source
# File lib/benchmark_spec.rb, line 91 def after(hook = :each, &block) after_hooks[hook] ||= [] after_hooks[hook] << block end
before(hook = :each, &block)
click to toggle source
# File lib/benchmark_spec.rb, line 86 def before(hook = :each, &block) before_hooks[hook] ||= [] before_hooks[hook] << block end
benchmark(description, &block)
click to toggle source
# File lib/benchmark_spec.rb, line 106 def benchmark(description, &block) tasks << { description: description, execution: block } end
describe(description, &block)
click to toggle source
# File lib/benchmark_spec.rb, line 96 def describe(description, &block) spec_options = {} spec_options[:execution] = block if block spec_options[:before_hooks] = before_hooks.dup spec_options[:after_hooks] = after_hooks.dup spec_options[:formatter] = OutputFormatter.new(indent_level: formatter.indent_level + 1) nested_specs << BenchmarkSpec.new(description, spec_options) end
evaluate()
click to toggle source
# File lib/benchmark_spec.rb, line 130 def evaluate if execution formatter.print "#{description}".colorize(:light_blue) instance_eval &execution run_all_tasks nested_specs.each do |ns| ns.evaluate end else pending(description) end end
run_all_tasks()
click to toggle source
# File lib/benchmark_spec.rb, line 110 def run_all_tasks return if tasks.empty? tasks.each do |t| begin pending t[:description] if t[:execution].nil? formatter.print "running #{t[:description]} ..." before_each_hooks.each {|b| b.call} report = Benchmark.measure(t[:description], &t[:execution]) after_each_hooks.each {|a| a.call} reports << report rescue => e formatter.print "Error: #{e.message}".colorize(:red) end end end
Private Instance Methods
after_each_hooks()
click to toggle source
# File lib/benchmark_spec.rb, line 156 def after_each_hooks after_hooks[:each] || [] end
before_each_hooks()
click to toggle source
# File lib/benchmark_spec.rb, line 152 def before_each_hooks before_hooks[:each] || [] end
pending(description)
click to toggle source
# File lib/benchmark_spec.rb, line 148 def pending(description) formatter.print "Pending: #{description}".colorize(:yellow) end