Class: BELParser::Script::Syntax::UnresolvableNamespace

Inherits:
Object
  • Object
show all
Extended by:
Language::Syntax::SyntaxFunction
Defined in:
lib/bel_parser/script/syntax/unresolvable_namespace.rb

Constant Summary collapse

TARGET_NODE =
BELParser::Parsers::AST::NamespaceDefinition

Class Method Summary collapse

Class Method Details

.map(ast_node, script_context) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/bel_parser/script/syntax/unresolvable_namespace.rb', line 15

def self.map(ast_node, script_context)
  return nil unless ast_node.is_a?(TARGET_NODE)
  uri_reader, url_reader = script_context.values_at(:uri_reader, :url_reader)

  keyword, domain = ast_node.children
  if domain.url?
    ApplyResourceURI.new.process(ast_node)
    if ast_node.uri
      uri = ast_node.uri
      unless uri_reader.retrieve_resource(uri)
        prefix = keyword.identifier.string_literal
        return UnresolvableNamespaceError.new(ast_node, prefix, uri)
      end
    else
      url = domain.child.string.string_literal
      unless url_reader.retrieve_resource(url)
        prefix = keyword.identifier.string_literal
        return UnresolvableNamespaceError.new(ast_node, prefix, url)
      end
    end
  end

  nil
end