class BELParser::Expression::Model::Term

Attributes

arguments[R]
function[R]

Public Class Methods

new(function, *arguments) click to toggle source
# File lib/bel_parser/expression/model/term.rb, line 12
def initialize(function, *arguments)
  self.function  = function
  self.arguments = arguments
end

Public Instance Methods

<<(arg) click to toggle source
# File lib/bel_parser/expression/model/term.rb, line 36
def <<(arg)
    raise(
      ArgumentError,
      'arg: expected Parameter or Term') if invalid_argument?(arg)
  @arguments << item
end
==(other) click to toggle source
# File lib/bel_parser/expression/model/term.rb, line 89
def ==(other)
  return false if other == nil
  @function == other.function && @arguments == other.arguments
end
arguments=(*args) click to toggle source
# File lib/bel_parser/expression/model/term.rb, line 26
def arguments=(*args)
  args    = (args ||= []).flatten
  invalid = args.any?(&method(:invalid_argument?))
  raise(
    ArgumentError,
    "args: expected Parameter or Term objects") if invalid

  @arguments = args
end
function=(function) click to toggle source
# File lib/bel_parser/expression/model/term.rb, line 17
def function=(function)
  unless function && function.is_a?(BELParser::Language::Function)
    raise(
      ArgumentError,
      %(function: expected Function, actual #{function.class}))
  end
  @function = function
end
hash() click to toggle source
# File lib/bel_parser/expression/model/term.rb, line 85
def hash
  [@function, @arguments].hash
end
invalid?( spec = BELParser::Language.default_specification, uri_reader = BELParser::Resource.default_uri_reader, url_reader = BELParser::Resource.default_url_reader) click to toggle source
# File lib/bel_parser/expression/model/term.rb, line 77
def invalid?(
  spec = BELParser::Language.default_specification,
  uri_reader = BELParser::Resource.default_uri_reader,
  url_reader = BELParser::Resource.default_url_reader)

  !validation(spec, uri_reader, url_reader).valid?
end
namespaces() click to toggle source
# File lib/bel_parser/expression/model/term.rb, line 43
def namespaces
  @arguments.flat_map do |arg|
    case arg
    when Term
      arg.namespaces
    when Parameter
      arg.namespace
    end
  end
end
to_s(form = :short) click to toggle source
# File lib/bel_parser/expression/model/term.rb, line 95
def to_s(form = :short)
  args = [@arguments].flatten.map { |arg| arg.to_s(form) }.join(',')
  case form
  when :short
    "#{@function.short}(#{args})"
  when :long
    "#{@function.long}(#{args})"
  else
    nil
  end
end
valid?( spec = BELParser::Language.default_specification, uri_reader = BELParser::Resource.default_uri_reader, url_reader = BELParser::Resource.default_url_reader) click to toggle source
# File lib/bel_parser/expression/model/term.rb, line 69
def valid?(
  spec       = BELParser::Language.default_specification,
  uri_reader = BELParser::Resource.default_uri_reader,
  url_reader = BELParser::Resource.default_url_reader)

  validation(spec, uri_reader, url_reader).valid?
end
validation( spec = BELParser::Language.default_specification, uri_reader = BELParser::Resource.default_uri_reader, url_reader = BELParser::Resource.default_url_reader) click to toggle source
# File lib/bel_parser/expression/model/term.rb, line 54
def validation(
  spec       = BELParser::Language.default_specification,
  uri_reader = BELParser::Resource.default_uri_reader,
  url_reader = BELParser::Resource.default_url_reader)

  validator =
    BELParser::Expression::Validator.new(
      spec,
      Hash[namespaces.map { |ns| [ns.keyword, ns] }],
      uri_reader,
      url_reader)
  _, _, _, result = validator.each(StringIO.new("#{to_s}\n")).first
  result
end

Private Instance Methods

invalid_argument?(arg) click to toggle source
# File lib/bel_parser/expression/model/term.rb, line 109
def invalid_argument?(arg)
  arg.nil? || [Parameter, Term].none? { |type| arg.is_a?(type) }
end