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èlesimp_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.