class BELParser::Expression::Model::Statement
A {Statement} captures a BEL
statement composed of a subject {Term}, relationship
, and object {Term}. A {Statement} may be one of the following common forms:
Attributes
comment[R]
object[R]
relationship[R]
subject[R]
type[R]
Public Class Methods
new(subject, relationship = nil, object = nil, comment = nil)
click to toggle source
Creates a {Statement} with subject
, relationship
, object
, and comment
.
@param [Term] subject @param [BELParser::Language::Relationship] relationship @param [Term, Statement] object @param [String] comment
# File lib/bel_parser/expression/model/statement.rb, line 28 def initialize(subject, relationship = nil, object = nil, comment = nil) if subject.nil? || !subject.is_a?(Term) raise( ArgumentError, "subject: expected Term, actual #{subject.class}") end @subject = subject case relationship when nil @type = :observed_term @relationship = nil when BELParser::Language::Relationship @type = :simple_statement @relationship = relationship else raise(ArgumentError, "relationship: expected nil or Relationship, actual #{relationship.class}") end case object when nil @type = :observed_term @object = nil when BELParser::Expression::Model::Term @type = :simple_statement @object = object when BELParser::Expression::Model::Statement @type = :nested_statement @object = object else raise(ArgumentError, "object: expected nil, Term, or Statement, actual #{object.class}") end @comment = comment if @relationship && @object.nil? raise( ArgumentError, "object must be set when specifying a relationship") end if @object && @relationship.nil? raise( ArgumentError, "relationship must be set when specifying an object") end end
Public Instance Methods
==(other)
click to toggle source
# File lib/bel_parser/expression/model/statement.rb, line 119 def ==(other) return false if other == nil @subject == other.subject && @relationship == other.relationship && @object == other.object && @comment == other.comment end
hash()
click to toggle source
# File lib/bel_parser/expression/model/statement.rb, line 115 def hash [@subject, @relationship, @object, @comment].hash end
namespaces()
click to toggle source
# File lib/bel_parser/expression/model/statement.rb, line 90 def namespaces ns = @subject.namespaces ns.concat(@object.namespaces) unless @object.nil? ns end
nested?()
click to toggle source
# File lib/bel_parser/expression/model/statement.rb, line 86 def nested? @type == :nested_statement end
simple?()
click to toggle source
# File lib/bel_parser/expression/model/statement.rb, line 82 def simple? @type == :simple_statement end
subject_only?()
click to toggle source
# File lib/bel_parser/expression/model/statement.rb, line 78 def subject_only? @type == :observed_term end
to_s(form = :short)
click to toggle source
# File lib/bel_parser/expression/model/statement.rb, line 128 def to_s(form = :short) rel = case form when :short @relationship && @relationship.short when :long @relationship && @relationship.long else nil end lbl = case when subject_only? @subject.to_s(form) when simple? "#{@subject.to_s(form)} #{rel} #{@object.to_s(form)}" when nested? "#{@subject.to_s(form)} #{rel} (#{@object.to_s(form)})" else '' end comment ? lbl + ' //' + comment : lbl end
valid?()
click to toggle source
# File lib/bel_parser/expression/model/statement.rb, line 111 def valid? @subject.valid? && @object.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/statement.rb, line 96 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