Module: Hanami::Utils::ClassAttribute::ClassMethods Private

Defined in:
lib/hanami/utils/class_attribute.rb

Overview

This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.

Since:

  • 0.1.0

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(base) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Since:

  • 0.1.0



20
21
22
23
24
# File 'lib/hanami/utils/class_attribute.rb', line 20

def self.extended(base)
  base.class_eval do
    @__class_attributes = Attributes.new unless defined?(@__class_attributes)
  end
end

Instance Method Details

#class_attribute(*attributes) ⇒ void

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

This method returns an undefined value.

Defines a class level accessor for the given attribute(s).

A value set for a superclass is automatically available by their subclasses, unless a different value is explicitely set within the inheritance chain.

Examples:

require 'hanami/utils/class_attribute'

class Vehicle
  include Hanami::Utils::ClassAttribute
  class_attribute :engines, :wheels

  self.engines = 0
  self.wheels  = 0
end

class Car < Vehicle
  self.engines = 1
  self.wheels  = 4
end

class Airplane < Vehicle
  self.engines = 4
  self.wheels  = 16
end

class SmallAirplane < Airplane
  self.engines = 2
  self.wheels  = 8
end

Vehicle.engines # => 0
Vehicle.wheels  # => 0

Car.engines # => 1
Car.wheels  # => 4

Airplane.engines # => 4
Airplane.wheels  # => 16

SmallAirplane.engines # => 2
SmallAirplane.wheels  # => 8

Parameters:

  • attributes (Array<Symbol>)

    a single or multiple attribute name(s)

Since:

  • 0.1.0



75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/hanami/utils/class_attribute.rb', line 75

def class_attribute(*attributes)
  attributes.each do |attr|
    singleton_class.class_eval %(
      def #{attr}                           # def foo
        class_attributes[:#{attr}]          #   class_attributes[:foo]
      end                                   # end
                                            #
      def #{attr}=(value)                   # def foo=(value)
        class_attributes[:#{attr}] = value  #   class_attributes[:foo] = value
      end                                   # end
    ), __FILE__, __LINE__ - 8
  end
end