module RGFA::FieldParser
Methods to parse the string representations of the GFA fields @api private
Public Instance Methods
parse_gfa_field(datatype: nil, validate_strings: true, fieldname: nil, frozen: false)
click to toggle source
Parse a string representation of a GFA field value @raise [RGFA::Error] if the value is not valid @param datatype [RGFA::Line::FIELD_DATATYPE]
# File lib/rgfa/field_parser.rb, line 17 def parse_gfa_field(datatype: nil, validate_strings: true, fieldname: nil, frozen: false) case datatype when :cmt return self when :A, :Z, :seq validate_gfa_field!(datatype, fieldname: fieldname) if validate_strings self.freeze if frozen return self when :lbl validate_segment_name! validate_gfa_field!(datatype, fieldname: fieldname) if validate_strings return to_sym.freeze when :orn validate_gfa_field!(datatype, fieldname: fieldname) if validate_strings return to_sym.freeze when :i return Integer(self) when :pos value = Integer(self) raise RGFA::FieldParser::FormatError if value < 0 return value when :f return Float(self) when :H value = to_byte_array value.freeze if frozen return value when :B value = to_numeric_array value.freeze if frozen return value when :J value = JSON.parse(self) # RGFA convention for array of fields if value.kind_of?(Array) and value.rgfa_field_array? value = value.to_rgfa_field_array end # no need to freeze, as any Hash or Array will be valid return value when :cig value = to_cigar value.freeze if frozen return value when :cgs value = split(",").map do |c| c = c.to_cigar c.freeze if frozen c end value.freeze if frozen return value when :lbs value = split(",").map do |l| o = l[-1].to_sym l = l[0..-2] if validate_strings l.validate_gfa_field!(:lbl, fieldname: "#{fieldname} "+ "(entire field content: #{self})" ) end os = [l.to_sym, o].to_oriented_segment os.freeze if frozen os end value.freeze if frozen return value else raise RGFA::FieldParser::UnknownDatatypeError, "Datatype unknown: #{datatype.inspect}" end end
parse_gfa_optfield()
click to toggle source
Parses an optional field in the form tagname:datatype:value and parses the value according to the datatype @raise [RGFA::FieldParser::FormatError] if the string does not represent
an optional field
@return [Array(Symbol
, RGFA::Line::FIELD_DATATYPE, String
)]
the parsed content of the field
# File lib/rgfa/field_parser.rb, line 97 def parse_gfa_optfield if self =~ /^([A-Za-z][A-Za-z0-9]):([AifZJHB]):(.+)$/ return $1.to_sym, $2.to_sym, $3 else raise RGFA::FieldParser::FormatError, "Expected optional field, found: #{self.inspect}" end end