Sha256: 440a5f104f608356dbceb2c725e53d5e0d91a09fc4e13a1e2319c45a9322fb92

Contents?: true

Size: 1.87 KB

Versions: 1

Compression:

Stored size: 1.87 KB

Contents

module MPatch

  module Include

    module Module

      # return the module objects direct sub modules
      def submodules
        constants.collect {|const_name| const_get(const_name)}.select {|const| const.class == ::Module}
      end

      # return the module objects direct sub modules
      def subclasses
        constants.collect {|const_name| const_get(const_name)}.select {|const| const.class == ::Class}
      end

      alias :modules :submodules
      alias :classes :subclasses

      def mixin_ancestors(include_ancestors=true)
        ancestors.take_while {|a| include_ancestors || a != superclass }.
            select {|ancestor| ancestor.instance_of?( ::Module ) }
      end

      def inherited_by *args

        if args.empty?
          args.push(::Class)
          args.push(::Module)
        end

        return_array= []
        args.each do |type_name|

          ::ObjectSpace.each_object(type_name) do |candidate|
            begin

              if !return_array.include?(candidate) && candidate != self
                case self.class.to_s

                  when "Module"
                    return_array.push candidate if candidate.mixin_ancestors.include?(self)

                  when "Class"
                    return_array.push candidate if candidate < self

                end

              end

            rescue ::ArgumentError, ::NoMethodError
            end
          end

        end
        return_array

      end


    end

  end

  module Extend

    module Module

      def convert_instance_methods_to_singleton_methods

        self.instance_methods.each do |symbol|
          module_function symbol
          public symbol
        end

      end

      alias :ci2s :convert_instance_methods_to_singleton_methods
      alias :instances2singletons :convert_instance_methods_to_singleton_methods

    end

  end

  require File.join 'mpatch','injector'


end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mpatch-2.4.0 lib/mpatch/module.rb