Module: Metanorma::Core::FlavorLoader

Defined in:
lib/metanorma/core/flavor_loader.rb

Class Method Summary collapse

Class Method Details

.flavor_unsupported(gem_name, stdtype) ⇒ Object



61
62
63
64
65
# File 'lib/metanorma/core/flavor_loader.rb', line 61

def flavor_unsupported(gem_name, stdtype)
  Metanorma::Util.log("[metanorma] Error: The `#{gem_name}` gem does " \
                      "not support the standard type #{stdtype}. " \
                      "Exiting.", :fatal)
end

.load_flavor(stdtype) ⇒ Object



21
22
23
24
25
26
27
28
29
30
# File 'lib/metanorma/core/flavor_loader.rb', line 21

def load_flavor(stdtype)
  canonical = taste2flavor(stdtype)
  gem_name = stdtype2flavor_gem(canonical)
  registry = Metanorma::Registry.instance
  registry.supported_backends.include?(canonical) or
    require_flavor_gem(gem_name, stdtype)
  registry.supported_backends.include?(canonical) or
    flavor_unsupported(gem_name, stdtype)
  canonical
end

.require_flavor_gem(gem_name, stdtype) ⇒ Object



32
33
34
35
36
37
38
39
40
# File 'lib/metanorma/core/flavor_loader.rb', line 32

def require_flavor_gem(gem_name, stdtype)
  Metanorma::Util.log("[metanorma] Info: Loading `#{gem_name}` gem " \
                      "for standard type `#{stdtype}`.", :info)
  require gem_name
  Metanorma::Util.log("[metanorma] Info: gem `#{gem_name}` loaded.",
                      :info)
rescue LoadError => e
  write_flavor_error_log(e, gem_name)
end

.stdtype2flavor_gem(stdtype) ⇒ Object



17
18
19
# File 'lib/metanorma/core/flavor_loader.rb', line 17

def stdtype2flavor_gem(stdtype)
  "metanorma-#{stdtype}"
end

.taste2flavor(stdtype) ⇒ Object



10
11
12
13
14
15
# File 'lib/metanorma/core/flavor_loader.rb', line 10

def taste2flavor(stdtype)
  stdtype = stdtype.to_sym
  tastes = Metanorma::TasteRegister.instance.aliases
  tastes[stdtype] and stdtype = tastes[stdtype].to_sym
  stdtype
end

.write_flavor_error_log(err, gem_name) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/metanorma/core/flavor_loader.rb', line 42

def write_flavor_error_log(err, gem_name)
  error_log = "#{Date.today}-error.log"
  File.write(error_log, err)
  msg = <<~MSG
    Error: #{err.message}
    Metanorma has encountered an exception.

    If this problem persists, please report this issue at the following link:

    * https://github.com/metanorma/metanorma/issues/new

    Please attach the #{error_log} file.
    Your valuable feedback is very much appreciated!

    - The Metanorma team
  MSG
  Metanorma::Util.log(msg, :fatal)
end