Class: QED::Session

Inherits:
Object show all
Defined in:
lib/qed/session.rb

Overview

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(files, options = {}) ⇒ Session

New Session



25
26
27
28
29
30
31
32
33
# File 'lib/qed/session.rb', line 25

def initialize(files, options={})
  require_reporters

  @files  = [files].flatten

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

Instance Attribute Details

#filesObject (readonly)

Demonstration files.



13
14
15
# File 'lib/qed/session.rb', line 13

def files
  @files
end

#formatObject

Output format.



16
17
18
# File 'lib/qed/session.rb', line 16

def format
  @format
end

#modeObject

Returns the value of attribute mode.



22
23
24
# File 'lib/qed/session.rb', line 22

def mode
  @mode
end

#traceObject

Trace mode



19
20
21
# File 'lib/qed/session.rb', line 19

def trace
  @trace
end

Instance Method Details

#demosObject

Returns an Array of Demo instances.



56
57
58
# File 'lib/qed/session.rb', line 56

def demos
  @demos ||= files.map{ |file| Demo.new(file, :mode=>mode) }
end

#observersObject



61
62
63
# File 'lib/qed/session.rb', line 61

def observers
  [reporter]
end

#reporterObject

Instance of selected Reporter subclass.



48
49
50
51
52
53
# File 'lib/qed/session.rb', line 48

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

#require_reportersObject

TODO: Ultimately use Plugin library to support custom reporters?



41
42
43
44
45
# File 'lib/qed/session.rb', line 41

def require_reporters
  Dir[File.dirname(__FILE__) + '/reporter/*'].each do |file|
    require file
  end
end

#runObject

Run session.



66
67
68
69
70
71
72
73
74
75
76
# File 'lib/qed/session.rb', line 66

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