Sha256: 7d9d42c49a5121a839ac1d58cda3daee04c62c47dc5a0bc2a14bac72439200d5

Contents?: true

Size: 1.12 KB

Versions: 1

Compression:

Stored size: 1.12 KB

Contents

# frozen_string_literal: true

require 'forwardable'
module Taksi
  class Registry
    include ::Singleton

    class << self
      extend ::Forwardable

      def_delegators :instance, :find, :add, :clear!
    end

    class ScreenNotFoundError < ::StandardError; end
    class ScreenAltenativeNotFoundError < ::StandardError; end

    def initialize
      clear!
    end

    def add(klass, name)
      sym_name = name.to_sym

      @screens[sym_name] ||= []
      @screens[sym_name] << klass
    end

    def clear!
      @screens = {}
    end

    def find(name, version, alternative = nil)
      screens_from_name = @screens[name.to_sym]

      raise ScreenNotFoundError if screens_from_name.blank?

      parsed_version = ::Gem::Version.new(version)

      screen = screens_from_name.find do |screen|
        next false unless screen.version_pattern.satisfied_by?(parsed_version)

        next true if alternative.blank?

        next true if screen.alternatives.blank?

        next true if screen.alternatives.include?(alternative)

        false
      end

      raise ScreenNotFoundError if screen.blank?

      screen
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
taksi-0.1.0 lib/taksi/registry.rb