Module: DBT::IOS

Defined in:
lib/dbt/ios.rb

Class Method Summary collapse

Class Method Details

.analyze(app) ⇒ 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
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
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/dbt/ios.rb', line 4

def analyze(app)
  debugger_cmds_output = ''
  dependers = Hash.new { |hash,key| hash[key] = [] }
  providers = {}
  default_providers = {}

  files = app.files.flatten.uniq
  files.flatten.each do |filename|
    File.open(filename, 'r:UTF-8') do |file|
      file.each_line do |line|
        command = false

        if line =~ /^#--+>/
          command, dep = line.rstrip.sub(/^#--+> */, '').split(' ', 2)
        elsif line =~ /^[ \t]*#[ \t]*@(provides|requires)/
          command, dep = line.rstrip.sub(/^[ \t]*#[ \t]*@/, '').split(' ', 2)
        end

        if command
          case command
          when 'break'
            dep ||= file.lineno + 1
            debugger_cmds_output += "breakpoint set --file #{File.basename filename} --line #{dep}\n"
          when 'provides'
            if providers.key? dep
              puts "\033[1m!HAY DEMASIADOS!\033[0m \033[1;31m#{dep}\033[0m"
            end
            providers[dep] = filename
          when 'requires'
            dependers[filename] << dep
          else
            puts "\033[1m!NO COMPRENDO!\033[0m \"#{command} #{dep}\""
            puts "\033[1;31m#{filename}:#{file.lineno}\033[0m"
          end
        elsif line =~ /^[ \t]*class[ \t]+(\w+)/
          dep = "class:#{$1}"
          default_providers[dep] = filename
        elsif line =~ /^[ \t]*module[ \t]+(\w+)/
          dep = "module:#{$1}"
          default_providers[dep] = filename
        end
      end
    end
  end # files

  default_providers.each do |dep, filename|
    providers[dep] ||= filename
  end

  dependers.each do |filename, dependencies|
    if dep = dependencies.find { |dep| ! providers.include? dep }
      puts "\033[1m!NO HAY!\033[0m \033[1;31m#{dep}\033[0m"
      raise "#{filename} could not find a provider for #{dep}"
    else
      app.files_dependencies filename => dependencies.map { |dep| providers[dep] }
    end
  end

  unless debugger_cmds_output.empty?
    File.open('debugger_cmds', 'w') do |file|
      file.write "#------> Creado por el DBT <------#\n"
      file.write debugger_cmds_output
    end
  end
end