Sha256: 210d8d40dd78d8788968589de1c5bcac149fb2b04d17048d6e15f2f8a65e0b90

Contents?: true

Size: 856 Bytes

Versions: 8

Compression:

Stored size: 856 Bytes

Contents

# frozen_string_literal: true

require "isolator/adapters/base"

module Isolator
  # Builds adapter from provided params
  module AdapterBuilder
    def self.call(target: nil, method_name: nil, **options)
      adapter = Module.new do
        extend Isolator::Adapters::Base

        self.exception_class = options[:exception_class] if options.key?(:exception_class)
        self.exception_message = options[:exception_message] if options.key?(:exception_message)
      end

      add_patch_method(adapter, target, method_name) if
        target && method_name
      adapter
    end

    def self.add_patch_method(adapter, base, method_name)
      mod = Module.new do
        define_method method_name do |*args, &block|
          adapter.notify(caller, *args)
          super(*args, &block)
        end
      end

      base.prepend mod
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
isolator-0.5.0 lib/isolator/adapter_builder.rb
isolator-0.4.0 lib/isolator/adapter_builder.rb
isolator-0.3.0 lib/isolator/adapter_builder.rb
isolator-0.2.2 lib/isolator/adapter_builder.rb
isolator-0.2.1 lib/isolator/adapter_builder.rb
isolator-0.2.0 lib/isolator/adapter_builder.rb
isolator-0.1.1 lib/isolator/adapter_builder.rb
isolator-0.1.0 lib/isolator/adapter_builder.rb