Sha256: 2eb693dc1b0ec2774ea6cfd821518166814951029755d31b5ddcff9253f6e6e1

Contents?: true

Size: 1.58 KB

Versions: 5

Compression:

Stored size: 1.58 KB

Contents

# frozen_string_literal: true
module ActiveMocker
  class MockCreator
    module DefinedMethods
      Method = Struct.new(:name, :arguments, :body)

      def instance_methods
        meths = class_introspector.get_class.public_instance_methods(false).sort
        if safe_methods.include?(:initialize)
          meths << :initialize
        end
        meths.map { |m| create_method(m, :instance_method) }
      end

      def class_methods
        class_introspector
          .get_class
          .methods(false)
          .sort
          .map { |m| create_method(m, :method) }
      end

      private

      def safe_methods
        @safe_methods ||= class_introspector.parsed_source.comments.flat_map do |comment|
          if comment.text.include?("ActiveMocker.safe_methods")
            ActiveMocker.module_eval(comment.text.delete("#"))
          end
        end
      end

      module ActiveMocker
        def self.safe_methods(*methods)
          methods
        end
      end

      def create_method(m, type)
        if safe_methods.include?(m)
          def_method = class_introspector.parsed_source.defs.detect { |meth| meth.name == m }
          Method.new(
            m,
            def_method.arguments,
            def_method.body
          )
        else
          Method.new(
            m,
            ReverseParameters.new(
              class_introspector.get_class.send(type, m).parameters,
              blocks_as_values: true
            ).parameters,
            "call_mock_method(method: __method__, caller: Kernel.caller, arguments: [])"
          )
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
active_mocker-2.4.4 lib/active_mocker/mock_creator/defined_methods.rb
active_mocker-2.4.3 lib/active_mocker/mock_creator/defined_methods.rb
active_mocker-2.4.2 lib/active_mocker/mock_creator/defined_methods.rb
active_mocker-2.4.1 lib/active_mocker/mock_creator/defined_methods.rb
active_mocker-2.4.0 lib/active_mocker/mock_creator/defined_methods.rb