Sha256: f60f09825855df94055a95064bf96e23bf98a13d423369d9df87c3922da556f3

Contents?: true

Size: 1.85 KB

Versions: 11

Compression:

Stored size: 1.85 KB

Contents

# Original code from Rails distribution.
# http://www.rubyonrails.com

#--
# 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:

  # A macro that creates a reader method for class/module 
  # attributes.
    
  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

      end_eval
    end
  end
  alias_method :cattr_reader, :mattr_reader

  # A macro that creates a writer method for class/module 
  # attributes.
  
  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

      end_eval
    end
  end
  alias_method :cattr_writer, :cattr_writer

  # A macro that creates a reader and a writer method for 
  # class/module attributes.
  
  def mattr_accessor(*syms)
    mattr_reader(*syms)
    mattr_writer(*syms)
  end
  alias_method :cattr_accessor, :mattr_accessor
  
end

# * George Moschovitis <gm@navel.gr>

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
glue-0.21.0 lib/glue/attribute.rb
glue-0.22.0 lib/glue/attribute.rb
glue-0.26.0 lib/glue/attribute.rb
glue-0.27.0 lib/glue/attribute.rb
glue-0.28.0 lib/glue/attribute.rb
glue-0.29.0 lib/glue/attribute.rb
glue-0.21.2 lib/glue/attribute.rb
glue-0.23.0 lib/glue/attribute.rb
glue-0.24.0 lib/glue/attribute.rb
glue-0.25.0 lib/glue/attribute.rb
glue-0.30.0 lib/glue/attribute.rb