lib/active_function.rb in activefunction-0.3.5 vs lib/active_function.rb in activefunction-0.4.0

- old
+ new

@@ -1,12 +1,50 @@ # 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 Error < StandardError; end + class << self + # Configure ActiveFunction. + # + # @param block [Proc] + # @return [void] + def config(&block) + class_eval(&block) + @_plugins.freeze + self::Base.freeze + end - require "active_function/version" - require "active_function/base" + def plugins = @_plugins ||= {} + + # 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