Module: CsvRowModel::Import::FileModel
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/csv_row_model/import/file_model.rb
Class Method Summary collapse
-
.header_matchers(context) ⇒ Array
Header_matchs matchers for the row model.
-
.index_header_match(cell, context) ⇒ Integer
Safe to override.
- .next(csv, source_header, context = {}, previous = nil) ⇒ Object
Class Method Details
.header_matchers(context) ⇒ Array
Returns header_matchs matchers for the row model.
23 24 25 26 27 28 29 30 31 |
# File 'lib/csv_row_model/import/file_model.rb', line 23 def header_matchers(context) @header_matchers ||= begin columns.map do |name, | if formatted_header = self.format_header(name, context) Regexp.new("^#{formatted_header}$", Regexp::IGNORECASE) end end.compact end end |
.index_header_match(cell, context) ⇒ Integer
Safe to override
14 15 16 17 18 19 20 |
# File 'lib/csv_row_model/import/file_model.rb', line 14 def index_header_match(cell, context) match = header_matchers(context).each_with_index.select do |matcher, index| cell.match(matcher) end.first match ? match[1] : nil end |
.next(csv, source_header, context = {}, previous = nil) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/csv_row_model/import/file_model.rb', line 33 def next(csv, source_header, context={}, previous=nil) return csv.read_row unless csv.next_row source_row = Array.new(header_matchers(context).size) while csv.next_row current_row = csv.read_row current_row.each_with_index do |cell, position| next if position == 0 # This is a hack to ignore the first column because of infos.csv have 'Compte' twice... next if cell.blank? index = index_header_match(cell, context) next unless index source_row[index] = current_row[position + 1] break end end new(source_row, source_header: source_header, context: context, previous: previous) end |