Class: BELParser::Expression::Model::Statement
- Inherits:
-
Object
- Object
- BELParser::Expression::Model::Statement
- Defined in:
- lib/bel_parser/expression/model/statement.rb
Overview
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:
-
SUBJECT
-
complex(p(HGNC:F3),p(HGNC:F7))
-
-
SUBJECT RELATIONSHIP OBJECT(Term)
-
pep(complex(p(HGNC:F3),p(HGNC:F7))) => pep(p(HGNC:F9))
-
-
SUBJECT RELATIONSHIP OBJECT(Statement)
-
p(HGNC:VHL) -> (p(HGNC:TNF) -> bp(GOBP:“cell death”))
-
Instance Attribute Summary collapse
-
#comment ⇒ Object
Returns the value of attribute comment.
-
#object ⇒ Object
Returns the value of attribute object.
-
#relationship ⇒ Object
Returns the value of attribute relationship.
-
#subject ⇒ Object
Returns the value of attribute subject.
Instance Method Summary collapse
- #==(other) ⇒ Object (also: #eql?)
- #hash ⇒ Object
-
#initialize(subject, relationship = nil, object = nil, comment = nil) ⇒ Statement
constructor
Creates a Statement with
subject,relationship,object, andcomment. - #namespaces ⇒ Object
- #nested? ⇒ Boolean
- #simple? ⇒ Boolean
- #subject_only? ⇒ Boolean
- #to_s(form = :short) ⇒ Object
- #valid? ⇒ Boolean
- #validation(spec = BELParser::Language.default_specification, uri_reader = BELParser::Resource.default_uri_reader, url_reader = BELParser::Resource.default_url_reader) ⇒ Object
Constructor Details
#initialize(subject, relationship = nil, object = nil, comment = nil) ⇒ Statement
Creates a BELParser::Expression::Model::Statement with subject, relationship, object, and comment.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# 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 unless relationship.nil? || relationship.is_a?(BELParser::Language::Relationship) raise( ArgumentError, "relationship: expected nil or Relationship, actual #{relationship.class}") end @relationship = relationship unless object.nil? || [Term, Statement].any?(&object.method(:is_a?)) raise( ArgumentError, "object: expected nil, Term, or Statement, actual #{object.class}") end @object = object @comment = comment if @relationship && !@object raise( ArgumentError, "object must be set when specifying a relationship") end if @object && !@relationship raise( ArgumentError, "relationsihp must be set when specifying an object") end end |
Instance Attribute Details
#comment ⇒ Object
Returns the value of attribute comment.
19 20 21 |
# File 'lib/bel_parser/expression/model/statement.rb', line 19 def comment @comment end |
#object ⇒ Object
Returns the value of attribute object.
19 20 21 |
# File 'lib/bel_parser/expression/model/statement.rb', line 19 def object @object end |
#relationship ⇒ Object
Returns the value of attribute relationship.
19 20 21 |
# File 'lib/bel_parser/expression/model/statement.rb', line 19 def relationship @relationship end |
#subject ⇒ Object
Returns the value of attribute subject.
19 20 21 |
# File 'lib/bel_parser/expression/model/statement.rb', line 19 def subject @subject end |
Instance Method Details
#==(other) ⇒ Object Also known as: eql?
105 106 107 108 109 110 111 |
# File 'lib/bel_parser/expression/model/statement.rb', line 105 def ==(other) return false if other == nil @subject == other.subject && @relationship == other.relationship && @object == other.object && @comment == other.comment end |
#hash ⇒ Object
101 102 103 |
# File 'lib/bel_parser/expression/model/statement.rb', line 101 def hash [@subject, @relationship, @object, @comment].hash end |
#namespaces ⇒ Object
76 77 78 79 80 |
# File 'lib/bel_parser/expression/model/statement.rb', line 76 def namespaces ns = @subject.namespaces ns.concat(@object.namespaces) unless @object.nil? ns end |
#nested? ⇒ Boolean
72 73 74 |
# File 'lib/bel_parser/expression/model/statement.rb', line 72 def nested? @object && @object.is_a?(Statement) end |
#simple? ⇒ Boolean
68 69 70 |
# File 'lib/bel_parser/expression/model/statement.rb', line 68 def simple? @object && @object.is_a?(Term) end |
#subject_only? ⇒ Boolean
64 65 66 |
# File 'lib/bel_parser/expression/model/statement.rb', line 64 def subject_only? !@relationship end |
#to_s(form = :short) ⇒ Object
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/bel_parser/expression/model/statement.rb', line 114 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? ⇒ Boolean
97 98 99 |
# File 'lib/bel_parser/expression/model/statement.rb', line 97 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) ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/bel_parser/expression/model/statement.rb', line 82 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 |