Sha256: 2a3d3a963520e01d8d952c8e87c23c57061fb7e66df6e92518d7ca1d37835c0a

Contents?: true

Size: 1.26 KB

Versions: 23

Compression:

Stored size: 1.26 KB

Contents

class Module

  # Automatically create an initializer assigning the given 
  # arguments.
  #
  #   class MyClass
  #     initializer(:a, "b", :c)
  #   end
  #
  # _is equivalent to_
  #
  #   class MyClass
  #     def initialize(a, b, c)
  #       @a,@b,@c = a,b,c
  #     end
  #   end
  #
  # Downside: Initializers defined like this can't take blocks.
  # This can be fixed when Ruby 1.9 is out.
  #
  # The initializer will not raise an Exception when the user
  # does not supply a value for each instance variable. In that
  # case it will just set the instance variable to nil. You can
  # assign default values or raise an Exception in the block.
  #
  def initializer(*attributes, &block)
    define_method(:initialize) do |*args|
      attributes.zip(args) do |sym, value|
        instance_variable_set("@#{sym}", value)
      end

      instance_eval(&block) if block
    end
  end

end



#  _____         _
# |_   _|__  ___| |_
#   | |/ _ \/ __| __|
#   | |  __/\__ \ |_
#   |_|\___||___/\__|
#
=begin test

  require 'test/unit'

  class TCModule < Test::Unit::TestCase

    def test_attr_initializer
      cc = Class.new
      cc.class_eval {
        initializer :ai
        attr_reader :ai
      }
      c = cc.new(10)
      assert_equal( 10, c.ai )
    end

  end

=end

Version data entries

23 entries across 23 versions & 1 rubygems

Version Path
facets-1.1.0 lib/facet/module/initializer.rb
facets-1.2.0 lib/facets/core/module/initializer.rb
facets-1.2.1 lib/facets/core/module/initializer.rb
facets-1.3.0 lib/facets/core/module/initializer.rb
facets-1.3.3 lib/facets/core/module/initializer.rb
facets-1.3.2 lib/facets/core/module/initializer.rb
facets-1.3.1 lib/facets/core/module/initializer.rb
facets-1.4.2 lib/facets/core/module/initializer.rb
facets-1.4.0 lib/facets/core/module/initializer.rb
facets-1.4.1 lib/facets/core/module/initializer.rb
facets-1.4.3 lib/facets/core/module/initializer.rb
facets-1.4.5 lib/facets/core/module/initializer.rb
facets-1.4.4 lib/facets/core/module/initializer.rb
facets-1.7.38 lib/facets/core/module/initializer.rb
facets-1.7.30 lib/facets/core/module/initializer.rb
facets-1.7.0 lib/facets/core/module/initializer.rb
facets-1.7.46 lib/facets/core/module/initializer.rb
facets-1.8.0 lib/facets/core/module/initializer.rb
facets-1.8.20 lib/facets/core/module/initializer.rb
facets-1.8.49 lib/facets/core/module/initializer.rb