Class: BELParser::Language::ApplyDefaultNamespace

Inherits:
Object
  • Object
show all
Includes:
TermTransformation
Defined in:
lib/bel_parser/language/apply_default_namespace.rb

Overview

ApplyDefaultNamespace sets the DEFAULT namespace for values when one is not provided. Applies to all namespace values within a BEL 2.0 expression.

Constant Summary

Constants included from TermTransformation

TermTransformation::ACTIVITIES, TermTransformation::PMODTYPES

Instance Method Summary collapse

Methods included from TermTransformation

#collapse, #on_function, #on_nested_statement, #on_object, #on_observed_term, #on_simple_statement, #on_statement, #on_subject

Methods included from Parsers::AST::Sexp

#annotation_definition, #argument, #blank_line, build, #comment, #comment_line, #document_property, #domain, #function, #identifier, #keyword, #list, #list_item, #multi_identifier, #name, #namespace_definition, #nested_statement, #object, #observed_term, #parameter, #pattern, #prefix, #relationship, #set, #simple_statement, #statement, #string, #subject, #term, #unset, #uri, #url, #value

Methods included from AST::Processor::Mixin

#handler_missing, #process, #process_all

Constructor Details

#initialize(language_spec, namespace_hash, uri_reader, url_reader) ⇒ ApplyDefaultNamespace

Returns a new instance of ApplyDefaultNamespace.



10
11
12
13
14
15
# File 'lib/bel_parser/language/apply_default_namespace.rb', line 10

def initialize(language_spec, namespace_hash, uri_reader, url_reader)
  @language_spec  = language_spec
  @namespace_hash = namespace_hash
  @uri_reader     = uri_reader
  @url_reader     = url_reader
end

Instance Method Details

#on_argument(argument_node) ⇒ Object



24
25
26
# File 'lib/bel_parser/language/apply_default_namespace.rb', line 24

def on_argument(argument_node)
  process(argument_node.child)
end

#on_parameter(parameter_node) ⇒ Object



28
29
30
31
32
33
# File 'lib/bel_parser/language/apply_default_namespace.rb', line 28

def on_parameter(parameter_node)
  parameter_node.updated([
    process(parameter_node.prefix),
    parameter_node.value
  ].flatten)
end

#on_prefix(prefix_node) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
# File 'lib/bel_parser/language/apply_default_namespace.rb', line 35

def on_prefix(prefix_node)
  # guard: return prefix AST node if namespace already supplied
  return prefix_node if prefix_node.identifier

  # return "DEFAULT" namespace
  prefix(
    identifier(
      'DEFAULT',
      :complete => true),
    :complete => true)
end

#on_term(term_node) ⇒ Object



17
18
19
20
21
22
# File 'lib/bel_parser/language/apply_default_namespace.rb', line 17

def on_term(term_node)
  term_node.updated([
      term_node.function,
      term_node.arguments.map! {|arg| argument(process(arg.child))}
  ].flatten)
end