Class: MotionBlender::Analyzer::Evaluator
- Inherits:
-
Object
- Object
- MotionBlender::Analyzer::Evaluator
- Defined in:
- lib/motion_blender/analyzer/evaluator.rb
Instance Attribute Summary collapse
-
#ast ⇒ Object
readonly
Returns the value of attribute ast.
-
#file ⇒ Object
readonly
Returns the value of attribute file.
-
#stack ⇒ Object
readonly
Returns the value of attribute stack.
Class Method Summary collapse
Instance Method Summary collapse
- #create_extractor ⇒ Object
-
#initialize(file, ast, stack = [], method = nil) ⇒ Evaluator
constructor
A new instance of Evaluator.
- #parse_args ⇒ Object
- #recover_from_script_error(err) ⇒ Object
- #recover_from_standard_error(err) ⇒ Object
Constructor Details
#initialize(file, ast, stack = [], method = nil) ⇒ Evaluator
Returns a new instance of Evaluator.
9 10 11 12 13 14 |
# File 'lib/motion_blender/analyzer/evaluator.rb', line 9 def initialize file, ast, stack = [], method = nil @file = file @ast = ast @stack = stack @method = method || @ast.children[1] end |
Instance Attribute Details
#ast ⇒ Object (readonly)
Returns the value of attribute ast.
7 8 9 |
# File 'lib/motion_blender/analyzer/evaluator.rb', line 7 def ast @ast end |
#file ⇒ Object (readonly)
Returns the value of attribute file.
7 8 9 |
# File 'lib/motion_blender/analyzer/evaluator.rb', line 7 def file @file end |
#stack ⇒ Object (readonly)
Returns the value of attribute stack.
7 8 9 |
# File 'lib/motion_blender/analyzer/evaluator.rb', line 7 def stack @stack end |
Class Method Details
.extractor_for(method) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/motion_blender/analyzer/evaluator.rb', line 51 def self.extractor_for method @extractor_classes ||= {} @extractor_classes[method] ||= Class.new do define_method method do |arg| req = Require.new(@_file, method, arg) unless req.excluded? @_args ||= [] @_args << req end end define_method :__ORIGINAL__ do OriginalFinder.new(@_file).find end end end |
Instance Method Details
#create_extractor ⇒ Object
44 45 46 47 48 49 |
# File 'lib/motion_blender/analyzer/evaluator.rb', line 44 def create_extractor file = @file extractor = Evaluator.extractor_for(@method).new extractor.instance_eval { @_file = file } extractor end |
#parse_args ⇒ Object
16 17 18 19 20 21 22 23 24 |
# File 'lib/motion_blender/analyzer/evaluator.rb', line 16 def parse_args extractor = create_extractor extractor.instance_eval(@ast.loc.expression.source, @file) extractor.instance_eval { @_args || [] } rescue ScriptError => err recover_from_script_error err rescue StandardError => err recover_from_standard_error err end |
#recover_from_script_error(err) ⇒ Object
26 27 28 29 30 31 32 33 34 |
# File 'lib/motion_blender/analyzer/evaluator.rb', line 26 def recover_from_script_error err i = @stack.find_index { |ast| ast.type == :rescue } if i && i > 0 stack = @stack[0..(i - 1)] Evaluator.new(@file, stack.last, stack[0..-2], @method).parse_args else fail LoadError, err. end end |
#recover_from_standard_error(err) ⇒ Object
36 37 38 39 40 41 42 |
# File 'lib/motion_blender/analyzer/evaluator.rb', line 36 def recover_from_standard_error err if @stack.any? Evaluator.new(@file, @stack.last, @stack[0..-2], @method).parse_args else fail LoadError, err. end end |