Class: Sourcify::Proc::Parser::Scanner
- Defined in:
- lib/sourcify/lib/sourcify/proc/parser/scanner.rb
Class Method Summary collapse
- .process(source_code, opts, &matcher) ⇒ Object
- .rscan(str, opts) ⇒ Object
- .scan_pattern_hint(val) ⇒ Object
Class Method Details
.process(source_code, opts, &matcher) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/sourcify/lib/sourcify/proc/parser/scanner.rb', line 9 def process(source_code, opts, &matcher) results = rscan(source_code.to_s, { :start_pattern => scan_pattern_hint(opts[:attached_to]), :body_matcher => opts[:body_matcher], :ignore_nested => opts[:ignore_nested], :stop_on_newline => false, }).select{|(raw, normalized)| matcher.call(raw) } case results.size when 0 then raise NoMatchingProcError when 1 then results[0] else raise MultipleMatchingProcsPerLineError end end |
.rscan(str, opts) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/sourcify/lib/sourcify/proc/parser/scanner.rb', line 33 def rscan(str, opts) results = RawScanner.process(str, opts) || [] inner_opts = opts.merge(:stop_on_newline => true) return results if opts[:ignore_nested] results.map do |outer| [ outer, *rscan(outer[1].sub(/^proc\s*(do|\{)/,''), inner_opts) ] end.flatten(1) end |