Sha256: e1c035b366b67cecae18c2b98d0a18d369a1a42f7c09a1dbec23706da5992974

Contents?: true

Size: 1.42 KB

Versions: 2

Compression:

Stored size: 1.42 KB

Contents

module Riot
  class Context
    # The protein
    attr_reader :description, :assertions, :situation
    def initialize(description, reporter, parent=nil, &context_block)
      @description, @reporter, @parent = description, reporter, parent
      @assertions = []
      @situation = Situation.new
      bootstrap(@situation)
      instance_eval(&context_block) if block_given? # running the context
      report
    end

    # Walk it out. Call setup from parent first
    def bootstrap(a_situation)
      run_setup(a_situation, &@parent.bootstrap(a_situation)) if @parent
      @setup
    end

    def report
      assertions.each { |assertion| @reporter.process_assertion(assertion) }
    end

    def to_s; @to_s ||= [@parent.to_s, @description].join(' ').strip; end

    # DSLee stuff

    def setup(&block)
      run_setup(situation, &(@setup = block))
    end

    def context(description, &block) Context.new(description, @reporter, self, &block); end
    def asserts(what, &block) add_assertion("asserts #{what}", &block); end
    def should(what, &block) add_assertion("should #{what}", &block); end
    def topic; asserts("topic") { topic }; end
  private
    def add_assertion(what, &block)
      (assertions << Assertion.new("#{to_s} #{what}", @situation, &block)).last
    end

    def run_setup(a_situation, &setup_block)
      a_situation.topic = a_situation.instance_eval(&setup_block) if setup_block
    end
  end # Context
end # Riot

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
riot-0.9.10 lib/riot/context.rb
riot-0.9.9 lib/riot/context.rb