Class: QED::Session
- Inherits:
-
Object
- Object
- QED::Session
- Defined in:
- lib/qed/session.rb
Overview
Runtime Session
The Session class encapsulates a set of demonstrations and the procedure for looping through them and running each in turn.
Instance Attribute Summary collapse
-
#demos ⇒ Object
readonly
Demonstration files.
-
#format ⇒ Object
Output format.
-
#trace ⇒ Object
Trace mode.
Instance Method Summary collapse
- #applique_scripts ⇒ Object
-
#create_applique ⇒ Object
TODO: associate scripts to there applique.
-
#initialize(demos, options = {}) ⇒ Session
constructor
New demonstration.
- #observers ⇒ Object
-
#reporter ⇒ Object
Instance of selected Reporter subclass.
-
#require_reporters ⇒ Object
TODO: Ultimately use Plugin library.
-
#run ⇒ Object
Run session.
- #scripts ⇒ Object
Constructor Details
#initialize(demos, options = {}) ⇒ Session
New demonstration
25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/qed/session.rb', line 25 def initialize(demos, ={}) require_reporters @demos = [demos].flatten @format = :dotprogress @trace = false .each do |k,v| __send__("#{k}=", v) if v end @applique = create_applique end |
Instance Attribute Details
#demos ⇒ Object (readonly)
Demonstration files.
16 17 18 |
# File 'lib/qed/session.rb', line 16 def demos @demos end |
#format ⇒ Object
Output format.
19 20 21 |
# File 'lib/qed/session.rb', line 19 def format @format end |
#trace ⇒ Object
Trace mode
22 23 24 |
# File 'lib/qed/session.rb', line 22 def trace @trace end |
Instance Method Details
#applique_scripts ⇒ Object
118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/qed/session.rb', line 118 def applique_scripts locs = [] demos.each do |demo| Dir.ascend(File.dirname(demo)) do |path| break if path == Dir.pwd dir = File.join(path, 'applique') if File.directory?(dir) locs << dir end end end envs = locs.map{ |loc| Dir[File.join(loc,'**/*.rb')] } envs.flatten.compact.uniq end |
#create_applique ⇒ Object
TODO: associate scripts to there applique
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/qed/session.rb', line 98 def create_applique applique = Applique.new #eval "include QED::DomainLanguage", TOPLEVEL_BINDING applique_scripts.each do |file| #next if @loadlist.include?(file) #case File.extname(file) #when '.rb' # since scope is just TOPLEVEL now #require(file) applique.module_eval(File.read(file), file) #eval(File.read(file), scope.__binding__, file) # TODO: for each script!? Nay. #else # Script.new(file, scope).run #end #@loadlist << file end applique end |
#observers ⇒ Object
71 72 73 |
# File 'lib/qed/session.rb', line 71 def observers [reporter] end |
#reporter ⇒ Object
Instance of selected Reporter subclass.
53 54 55 56 57 58 |
# File 'lib/qed/session.rb', line 53 def reporter @reporter ||= ( name = Reporter.constants.find{ |c| /#{format}/ =~ c.downcase } Reporter.const_get(name).new(:trace => trace) ) end |
#require_reporters ⇒ Object
TODO: Ultimately use Plugin library.
46 47 48 49 50 |
# File 'lib/qed/session.rb', line 46 def require_reporters Dir[File.dirname(__FILE__) + '/reporter/*'].each do |file| require file end end |
#run ⇒ Object
Run session.
76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/qed/session.rb', line 76 def run #profile.before_session(self) reporter.before_session(self) #demos.each do |demo| # script = Script.new(demo, report) scripts.each do |script| script.run(*observers) #pid = fork { script.run(*observers) } #Process.detach(pid) end reporter.after_session(self) #profile.after_session(self) end |