Class: Factorix::Dependency::Edge

Inherits:
Data
  • Object
show all
Defined in:
lib/factorix/dependency/edge.rb,
lib/factorix/dependency/edge.rb,
sig/factorix/dependency/edge.rbs

Overview

Represents a dependency edge in the dependency graph

Each edge represents a dependency relationship from one MOD (dependent) to another MOD (dependency). The edge type indicates the nature of the relationship (required, optional, incompatible, etc.).

Constant Summary collapse

REQUIRED =

Dependency types (from Factorix::Dependency::Entry)

Returns:

  • (Symbol)
Entry::REQUIRED
OPTIONAL =

Returns:

  • (Symbol)
Entry::OPTIONAL
HIDDEN_OPTIONAL =

Returns:

  • (Symbol)
Entry::HIDDEN_OPTIONAL
INCOMPATIBLE =

Returns:

  • (Symbol)
Entry::INCOMPATIBLE
LOAD_NEUTRAL =

Returns:

  • (Symbol)
Entry::LOAD_NEUTRAL

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(from_mod:, to_mod:, type:, version_requirement: nil) ⇒ Edge

Returns a new instance of Edge.

Parameters:

  • from_mod (Factorix::MOD) —

    The dependent MOD

  • to_mod (Factorix::MOD) —

    The dependency MOD

  • type (Symbol) —

    The dependency type (:required, :optional, :hidden, :incompatible, :load_neutral)

  • version_requirement (MODVersionRequirement, nil) (defaults to: nil) —

    Version requirement (optional)

  • from_mod: (MOD)
  • to_mod: (MOD)
  • type: (Symbol)
  • version_requirement: (MODVersionRequirement, nil) (defaults to: nil)


38
# File 'lib/factorix/dependency/edge.rb', line 38

def initialize(from_mod:, to_mod:, type:, version_requirement: nil) = super

Instance Attribute Details

#from_mod ⇒ Factorix::MOD (readonly)

Returns MOD object (the dependent).

Returns:



13
14
15
# File 'lib/factorix/dependency/edge.rb', line 13

def from_mod
  @from_mod
end

#to_mod ⇒ Factorix::MOD (readonly)

Returns MOD object (the dependency).

Returns:



13
14
15
# File 'lib/factorix/dependency/edge.rb', line 13

def to_mod
  @to_mod
end

#type ⇒ Symbol (readonly)

Returns dependency type.

Returns:

  • (Symbol) —

    dependency type



13
14
15
# File 'lib/factorix/dependency/edge.rb', line 13

def type
  @type
end

#version_requirement ⇒ MODVersionRequirement? (readonly)

Returns version requirement.

Returns:



13
14
15
# File 'lib/factorix/dependency/edge.rb', line 13

def version_requirement
  @version_requirement
end

Instance Method Details

#hidden_optional? ⇒ Boolean

Check if this is a hidden optional dependency

Returns:

  • (Boolean)


53
# File 'lib/factorix/dependency/edge.rb', line 53

def hidden_optional? = type == HIDDEN_OPTIONAL

#incompatible? ⇒ Boolean

Check if this is an incompatibility relationship

Returns:

  • (Boolean)


58
# File 'lib/factorix/dependency/edge.rb', line 58

def incompatible? = type == INCOMPATIBLE

#inspect ⇒ String

Detailed inspection string

Returns:

  • (String)


86
# File 'lib/factorix/dependency/edge.rb', line 86

def inspect = "#<#{self.class.name} #{self}>"

#load_neutral? ⇒ Boolean

Check if this is a load-neutral dependency

Returns:

  • (Boolean)


63
# File 'lib/factorix/dependency/edge.rb', line 63

def load_neutral? = type == LOAD_NEUTRAL

#optional? ⇒ Boolean

Check if this is an optional dependency

Returns:

  • (Boolean)


48
# File 'lib/factorix/dependency/edge.rb', line 48

def optional? = type == OPTIONAL || type == HIDDEN_OPTIONAL

#required? ⇒ Boolean

Check if this is a required dependency

Returns:

  • (Boolean)


43
# File 'lib/factorix/dependency/edge.rb', line 43

def required? = type == REQUIRED

#satisfied_by?(version) ⇒ Boolean

Check if the given version satisfies this edge's version requirement

Parameters:

Returns:

  • (Boolean) —

    true if satisfied or no requirement exists



69
70
71
72
73
# File 'lib/factorix/dependency/edge.rb', line 69

def satisfied_by?(version)
  return true unless version_requirement

  version_requirement.satisfied_by?(version)
end

#to_s ⇒ String

String representation of the edge

Returns:

  • (String)


78
79
80
81
# File 'lib/factorix/dependency/edge.rb', line 78

def to_s
  requirement_str = version_requirement ? " #{version_requirement}" : ""
  "#{from_mod} --[#{type}#{requirement_str}]--> #{to_mod}"
end