Class: Rubyzen::Declarations::ModuleDeclaration

Inherits:
Object
  • Object
show all
Includes:
Providers::AttributesProvider, Providers::ClassNameProvider, Providers::ConstantsProvider, Providers::FilePathProvider, Providers::LineNumberProvider, Providers::LinesOfCodeProvider
Defined in:
lib/rubyzen/declarations/module_declaration.rb

Overview

Represents a Ruby module definition.

Examples:

mod = file.modules.first
mod.name           #=> "Admin::Api"
mod.all_methods    #=> MethodsCollection
mod.classes        #=> [ClassDeclaration, ...]

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Providers::AttributesProvider

#attributes

Methods included from Providers::LinesOfCodeProvider

#lines_of_code

Methods included from Providers::ConstantsProvider

#constants

Methods included from Providers::ClassNameProvider

#class_name

Methods included from Providers::LineNumberProvider

#line

Methods included from Providers::FilePathProvider

#file_path

Constructor Details

#initialize(node, file_declaration) ⇒ ModuleDeclaration

Returns a new instance of ModuleDeclaration.

Parameters:

  • node (RuboCop::AST::Node)

    the AST node

  • file_declaration (FileDeclaration)

    the parent file declaration



27
28
29
30
# File 'lib/rubyzen/declarations/module_declaration.rb', line 27

def initialize(node, file_declaration)
  @node = node
  @file_declaration = file_declaration
end

Instance Attribute Details

#file_declarationFileDeclaration (readonly)

Returns:



23
24
25
# File 'lib/rubyzen/declarations/module_declaration.rb', line 23

def file_declaration
  @file_declaration
end

#nodeRuboCop::AST::Node (readonly)

Returns:

  • (RuboCop::AST::Node)


20
21
22
# File 'lib/rubyzen/declarations/module_declaration.rb', line 20

def node
  @node
end

Instance Method Details

#all_methodsCollections::MethodsCollection

Returns methods defined directly in this module.



75
76
77
78
79
# File 'lib/rubyzen/declarations/module_declaration.rb', line 75

def all_methods
  Collections::MethodsCollection.new(
    direct_method_nodes.map { |method_node| MethodDeclaration.new(method_node, self) }
  )
end

#classesArray<ClassDeclaration>

Returns classes defined within this module.

Returns:



66
67
68
69
70
# File 'lib/rubyzen/declarations/module_declaration.rb', line 66

def classes
  node.each_node(:class).map do |class_node|
    ClassDeclaration.new(class_node, file_declaration)
  end
end

#modulesArray<ModuleDeclaration>

Returns nested modules within this module.

Returns:



59
60
61
# File 'lib/rubyzen/declarations/module_declaration.rb', line 59

def modules
  node.each_descendant(:module).map { |mod_node| ModuleDeclaration.new(mod_node, file_declaration) }
end

#nameString

Returns the fully-qualified module name including parent modules.

Returns:

  • (String)

    e.g. “Admin::Api”



35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/rubyzen/declarations/module_declaration.rb', line 35

def name
  parent_module_names = []
  current_node = node.parent

  while current_node
    if current_node.type == :module
      parent_module_names.unshift(current_node.identifier&.const_name)
    end
    current_node = current_node.parent
  end

  [parent_module_names, name_without_modules].flatten.compact.join('::')
end

#name_without_modulesString

Returns the module name without parent module prefixes.

Returns:

  • (String)


52
53
54
# File 'lib/rubyzen/declarations/module_declaration.rb', line 52

def name_without_modules
  node.identifier&.const_name
end