ImpExp

Fonctionnement

Features:

  • Export de données brutes (ImpExp::Exporters::Base) et d'un fichier xlsx (ImpExp::Exporters::Xlsx)
  • Import de données brutes (ImpExp::Importers::Base) et depuis un fichier xlsx (ImpExp::Importers::Xlsx) ainsi que les fichiers attachés (facultatifs)
  • Exporter des fichiers (ImpExp::Exporters::Files)

Configuration:

  • un fichier de configuration par modèle (= un onglet dans un classeur xlsx)/ La configuration d'un modèle liste les informations exportés et comment elles doivent être exportées (serializers)
  • les imports qui listent les modèles à exporter pour chaque type d'export (voir exemple ImpExp::Imports::Account)
  • les exports qui listent les modèles à exporter pour chaque type d'export (voir exemple ImpExp::Exports::Account)

Extensions:

  • Des serializers peuvent être ajoutés, ils sont des services simples implémentant une méthod load et une méthode dump permettant de sérialiser et déserialiser une donnée d'un modèle (= une cellule d'une feuille de classeur)
  • On peut ajouter un service de validation pour l'import Xlsx (voir exemple ImpExp::AccountSheetValidator), cette validation est bloquante pour l'import
  • On peut ajouter un service de validation des données brutes (voir exemple ImpExp::DummyDataValidator), cette validation est bloquante pour l'import
  • On peut facilement rajouter un format d'export ou d'import en s'inspirant de ImpExp::Exporters::Xlsx et ImpExp::Importers::Xlsx, en héritant de ImpExp::Exporters::Base et ImpExp::Importers::Base

Autres:

  • la gem définit un service Utils::XlsxReader permettant d'abstraire la lecture d'un xlsx (et switcher de librairie facilement)
  • la gem définit un service PingObserver, qui permet d'implémenter le pattern observer pour les imports donc suivre l'avancement de l'import

Les fichiers les plus importants à comprendre sont :

  • imp_exp/models/base.rb : classe parente de tous les modèles
  • imp_exp/importers/base.rb : service contenant la logique d'import

Bon à savoir pour les développeurs

Générer un export xlsx à partir des fixtures

cd test/dummy
RAILS_ENV=test bundle exec rake imp_exp:generate_account_export

Charger les fixtures dans la base

cd test/dummy
FIXTURES_PATH=../fixtures RAILS_ENV=test bundle exec rails db:fixtures:load

Créer des nouveaux modèles pour l'app dummy

Lorsqu'on créé des nouveaux modèles pour la base dummy, les fichiers (tests et fixtures) sont générés au mauvaise endroit (dans le dossier dummy), il faut les déplacement manuellement dans le répertoire parent (imp_exp/test).

Exécuter les tests

  cd imp_exp
  bin/test

License

The gem is available as open source under the terms of the MIT License.