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 |