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 |