File: active_support/core_ext/class/attribute_accessors.rb

Overview
Module Structure
Class Hierarchy
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: <Built-in Module>
  class: Class#9
inherits from
  Object ( Builtin-Module )
has properties
method: cattr_reader / 1 #10
method: cattr_writer / 1 #34
method: cattr_accessor / 1 #57

Class Hierarchy

Object ( Builtin-Module )
  Class    #9

Code

   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      options = syms.extract_options!
  12      syms.each do |sym|
  13        next if sym.is_a?(Hash)
  14        class_eval(<<-EOS, __FILE__, __LINE__ + 1)
  15          unless defined? @@#{sym}
  16            @@#{sym} = nil
  17          end
  18 
  19          def self.#{sym}
  20            @@#{sym}
  21          end
  22        EOS
  23 
  24        unless options[:instance_reader] == false
  25          class_eval(<<-EOS, __FILE__, __LINE__ + 1)
  26            def #{sym}
  27              @@#{sym}
  28            end
  29          EOS
  30        end
  31      end
  32    end
  33 
  34    def cattr_writer(*syms)
  35      options = syms.extract_options!
  36      syms.each do |sym|
  37        class_eval(<<-EOS, __FILE__, __LINE__ + 1)
  38          unless defined? @@#{sym}
  39            @@#{sym} = nil
  40          end
  41 
  42          def self.#{sym}=(obj)
  43            @@#{sym} = obj
  44          end
  45        EOS
  46 
  47        unless options[:instance_writer] == false
  48          class_eval(<<-EOS, __FILE__, __LINE__ + 1)
  49            def #{sym}=(obj)
  50              @@#{sym} = obj
  51            end
  52          EOS
  53        end
  54      end
  55    end
  56 
  57    def cattr_accessor(*syms)
  58      cattr_reader(*syms)
  59      cattr_writer(*syms)
  60    end
  61  end