~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: Richard Lee (Canonical)
  • Date: 2010-10-15 15:17:58 UTC
  • mfrom: (190.1.3 use-case-mapper)
  • Revision ID: richard.lee@canonical.com-20101015151758-wcvmfxrexsongf9d
Merge

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