Sha256: 30ad4f56cab2a8b1bb563ce0543f165e9393fe125dbe8e4a0647eff445db7bd8

Contents?: true

Size: 845 Bytes

Versions: 2

Compression:

Stored size: 845 Bytes

Contents

# frozen_string_literal: true

# TODO: add tests
module Ringu
  module Injector
    extend self

    def create(deps)
      Module.new do
        define_method(:deps) { deps }

        def self.included(klass)
          klass.extend ClassMethods
          klass.send :include, InstanceMethods
        end
      end
    end

    module ClassMethods
      def inject(name, klass = nil)
        attr_accessor name

        injector[name] = {
          klass: klass
        }
      end

      def injector
        @injector ||= {}
      end
    end

    module InstanceMethods
      def initialize(**kwargs)
        self.class.injector.each do |name, options|
          term = kwargs[name] || options[:klass]
          resource = deps.resolve(name, term)
          instance_variable_set("@#{name}", resource)
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ringu-0.1.1.pre.alpha lib/ringu/injector.rb
ringu-0.1.0.pre.alpha lib/ringu/injector.rb