summaryrefslogtreecommitdiff
path: root/logic/cartridge/adapters.rb
blob: 4a3fadfed056743f0b9844d4d15b0d7fe3b9b2fe (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# frozen_string_literal: true

require_relative '../helpers/hash'
require_relative 'default'

module NanoBot
  module Logic
    module Cartridge
      module Adapter
        def self.expression(cartridge, interface, direction, language)
          adapter = [
            {
              exists: (Helpers::Hash.fetch(cartridge, [:interfaces, direction, :adapter]) || {}).key?(language),
              value: Helpers::Hash.fetch(cartridge, [:interfaces, direction, :adapter, language])
            },
            {
              exists: (Helpers::Hash.fetch(cartridge,
                                           [:interfaces, interface, direction, :adapter]) || {}).key?(language),
              value: Helpers::Hash.fetch(cartridge, [:interfaces, interface, direction, :adapter, language])
            }
          ].filter { |candidate| candidate[:exists] }.last

          return nil if adapter.nil?

          adapter[:value]
        end
      end
    end
  end
end