def self.load(paths)
models = {}
aliases = {}
paths.each do |path|
parse_file(path).each do |key, entry|
layered = models[key] || { aliases: [] }
layered = layered.merge(entry.slice(:pricing, :reasoning))
layered[:aliases] = layered[:aliases] | entry[:aliases]
models[key] = layered
entry[:aliases].each do |alias_key|
previous = aliases[alias_key]
previous_entry = models[previous] if previous && previous != key
previous_entry[:aliases] -= [alias_key] if previous_entry
aliases[alias_key] = key
end
end
end
aliases.each do |alias_key, key|
next unless models.key?(alias_key)
raise Riffer::ArgumentError, "catalog alias #{alias_key.inspect} on #{key.inspect} is also a model key"
end
new(models: models, aliases: aliases)
end