Class: Mxrb::Semantic::RemovalPlan

Inherits:
Object
  • Object
show all
Defined in:
lib/mxrb/semantic/remover.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(project:, artifact:, incoming:, children:) ⇒ RemovalPlan

Returns a new instance of RemovalPlan.



8
9
10
11
12
13
14
# File 'lib/mxrb/semantic/remover.rb', line 8

def initialize(project:, artifact:, incoming:, children:)
  @project = project
  @artifact = artifact
  @incoming = incoming.freeze
  @children = children.freeze
  @applied = false
end

Instance Attribute Details

#artifactObject (readonly)

Returns the value of attribute artifact.



6
7
8
# File 'lib/mxrb/semantic/remover.rb', line 6

def artifact
  @artifact
end

#childrenObject (readonly)

Returns the value of attribute children.



6
7
8
# File 'lib/mxrb/semantic/remover.rb', line 6

def children
  @children
end

#incomingObject (readonly)

Returns the value of attribute incoming.



6
7
8
# File 'lib/mxrb/semantic/remover.rb', line 6

def incoming
  @incoming
end

Instance Method Details

#applied?Boolean

Returns:

  • (Boolean)


17
# File 'lib/mxrb/semantic/remover.rb', line 17

def applied? = @applied

#apply!Object

Raises:

  • (ArgumentError)


19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/mxrb/semantic/remover.rb', line 19

def apply!
  raise ArgumentError, "removal plan was already applied" if applied?
  unless safe?
    raise ArgumentError,
          "cannot remove #{artifact.qualified_name}: " \
          "#{incoming.size} incoming reference(s), #{children.size} child unit(s)"
  end

  @project.mpr.transaction { @project.mpr.delete_unit(artifact.unit_id) }
  @project.refresh!
  @applied = true
  self
end

#safe?Boolean

Returns:

  • (Boolean)


16
# File 'lib/mxrb/semantic/remover.rb', line 16

def safe? = incoming.empty? && children.empty?