Sha256: 008e124ff19595cbc4234bbde8f6d64ca3bf43513fe314eda5f108580af806fb

Contents?: true

Size: 2 KB

Versions: 7

Compression:

Stored size: 2 KB

Contents

# = Instantize
#
# Instantize converts module methods into instance methods
# such that the first parameter is passed self at the instance level.
# This promotes DRY programming when wishing to offer both an inheritable
# and a module callable procedure.
#
#   module MyModule
#     extend Instantize
#
#     def self.jumble( obj, arg )
#       obj + arg
#     end
#   end
#
#   class String
#     include MyModule
#   end
#
#   MyModule.jumble( "Try", "Me" )  #=> "TryMe"
#
#   "Try".jumble( "Me" )            #=> 'TryMe'
#
# == Notes
#
# This module used to be called PromoteSelf. Instantize is more descriptive, but 
# a better name is probably still out there.
#
# == Authors
#
# * Thomas Sawyer
#
# == Copying
#
# Copyright (c) 2005 Thomas Sawyer
#
# Ruby License
#
# This module is free software. You may use, modify, and/or redistribute this
# software under the same terms as Ruby.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.


# = Instantize
#
# Instantize converts module methods into instance methods
# such that the first parameter is passed self at the instance level.
# This promotes DRY programming when wishing to offer both an inheritable
# and a module callable procedure.
#
#   module MyModule
#     extend Instantize
#
#     def self.jumble( obj, arg )
#       obj + arg
#     end
#   end
#
#   class String
#     include MyModule
#   end
#
#   MyModule.jumble( "Try", "Me" )  #=> "TryMe"
#
#   "Try".jumble( "Me" )            #=> 'TryMe'
#
# == Notes
#
# This module used to be called PromoteSelf. Instantize is more descriptive, but 
# a better name is probably still out there.
#
module Instantize

  def self.append_features(mod)
    mod.extend self
  end

  def singleton_method_added( meth )
    d = %{
      def #{meth}(*args)
        #{self.name}.#{meth}(self,*args)
      end
    }
    self.class_eval d
    super(meth)
  end

end

# Constant Alias
Instantise = Instantize

Version data entries

7 entries across 7 versions & 2 rubygems

Version Path
facets-2.6.0 lib/more/facets/instantize.rb
facets-2.4.4 lib/more/facets/instantize.rb
facets-2.5.1 lib/more/facets/instantize.rb
facets-2.5.0 lib/more/facets/instantize.rb
facets-2.4.5 lib/more/facets/instantize.rb
facets-2.5.2 lib/more/facets/instantize.rb
mack-facets-0.8.2 lib/gems/facets-2.4.5/lib/more/facets/instantize.rb