Class: Darlingtonia::Importer
- Inherits:
-
Object
- Object
- Darlingtonia::Importer
- Extended by:
- Forwardable
- Defined in:
- lib/darlingtonia/importer.rb
Overview
The chief entry point for bulk import of records. ‘Importer` accepts a Parser on initialization and iterates through its Parser#records, importing each using a given RecordImporter.
Instance Attribute Summary collapse
Instance Method Summary collapse
-
#import ⇒ void
Import each record in #records.
-
#initialize(parser:, record_importer: RecordImporter.new, info_stream: Darlingtonia.config.default_info_stream, error_stream: Darlingtonia.config.default_error_stream) ⇒ Importer
constructor
A new instance of Importer.
-
#no_records_message ⇒ Object
Do not attempt to run an import if there are no records.
- #records ⇒ Object
Constructor Details
#initialize(parser:, record_importer: RecordImporter.new, info_stream: Darlingtonia.config.default_info_stream, error_stream: Darlingtonia.config.default_error_stream) ⇒ Importer
Returns a new instance of Importer.
34 35 36 37 38 39 |
# File 'lib/darlingtonia/importer.rb', line 34 def initialize(parser:, record_importer: RecordImporter.new, info_stream: Darlingtonia.config.default_info_stream, error_stream: Darlingtonia.config.default_error_stream) self.parser = parser self.record_importer = record_importer @info_stream = info_stream @error_stream = error_stream end |
Instance Attribute Details
#record_importer ⇒ RecordImporter
22 |
# File 'lib/darlingtonia/importer.rb', line 22 attr_accessor :parser, :record_importer |
Instance Method Details
#import ⇒ void
This method returns an undefined value.
Import each record in #records.
51 52 53 54 55 56 57 58 59 |
# File 'lib/darlingtonia/importer.rb', line 51 def import && return unless records.count.positive? start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC) @info_stream << "event: start_import, batch_id: #{record_importer.batch_id}, expecting to import #{records.count} records." records.each { |record| record_importer.import(record: record) } end_time = Process.clock_gettime(Process::CLOCK_MONOTONIC) elapsed_time = end_time - start_time @info_stream << "event: finish_import, batch_id: #{record_importer.batch_id}, successful_record_count: #{record_importer.success_count}, failed_record_count: #{record_importer.failure_count}, elapsed_time: #{elapsed_time}, elapsed_time_per_record: #{elapsed_time / records.count}" end |
#no_records_message ⇒ Object
Do not attempt to run an import if there are no records. Instead, just write to the log.
42 43 44 45 |
# File 'lib/darlingtonia/importer.rb', line 42 def @info_stream << "event: empty_import, batch_id: #{record_importer.batch_id}" @error_stream << "event: empty_import, batch_id: #{record_importer.batch_id}" end |
#records ⇒ Object
27 |
# File 'lib/darlingtonia/importer.rb', line 27 def_delegator :parser, :records, :records |