Module: Processing::Proxy
- Includes:
- Math
- Defined in:
- lib/ruby-processing/app.rb
Overview
This module will get automatically mixed in to any inner class of a Processing::App, in order to mimic Java’s inner classes, which have unfettered access to the methods defined in the surrounding class.
Class Method Summary collapse
-
.desired_method_names(inner_class) ⇒ Object
Generate a list of method names to proxy for inner classes.
-
.included(inner_class) ⇒ Object
Don’t do all of the work unless we have an inner class that needs it.
-
.proxy_constants(inner_class) ⇒ Object
Proxy the sketch’s constants on to the inner classes.
-
.proxy_methods(inner_class) ⇒ Object
Proxy methods through to the sketch.
Class Method Details
.desired_method_names(inner_class) ⇒ Object
Generate a list of method names to proxy for inner classes. Nothing camelCased, nothing __internal__, just the Processing API.
206 207 208 209 210 211 212 213 214 215 216 |
# File 'lib/ruby-processing/app.rb', line 206 def self.desired_method_names(inner_class) bad_method = /__/ # Internal JRuby methods. unwanted = PApplet.superclass.instance_methods + Object.instance_methods unwanted -= %w(width height cursor create_image background size resize) methods = Processing::App.public_instance_methods methods.reject do |m| unwanted.include?(m) || bad_method.match(m) || inner_class.method_defined?(m) end end |
.included(inner_class) ⇒ Object
Don’t do all of the work unless we have an inner class that needs it.
243 244 245 246 |
# File 'lib/ruby-processing/app.rb', line 243 def self.included(inner_class) proxy_methods(inner_class) proxy_constants(inner_class) end |
.proxy_constants(inner_class) ⇒ Object
Proxy the sketch’s constants on to the inner classes.
235 236 237 238 239 240 |
# File 'lib/ruby-processing/app.rb', line 235 def self.proxy_constants(inner_class) Processing::App.constants.each do |name| next if inner_class.const_defined?(name) inner_class.const_set(name, Processing::App.const_get(name)) end end |
.proxy_methods(inner_class) ⇒ Object
Proxy methods through to the sketch.
219 220 221 222 223 224 225 226 227 228 229 230 231 232 |
# File 'lib/ruby-processing/app.rb', line 219 def self.proxy_methods(inner_class) code = desired_method_names(inner_class).reduce('') do |rcode, method| rcode << " def \#{method}(*args, &block) # def rect(*args, &block)\n if block_given? # if block_given?\n $app.send :'\#{method}', *args, &block # ...\n else # else\n $app.\#{method} *args # $app.rect *args\n end # end\n end # end\n EOS\n end\n inner_class.class_eval(code)\nend\n" |