Sha256: 434cd66de944825c048403303efd849da449c748aec1fb2cfc19607858ff6a0d

Contents?: true

Size: 1.61 KB

Versions: 1

Compression:

Stored size: 1.61 KB

Contents

class Class

  # Creates a class-variable attr_reader that can
  # be accessed both on an instance and class level.
  #
  #   require 'facet/class/attributes'
  #
  #   class MyClass
  #     @@a = 10
  #     cattr_reader :a
  #   end
  #   MyClass.a           #=> 10
  #   mc = MyClass.new
  #   mc.a                #=> 10
  #
  def cattr_reader(*syms)
    syms.each do |sym|
      class_eval <<-EOS
        if ! defined? @@#{sym}
          @@#{sym} = nil
        end
        def self.#{sym}
          @@#{sym}
        end
        def #{sym}
          self.class.#{sym}
        end
      EOS
    end
  end

  # Creates a class-variable attr_writer that can
  # be accessed both on an instance and class level.
  #
  #   require 'facet/class/attributes'
  #
  #   class MyClass
  #     cattr_writer :a
  #     def a
  #       @@a
  #     end
  #   end
  #   MyClass.a = 10
  #   mc = MyClass.new
  #   mc.a                #=> 10
  #
  def cattr_writer(*syms)
    syms.each do |sym|
      class_eval <<-EOS
        if ! defined? @@#{sym}
          @@#{sym} = nil
        end
        def self.#{sym}=(obj)
          @@#{sym} = obj
        end
        def #{sym}=(obj)
          self.class.#{sym}=(obj)
        end
      EOS
    end
  end

  # Creates a class-variable attr_accessor that can
  # be accessed both on an instance and class level.
  #
  #   require 'facet/class/attributes'
  #
  #   class MyClass
  #     cattr_accessor :a
  #   end
  #   MyClass.a = 10
  #   MyClass.a           #=> 10
  #   mc = MyClass.new
  #   mc.a                #=> 10
  #
  def cattr_accessor(*syms)
    cattr_reader(*syms)
    cattr_writer(*syms)
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
facets-0.6.3 lib/facet/class/cattr.rb