Module: ModuleMapper::Map

Defined in:
lib/module_mapper/map.rb

Class Method Summary collapse

Class Method Details

.from(content:, filename:) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/module_mapper/map.rb', line 4

def self.from(content:, filename:)
  orig_stderr = $stderr.clone
  orig_stdout = $stdout.clone
  $stderr.reopen File.new('/dev/null', 'w')
  $stdout.reopen File.new('/dev/null', 'w')
  begin
    parser = Analyst.for_source(content)
    containers = parser.top_level_entities.select{|e| e.respond_to? :all_methods}
    containers << containers.map(&:classes)
    containers.flatten!.reject!{ |container| container.all_methods.empty? }
    containers.map do |container|
      {
        module_name: container.full_name,
        filename: filename
      }
    end
  rescue
    containers = [
      {
        module_name: "Unknown",
        filename: filename
      }
    ]
  ensure
    $stdout.reopen orig_stdout
    $stderr.reopen orig_stderr
  end
end