class Specifier::Context

Defines a context that can be deeply nested (evaluates from oldest to newest in ancestry).

Usage:

let "..." do
  # ...
end

it "..." do
  # ...
end

describe "..." do
end

Attributes

children[RW]
description[RW]
parent[RW]

Public Class Methods

new(description, &block) click to toggle source
# File lib/specifier/context.rb, line 33
def initialize(description, &block)
  @description = description
  @block = block
  @children = []
  @examples = []
  @definitions = []
end
setup(description, parent = nil, &block) click to toggle source
# File lib/specifier/context.rb, line 23
def self.setup(description, parent = nil, &block)
  context = new(description, &block)
  if parent
    context.parent = parent
    parent.children << context
  end
  context.instance_eval(&block)
  context
end

Public Instance Methods

describe(description, &block) click to toggle source
# File lib/specifier/context.rb, line 41
def describe(description, &block)
  self.class.setup(description, self, &block)
end
it(description, &block) click to toggle source
# File lib/specifier/context.rb, line 51
def it(description, &block)
  example = Example.new(description, &block)
  @examples << example
  example
end
let(name, &block) click to toggle source
# File lib/specifier/context.rb, line 45
def let(name, &block)
  definition = Definition.new(name, &block)
  @definitions << definition
  definition
end
run() click to toggle source
# File lib/specifier/context.rb, line 57
def run
  Specifier.formatter.context(self) do
    @examples.each do |example|
      world = Specifier::World.new
      setup(world)
      result = example.run(world)
      Specifier.formatter.record(example, result)
    end
    @children.each(&:run)
  end
end
setup(world) click to toggle source
# File lib/specifier/context.rb, line 69
def setup(world)
  parent&.setup(world)
  @definitions.each do |definition|
    definition.define(world)
  end
end