Skip to content

Instantly share code, notes, and snippets.

@monkstone
Created July 12, 2014 09:49
Show Gist options
  • Save monkstone/b8a40cf350bd194bc0a8 to your computer and use it in GitHub Desktop.
Save monkstone/b8a40cf350bd194bc0a8 to your computer and use it in GitHub Desktop.
Use require relative instead of all that __FILE__ magic
# -*- encoding : utf-8 -*-
SKETCH_PATH ||= ARGV.shift
SKETCH_ROOT ||= File.dirname(SKETCH_PATH)
require_relative '../../jruby_art'
require_relative '../../jruby_art/app'
module Processing
# For use with "bare" sketches that don't want to define a class or methods
SKETCH_TEMPLATE = <<-EOS
class Sketch < Processing::App
<% if has_methods %>
<%= source %>
<% else %>
def setup
size(DEFAULT_WIDTH, DEFAULT_HEIGHT, JAVA2D)
<%= source %>
no_loop
end
<% end %>
end
EOS
# This method is the common entry point to run a sketch, bare or complete.
def self.load_and_run_sketch
source = self.read_sketch_source
has_sketch = !!source.match(/^[^#]*< Processing::App/)
has_methods = !!source.match(/^[^#]*(def\s+setup|def\s+draw)/)
if has_sketch
load File.join(SKETCH_ROOT, SKETCH_PATH)
Processing::App.sketch_class.new if !$app
else
require 'erb'
code = ERB.new(SKETCH_TEMPLATE).result(binding)
Object.class_eval code, SKETCH_PATH, -1
Processing::App.sketch_class.new
end
end
# Read in the sketch source code. Needs to work both online and offline.
def self.read_sketch_source
File.read(SKETCH_PATH)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment