Sha256: 85439ec1c23f4b12f4f8ec656b53fee1474bf7a385558de0812ca11192221780

Contents?: true

Size: 1.77 KB

Versions: 1

Compression:

Stored size: 1.77 KB

Contents

module QED

  #require 'qed/config'
  require 'qed/demo'

  # The Session class encapsulates a set of demonstrations 
  # and the procedure for looping through them and running
  # each in turn.
  #
  class Session

    # Demonstration files.
    attr :files

    # Output format.
    attr_accessor :format

    # Trace mode
    attr_accessor :trace

    #
    attr_accessor :mode

    # New Session
    def initialize(files, options={})
      require_reporters

      @files  = [files].flatten

      @mode   = options[:mode]
      @trace  = options[:trace]  || false
      @format = options[:format] || :dotprogress
    end

    # Top-level configuration.
    #def config
    #  QED.config
    #end

    # TODO: Ultimately use Plugin library to support custom reporters?
    def require_reporters
      Dir[File.dirname(__FILE__) + '/reporter/*'].each do |file|
        require file
      end
    end

    # Instance of selected Reporter subclass.
    def reporter
      @reporter ||= (
        name = Reporter.constants.find{ |c| /#{format}/ =~ c.downcase }
        Reporter.const_get(name).new(:trace => trace)
      )
    end

    # Returns an Array of Demo instances.
    def demos
      @demos ||= files.map{ |file| Demo.new(file, :mode=>mode) }
    end

    #
    def observers
      [reporter]
    end

    # Run session.
    def run
      #profile.before_session(self)
      reporter.before_session(self)
      demos.each do |demo|
        demo.run(*observers)
        #pid = fork { demo.run(*observers) }
        #Process.detach(pid)
      end
      reporter.after_session(self)
      #profile.after_session(self)
    end

    # Globally applicable advice.
    #def environment
    #  scripts.each do |script|
    #    script.require_environment
    #  end
    #end

  end#class Session

end#module QED

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
qed-2.5.0 lib/qed/session.rb