Sha256: 434412d1fa5c738816283a021327170f8ec969ef8cdeaf0408c507847a3ce917
Contents?: true
Size: 1.53 KB
Versions: 5
Compression:
Stored size: 1.53 KB
Contents
require "cascade/complex_fields" require "cascade/exceptions" require "cascade/helpers/configuration" module Cascade class RowProcessor extend Configuration DEFAULT_PROCESSOR = ->(value) { value } define_setting :use_default_presenter, false define_setting :deafult_presenter, -> { DEFAULT_PROCESSOR } def initialize(options = {}) @columns_matching = options[:columns_matching] || ColumnsMatching.new @presenters = options.reverse_merge(defined_presenters) end # Iterates through object using columns values supported keys as keys for # iterating, then parse it by curresponding parser. # # @param row [Hash] the object retrieved from CSV # @return [Hash] the object with parsed columns def call(row) @columns_matching.supported_keys.inject({}) do |result, key| raw_value = row.fetch(@columns_matching.index(key)) value = receive_presenter(key).call(raw_value) result.merge(key => value) end end private def receive_presenter(column_name) presenter = @presenters[@columns_matching.column_type(column_name)] if presenter.nil? && !self.class.use_default_presenter raise Cascade::UnknownPresenterType.new end presenter || self.class.deafult_presenter end def defined_presenters { string: DEFAULT_PROCESSOR, currency: ComplexFields::Currency.new, country_iso: ComplexFields::CountryIso.new, boolean: ComplexFields::Boolean.new, } end end end
Version data entries
5 entries across 5 versions & 1 rubygems