Skip to content

Latest commit

 

History

History
230 lines (162 loc) · 5.82 KB

CHANGELOG.md

File metadata and controls

230 lines (162 loc) · 5.82 KB

Change Log

All notable changes to this project will be documented in this file.

[0.8.2] - 2022-08-02

Fixed

[0.8.1] - 2021-02-21

[0.8.0] - 2020-09-02

Fixed

[0.7.0] - 2019-11-29

Added

Fixed

  • valid_header? returns false when the CSV is malformed instead of raising an exception. #85 by @mltsy
  • Header infos (ex: extra_columns) aren't discarded after running an import. #83 by @mltsy

[0.6.0] - 2018-05-22

Added

  • We now pass the column object as the third parameter of the column block for advanced usage. #73 by @stas.
  column :extra, as: [/extra/], to: ->(value, user, column) do
    attribute = column.name.sub(/^extra /, '')
    user[attribute] = value
  end

[0.5.0] - 2018-01-13

Added

  • after_save supports block with arity of 2 for access to raw attributes. #68 by @macfanatic.
class Importer
  model Task

  column :assignee, to: ->(name) { User.active.find_by(name: name) }

  after_save do |task, attributes|
    if task.errors[:assignee].present? && attributes['Assignee'].present?
      task.errors.add(:assignee, "'#{ attributes['Assignee'] }' is not part of this project."
    end
  end
end
class Importer
  identifier ->(user) { user.email.present? ? :email : [:company_id, :employee_id] }
end

[0.4.0] - 2017-08-10

Added

import.report.invalid_rows.map { |row| [row.line_number, row.model.email, row.errors] }
  # => [ [2, "INVALID_EMAIL", { "email" => "is invalid" } ] ]

[0.3.2] - 2017-01-06

Fixed

[0.3.1] - 2016-05-09

Added

  • You can customize the encoding with the encoding option. Default is UTF-8. (#38 by @egg-chicken)

[0.3.0] - 2016-02-05

Added

  • Empty cells are now empty strings. You don't have to check for a nil value when applying a transformation anymore.
  # Prior to 0.3, an empty cell turns into `nil`
  column :email, to: ->(email) { email.downcase unless email.nil? }

  # From 0.3, an empty cell turns into `""`
  column :email, to: ->(email) { email.downcase }
  • You can now skip an import in the after_build callback:
UserImport.new(file: csv_file) do
  # Skip existing records
  after_build do |user|
    skip! if user.persisted?
  end
end

[0.2.0] - 2015-07-24

Added

  • after_save callback.
progress_bar = ProgressBar.new

UserImport.new(file: my_file) do
  after_save do |user|
    progress_bar.increment
  end
end
  • You can define a composite identifier made of multiple columns.
  # Update records with matching company_id AND employee_id
  identifier :company_id, :employee_id
UserImport.new(file: csv_file, quote_char: "'")

[0.1.3] - 2015-06-19

Added

  • You can now change the configuration at runtime. Example:
UserImport.new(file: csv_file) do
  after_build do |user|
    user.import_by_user = current_user
  end
end
  • Add after_build hooks to perform arbitrary operations on a model before saving it.

  • identifier does not have to be a required attribute anymore. That enables you to use id as an identifier and import new entries without having to provide an id

[0.1.2] - 2015-06-15

Fixed

  • run! was not returning a report object when the header was invalid.

[0.1.1] - 2015-06-12

Changed

  • When calling run! on an import with invalid header we update the report object instead of raising an exception.

[0.1.0] - 2015-06-11

  • Initial Release