class Conjunction::Nexus

The Nexus provides a central source to couple objects together explicitly:

class Conjunction::Nexus
  couple Foo, to: CommonMaterial
  couple Bar, to: CommonMaterial

  couple FooFlow, to: FooState, bidirectional: true
end

Public Class Methods

conjugate(conjunctive, junction:) click to toggle source
# File lib/conjunction/nexus.rb, line 19
def conjugate(conjunctive, junction:)
  _couplings[junction.try(:junction_key)][conjunctive] if couples?(junction)
end
couples?(junction) click to toggle source
# File lib/conjunction/nexus.rb, line 23
def couples?(junction)
  _couplings.key?(junction.try(:junction_key))
end

Private Class Methods

couple(conjunctive, to:, bidirectional: false) click to toggle source
# File lib/conjunction/nexus.rb, line 29
def couple(conjunctive, to:, bidirectional: false)
  raise TypeError, "#{conjunctive} is not a valid conjunctive" unless conjunctive.respond_to?(:conjugate)
  raise TypeError, "#{to} is not a valid junction" unless to.respond_to?(:junction_key)

  if bidirectional
    raise TypeError, "#{conjunctive} is not a valid junction" unless conjunctive.respond_to?(:junction_key)

    _couplings[conjunctive.junction_key][to] = conjunctive
  end

  _couplings[to.junction_key][conjunctive] = to
end