Class: Attributor::Class

Inherits:
Object
  • Object
show all
Includes:
Type
Defined in:
lib/attributor/types/class.rb

Class Method Summary collapse

Methods included from Type

included

Class Method Details

.example(context = nil, options: {}) ⇒ Object


35
36
37
# File 'lib/attributor/types/class.rb', line 35

def self.example(context=nil, options:{})
  @klass.nil? ? "MyClass" : @klass.name
end

.familyObject


53
54
55
# File 'lib/attributor/types/class.rb', line 53

def self.family
  'string'
end

.load(value, context = Attributor::DEFAULT_ROOT_CONTEXT, **options) ⇒ Object


14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/attributor/types/class.rb', line 14

def self.load(value, context=Attributor::DEFAULT_ROOT_CONTEXT, **options)
  return value if value.is_a?(self.native_type)
  return @klass || nil if value.nil?

  # Must be given a String object or nil
  unless value.kind_of?(::String) || value.nil?
    raise IncompatibleTypeError,  context: context, value_type: value.class, type: self
  end

  value = "::" + value if value[0..1] != '::'
  result = value.constantize

  # Class given must match class specified when type created using .of() method
  unless @klass.nil? || result == @klass
    raise LoadError, "Error loading class #{value} for attribute with " +
      "defined class #{@klass} while loading #{Attributor.humanize_context(context)}."
  end

  result
end

.native_typeObject


10
11
12
# File 'lib/attributor/types/class.rb', line 10

def self.native_type
  return ::Class
end

.of(klass) ⇒ Object

Create a Class attribute type of a specific Class.

Examples:

Class.of(Factory)

Parameters:

  • klass (Class)

    optional, defines the class of this attribute, if constant

Returns:

  • anonymous class with specified type of collection members


47
48
49
50
51
# File 'lib/attributor/types/class.rb', line 47

def self.of(klass)
  ::Class.new(self) do
    @klass = klass
  end
end