From cb5f61668d84c8e72c94fc1960140887e58a8104 Mon Sep 17 00:00:00 2001 From: Rustam Ibragimov Date: Sat, 14 Mar 2020 14:42:58 +0300 Subject: [PATCH] [csv-uploader] Start of CSV uplaoder --- lib/qonfig.rb | 1 + lib/qonfig/uploaders.rb | 1 + lib/qonfig/uploaders/csv.rb | 58 +++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 lib/qonfig/uploaders/csv.rb diff --git a/lib/qonfig.rb b/lib/qonfig.rb index 6aff0075..9dc957bb 100644 --- a/lib/qonfig.rb +++ b/lib/qonfig.rb @@ -3,6 +3,7 @@ require 'set' require 'yaml' require 'json' +require 'csv' require 'erb' require 'pathname' diff --git a/lib/qonfig/uploaders.rb b/lib/qonfig/uploaders.rb index 2fd8ccb3..d9da7a39 100644 --- a/lib/qonfig/uploaders.rb +++ b/lib/qonfig/uploaders.rb @@ -7,4 +7,5 @@ module Qonfig::Uploaders require_relative 'uploaders/file' require_relative 'uploaders/json' require_relative 'uploaders/yaml' + require_relative 'uploaders/csv' end diff --git a/lib/qonfig/uploaders/csv.rb b/lib/qonfig/uploaders/csv.rb new file mode 100644 index 00000000..0187cad5 --- /dev/null +++ b/lib/qonfig/uploaders/csv.rb @@ -0,0 +1,58 @@ +# frozen_string_literal: true + +# @api private +# @since 0.25.0 +class Qonfig::Uploaders::CSV < Qonfig::Uplaoders::Base + # @return [String] + # + # @api private + # @since 0.25.0 + FILE_OPENING_MODE = 'w' + + # @return [Hash] + # + # @api private + # @since 0.25.0 + DEFAULT_OPTIONS = { + col_sep: '', + row_sep: :auto, + quote_char: '"', + field_size_limit: nil, + converters: nil, + unconverted_fields: nil, + headers: false, + return_headers: false, + write_headers: nil, + header_converters: nil, + skip_blanks: false, + force_quotes: false, + skip_lines: nil, + liberal_parsing: false, + internal_encoding: nil, + external_encoding: nil, + encoding: nil, + nil_value: nil, + empty_value: '', + quote_empty: true, + write_converters: nil, + write_nil_value: nil, + write_empty_value: '', + strip: false + }.freeze + + class << self + # @param settings [Qonfig::Settings] + # @param value_processor [Block] + # @option path [String, Pathname] + # @option options [Hash] + # @return [void] + # + # @api private + # @since 0.11.0 + def upload(settings, path:, options: self::DEFAULT_OPTIONS, &value_processor) + ::CSV.open(path, FILE_OPENING_MODE, **options) do |csv_descriptor| + # TODO: realize + end + end + end +end