Sha256: da87fd873cfbafb6021232f596569db2f81c2a84e8409272dc9def5134d5d308

Contents?: true

Size: 1.57 KB

Versions: 2

Compression:

Stored size: 1.57 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 through DSL method calls.
    # Setups {ActiveFunction::Base} with provided internal and custom plugins.
    # Also freezes plugins and {ActiveFunction::Base}.
    #
    # @example
    #  ActiveFunction.config do
    #    plugin :callbacks
    #  end
    #
    # @param block [Proc] class_eval'ed block in ActiveFunction module.
    # @return [void]
    def config(&block)
      class_eval(&block)
      @_plugins.freeze
      self::Base.freeze
    end

    # List of registered internal plugins.
    def plugins ;  @_plugins ||= {}; end

    # Register internal Symbol'ed plugin.
    #
    # @param [Symbol] symbol name of internal plugin,
    #   should match file name in ./lib/active_function/functions/*.rb
    # @param [Module] mod module to register.
    def register_plugin(symbol, mod)
      plugins[symbol] = mod
    end

    # Add plugin to ActiveFunction::Base.
    #
    # @example
    #  ActiveFunction.plugin :callbacks
    #  ActiveFunction.plugin CustomPlugin
    #
    # @param [Symbol, Module] mod
    # @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

2 entries across 2 versions & 1 rubygems

Version Path
activefunction-0.4.2 lib/.rbnext/3.0/active_function.rb
activefunction-0.4.1 lib/.rbnext/3.0/active_function.rb