Sha256: 28e1365c65bf6c1622268acb337a5361a3b03bc82c6056c485bc80956e7aeb8d

Contents?: true

Size: 651 Bytes

Versions: 1

Compression:

Stored size: 651 Bytes

Contents

require "forwardable"
require "monitor"
require "singleton"

module BanksApi
  class Bank
    include Singleton
    extend SingleForwardable

    def_single_delegators :instance, :register_bank, :get_bank_api

    def initialize
      @registry = {}
      @mutex = Monitor.new
    end

    def register_bank(bank_name, api_class)
      with_mutex do
        registry[bank_name.to_s] = api_class
      end
    end

    def get_bank_api(bank_name)
      with_mutex do
        registry.fetch(bank_name.to_s)
      end
    end

    private

      attr_reader :registry, :mutex

      def with_mutex
        mutex.synchronize { yield }
      end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
banks_api-0.1.5 lib/banks_api/bank.rb