Class: Uniword::Resource::ResourceResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/uniword/resource/resource_resolver.rb

Overview

MODEL for resolving resources from multiple sources Has state (cache reference) and behavior (resolve, list)

Does NOT extend Lutaml::Model::Serializable.

Constant Summary collapse

RESOLUTION_ORDER =

Resolution order: cached -> bundled

%i[cached bundled].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(cache = nil) ⇒ ResourceResolver

Returns a new instance of ResourceResolver.



15
16
17
# File 'lib/uniword/resource/resource_resolver.rb', line 15

def initialize(cache = nil)
  @cache = cache || Cache.new
end

Instance Attribute Details

#cacheObject (readonly)

Returns the value of attribute cache.



13
14
15
# File 'lib/uniword/resource/resource_resolver.rb', line 13

def cache
  @cache
end

Instance Method Details

#exists?(type, name) ⇒ Boolean

Check if resource exists in any source

Returns:

  • (Boolean)


30
31
32
# File 'lib/uniword/resource/resource_resolver.rb', line 30

def exists?(type, name)
  resolve(type, name)&.exists? || false
end

#list(type, source: :all) ⇒ Object

List resources from specific source



40
41
42
43
44
45
46
# File 'lib/uniword/resource/resource_resolver.rb', line 40

def list(type, source: :all)
  case source
  when :cached then list_cached(type)
  when :bundled then list_bundled(type)
  else list_all(type)
  end
end

#list_all(type) ⇒ Object

List all available resources from all sources



35
36
37
# File 'lib/uniword/resource/resource_resolver.rb', line 35

def list_all(type)
  (list_cached(type) + list_bundled(type)).sort.uniq
end

#resolve(type, name) ⇒ Object

Resolve resource by name Returns ResourceLocation or nil if not found



21
22
23
24
25
26
27
# File 'lib/uniword/resource/resource_resolver.rb', line 21

def resolve(type, name)
  RESOLUTION_ORDER.each do |source|
    location = location_for_source(type, name, source)
    return location if location&.exists?
  end
  nil
end