Sha256: 3ccda4c28afbdab7a794aa6ce4e892c760f66eccff81772ed6aea96ec4d15fe9

Contents?: true

Size: 1.08 KB

Versions: 5

Compression:

Stored size: 1.08 KB

Contents

class Module

  # Is a given class or module an ancestor of this
  # class or module?
  #
  #  class X ; end
  #  class Y < X ; end
  #
  #  Y.is?(X)  #=> true
  #
  # CREDIT: Trans

  def is?(base)
    Module===base && ancestors.slice(1..-1).include?(base)
  end

  # An alias for #include.
  #
  #   class X
  #     is Enumerable
  #   end
  #
  # CREDIT: Trans

  def is(*mods)
    mods.each do |mod|
      if mod.const_defined?(:Self)
        extend mod::Self
        # pass it along if module
        if instance_of?(Module)
          const_set(:Self, Module.new) unless const_defined?(:Self)
          const_get(:Self).send(:include, mod::Self)
        end
      end
    end
    include(*mods)
  end

  #alias_method :is, :include

  # Expirmental idea for #is.
  #
  # If the module has #append_feature_function
  # defined, this will use that instead of #include.
  #
  #   def is(*modules)
  #     module.each do { |m|
  #       if m.respond_to?(:append_feature_function)
  #         send(m.append_feature_function,m)
  #       else
  #         include m
  #       end
  #     end
  #   end

end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
facets-2.8.4 lib/core/facets/module/is.rb
facets-2.8.3 lib/core/facets/module/is.rb
facets-2.8.2 lib/core/facets/module/is.rb
facets-2.8.1 lib/core/facets/module/is.rb
facets-2.8.0 lib/core/facets/module/is.rb