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
readonly
Returns the value of attribute comment.
-
#object ⇒ Object
readonly
Returns the value of attribute object.
-
#relationship ⇒ Object
readonly
Returns the value of attribute relationship.
-
#subject ⇒ Object
readonly
Returns the value of attribute subject.
-
#type ⇒ Object
readonly
Returns the value of attribute type.
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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# 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 |
Instance Attribute Details
#comment ⇒ Object (readonly)
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 (readonly)
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 (readonly)
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 (readonly)
Returns the value of attribute subject.
19 20 21 |
# File 'lib/bel_parser/expression/model/statement.rb', line 19 def subject @subject end |
#type ⇒ Object (readonly)
Returns the value of attribute type.
19 20 21 |
# File 'lib/bel_parser/expression/model/statement.rb', line 19 def type @type end |
Instance Method Details
#==(other) ⇒ Object Also known as: eql?
119 120 121 122 123 124 125 |
# 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 ⇒ Object
115 116 117 |
# File 'lib/bel_parser/expression/model/statement.rb', line 115 def hash [@subject, @relationship, @object, @comment].hash end |
#namespaces ⇒ Object
90 91 92 93 94 |
# 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? ⇒ Boolean
86 87 88 |
# File 'lib/bel_parser/expression/model/statement.rb', line 86 def nested? @type == :nested_statement end |
#simple? ⇒ Boolean
82 83 84 |
# File 'lib/bel_parser/expression/model/statement.rb', line 82 def simple? @type == :simple_statement end |
#subject_only? ⇒ Boolean
78 79 80 |
# File 'lib/bel_parser/expression/model/statement.rb', line 78 def subject_only? @type == :observed_term end |
#to_s(form = :short) ⇒ Object
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
# 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? ⇒ Boolean
111 112 113 |
# 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) ⇒ Object
96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# 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 |