Sha256: 2d6efd2b5ecc6fedd244f89e9fb09dcc9436bfe37f7ce8d90a30a130e9096ef4

Contents?: true

Size: 1.07 KB

Versions: 3

Compression:

Stored size: 1.07 KB

Contents

# frozen_string_literal: true

# must require active_support's alias_method_chain first, to ensure that our module monkey patches it
require 'active_support/core_ext/module/aliasing'
require_relative '../../lib/invoca/utils/module.rb'
require_relative '../test_helper'

class ModuleTest < Minitest::Test
  class NumberFun
    def self.around_filter(around_method, method_names)
      method_names.each do |meth|
        define_method("#{meth}_with_around_filter") do |*args|
          send(around_method, *args) do |*ar_args|
            send("#{meth}_without_around_filter", *ar_args)
          end
        end

        alias_method_chain meth, :around_filter
      end
    end

    def increment_filter(num)
      yield(num + 1)
    end

    def number_printer(num)
      num
    end

    around_filter :increment_filter, [:number_printer]
    around_filter :increment_filter, [:number_printer]
  end

  context 'alias_method_chain' do
    should 'not cause infinite recursion when double aliasing the same method' do
      assert_equal(4, NumberFun.new.number_printer(3))
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
invoca-utils-0.4.1 test/unit/module_test.rb
invoca-utils-0.4.0 test/unit/module_test.rb
invoca-utils-0.3.0 test/unit/module_test.rb