Module: Pure::Extractor

Defined in:
lib/pure/extractor.rb

Class Method Summary collapse

Class Method Details

.eval_error(backtrace) ⇒ Object



14
15
16
17
18
19
20
21
# File 'lib/pure/extractor.rb', line 14

def eval_error(backtrace)
  backtrace.each_with_index { |desc, index|
    if desc =~ %r!:in \`eval\'\Z!
      file, line = Util.file_line(backtrace[index + 1])
      raise EvalError.new(file, line)
    end
  }
end

.extract(mod, method_name, backtrace) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/pure/extractor.rb', line 6

def extract(mod, method_name, backtrace)
  file, line = Util.file_line(backtrace.first)
  if file == "(eval)"
    eval_error(backtrace)
  end
  mod.parser.extract(mod, method_name, file, line)
end

.record_function(mod, origin, name, args, backtrace) ⇒ Object

:nodoc:



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/pure/extractor.rb', line 23

def record_function(mod, origin, name, args, backtrace)  #:nodoc:
  spec = ExtractedFunctions[mod.parser][mod][name] = (
    case origin
    when :def
      #
      # For `def' definitions, function and argument names are
      # determined at parse-time.
      #
      extract(mod, name, backtrace)
    when :fun
      #
      # For `fun' definitions, function and argument names are
      # determined at run-time.
      #
      # Use the __fun flag to verify the parser's discovery of a
      # `fun' call.
      #
      extract(mod, :__fun, backtrace).merge(:name => name, :args => args)
    end
  ).merge(
    :origin => origin,
    :parser => mod.parser.name
  )

  if origin == :def and spec[:splat]
    raise SplatError.new(spec[:file], spec[:line])
  end

  if spec[:default]
    raise DefaultArgumentError.new(spec[:file], spec[:line])
  end

  spec
end