Class: Coradoc::Reference::Resolver::Chain

Inherits:
Resolver::Base
  • Object
show all
Defined in:
lib/coradoc/reference/resolver/chain.rb

Overview

Tries each child resolver in order. First non-Missing result wins (Resolved or Ambiguous short-circuit). Use to combine a local catalog with a remote one without composite catalog indirection.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*resolvers) ⇒ Chain

Returns a new instance of Chain.



13
14
15
16
# File 'lib/coradoc/reference/resolver/chain.rb', line 13

def initialize(*resolvers)
  super()
  @resolvers = resolvers.flatten
end

Instance Attribute Details

#resolversObject (readonly)

Returns the value of attribute resolvers.



11
12
13
# File 'lib/coradoc/reference/resolver/chain.rb', line 11

def resolvers
  @resolvers
end

Instance Method Details

#resolve(edge) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/coradoc/reference/resolver/chain.rb', line 18

def resolve(edge)
  last = nil
  @resolvers.each do |resolver|
    result = resolver.resolve(edge)
    return result unless result.is_a?(Coradoc::Reference::Result::Missing)

    last = result
  end
  last || Coradoc::Reference::Result::Missing.build(
    edge: edge, address: edge.address
  )
end