~michaelforrest/use-case-mapper/trunk

« back to all changes in this revision

Viewing changes to vendor/rails/activesupport/lib/active_support/core_ext/class/attribute_accessors.rb

  • Committer: Michael Forrest
  • Date: 2010-10-15 16:28:50 UTC
  • Revision ID: michael.forrest@canonical.com-20101015162850-tj2vchanv0kr0dun
refrozeĀ gems

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Extends the class object with class and instance accessors for class attributes,
 
2
# just like the native attr* accessors for instance attributes.
 
3
#
 
4
#  class Person
 
5
#    cattr_accessor :hair_colors
 
6
#  end
 
7
#
 
8
#  Person.hair_colors = [:brown, :black, :blonde, :red]
 
9
class Class
 
10
  def cattr_reader(*syms)
 
11
    syms.flatten.each do |sym|
 
12
      next if sym.is_a?(Hash)
 
13
      class_eval(<<-EOS, __FILE__, __LINE__)
 
14
        unless defined? @@#{sym}  # unless defined? @@hair_colors
 
15
          @@#{sym} = nil          #   @@hair_colors = nil
 
16
        end                       # end
 
17
                                  #
 
18
        def self.#{sym}           # def self.hair_colors
 
19
          @@#{sym}                #   @@hair_colors
 
20
        end                       # end
 
21
                                  #
 
22
        def #{sym}                # def hair_colors
 
23
          @@#{sym}                #   @@hair_colors
 
24
        end                       # end
 
25
      EOS
 
26
    end
 
27
  end
 
28
 
 
29
  def cattr_writer(*syms)
 
30
    options = syms.extract_options!
 
31
    syms.flatten.each do |sym|
 
32
      class_eval(<<-EOS, __FILE__, __LINE__)
 
33
        unless defined? @@#{sym}                       # unless defined? @@hair_colors
 
34
          @@#{sym} = nil                               #   @@hair_colors = nil
 
35
        end                                            # end
 
36
                                                       #
 
37
        def self.#{sym}=(obj)                          # def self.hair_colors=(obj)
 
38
          @@#{sym} = obj                               #   @@hair_colors = obj
 
39
        end                                            # end
 
40
                                                       #
 
41
        #{"                                            #
 
42
        def #{sym}=(obj)                               # def hair_colors=(obj)
 
43
          @@#{sym} = obj                               #   @@hair_colors = obj
 
44
        end                                            # end
 
45
        " unless options[:instance_writer] == false }  # # instance writer above is generated unless options[:instance_writer] == false
 
46
      EOS
 
47
    end
 
48
  end
 
49
 
 
50
  def cattr_accessor(*syms)
 
51
    cattr_reader(*syms)
 
52
    cattr_writer(*syms)
 
53
  end
 
54
end