Class: GFA::RecordSet
- Inherits:
-
Object
show all
- Defined in:
- lib/gfa/record_set.rb
Defined Under Namespace
Classes: CommentSet, ContainmentSet, HeaderSet, JumpSet, LinkSet, PathSet, SegmentSet, WalkSet
Constant Summary
collapse
- INDEX_FIELD =
nil
- TYPES =
GFA::Record.TYPES.map { |i| :"#{i}Set" }
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(gfa) ⇒ RecordSet
Returns a new instance of RecordSet.
28
29
30
31
32
|
# File 'lib/gfa/record_set.rb', line 28
def initialize(gfa)
@set = []
@index = {}
@gfa = gfa
end
|
Instance Attribute Details
#gfa ⇒ Object
26
27
28
|
# File 'lib/gfa/record_set.rb', line 26
def gfa
@gfa
end
|
#set ⇒ Object
26
27
28
|
# File 'lib/gfa/record_set.rb', line 26
def set
@set
end
|
Class Method Details
.code_class(code) ⇒ Object
13
14
15
16
17
|
# File 'lib/gfa/record_set.rb', line 13
def self.code_class(code)
name = GFA::Record.CODES[code.to_sym]
raise "Unknown record type: #{code}." if name.nil?
name_class(name)
end
|
.name_class(name) ⇒ Object
19
20
21
22
|
# File 'lib/gfa/record_set.rb', line 19
def self.name_class(name)
name = "#{name}Set" unless name =~ /Set$/
const_get(name)
end
|
Instance Method Details
#<<(v) ⇒ Object
65
66
67
68
69
70
71
72
73
|
# File 'lib/gfa/record_set.rb', line 65
def <<(v)
v = v.split("\t") if v.is_a? String
v = GFA::Record.code_class(code).new(*v) if v.is_a? Array
raise "Not a GFA Record: #{v}" unless v.is_a? GFA::Record
raise "Wrong type of record: #{v.type}" if v.type != type
@set << v
index(v)
end
|
#[](k) ⇒ Object
34
35
36
37
|
# File 'lib/gfa/record_set.rb', line 34
def [](k)
return set[k] if k.is_a?(Integer)
find_index(k)
end
|
#code ⇒ Object
43
44
45
|
# File 'lib/gfa/record_set.rb', line 43
def code
self.class.const_get(:CODE)
end
|
#eql?(rec) ⇒ Boolean
Also known as:
==
59
60
61
|
# File 'lib/gfa/record_set.rb', line 59
def eql?(rec)
hash == rec.hash
end
|
#find_index(k) ⇒ Object
95
96
97
98
|
# File 'lib/gfa/record_set.rb', line 95
def find_index(k)
k = k.value if k.is_a? GFA::Field
@index[k]
end
|
#index(v) ⇒ Object
79
80
81
82
83
84
|
# File 'lib/gfa/record_set.rb', line 79
def index(v)
save_index(index_id(v), v) if index_field
save_index(v[:ID].value, v) if v[:ID] && v[:ID].value =~ index_id(v)
end
|
#index_field ⇒ Object
47
48
49
|
# File 'lib/gfa/record_set.rb', line 47
def index_field
self.class.const_get(:INDEX_FIELD)
end
|
#index_id(v) ⇒ Object
75
76
77
|
# File 'lib/gfa/record_set.rb', line 75
def index_id(v)
v[index_field]&.value
end
|
#save_index(k, v) ⇒ Object
86
87
88
89
90
91
92
93
|
# File 'lib/gfa/record_set.rb', line 86
def save_index(k, v)
return unless gfa.opts[:index] && k
if @index[k]
warn "#{type} already registered with field #{index_field}: #{k}"
end
@index[k] = v
end
|
#to_s ⇒ Object
55
56
57
|
# File 'lib/gfa/record_set.rb', line 55
def to_s
set.map(&:to_s).join("\n")
end
|
#type ⇒ Object
39
40
41
|
# File 'lib/gfa/record_set.rb', line 39
def type
GFA::Record.CODES[code]
end
|