class MotionBlender::Collector
Attributes
interpreters[RW]
requires[RW]
source[RW]
Public Class Methods
acceptable?(source)
click to toggle source
# File lib/motion_blender/collector.rb, line 20 def acceptable? source !source.type.block? || (source.children.first.code != 'MotionBlender.raketime') end
interpreters()
click to toggle source
# File lib/motion_blender/collector.rb, line 7 def interpreters @interpreters ||= [] end
new(source)
click to toggle source
# File lib/motion_blender/collector.rb, line 34 def initialize source @source = source @interpreters = self.class.interpreters.map do |interpreter| [interpreter.key, interpreter.new(self)] end.to_h @requires = [] end
refinements()
click to toggle source
# File lib/motion_blender/collector.rb, line 25 def refinements @refinements ||= Hash.new do |hash, key| hash[key] = Module.new { key.prepend self } end end
register(interpreter)
click to toggle source
# File lib/motion_blender/collector.rb, line 11 def register interpreter interpreters << interpreter interpreter end
requirable?(source)
click to toggle source
# File lib/motion_blender/collector.rb, line 16 def requirable? source interpreters.each_with_object(source).any?(&:requirable?) end
Public Instance Methods
collect_requires()
click to toggle source
# File lib/motion_blender/collector.rb, line 42 def collect_requires obj = evaluating_object if obj.is_a? Module with_refinements do obj.module_eval(source.code, source.file, source.line) end else with_refinements do obj.instance_eval(source.code, source.file, source.line) end end requires end
Private Instance Methods
apply_refinements()
click to toggle source
# File lib/motion_blender/collector.rb, line 81 def apply_refinements interpreters.each do |_, interpreter| refinements[interpreter.receiver].module_eval do define_method interpreter.method do |*args, &proc| interpreter.object = self interpreter.interpret(*args, &proc) end end end end
clear_refinements()
click to toggle source
# File lib/motion_blender/collector.rb, line 92 def clear_refinements refinements.each do |_, mod| mod.module_eval do instance_methods.each do |m| remove_method m end end end end
evaluating_object()
click to toggle source
# File lib/motion_blender/collector.rb, line 60 def evaluating_object obj = Object.new constants = @source.global_constants.select do |c| Object.const_defined? c.to_sym end constants.each { |c| obj.instance_eval "#{c} = ::#{c}" } if @source.wrapping_modules.present? ms = @source.wrapping_modules.map { |p| p.join(' ') } s = [*ms, 'self', *Array.new(ms.length, 'end')].join(';') obj = obj.instance_eval s end obj end
with_refinements() { || ... }
click to toggle source
# File lib/motion_blender/collector.rb, line 74 def with_refinements apply_refinements yield ensure clear_refinements end