Class: Processing::Watcher
- Inherits:
-
Object
- Object
- Processing::Watcher
- Defined in:
- lib/ruby-processing/runners/watch.rb
Overview
A sketch loader, observer, and reloader, to tighten the feedback between code and effect.
Instance Method Summary collapse
-
#initialize ⇒ Watcher
constructor
Sic a new Processing::Watcher on the sketch.
- #reload_files_to_watch ⇒ Object
-
#report_errors ⇒ Object
Convenience function to report errors when loading and running a sketch, instead of having them eaten by the thread they are loaded in.
- #start_runner ⇒ Object
-
#start_watching ⇒ Object
Kicks off a thread to watch the sketch, reloading Ruby-Processing and restarting the sketch whenever it changes.
Constructor Details
#initialize ⇒ Watcher
Sic a new Processing::Watcher on the sketch
10 11 12 13 14 |
# File 'lib/ruby-processing/runners/watch.rb', line 10 def initialize reload_files_to_watch @time = Time.now start_watching end |
Instance Method Details
#reload_files_to_watch ⇒ Object
53 54 55 |
# File 'lib/ruby-processing/runners/watch.rb', line 53 def reload_files_to_watch @files = ([SKETCH_PATH] + Dir.glob(File.dirname(SKETCH_PATH) + "/*.rb")).uniq end |
#report_errors ⇒ Object
Convenience function to report errors when loading and running a sketch, instead of having them eaten by the thread they are loaded in.
36 37 38 39 40 41 42 |
# File 'lib/ruby-processing/runners/watch.rb', line 36 def report_errors yield rescue Exception => e puts "Exception occured while running sketch #{File.basename SKETCH_PATH}:" puts e.to_s puts e.backtrace.join("\n") end |
#start_runner ⇒ Object
44 45 46 47 48 49 50 51 |
# File 'lib/ruby-processing/runners/watch.rb', line 44 def start_runner @runner.kill if @runner && @runner.alive? @runner = Thread.start do report_errors do Processing.load_and_run_sketch end end end |
#start_watching ⇒ Object
Kicks off a thread to watch the sketch, reloading Ruby-Processing and restarting the sketch whenever it changes.
19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/ruby-processing/runners/watch.rb', line 19 def start_watching start_runner loop do if @files.detect { |file| File.exists?(file) && File.stat(file).mtime > @time } puts "reloading sketch..." $app && $app.close @time = Time.now GC.start start_runner reload_files_to_watch end sleep 0.33 end end |