Module: RGFA::FieldParser Private

Included in:
String
Defined in:
lib/rgfa/field_parser.rb

Overview

This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.

Methods to parse the string representations of the GFA fields

API:

  • private

Defined Under Namespace

Classes: FormatError, UnknownDatatypeError

Instance Method Summary collapse

Instance Method Details

#parse_gfa_field(datatype: nil, validate_strings: true, fieldname: nil, frozen: false) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Parse a string representation of a GFA field value

Parameters:

  • (defaults to: nil)

Raises:

  • if the value is not valid

API:

  • private



17
18
19
20
21
22
23
24
25
26
27
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
77
78
79
80
81
82
83
84
85
86
87
88
89
# 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_optfieldArray(Symbol, RGFA::Line::FIELD_DATATYPE, String)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Parses an optional field in the form tagname:datatype:value and parses the value according to the datatype

Returns:

  • the parsed content of the field

Raises:

  • if the string does not represent an optional field

API:

  • private



97
98
99
100
101
102
103
104
# 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