diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2005-02-15 15:57:44 +0000 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2005-02-15 15:57:44 +0000 |
commit | dc3d6eb9b4aaed051dd6d5a5a07f6c66b72da4c4 (patch) | |
tree | 1d77afa3e7a5af3d3d89c2121b5cecf6423d666d /activesupport/lib/active_support/class_attribute_accessors.rb | |
parent | 45caae41c3fbfc7ba77c5e2dc70734fa80501828 (diff) | |
download | rails-dc3d6eb9b4aaed051dd6d5a5a07f6c66b72da4c4.tar.gz rails-dc3d6eb9b4aaed051dd6d5a5a07f6c66b72da4c4.tar.bz2 rails-dc3d6eb9b4aaed051dd6d5a5a07f6c66b72da4c4.zip |
Moved Active Support into its own gem
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@624 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activesupport/lib/active_support/class_attribute_accessors.rb')
-rw-r--r-- | activesupport/lib/active_support/class_attribute_accessors.rb | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/activesupport/lib/active_support/class_attribute_accessors.rb b/activesupport/lib/active_support/class_attribute_accessors.rb new file mode 100644 index 0000000000..786dcf98cb --- /dev/null +++ b/activesupport/lib/active_support/class_attribute_accessors.rb @@ -0,0 +1,57 @@ +# Extends the class object with class and instance accessors for class attributes, +# just like the native attr* accessors for instance attributes. +class Class # :nodoc: + def cattr_reader(*syms) + syms.each do |sym| + class_eval <<-EOS + if ! defined? @@#{sym.id2name} + @@#{sym.id2name} = nil + end + + def self.#{sym.id2name} + @@#{sym} + end + + def #{sym.id2name} + @@#{sym} + end + + def call_#{sym.id2name} + case @@#{sym.id2name} + when Symbol then send(@@#{sym}) + when Proc then @@#{sym}.call(self) + when String then @@#{sym} + else nil + end + end + EOS + end + end + + def cattr_writer(*syms) + syms.each do |sym| + class_eval <<-EOS + if ! defined? @@#{sym.id2name} + @@#{sym.id2name} = nil + 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 + EOS + end + end + + def cattr_accessor(*syms) + cattr_reader(*syms) + cattr_writer(*syms) + end +end
\ No newline at end of file |