Class: Dratools::RunRecordCollector
- Inherits:
-
Object
- Object
- Dratools::RunRecordCollector
- Defined in:
- lib/dratools/run_record_collector.rb
Overview
BioProject などの上位レコードから DDBJ sra-run レコードを集める。
Constant Summary collapse
- TRAVERSABLE_XREF_TYPES =
[ DdbjRecordFields::SRA_RUN_RESOURCE_TYPE, DdbjRecordFields::SRA_EXPERIMENT_RESOURCE_TYPE, DdbjRecordFields::SRA_SAMPLE_RESOURCE_TYPE, DdbjRecordFields::SRA_STUDY_RESOURCE_TYPE, DdbjRecordFields::SRA_SUBMISSION_RESOURCE_TYPE, DdbjRecordFields::BIOPROJECT_RESOURCE_TYPE, DdbjRecordFields::BIOSAMPLE_RESOURCE_TYPE ].freeze
Instance Method Summary collapse
- #collect_run_records(ddbj_record, seen_keys = Set.new) ⇒ Object
- #explore(ddbj_record, seen_keys: Set.new, relation: TraversalNode::ROOT_RELATION, tolerant: false, direct_run_fetch_limit: nil) ⇒ Object
-
#initialize(client:) ⇒ RunRecordCollector
constructor
A new instance of RunRecordCollector.
Constructor Details
#initialize(client:) ⇒ RunRecordCollector
Returns a new instance of RunRecordCollector.
22 23 24 |
# File 'lib/dratools/run_record_collector.rb', line 22 def initialize(client:) @client = client end |
Instance Method Details
#collect_run_records(ddbj_record, seen_keys = Set.new) ⇒ Object
26 27 28 |
# File 'lib/dratools/run_record_collector.rb', line 26 def collect_run_records(ddbj_record, seen_keys = Set.new) explore(ddbj_record, seen_keys: seen_keys).run_records end |
#explore(ddbj_record, seen_keys: Set.new, relation: TraversalNode::ROOT_RELATION, tolerant: false, direct_run_fetch_limit: nil) ⇒ Object
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 |
# File 'lib/dratools/run_record_collector.rb', line 30 def explore(ddbj_record, seen_keys: Set.new, relation: TraversalNode::ROOT_RELATION, tolerant: false, direct_run_fetch_limit: nil) node = node_from_record(ddbj_record, relation: relation) return node if run_record?(ddbj_record) xrefs = ddbj_record.fetch(DdbjRecordFields::DB_XREFS_KEY, []) run_xrefs = xrefs.select { |xref| sra_run_xref?(xref) } if (lightweight_children = lightweight_direct_run_nodes(run_xrefs, direct_run_fetch_limit)) node.children.concat(lightweight_children) return node end direct_children = explore_run_xrefs( run_xrefs, seen_keys, tolerant: tolerant, direct_run_fetch_limit: direct_run_fetch_limit ) if direct_children.any? { |child| child.run? || child.run_records.any? } node.children.concat(direct_children) return node end node.children.concat( recursive_children(ddbj_record, xrefs, seen_keys, tolerant, direct_run_fetch_limit) ) node end |