Sha256: 7ed004c21246d76e79e7cf9ac33926c17db6243aee3a610ef15443d40e5b65d6

Contents?: true

Size: 1.04 KB

Versions: 7

Compression:

Stored size: 1.04 KB

Contents

== Module#class_extend

  require 'facets/module/class_extend'

Module using class_extend

  mix = Module.new do
    def i ; end
    class_extend do
      def n ; 42   ; end
      def s ; self ; end
    end
  end

Extends module

  mix.n.assert == 42
  mix.s.assert == mix

Has expected methods

  mix.instance_methods.map{ |m| m.to_s }.assert == ['i']

transfers class methods to including class

  mod = Module.new do
    include mix
  end
  mod.n.assert == 42
  mod.s.assert == mod

Doesn't overwrite instance methods

  c = Class.new do
    include mix
    def n ; 11 ; end
  end
  c.new.n.assert == 11

Is overridable via including module

  mod = Module.new do
    include mix
    class_extend do
      def n ; super + 1 ; end
    end
  end
  mod.n.assert == 43  # notice the difference!
  mod.s.assert == mod

Transfers class methods thru multiple levels of include

  alt = Module.new do
    include mix
    class_extend do
      def n ; super + 1 ; end
    end
  end
  mod = Module.new do
    include alt
  end
  mod.n.assert == 43
  mod.s.assert == mod

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
facets-3.0.0 demo/core/module/class_extend.rdoc
facets-2.9.3 qed/core/module/class_extend.rdoc
facets-2.9.2 qed/core-uncommon/module/class_extend.rdoc
facets-2.9.1 qed/core-uncommon/module/class_extend.rdoc
facets-2.9.0 qed/tour/module/class_extend.rdoc
facets-2.9.0.pre.2 qed/tour/module/class_extend.rdoc
facets-2.9.0.pre.1 qed/tour/module/class_extend.rdoc