class Class

Retain for backward compatibility. Methods are now included in Class.

Public Instance Methods

extlib_inheritable_accessor(*syms) click to toggle source

Defines class-level inheritable attribute accessor. Attributes are available to subclasses, each subclass has a copy of parent’s attribute.

@param *syms<Array[*to_s, Hash{:instance_writer => Boolean}]> Array of attributes to

define inheritable accessor for.

@option syms :instance_writer<Boolean> if true, instance-level inheritable attribute writer is defined. @return <Array> An Array of attributes turned into inheritable accessors.

@api public

# File lib/carrierwave/core_ext/inheritable_attributes.rb, line 99
def extlib_inheritable_accessor(*syms)
  extlib_inheritable_reader(*syms)
  extlib_inheritable_writer(*syms)
end
extlib_inheritable_reader(*ivars) click to toggle source

Defines class-level inheritable attribute reader. Attributes are available to subclasses, each subclass has a copy of parent’s attribute.

@param *syms> Array of attributes to define inheritable reader for. @return <Array> Array of attributes converted into inheritable_readers.

@api public

@todo Do we want to block instance_reader via :instance_reader => false @todo It would be preferable that we do something with a Hash passed in

(error out or do the same as other methods above) instead of silently
moving on). In particular, this makes the return value of this function
less useful.
# File lib/carrierwave/core_ext/inheritable_attributes.rb, line 40
  def extlib_inheritable_reader(*ivars)
    instance_reader = ivars.pop[:reader] if ivars.last.is_a?(Hash)

    ivars.each do |ivar|
      self.class_eval "        def self.#{ivar}
          return @#{ivar} if self.object_id == #{self.object_id} || defined?(@#{ivar})
          ivar = superclass.#{ivar}
          return nil if ivar.nil? && !#{self}.instance_variable_defined?("@#{ivar}")
          @#{ivar} = ivar && !ivar.is_a?(Module) && !ivar.is_a?(Numeric) && !ivar.is_a?(TrueClass) && !ivar.is_a?(FalseClass) ? ivar.dup : ivar
        end
", __FILE__, __LINE__ + 1
      unless instance_reader == false
        self.class_eval "          def #{ivar}
            self.class.#{ivar}
          end
", __FILE__, __LINE__ + 1
      end
    end
  end
extlib_inheritable_writer(*ivars) click to toggle source

Defines class-level inheritable attribute writer. Attributes are available to subclasses, each subclass has a copy of parent’s attribute.

@param *syms<Array[*to_s, Hash{:instance_writer => Boolean}]> Array of attributes to

define inheritable writer for.

@option syms :instance_writer<Boolean> if true, instance-level inheritable attribute writer is defined. @return <Array> An Array of the attributes that were made into inheritable writers.

@api public

@todo We need a style for class_eval <<-HEREDOC. I’d like to make it

class_eval(<<-RUBY, __FILE__, __LINE__), but we should codify it somewhere.
# File lib/carrierwave/core_ext/inheritable_attributes.rb, line 74
  def extlib_inheritable_writer(*ivars)
    instance_writer = ivars.pop[:writer] if ivars.last.is_a?(Hash)
    ivars.each do |ivar|
      self.class_eval "        def self.#{ivar}=(obj)
          @#{ivar} = obj
        end
", __FILE__, __LINE__ + 1
      unless instance_writer == false
        self.class_eval "          def #{ivar}=(obj) self.class.#{ivar} = obj end
", __FILE__, __LINE__ + 1
      end
    end
  end