Class: Renderer::Entities::Reference

Inherits:
Object
  • Object
show all
Defined in:
lib/renderer/entities/reference.rb

Instance Method Summary collapse

Constructor Details

#initialize(parent, model, field) ⇒ Reference

Returns a new instance of Reference.



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/renderer/entities/reference.rb', line 6

def initialize(parent, model, field)
  @parent = parent
  @root = Entities.current_root
  @root.register_reference(self)

  if model.is_a? String
    @name = model
    @class_path = []
  else
    @name = model[:name]
    @class_path = model[:class_path]
  end
  @field = field
  @target = nil
  @broken = false
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name) ⇒ Object



40
41
42
43
44
45
46
# File 'lib/renderer/entities/reference.rb', line 40

def method_missing(name, *)
  return @target.send(name, *) if @target.respond_to?(name)

  return @name if name == :name

  super
end

Instance Method Details

#broken?Boolean

Returns:

  • (Boolean)


25
# File 'lib/renderer/entities/reference.rb', line 25

def broken? = @broken

#inspectObject



52
53
54
55
# File 'lib/renderer/entities/reference.rb', line 52

def inspect
  full_name = [@class_path, @name].flatten.join("::")
  "#<#{self.class.name}:#{object_id_hex} #{broken? ? "broken" : "valid"} reference to #{full_name}>"
end

#resolve!Object



27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/renderer/entities/reference.rb', line 27

def resolve!
  return __resolve_from_root__ if @class_path.first == "::"
  return __resolve_from_class_path__ unless @class_path.empty?

  location = __location__.dup
  until location.empty?
    container = location.shift.find_nested_container(@name)
    return __assign__(container) if container
  end

  __assign__ @root.find_nested_container(@name)
end

#resolved?Boolean

Returns:

  • (Boolean)


23
# File 'lib/renderer/entities/reference.rb', line 23

def resolved? = !@target.nil? || @broken

#respond_to_missing?(name, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


48
49
50
# File 'lib/renderer/entities/reference.rb', line 48

def respond_to_missing?(name, include_private = false)
  @target&.respond_to_missing?(name, include_private) || super
end

#to_sObject



57
# File 'lib/renderer/entities/reference.rb', line 57

def to_s = inspect