Sha256: cf3309572b01a2249439a4e25918e7b6a6abe1901d12e302182ae71ecc95c142

Contents?: true

Size: 710 Bytes

Versions: 3

Compression:

Stored size: 710 Bytes

Contents

# frozen_string_literal: true

module Staticky
  module Pluggable
    class Resolver < Dry::Container::Resolver
      def initialize(klass)
        @klass = klass
      end

      def call(container, key)
        container.fetch(key.to_s).call
      end
    end

    module ClassMethods
      def load_plugin(key)
        resolve(key)
      end

      def register_plugin(key, klass)
        register(key.to_s, klass)
      end
    end

    def self.included(base)
      base.extend Dry::Container::Mixin
      base.extend ClassMethods
      base.config.resolver = Resolver.new(base)

      base.define_singleton_method :namespace do
        base.name.split("::")[0..-2].join("::")
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
staticky-0.3.1 lib/staticky/pluggable.rb
staticky-0.3.0 lib/staticky/pluggable.rb
staticky-0.2.0 lib/staticky/pluggable.rb