Sha256: 8d152915bc30e8d20e424253a8805a844f84b57ec13c1a89892e317937dfb8a0

Contents?: true

Size: 1.03 KB

Versions: 1

Compression:

Stored size: 1.03 KB

Contents

# frozen_string_literal: true

require "active_function_core"
require "active_function/version"
require "active_function/base"

RubyNext::Language.setup_gem_load_path(transpile: true)

module ActiveFunction
  class << self
    # Configure ActiveFunction.
    #
    # @param block [Proc]
    # @return [void]
    def config(&block)
      class_eval(&block)
      @_plugins.freeze
      self::Base.freeze
    end

    def plugins ;  @_plugins ||= {}; end

    # Register plugin.
    #
    # @param symbol [Symbol]
    # @param mod [Module]
    def register_plugin(symbol, mod)
      plugins[symbol] = mod
    end

    # Monkey patch ActiveFunction::Base with provided plugin.
    #
    # @param mod [Symbol, Module]
    # @return [void]
    def plugin(mod)
      if mod.is_a? Symbol
        begin
          require "active_function/functions/#{mod}"
          mod = plugins.fetch(mod)
        rescue LoadError
          raise ArgumentError, "Unknown plugin #{mod}"
        end
      end

      self::Base.include(mod)
    end
  end

  plugin :response
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
activefunction-0.4.0 lib/.rbnext/3.0/active_function.rb