Class: Csvtool::Application::UseCases::RunExtraction
- Inherits:
-
Object
- Object
- Csvtool::Application::UseCases::RunExtraction
- Defined in:
- lib/csvtool/application/use_cases/run_extraction.rb
Defined Under Namespace
Classes: Result
Instance Method Summary collapse
- #extract(session:, on_value: nil) ⇒ Object
-
#initialize(header_reader: Infrastructure::CSV::HeaderReader.new, value_streamer: Infrastructure::CSV::ValueStreamer.new, preview_builder: nil, csv_file_writer: nil) ⇒ RunExtraction
constructor
A new instance of RunExtraction.
- #preview(session:) ⇒ Object
- #read_headers(file_path:, col_sep:) ⇒ Object
Constructor Details
#initialize(header_reader: Infrastructure::CSV::HeaderReader.new, value_streamer: Infrastructure::CSV::ValueStreamer.new, preview_builder: nil, csv_file_writer: nil) ⇒ RunExtraction
Returns a new instance of RunExtraction.
19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/csvtool/application/use_cases/run_extraction.rb', line 19 def initialize( header_reader: Infrastructure::CSV::HeaderReader.new, value_streamer: Infrastructure::CSV::ValueStreamer.new, preview_builder: nil, csv_file_writer: nil ) @header_reader = header_reader @value_streamer = value_streamer @preview_builder = preview_builder || Services::PreviewBuilder.new(value_streamer: value_streamer) @csv_file_writer = csv_file_writer || Infrastructure::Output::CsvFileWriter.new(value_streamer: @value_streamer) end |
Instance Method Details
#extract(session:, on_value: nil) ⇒ Object
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 |
# File 'lib/csvtool/application/use_cases/run_extraction.rb', line 59 def extract(session:, on_value: nil) if session.output_destination.file? @csv_file_writer.call( output_path: session.output_destination.path, file_path: session.source.path, column_name: session.column_selection.name, col_sep: session.source.separator.value, skip_blanks: session..skip_blanks? ) success(output_path: session.output_destination.path) else @value_streamer.each( file_path: session.source.path, column_name: session.column_selection.name, col_sep: session.source.separator.value, skip_blanks: session..skip_blanks? ) { |value| on_value.call(value) if on_value } success({}) end rescue CSV::MalformedCSVError failure(:could_not_parse_csv) rescue Errno::EACCES, Errno::ENOENT => e if session.output_destination.file? failure(:cannot_write_output_file, path: session.output_destination.path, error_class: e.class) else failure(:cannot_read_file, path: session.source.path) end end |
#preview(session:) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/csvtool/application/use_cases/run_extraction.rb', line 44 def preview(session:) preview_values = @preview_builder.call( file_path: session.source.path, column_name: session.column_selection.name, col_sep: session.source.separator.value, skip_blanks: session..skip_blanks?, limit: session..preview_limit ) success(preview_values: preview_values) rescue CSV::MalformedCSVError failure(:could_not_parse_csv) rescue Errno::EACCES failure(:cannot_read_file, path: session.source.path) end |
#read_headers(file_path:, col_sep:) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/csvtool/application/use_cases/run_extraction.rb', line 31 def read_headers(file_path:, col_sep:) return failure(:file_not_found, path: file_path) unless File.file?(file_path) headers = @header_reader.call(file_path: file_path, col_sep: col_sep) return failure(:no_headers) if headers.empty? success(headers: headers) rescue CSV::MalformedCSVError failure(:could_not_parse_csv) rescue Errno::EACCES failure(:cannot_read_file, path: file_path) end |