Class: Renderer::Entities::Reference
- Inherits:
-
Object
- Object
- Renderer::Entities::Reference
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
25
|
# File 'lib/renderer/entities/reference.rb', line 25
def broken? = @broken
|
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
|
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
23
|
# File 'lib/renderer/entities/reference.rb', line 23
def resolved? = !@target.nil? || @broken
|
#respond_to_missing?(name, include_private = false) ⇒ 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
|
57
|
# File 'lib/renderer/entities/reference.rb', line 57
def to_s = inspect
|