Class: Dataflow::Adapters::CsvAdapter
- Inherits:
-
Object
- Object
- Dataflow::Adapters::CsvAdapter
- Includes:
- SchemaMixin
- Defined in:
- lib/dataflow/adapters/csv_adapter.rb
Overview
Interface between a data node and csv. We use mongodb to perform all the store/retrieve operations.
Constant Summary
Constants included from SchemaMixin
SchemaMixin::SAMPLE_DATA_OUTPUT, SchemaMixin::SEPARATOR
Instance Attribute Summary collapse
-
#settings ⇒ Object
readonly
Returns the value of attribute settings.
Instance Method Summary collapse
-
#all(where: {}, fields: [], sort: {}, offset: 0, limit: 0, include_system_id: false) ⇒ Object
retrieve all elements from a data node.
-
#count(where: {}) ⇒ Object
count the number of records.
- #create_indexes ⇒ Object
-
#find(where: opts = {}) ⇒ Object
retrieve a single element from a data node.
-
#initialize(args) ⇒ CsvAdapter
constructor
A new instance of CsvAdapter.
- #on_save_finished ⇒ Object
- #recreate_dataset(dataset: nil) ⇒ Object
- #remove(_opts = {}) ⇒ Object
-
#save(records:, part: nil) ⇒ Object
save the given records.
- #set_schema(schema) ⇒ Object
- #update_settings(args) ⇒ Object
Methods included from SchemaMixin
#infer_partial_schema, #infer_schema, #sample_data, #schema_inferrer
Constructor Details
permalink #initialize(args) ⇒ CsvAdapter
Returns a new instance of CsvAdapter.
13 14 15 16 17 |
# File 'lib/dataflow/adapters/csv_adapter.rb', line 13 def initialize(args) # make sure the CsvPath exist `mkdir -p #{Dataflow::CsvPath}` update_settings(args) end |
Instance Attribute Details
permalink #settings ⇒ Object (readonly)
Returns the value of attribute settings.
11 12 13 |
# File 'lib/dataflow/adapters/csv_adapter.rb', line 11 def settings @settings end |
Instance Method Details
permalink #all(where: {}, fields: [], sort: {}, offset: 0, limit: 0, include_system_id: false) ⇒ Object
retrieve all elements from a data node
34 35 36 37 38 |
# File 'lib/dataflow/adapters/csv_adapter.rb', line 34 def all(where: {}, fields: [], sort: {}, offset: 0, limit: 0, include_system_id: false) SmarterCSV.process(file_path, strings_as_keys: true) rescue Errno::ENOENT => e [] end |
permalink #count(where: {}) ⇒ Object
count the number of records
41 42 43 |
# File 'lib/dataflow/adapters/csv_adapter.rb', line 41 def count(where: {}) all(where: where).count end |
permalink #create_indexes ⇒ Object
[View source]
65 |
# File 'lib/dataflow/adapters/csv_adapter.rb', line 65 def create_indexes(*); end |
permalink #find(where: opts = {}) ⇒ Object
retrieve a single element from a data node
29 30 31 |
# File 'lib/dataflow/adapters/csv_adapter.rb', line 29 def find(where: opts = {}) raise NotImplementedError, '#find is not yet support on CSV.' end |
permalink #on_save_finished ⇒ Object
[View source]
50 51 52 |
# File 'lib/dataflow/adapters/csv_adapter.rb', line 50 def on_save_finished write_single_csv(keys: @schema.keys) end |
permalink #recreate_dataset(dataset: nil) ⇒ Object
[View source]
58 59 60 61 62 63 |
# File 'lib/dataflow/adapters/csv_adapter.rb', line 58 def recreate_dataset(dataset: nil) # simply delete the file delete_file(file_path) # and any parts if any is still there file_parts.each { |part| delete_file(part) } end |
permalink #remove(_opts = {}) ⇒ Object
54 55 56 |
# File 'lib/dataflow/adapters/csv_adapter.rb', line 54 def remove(_opts = {}) raise NotImplementedError, '#find is not yet support on CSV.' end |
permalink #save(records:, part: nil) ⇒ Object
save the given records
46 47 48 |
# File 'lib/dataflow/adapters/csv_adapter.rb', line 46 def save(records:, part: nil) write_csv_part(records, keys: @schema.keys, part: part) end |
permalink #set_schema(schema) ⇒ Object
[View source]
24 25 26 |
# File 'lib/dataflow/adapters/csv_adapter.rb', line 24 def set_schema(schema) @schema = schema end |