Class: Textus::Protocol::Produce::Render::Context

Inherits:
Object
  • Object
show all
Defined in:
lib/textus/protocol/produce/render/context.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(locals, resolver, from_path, from_key, edge_store) ⇒ Context

Returns a new instance of Context.



10
11
12
13
14
15
16
# File 'lib/textus/protocol/produce/render/context.rb', line 10

def initialize(locals, resolver, from_path, from_key, edge_store)
  @locals     = locals
  @resolver   = resolver
  @from_path  = from_path
  @from_key   = from_key
  @edge_store = edge_store
end

Class Method Details

.for(locals:, resolver: nil, from_path: nil, from_key: nil, edge_store: nil) ⇒ Object



6
7
8
# File 'lib/textus/protocol/produce/render/context.rb', line 6

def self.for(locals:, resolver: nil, from_path: nil, from_key: nil, edge_store: nil)
  new(locals, resolver, from_path, from_key, edge_store)
end

Instance Method Details

#to_erb_bindingObject



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/textus/protocol/produce/render/context.rb', line 18

def to_erb_binding
  mod = Module.new
  @locals.each { |k, v| mod.define_method(k.to_sym) { v } }
  obj = Object.new.extend(mod)

  if @resolver && @from_path
    resolver   = @resolver
    from_path  = @from_path
    from_key   = @from_key
    edge_store = @edge_store
    obj.define_singleton_method(:textus_link) do |key|
      resolved = resolver.resolve(key: key, from_path: from_path)
      edge_store&.record(from_key: from_key, to_key: key)
      resolved
    rescue Textus::Protocol::Links::Resolver::UnknownKeyError
      "`textus get #{key}`"
    end
  end

  obj.instance_eval { binding }
end