Class: BELParser::Expression::Model::Statement

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

Constructor Details

#initialize(subject, relationship = nil, object = nil, comment = nil) ⇒ Statement

Creates a BELParser::Expression::Model::Statement with subject, relationship, object, and comment.

Parameters:



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

#commentObject (readonly)

Returns the value of attribute comment.



19
20
21
# File 'lib/bel_parser/expression/model/statement.rb', line 19

def comment
  @comment
end

#objectObject (readonly)

Returns the value of attribute object.



19
20
21
# File 'lib/bel_parser/expression/model/statement.rb', line 19

def object
  @object
end

#relationshipObject (readonly)

Returns the value of attribute relationship.



19
20
21
# File 'lib/bel_parser/expression/model/statement.rb', line 19

def relationship
  @relationship
end

#subjectObject (readonly)

Returns the value of attribute subject.



19
20
21
# File 'lib/bel_parser/expression/model/statement.rb', line 19

def subject
  @subject
end

#typeObject (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

#hashObject



115
116
117
# File 'lib/bel_parser/expression/model/statement.rb', line 115

def hash
  [@subject, @relationship, @object, @comment].hash
end

#namespacesObject



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

Returns:

  • (Boolean)


86
87
88
# File 'lib/bel_parser/expression/model/statement.rb', line 86

def nested?
  @type == :nested_statement
end

#simple?Boolean

Returns:

  • (Boolean)


82
83
84
# File 'lib/bel_parser/expression/model/statement.rb', line 82

def simple?
  @type == :simple_statement
end

#subject_only?Boolean

Returns:

  • (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

Returns:

  • (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