class Import::CSVData
Attributes
Public Class Methods
Source
# File app/models/import/csv_data.rb, line 7 def initialize(data) @data = data end
Use with serialization in the Import model
Public Instance Methods
Source
# File app/models/import/csv_data.rb, line 28 def count = csv_table&.count || 0 def records(&block) remove_trailing_blank_rows .then { |rows| has_instruction_row? ? rows.drop(1) : rows } .each(&block) end def has_instruction_row? csv_table&.first&.[](0)&.to_s&.match?(/\A(Required|Optional)([,.:]|$)/) end private def remove_trailing_blank_rows found_values = false # map(&:itself) because CSV::Table doesn't have a reverse method rows_in_reverse_order = csv_table.map(&:itself).reverse filtered_rows = rows_in_reverse_order.select do |row| if found_values true elsif row.fields.all?(&:blank?) false else found_values = true true end end filtered_rows.reverse end end
Source
# File app/models/import/csv_data.rb, line 18 def csv_table @csv_table ||= begin CSVParser.call(data) if data.present? rescue CSV::MalformedCSVError @malformed = true nil end end
Source
# File app/models/import/csv_data.rb, line 16 def empty? = csv_table.blank? def csv_table @csv_table ||= begin CSVParser.call(data) if data.present? rescue CSV::MalformedCSVError @malformed = true nil end end def count = csv_table&.count || 0 def records(&block) remove_trailing_blank_rows .then { |rows| has_instruction_row? ? rows.drop(1) : rows } .each(&block) end def has_instruction_row? csv_table&.first&.[](0)&.to_s&.match?(/\A(Required|Optional)([,.:]|$)/) end private def remove_trailing_blank_rows found_values = false # map(&:itself) because CSV::Table doesn't have a reverse method rows_in_reverse_order = csv_table.map(&:itself).reverse filtered_rows = rows_in_reverse_order.select do |row| if found_values true elsif row.fields.all?(&:blank?) false else found_values = true true end end filtered_rows.reverse end
Source
# File app/models/import/csv_data.rb, line 36 def has_instruction_row? csv_table&.first&.[](0)&.to_s&.match?(/\A(Required|Optional)([,.:]|$)/) end
Source
# File app/models/import/csv_data.rb, line 30 def records(&block) remove_trailing_blank_rows .then { |rows| has_instruction_row? ? rows.drop(1) : rows } .each(&block) end
Source
# File app/models/import/csv_data.rb, line 42 def remove_trailing_blank_rows found_values = false # map(&:itself) because CSV::Table doesn't have a reverse method rows_in_reverse_order = csv_table.map(&:itself).reverse filtered_rows = rows_in_reverse_order.select do |row| if found_values true elsif row.fields.all?(&:blank?) false else found_values = true true end end filtered_rows.reverse end
Source
# File app/models/import/csv_data.rb, line 11 def well_formed? csv_table !malformed end