Sha256: 2f1b35baed8998f18c38283d763075f2eaec7966fd374a6672a0120b636a5502

Contents?: true

Size: 1.77 KB

Versions: 2

Compression:

Stored size: 1.77 KB

Contents

# * George Moschovitis  <gm@navel.gr>
# Original code from Rails distribution.
# http://www.rubyonrails.com
# $Id: attribute.rb 1 2005-04-11 11:04:30Z gmosx $

#--
# Extends the module object with module and instance accessors 
# for class attributes, just like the native attr* accessors for 
# instance attributes. Aliases for classes are also provided.
#
# Example:
#
# mattr_accessor :my_attr, 'Default value'
#
# FIXME: I think those methods do *not* work as expected.
# FIXME: I should probably use @-attributes instead of 
#        @@-attributes.
#++

class Module # :nodoc:
	
  def mattr_reader(*params)
		default = if params.last.is_a?(Symbol) then nil else params.pop end
		
    for sym in params
			module_eval <<-"end_eval", __FILE__, __LINE__
			
        if not defined?(@@#{sym.id2name})
          @@#{sym.id2name} = #{default.inspect}
        end
        
        def self.#{sym.id2name}
          @@#{sym}
        end

        def #{sym.id2name}
          @@#{sym}
        end

      end_eval
    end
  end
  alias_method :cattr_reader, :mattr_reader
  
  def mattr_writer(*params)
		default = if params.last.is_a?(Symbol) then nil else params.pop end
		
    for sym in params
			module_eval <<-"end_eval", __FILE__, __LINE__

        if not defined?(@@#{sym.id2name})
          @@#{sym.id2name} = #{default.inspect.inspect}
        end
        
        def self.#{sym.id2name}=(obj)
          @@#{sym.id2name} = obj
        end

        def self.set_#{sym.id2name}(obj)
          @@#{sym.id2name} = obj
        end

        def #{sym.id2name}=(obj)
          @@#{sym} = obj
        end

      end_eval
    end
  end
  alias_method :cattr_writer, :cattr_writer
  
  def mattr_accessor(*syms)
    mattr_reader(*syms)
    mattr_writer(*syms)
  end
  alias_method :cattr_accessor, :mattr_accessor
	
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
glue-0.17.0 lib/glue/attribute.rb
glue-0.16.0 lib/glue/attribute.rb