class RubyToUML::UMLInfoGenerator::UMLInfo

Attributes

classes[R]
modules[R]
relationships[R]

Public Class Methods

new(classes, modules, relationships) click to toggle source
# File lib/ruby_to_uml/uml_info_generator/info_classes.rb, line 37
def initialize(classes, modules, relationships)
  @classes = classes
  @modules = modules
  @relationships = relationships
end

Public Instance Methods

class_instance_methods() click to toggle source
# File lib/ruby_to_uml/uml_info_generator/info_classes.rb, line 51
def class_instance_methods
  classes.map { |class_info| class_info.instance_methods_info.map(&:to_s).join("\n") }
end
class_instance_variables() click to toggle source
# File lib/ruby_to_uml/uml_info_generator/info_classes.rb, line 67
def class_instance_variables
  classes.map(&:instance_variables_info)
end
class_names() click to toggle source
# File lib/ruby_to_uml/uml_info_generator/info_classes.rb, line 43
def class_names
  classes.map(&:name)
end
class_singleton_methods() click to toggle source
# File lib/ruby_to_uml/uml_info_generator/info_classes.rb, line 59
def class_singleton_methods
  classes.map { |class_info| class_info.singleton_methods_info.map(&:to_s).join("\n") }
end
merge(other_uml_info) click to toggle source
# File lib/ruby_to_uml/uml_info_generator/info_classes.rb, line 75
def merge(other_uml_info)
  unique_relationships = (relationships + other_uml_info.relationships).uniq
  unique_classes = merge_classes(classes, other_uml_info.classes)
  unique_modules = merge_modules(modules, other_uml_info.modules)
  UMLInfo.new(unique_classes, unique_modules, unique_relationships)
end
module_instance_methods() click to toggle source
# File lib/ruby_to_uml/uml_info_generator/info_classes.rb, line 55
def module_instance_methods
  modules.map { |class_info| class_info.instance_methods_info.map(&:to_s).join("\n") }
end
module_names() click to toggle source
# File lib/ruby_to_uml/uml_info_generator/info_classes.rb, line 47
def module_names
  modules.map(&:name)
end
module_singleton_methods() click to toggle source
# File lib/ruby_to_uml/uml_info_generator/info_classes.rb, line 63
def module_singleton_methods
  modules.map { |class_info| class_info.singleton_methods_info.map(&:to_s).join("\n") }
end
relationship_descriptions() click to toggle source
# File lib/ruby_to_uml/uml_info_generator/info_classes.rb, line 71
def relationship_descriptions
  relationships.map(&:to_s)
end

Private Instance Methods

merge_attributes(_objects, getters) click to toggle source
# File lib/ruby_to_uml/uml_info_generator/info_classes.rb, line 127
def merge_attributes(_objects, getters)
  lambda do |objects|
    example_object = objects[0]

    uniq_attributes = []
    getters.each do |getter|
      attribute = []
      objects.each do |object|
        object.send(getter)
        attribute << object.send(getter)
      end
      uniq_attributes << attribute.flatten.uniq
    end

    klass = example_object.class
    klass.new(example_object.name, *uniq_attributes)
  end
end
merge_class_attributes(classes) click to toggle source
# File lib/ruby_to_uml/uml_info_generator/info_classes.rb, line 117
def merge_class_attributes(classes)
  getters = %i[instance_methods_info singleton_methods_info instance_variables_info]
  merge_attributes(classes, getters)
end
merge_classes(classes, other_classes) click to toggle source
# File lib/ruby_to_uml/uml_info_generator/info_classes.rb, line 84
def merge_classes(classes, other_classes)
  merge_entities(classes, other_classes, &merge_class_attributes(classes))
end
merge_entities(group, other_group, &merge_attributes) click to toggle source
# File lib/ruby_to_uml/uml_info_generator/info_classes.rb, line 92
def merge_entities(group, other_group, &merge_attributes)
  unique_entities = []
  merged = []

  distinct_entities = (group + other_group).uniq

  distinct_entities.each do |entity_1|
    next if merged.include?(entity_1.name)

    matched_entities = []
    distinct_entities.each do |entity_2|
      matched_entities << entity_2 if entity_1.name == entity_2.name && entity_1.object_id != entity_2.object_id
    end

    if matched_entities.empty?
      unique_entities << entity_1
    else
      unique_entities << merge_attributes.call([entity_1, *matched_entities])
      merged << entity_1.name
    end
  end

  unique_entities
end
merge_module_attributes(classes) click to toggle source
# File lib/ruby_to_uml/uml_info_generator/info_classes.rb, line 122
def merge_module_attributes(classes)
  getters = %i[instance_methods_info singleton_methods_info]
  merge_attributes(classes, getters)
end
merge_modules(modules, other_modules) click to toggle source
# File lib/ruby_to_uml/uml_info_generator/info_classes.rb, line 88
def merge_modules(modules, other_modules)
  merge_entities(modules, other_modules, &merge_module_attributes(modules))
end