Class: Archruby::Architecture::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/archruby/architecture/parser.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config_file_path, base_path) ⇒ Parser

Returns a new instance of Parser.



9
10
11
12
13
14
15
16
17
18
# File 'lib/archruby/architecture/parser.rb', line 9

def initialize config_file_path, base_path
  @config_file = config_file_path
  @base_path = base_path
  @modules = []
  @type_inference_checker = TypeInferenceChecker.new
  parse
  ruby_std_lib_module
  ruby_core_module
  unknow_module
end

Instance Attribute Details

#modulesObject (readonly)

Returns the value of attribute modules.



7
8
9
# File 'lib/archruby/architecture/parser.rb', line 7

def modules
  @modules
end

Instance Method Details

#parseObject



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/archruby/architecture/parser.rb', line 20

def parse
  parsed_yaml = yaml_parser.load_file @config_file
  parsed_yaml.each do |module_name, definitions|
    begin
      config_definition = Archruby::Architecture::ConfigDefinition.new module_name, definitions
      module_definition = Archruby::Architecture::ModuleDefinition.new config_definition, @base_path
      @type_inference_checker.add_method_deps module_definition.class_methods_and_deps
      @type_inference_checker.add_method_calls module_definition.class_methods_calls
    rescue Archruby::MultipleConstraints => e
      STDOUT.puts "The config file is not right: #{e.msg} | err_code: #{e.status_code} | module_definition: #{module_name}"
      exit(e.status_code)
    end
    @modules << module_definition
    @type_inference_checker.verify_types
    @type_inference_checker.add_new_deps @modules
  end
end

#ruby_core_moduleObject



49
50
51
52
53
54
# File 'lib/archruby/architecture/parser.rb', line 49

def ruby_core_module
  config_definition_core = Archruby::Architecture::ConfigDefinition.new Archruby::Ruby::CORE_LIB_NAME, {"gems"=>"", "files"=>"", "allowed"=>"", "forbidden" => ""}
  module_definiton_core = Archruby::Architecture::ModuleDefinition.new(config_definition_core, @base_path)
  module_definiton_core.classes = Archruby::Ruby::CORE_LIBRARY_CLASSES
  @modules << module_definiton_core
end

#ruby_std_lib_moduleObject



42
43
44
45
46
47
# File 'lib/archruby/architecture/parser.rb', line 42

def ruby_std_lib_module
  config_definition_std_lib = Archruby::Architecture::ConfigDefinition.new Archruby::Ruby::STD_LIB_NAME, {"gems"=>"", "files"=>"", "allowed"=>"", "forbidden" => ""}
  module_definiton_std_lib = Archruby::Architecture::ModuleDefinition.new(config_definition_std_lib, @base_path)
  module_definiton_std_lib.classes = Archruby::Ruby::STD_LIBRARY_CLASSES
  @modules << module_definiton_std_lib
end

#unknow_moduleObject



56
57
58
59
# File 'lib/archruby/architecture/parser.rb', line 56

def unknow_module
  config_definition_unknow = Archruby::Architecture::ConfigDefinition.new "unknown", {"gems"=>"unknown", "files"=>"", "allowed"=>"", "forbidden" => ""}
  @modules << Archruby::Architecture::ModuleDefinition.new(config_definition_unknow, @base_path)
end

#yaml_parserObject



38
39
40
# File 'lib/archruby/architecture/parser.rb', line 38

def yaml_parser
  YAML
end