Class: InterMine::Metadata::Path
- Inherits:
-
Object
- Object
- InterMine::Metadata::Path
- Defined in:
- lib/intermine/model.rb
Overview
A representation of a path through the data model, starting at a table/class, and descending ultimately to an attribute. A path represents a valid sequence of joins and column accesses according to the webservice’s database schema.
In string format, a path can be represented using dotted notation:
Gene.proteins.proteinDomains.name
Which is a valid path through the data-model, starting in the gene table, following a reference to the protein table (via x-to-many relationship) and then to the protein-domain table and then finally to the name column in the protein domain table. Joins are implicitly implied.
:include:contact_header.rdoc
Instance Attribute Summary collapse
-
#elements ⇒ Object
readonly
The objects represented by each section of the path.
-
#model ⇒ Object
readonly
The data model that this path describes.
-
#rootClass ⇒ Object
readonly
The root class of this path.
-
#subclasses ⇒ Object
readonly
The subclass information used to create this path.
Instance Method Summary collapse
-
#==(other) ⇒ Object
Two paths can be said to be equal when they stringify to the same representation.
-
#end_cd ⇒ Object
call-seq: end_cd => ClassDescriptor.
-
#end_type ⇒ Object
call-seq: end_type => String.
-
#initialize(pathstring, model = nil, subclasses = {}) ⇒ Path
constructor
Construct a Path.
-
#is_attribute? ⇒ Boolean
Return true if the Path ends in an attribute.
-
#is_class? ⇒ Boolean
Return true if the last element is a class (ie. a path of length 1).
-
#is_collection? ⇒ Boolean
Return true if the last element is a collection.
-
#is_reference? ⇒ Boolean
Return true if the last element is a reference.
-
#length ⇒ Object
Get the number of elements in the path.
-
#to_headless_s ⇒ Object
Returns a string as to_s without the first element.
-
#to_s ⇒ Object
Return the string representation of this path, eg: “Gene.proteins.name”.
Constructor Details
#initialize(pathstring, model = nil, subclasses = {}) ⇒ Path
Construct a Path
The standard mechanism is to parse a string representing a path with information about the model and the subclasses that are in force. However, it is also possible to clone a path by passing a Path through as the first element, and also to construct a path from a ClassDescriptor. In both cases the new Path will inherit the model of the object used to construct it, this avoid the need for a model in these cases.
726 727 728 729 730 731 732 |
# File 'lib/intermine/model.rb', line 726 def initialize(pathstring, model=nil, subclasses={}) @model = model @subclasses = subclasses @elements = [] @rootClass = nil parse(pathstring) end |
Instance Attribute Details
#elements ⇒ Object (readonly)
The objects represented by each section of the path. The first is always a ClassDescriptor.
709 710 711 |
# File 'lib/intermine/model.rb', line 709 def elements @elements end |
#model ⇒ Object (readonly)
The data model that this path describes.
706 707 708 |
# File 'lib/intermine/model.rb', line 706 def model @model end |
#rootClass ⇒ Object (readonly)
The root class of this path. This is the same as the first element.
715 716 717 |
# File 'lib/intermine/model.rb', line 715 def rootClass @rootClass end |
#subclasses ⇒ Object (readonly)
The subclass information used to create this path.
712 713 714 |
# File 'lib/intermine/model.rb', line 712 def subclasses @subclasses end |
Instance Method Details
#==(other) ⇒ Object
Two paths can be said to be equal when they stringify to the same representation.
781 782 783 |
# File 'lib/intermine/model.rb', line 781 def ==(other) return self.to_s == other.to_s end |
#end_cd ⇒ Object
call-seq:
end_cd => ClassDescriptor
Return the last ClassDescriptor mentioned in this path. eg:
Gene
-
Gene
Gene.symbol
-
Gene
Gene.proteins
-
Protein
Gene.proteins.name
-
Protein
764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 |
# File 'lib/intermine/model.rb', line 764 def end_cd last = @elements.last if last.is_a?(ClassDescriptor) return last elsif last.respond_to?(:referencedType) return last.referencedType else penult = @elements[-2] if penult.is_a?(ClassDescriptor) return penult else return penult.referencedType end end end |
#end_type ⇒ Object
call-seq:
end_type => String
Return the string that describes the kind of thing this path represents. eg:
Gene
-
“Gene”
Gene.symbol
-
“java.lang.String”
Gene.proteins
-
“Protein”
743 744 745 746 747 748 749 750 751 752 |
# File 'lib/intermine/model.rb', line 743 def end_type last = @elements.last if last.is_a?(ClassDescriptor) return last.name elsif last.respond_to?(:referencedType) return last.referencedType.name else return last.dataType end end |
#is_attribute? ⇒ Boolean
Return true if the Path ends in an attribute
801 802 803 |
# File 'lib/intermine/model.rb', line 801 def is_attribute? return @elements.last.is_a?(AttributeDescriptor) end |
#is_class? ⇒ Boolean
Return true if the last element is a class (ie. a path of length 1)
806 807 808 |
# File 'lib/intermine/model.rb', line 806 def is_class? return @elements.last.is_a?(ClassDescriptor) end |
#is_collection? ⇒ Boolean
Return true if the last element is a collection
816 817 818 |
# File 'lib/intermine/model.rb', line 816 def is_collection? return @elements.last.is_a?(CollectionDescriptor) end |
#is_reference? ⇒ Boolean
Return true if the last element is a reference.
811 812 813 |
# File 'lib/intermine/model.rb', line 811 def is_reference? return @elements.last.is_a?(ReferenceDescriptor) end |
#length ⇒ Object
Get the number of elements in the path
786 787 788 |
# File 'lib/intermine/model.rb', line 786 def length return @elements.length end |
#to_headless_s ⇒ Object
Returns a string as to_s without the first element. eg: “proteins.name”
796 797 798 |
# File 'lib/intermine/model.rb', line 796 def to_headless_s return @elements[1, @elements.size - 1].map {|x| x.name}.join(".") end |
#to_s ⇒ Object
Return the string representation of this path, eg: “Gene.proteins.name”
791 792 793 |
# File 'lib/intermine/model.rb', line 791 def to_s return @elements.map {|x| x.name}.join(".") end |