Class: BELParser::Expression::Model::Term

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
lib/bel_parser/expression/model/term.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(function, *arguments) ⇒ Term

Returns a new instance of Term.



12
13
14
15
# File 'lib/bel_parser/expression/model/term.rb', line 12

def initialize(function, *arguments)
  self.function  = function
  self.arguments = arguments
end

Instance Attribute Details

#argumentsObject

Returns the value of attribute arguments.



10
11
12
# File 'lib/bel_parser/expression/model/term.rb', line 10

def arguments
  @arguments
end

#functionObject

Returns the value of attribute function.



10
11
12
# File 'lib/bel_parser/expression/model/term.rb', line 10

def function
  @function
end

Instance Method Details

#<<(arg) ⇒ Object

Raises:

  • (ArgumentError)


36
37
38
39
40
41
# 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) ⇒ Object Also known as: eql?



89
90
91
92
# File 'lib/bel_parser/expression/model/term.rb', line 89

def ==(other)
  return false if other == nil
  @function == other.function && @arguments == other.arguments
end

#hashObject



85
86
87
# 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) ⇒ Boolean

Returns:

  • (Boolean)


77
78
79
80
81
82
83
# 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

#namespacesObject



43
44
45
46
47
48
49
50
51
52
# 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) ⇒ Object



95
96
97
98
99
100
101
102
103
104
105
# 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) ⇒ Boolean

Returns:

  • (Boolean)


69
70
71
72
73
74
75
# 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) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
# 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