datashift 0.16.0 → 0.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/{LICENSE.txt → LICENSE} +0 -0
- data/Rakefile +1 -20
- data/datashift.thor +125 -0
- data/lib/applications/apache_poi_extensions.rb +21 -52
- data/lib/applications/excel.rb +64 -57
- data/lib/applications/hssf_row_extensions.rb +66 -0
- data/lib/applications/jexcel_file.rb +99 -95
- data/lib/applications/jexcel_file_extensions.rb +76 -83
- data/lib/applications/jruby/word.rb +36 -36
- data/lib/applications/ruby_poi_translations.rb +34 -32
- data/lib/applications/spreadsheet_extensions.rb +21 -19
- data/lib/datashift.rb +49 -59
- data/lib/datashift/binder.rb +217 -0
- data/lib/datashift/column_packer.rb +21 -72
- data/lib/datashift/configuration.rb +317 -0
- data/lib/datashift/context_factory.rb +88 -0
- data/lib/datashift/core_ext/array.rb +15 -0
- data/lib/datashift/core_ext/csv_ext.rb +46 -0
- data/lib/datashift/core_ext/string.rb +49 -0
- data/lib/datashift/core_ext/to_b.rb +11 -0
- data/lib/datashift/delimiters.rb +55 -61
- data/lib/datashift/doc_context.rb +137 -0
- data/lib/datashift/excel_base.rb +93 -81
- data/lib/datashift/exceptions.rb +30 -28
- data/lib/datashift/file_definitions.rb +44 -39
- data/lib/datashift/guards.rb +5 -5
- data/lib/datashift/header.rb +25 -0
- data/lib/datashift/headers.rb +94 -0
- data/lib/datashift/inbound_data/column.rb +44 -0
- data/lib/datashift/inbound_data/lookup_support.rb +33 -0
- data/lib/datashift/inbound_data/method_binding.rb +139 -0
- data/lib/datashift/load_object.rb +37 -12
- data/lib/datashift/logging.rb +54 -27
- data/lib/datashift/mandatory.rb +39 -0
- data/lib/datashift/mapping/data_flow_schema.rb +198 -0
- data/lib/datashift/{model_mapper.rb → mapping/mapper_utils.rb} +30 -10
- data/lib/datashift/model_methods/catalogue.rb +183 -0
- data/lib/datashift/model_methods/collection.rb +140 -0
- data/lib/datashift/model_methods/model_method.rb +162 -0
- data/lib/datashift/model_methods/model_methods_manager.rb +76 -0
- data/lib/datashift/model_methods/operator.rb +62 -0
- data/lib/datashift/node_collection.rb +26 -0
- data/lib/datashift/node_context.rb +68 -0
- data/lib/datashift/populator.rb +308 -282
- data/lib/datashift/progress_monitor.rb +91 -0
- data/lib/datashift/querying.rb +110 -52
- data/lib/datashift/templates/import_export_config.erb +55 -0
- data/lib/datashift/transformation/factory.rb +219 -0
- data/lib/datashift/transformation/remove.rb +44 -0
- data/lib/datashift/version.rb +3 -0
- data/lib/exporters/configuration.rb +84 -0
- data/lib/exporters/csv_exporter.rb +54 -52
- data/lib/exporters/excel_exporter.rb +80 -61
- data/lib/exporters/exporter_base.rb +8 -8
- data/lib/generators/config_generator.rb +218 -0
- data/lib/generators/csv_generator.rb +13 -70
- data/lib/generators/excel_generator.rb +23 -111
- data/lib/generators/generator_base.rb +15 -70
- data/lib/loaders/configuration.rb +90 -0
- data/lib/loaders/csv_loader.rb +63 -101
- data/lib/loaders/excel_loader.rb +71 -156
- data/lib/loaders/failure_data.rb +40 -0
- data/lib/loaders/file_loader.rb +16 -0
- data/lib/loaders/loader_base.rb +82 -410
- data/lib/loaders/loader_factory.rb +42 -0
- data/lib/loaders/paperclip/attachment_loader.rb +157 -140
- data/lib/loaders/paperclip/datashift_paperclip.rb +18 -35
- data/lib/loaders/paperclip/image_loading.rb +40 -35
- data/lib/loaders/reporters/basic_stdout_reporter.rb +40 -0
- data/lib/loaders/reporters/reporter.rb +26 -0
- data/lib/tasks/config.thor +65 -0
- data/{tasks → lib/tasks}/config/seed_fu_product_template.erb +0 -0
- data/{tasks → lib/tasks}/config/tidy_config.txt +0 -0
- data/lib/tasks/export.thor +192 -0
- data/lib/tasks/generate.thor +190 -0
- data/lib/tasks/import.thor +142 -0
- data/lib/{thor → tasks}/paperclip.thor +69 -69
- data/{tasks → lib/tasks/to_convert_to_thor}/db_tasks.rake +20 -20
- data/lib/tasks/tools.thor +109 -0
- data/spec/MissingAttachmentRecords/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/MissingAttachmentRecords/DEMO_002_Powerstation.jpeg +0 -0
- data/spec/MissingAttachmentRecords/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/MissingAttachmentRecords/DEMO_004_ror_ringer.jpeg +0 -0
- data/spec/datashift/binder_spec.rb +266 -0
- data/spec/datashift/config_generator_spec.rb +186 -0
- data/spec/datashift/configuration.rb +66 -0
- data/spec/datashift/context_factory_spec.rb +63 -0
- data/spec/datashift/data_flow_schema_spec.rb +150 -0
- data/spec/datashift/datashift_spec.rb +52 -0
- data/spec/datashift/excel_base_spec.rb +57 -0
- data/spec/datashift/excel_spec.rb +188 -0
- data/spec/datashift/failure_data_spec.rb +27 -0
- data/spec/{file_definitions.rb → datashift/file_definitions.rb} +9 -10
- data/spec/datashift/headers_spec.rb +56 -0
- data/spec/datashift/inbound_data_spec.rb +47 -0
- data/spec/datashift/mapper_utils_spec.rb +38 -0
- data/spec/datashift/method_binding_spec.rb +60 -0
- data/spec/datashift/model_method_spec.rb +109 -0
- data/spec/datashift/model_methods_catalogue.rb +111 -0
- data/spec/datashift/model_methods_collection_spec.rb +138 -0
- data/spec/datashift/model_methods_manager_spec.rb +329 -0
- data/spec/datashift/populator_spec.rb +117 -0
- data/spec/datashift/thor_spec.rb +314 -0
- data/spec/datashift/transformation/factory_spec.rb +195 -0
- data/spec/datashift/transformation/transformer_remove_spec.rb +43 -0
- data/spec/dummy/Gemfile +53 -0
- data/spec/dummy/Gemfile.lock +197 -0
- data/spec/dummy/README.rdoc +28 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/javascripts/application.js +16 -0
- data/spec/dummy/app/assets/javascripts/categories.js +2 -0
- data/spec/dummy/app/assets/javascripts/digitals.js +2 -0
- data/spec/dummy/app/assets/javascripts/empties.js +2 -0
- data/spec/dummy/app/assets/javascripts/loader_releases.js +2 -0
- data/spec/dummy/app/assets/javascripts/long_and_complex_table_linked_to_versions.js +2 -0
- data/spec/dummy/app/assets/javascripts/milestones.js +2 -0
- data/spec/dummy/app/assets/javascripts/owners.js +2 -0
- data/spec/dummy/app/assets/javascripts/projects.js +2 -0
- data/spec/dummy/app/assets/javascripts/users.js +2 -0
- data/spec/dummy/app/assets/javascripts/versions.js +2 -0
- data/spec/dummy/app/assets/stylesheets/application.css +15 -0
- data/spec/dummy/app/assets/stylesheets/categories.css +4 -0
- data/spec/dummy/app/assets/stylesheets/digitals.css +4 -0
- data/spec/dummy/app/assets/stylesheets/empties.css +4 -0
- data/spec/dummy/app/assets/stylesheets/loader_releases.css +4 -0
- data/spec/dummy/app/assets/stylesheets/long_and_complex_table_linked_to_versions.css +4 -0
- data/spec/dummy/app/assets/stylesheets/milestones.css +4 -0
- data/spec/dummy/app/assets/stylesheets/owners.css +4 -0
- data/spec/dummy/app/assets/stylesheets/projects.css +4 -0
- data/spec/dummy/app/assets/stylesheets/scaffold.css +56 -0
- data/spec/dummy/app/assets/stylesheets/users.css +4 -0
- data/spec/dummy/app/assets/stylesheets/versions.css +4 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/controllers/categories_controller.rb +58 -0
- data/spec/dummy/app/controllers/digitals_controller.rb +58 -0
- data/spec/dummy/app/controllers/empties_controller.rb +58 -0
- data/spec/dummy/app/controllers/loader_releases_controller.rb +58 -0
- data/spec/dummy/app/controllers/long_and_complex_table_linked_to_versions_controller.rb +58 -0
- data/spec/dummy/app/controllers/milestones_controller.rb +58 -0
- data/spec/dummy/app/controllers/owners_controller.rb +58 -0
- data/spec/dummy/app/controllers/projects_controller.rb +58 -0
- data/spec/dummy/app/controllers/users_controller.rb +58 -0
- data/spec/dummy/app/controllers/versions_controller.rb +58 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/helpers/categories_helper.rb +2 -0
- data/spec/dummy/app/helpers/digitals_helper.rb +2 -0
- data/spec/dummy/app/helpers/empties_helper.rb +2 -0
- data/spec/dummy/app/helpers/loader_releases_helper.rb +2 -0
- data/spec/dummy/app/helpers/long_and_complex_table_linked_to_versions_helper.rb +2 -0
- data/spec/dummy/app/helpers/milestones_helper.rb +2 -0
- data/spec/dummy/app/helpers/owners_helper.rb +2 -0
- data/spec/dummy/app/helpers/projects_helper.rb +2 -0
- data/spec/dummy/app/helpers/users_helper.rb +2 -0
- data/spec/dummy/app/helpers/versions_helper.rb +2 -0
- data/spec/dummy/app/models/category.rb +6 -0
- data/spec/dummy/app/models/digital.rb +22 -0
- data/spec/dummy/app/models/empty.rb +2 -0
- data/spec/dummy/app/models/loader_release.rb +10 -0
- data/spec/dummy/app/models/long_and_complex_table_linked_to_version.rb +6 -0
- data/spec/dummy/app/models/milestone.rb +15 -0
- data/spec/dummy/app/models/owner.rb +13 -0
- data/spec/dummy/app/models/project.rb +53 -0
- data/spec/dummy/app/models/user.rb +5 -0
- data/spec/dummy/app/models/version.rb +7 -0
- data/spec/dummy/app/views/categories/_form.html.erb +17 -0
- data/spec/dummy/app/views/categories/edit.html.erb +6 -0
- data/spec/dummy/app/views/categories/index.html.erb +25 -0
- data/spec/dummy/app/views/categories/new.html.erb +5 -0
- data/spec/dummy/app/views/categories/show.html.erb +4 -0
- data/spec/dummy/app/views/digitals/_form.html.erb +17 -0
- data/spec/dummy/app/views/digitals/edit.html.erb +6 -0
- data/spec/dummy/app/views/digitals/index.html.erb +25 -0
- data/spec/dummy/app/views/digitals/new.html.erb +5 -0
- data/spec/dummy/app/views/digitals/show.html.erb +4 -0
- data/spec/dummy/app/views/empties/_form.html.erb +17 -0
- data/spec/dummy/app/views/empties/edit.html.erb +6 -0
- data/spec/dummy/app/views/empties/index.html.erb +25 -0
- data/spec/dummy/app/views/empties/new.html.erb +5 -0
- data/spec/dummy/app/views/empties/show.html.erb +4 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/app/views/loader_releases/_form.html.erb +17 -0
- data/spec/dummy/app/views/loader_releases/edit.html.erb +6 -0
- data/spec/dummy/app/views/loader_releases/index.html.erb +25 -0
- data/spec/dummy/app/views/loader_releases/new.html.erb +5 -0
- data/spec/dummy/app/views/loader_releases/show.html.erb +4 -0
- data/spec/dummy/app/views/long_and_complex_table_linked_to_versions/_form.html.erb +17 -0
- data/spec/dummy/app/views/long_and_complex_table_linked_to_versions/edit.html.erb +6 -0
- data/spec/dummy/app/views/long_and_complex_table_linked_to_versions/index.html.erb +25 -0
- data/spec/dummy/app/views/long_and_complex_table_linked_to_versions/new.html.erb +5 -0
- data/spec/dummy/app/views/long_and_complex_table_linked_to_versions/show.html.erb +4 -0
- data/spec/dummy/app/views/milestones/_form.html.erb +17 -0
- data/spec/dummy/app/views/milestones/edit.html.erb +6 -0
- data/spec/dummy/app/views/milestones/index.html.erb +25 -0
- data/spec/dummy/app/views/milestones/new.html.erb +5 -0
- data/spec/dummy/app/views/milestones/show.html.erb +4 -0
- data/spec/dummy/app/views/owners/_form.html.erb +17 -0
- data/spec/dummy/app/views/owners/edit.html.erb +6 -0
- data/spec/dummy/app/views/owners/index.html.erb +25 -0
- data/spec/dummy/app/views/owners/new.html.erb +5 -0
- data/spec/dummy/app/views/owners/show.html.erb +4 -0
- data/spec/dummy/app/views/projects/_form.html.erb +17 -0
- data/spec/dummy/app/views/projects/edit.html.erb +6 -0
- data/spec/dummy/app/views/projects/index.html.erb +25 -0
- data/spec/dummy/app/views/projects/new.html.erb +5 -0
- data/spec/dummy/app/views/projects/show.html.erb +4 -0
- data/spec/dummy/app/views/users/_form.html.erb +17 -0
- data/spec/dummy/app/views/users/edit.html.erb +6 -0
- data/spec/dummy/app/views/users/index.html.erb +25 -0
- data/spec/dummy/app/views/users/new.html.erb +5 -0
- data/spec/dummy/app/views/users/show.html.erb +4 -0
- data/spec/dummy/app/views/versions/_form.html.erb +17 -0
- data/spec/dummy/app/views/versions/edit.html.erb +6 -0
- data/spec/dummy/app/views/versions/index.html.erb +25 -0
- data/spec/dummy/app/views/versions/new.html.erb +5 -0
- data/spec/dummy/app/views/versions/show.html.erb +4 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +9 -0
- data/spec/dummy/bin/rake +9 -0
- data/spec/dummy/bin/setup +29 -0
- data/spec/dummy/bin/spring +16 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +26 -0
- data/spec/dummy/config/boot.rb +3 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +41 -0
- data/spec/dummy/config/environments/production.rb +79 -0
- data/spec/dummy/config/environments/test.rb +42 -0
- data/spec/dummy/config/initializers/assets.rb +11 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +76 -0
- data/spec/dummy/config/secrets.yml +22 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/migrate/20110803201325_create_test_bed.rb +98 -0
- data/spec/dummy/db/migrate/20121009161700_add_digitals.rb +24 -0
- data/spec/dummy/db/migrate/20161005123106_create_digitals.rb +8 -0
- data/spec/dummy/db/migrate/20161005123106_create_long_and_complex_table_linked_to_versions.rb +8 -0
- data/spec/dummy/db/migrate/20161005123107_create_loader_releases.rb +8 -0
- data/spec/dummy/db/migrate/20161005123108_create_owners.rb +8 -0
- data/spec/dummy/db/migrate/20161005123109_create_empties.rb +8 -0
- data/spec/dummy/db/migrate/20161005123110_create_projects.rb +8 -0
- data/spec/dummy/db/migrate/20161005123111_create_users.rb +8 -0
- data/spec/dummy/db/migrate/20161005123111_create_versions.rb +8 -0
- data/spec/dummy/db/migrate/20161005123112_create_milestones.rb +8 -0
- data/spec/dummy/db/migrate/20161005123113_create_categories.rb +8 -0
- data/spec/dummy/db/schema.rb +93 -0
- data/spec/dummy/db/seeds.rb +9 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/test.log +69 -0
- data/spec/dummy/public/404.html +67 -0
- data/spec/dummy/public/422.html +67 -0
- data/spec/dummy/public/500.html +66 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/public/robots.txt +5 -0
- data/spec/dummy/sandbox_example.thor +4 -0
- data/spec/dummy/test/controllers/categories_controller_test.rb +49 -0
- data/spec/dummy/test/controllers/digitals_controller_test.rb +49 -0
- data/spec/dummy/test/controllers/empties_controller_test.rb +49 -0
- data/spec/dummy/test/controllers/loader_releases_controller_test.rb +49 -0
- data/spec/dummy/test/controllers/long_and_complex_table_linked_to_versions_controller_test.rb +49 -0
- data/spec/dummy/test/controllers/milestones_controller_test.rb +49 -0
- data/spec/dummy/test/controllers/owners_controller_test.rb +49 -0
- data/spec/dummy/test/controllers/projects_controller_test.rb +49 -0
- data/spec/dummy/test/controllers/users_controller_test.rb +49 -0
- data/spec/dummy/test/controllers/versions_controller_test.rb +49 -0
- data/spec/dummy/test/factories/categories.rb +5 -0
- data/spec/dummy/test/factories/digitals.rb +5 -0
- data/spec/dummy/test/factories/empties.rb +5 -0
- data/spec/dummy/test/factories/loader_releases.rb +5 -0
- data/spec/dummy/test/factories/long_and_complex_table_linked_to_versions.rb +5 -0
- data/spec/dummy/test/factories/milestones.rb +5 -0
- data/spec/dummy/test/factories/owners.rb +5 -0
- data/spec/dummy/test/factories/projects.rb +5 -0
- data/spec/dummy/test/factories/users.rb +5 -0
- data/spec/dummy/test/factories/versions.rb +5 -0
- data/spec/dummy/test/models/category_test.rb +7 -0
- data/spec/dummy/test/models/digital_test.rb +7 -0
- data/spec/dummy/test/models/empty_test.rb +7 -0
- data/spec/dummy/test/models/loader_release_test.rb +7 -0
- data/spec/dummy/test/models/long_and_complex_table_linked_to_version_test.rb +7 -0
- data/spec/dummy/test/models/milestone_test.rb +7 -0
- data/spec/dummy/test/models/owner_test.rb +7 -0
- data/spec/dummy/test/models/project_test.rb +7 -0
- data/spec/dummy/test/models/user_test.rb +7 -0
- data/spec/dummy/test/models/version_test.rb +7 -0
- data/spec/dummy/test/test_helper.rb +10 -0
- data/spec/exporters/csv_exporter_spec.rb +240 -0
- data/spec/exporters/csv_generator_spec.rb +139 -0
- data/spec/exporters/excel_exporter_spec.rb +193 -0
- data/spec/exporters/excel_generator_spec.rb +181 -0
- data/spec/exporters/generator_base_spec.rb +45 -0
- data/spec/factories/categories.rb +7 -0
- data/spec/factories/factories.rb +18 -0
- data/spec/factories/milestone.rb +16 -0
- data/spec/factories/projects.rb +41 -0
- data/spec/fixtures/BadAssociationName.xls +0 -0
- data/spec/fixtures/DemoNegativeTesting.xls +0 -0
- data/spec/fixtures/ProjectConfiguration.yml +18 -0
- data/spec/fixtures/ProjectsMultiCategories.xls +0 -0
- data/spec/fixtures/ProjectsMultiCategoriesHeaderLookup.xls +0 -0
- data/spec/fixtures/ProjectsSingleCategories.xls +0 -0
- data/spec/fixtures/ProjectsSingleCategories.xlsx +0 -0
- data/spec/fixtures/SimpleProjects.xls +0 -0
- data/spec/fixtures/config/database.yml +28 -0
- data/spec/fixtures/csv/BadAssociationName.csv +6 -0
- data/spec/fixtures/csv/DemoNegativeTesting.csv +6 -0
- data/spec/fixtures/csv/ProjectsMultiCategories.csv +5 -0
- data/spec/fixtures/csv/ProjectsMultiCategoriesHeaderLookup.csv +5 -0
- data/spec/fixtures/csv/ProjectsSingleCategories.csv +5 -0
- data/spec/fixtures/csv/SimpleProjects.csv +4 -0
- data/spec/fixtures/db/migrate/20110803201325_create_test_bed.rb +98 -0
- data/spec/fixtures/db/migrate/20121009161700_add_digitals.rb +24 -0
- data/spec/fixtures/db/seeds.rb +9 -0
- data/spec/fixtures/images/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/fixtures/images/DEMO_002_Powerstation.jpeg +0 -0
- data/spec/fixtures/images/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/fixtures/images/DEMO_004_ror_ringer.jpeg +0 -0
- data/spec/fixtures/load_datashift.thor +3 -0
- data/spec/fixtures/models/category.rb +6 -0
- data/spec/fixtures/models/digital.rb +22 -0
- data/spec/fixtures/models/empty.rb +2 -0
- data/spec/fixtures/models/loader_release.rb +10 -0
- data/spec/fixtures/models/long_and_complex_table_linked_to_version.rb +6 -0
- data/spec/fixtures/models/milestone.rb +15 -0
- data/spec/fixtures/models/owner.rb +13 -0
- data/spec/fixtures/models/project.rb +53 -0
- data/spec/fixtures/models/user.rb +5 -0
- data/spec/fixtures/models/version.rb +7 -0
- data/spec/fixtures/results/exp_project_assoc_headers.xls +0 -0
- data/spec/fixtures/results/exp_project_collection_spec.csv +2 -0
- data/spec/fixtures/results/exp_project_export.xls +0 -0
- data/spec/fixtures/results/exp_project_first_export.xls +0 -0
- data/spec/fixtures/results/exp_project_plus_assoc.xls +0 -0
- data/spec/fixtures/results/exp_project_plus_assoc_export_spec.csv +9 -0
- data/spec/fixtures/results/gen_project_plus_assoc_template.xls +0 -0
- data/spec/fixtures/results/gen_project_plus_some_assoc_template.xls +0 -0
- data/spec/fixtures/results/gen_project_template.xls +0 -0
- data/spec/fixtures/results/project_and_assoc_in_hash_export.xls +0 -0
- data/spec/fixtures/results/project_and_assoc_in_json_export.csv +9 -0
- data/spec/fixtures/results/project_and_assoc_in_json_export.xls +0 -0
- data/spec/fixtures/results/project_export_spec_with_custom_delim_,.csv +2 -0
- data/spec/fixtures/results/project_export_spec_with_custom_delim_/302/243.csv +2 -0
- data/spec/fixtures/results/project_export_spec_with_custom_delim_/302/247.csv +2 -0
- data/spec/fixtures/results/project_plus_assoc_template.csv +1 -0
- data/spec/fixtures/results/project_plus_some_assoc_template.csv +1 -0
- data/spec/fixtures/results/project_remove_export_spec.csv +2 -0
- data/spec/fixtures/results/project_template.csv +1 -0
- data/spec/fixtures/results/project_with_methods_export_spec.csv +2 -0
- data/spec/fixtures/results/thor_spec_gen_project.csv +1 -0
- data/spec/fixtures/sandbox_example.thor +4 -0
- data/spec/fixtures/simple_export_spec.xls +0 -0
- data/spec/fixtures/simple_template_spec.xls +0 -0
- data/spec/fixtures/test_model_defs.rb +7 -0
- data/spec/loaders/csv_loader_spec.rb +206 -0
- data/spec/loaders/data_flow_excel_loader_spec.rb +290 -0
- data/spec/loaders/excel_loader_failures_spec.rb +67 -0
- data/spec/loaders/excel_loader_spec.rb +294 -0
- data/spec/loaders/loader_base_spec.rb +29 -0
- data/spec/loaders/paperclip_loader_spec.rb +106 -0
- data/spec/log/datashift.log +14930 -0
- data/spec/private/digitals/1/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/private/digitals/2/DEMO_002_Powerstation.jpeg +0 -0
- data/spec/private/digitals/3/DEMO_004_ror_ringer.jpeg +0 -0
- data/spec/private/digitals/4/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/spec_helper.rb +26 -230
- data/spec/support/clear_and_manage_contexts.rb +25 -0
- data/spec/support/database_cleaner.rb +32 -0
- data/spec/support/datashift_test_helpers.rb +153 -0
- data/spec/support/files_paths_helper.rb +13 -0
- data/spec/support/fixtures/results/mapping_template.yaml +15 -0
- data/spec/support/sandbox.rb +136 -0
- metadata +804 -85
- data/README.markdown +0 -274
- data/README.rdoc +0 -19
- data/VERSION +0 -1
- data/datashift.gemspec +0 -48
- data/lib/applications/jruby/old_pre_proxy_jexcel_file.rb +0 -437
- data/lib/datashift/data_transforms.rb +0 -83
- data/lib/datashift/mapping_file_definitions.rb +0 -88
- data/lib/datashift/mapping_service.rb +0 -91
- data/lib/datashift/method_detail.rb +0 -165
- data/lib/datashift/method_details_manager.rb +0 -95
- data/lib/datashift/method_dictionary.rb +0 -281
- data/lib/datashift/method_mapper.rb +0 -174
- data/lib/datashift/thor_base.rb +0 -38
- data/lib/generators/mapping_generator.rb +0 -112
- data/lib/helpers/core_ext/csv_file.rb +0 -33
- data/lib/helpers/core_ext/to_b.rb +0 -24
- data/lib/loaders/reporter.rb +0 -58
- data/lib/thor/export.thor +0 -175
- data/lib/thor/generate.thor +0 -191
- data/lib/thor/import.thor +0 -110
- data/lib/thor/mapping.thor +0 -65
- data/lib/thor/tools.thor +0 -84
- data/spec/Gemfile +0 -31
- data/spec/Gemfile.lock +0 -134
- data/spec/csv_exporter_spec.rb +0 -144
- data/spec/csv_generator_spec.rb +0 -159
- data/spec/csv_loader_spec.rb +0 -212
- data/spec/datashift_spec.rb +0 -55
- data/spec/excel_exporter_spec.rb +0 -199
- data/spec/excel_generator_spec.rb +0 -203
- data/spec/excel_loader_spec.rb +0 -237
- data/spec/excel_spec.rb +0 -203
- data/spec/loader_base_spec.rb +0 -166
- data/spec/mapping_spec.rb +0 -117
- data/spec/method_dictionary_spec.rb +0 -300
- data/spec/method_mapper_spec.rb +0 -100
- data/spec/model_mapper_spec.rb +0 -41
- data/spec/paperclip_loader_spec.rb +0 -92
- data/spec/populator_spec.rb +0 -128
- data/spec/thor_spec.rb +0 -90
- data/tasks/file_tasks.rake +0 -37
- data/tasks/word_to_seedfu.rake +0 -167
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Copyright:: (c) Autotelik Media Ltd 2016
|
|
2
|
+
# Author :: Tom Statter
|
|
3
|
+
# Date :: Feb 2016
|
|
4
|
+
# License:: MIT
|
|
5
|
+
#
|
|
6
|
+
# Details:: Class to manage the removal of unwanted columns or data
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
module DataShift
|
|
10
|
+
|
|
11
|
+
module Transformation
|
|
12
|
+
|
|
13
|
+
class Remove
|
|
14
|
+
|
|
15
|
+
def remove_list
|
|
16
|
+
@remove_list ||= DataShift::Configuration.call.prep_remove_list
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def association?(mm)
|
|
20
|
+
return false unless(mm.association_type?)
|
|
21
|
+
DataShift::Configuration.call.exclude_associations.include?(mm.operator)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Specify columns to remove via DataShift::Exporters::Configuration
|
|
25
|
+
#
|
|
26
|
+
def unwanted_columns( columns )
|
|
27
|
+
columns.delete_if { |r| remove_list.include?( r.to_sym ) } unless remove_list.empty?
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def unwanted_headers( headers )
|
|
31
|
+
headers.delete_if { |r| remove_list.include?( r.source.to_sym ) } unless remove_list.empty?
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Specify columns to remove via DataShift::Exporters::Configuration
|
|
35
|
+
#
|
|
36
|
+
def unwanted_model_methods( model_methods )
|
|
37
|
+
model_methods.delete_if { |r| remove_list.include?( r.operator.to_sym ) } unless remove_list.empty?
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Copyright:: (c) Autotelik Media Ltd 2015
|
|
2
|
+
# Author :: Tom Statter
|
|
3
|
+
# Date :: Feb 2015
|
|
4
|
+
# License:: MIT
|
|
5
|
+
#
|
|
6
|
+
# Details:: Read mappings and provide cache type services for source=>destination mappings
|
|
7
|
+
#
|
|
8
|
+
require 'erubis'
|
|
9
|
+
|
|
10
|
+
module DataShift
|
|
11
|
+
|
|
12
|
+
module Exporters
|
|
13
|
+
|
|
14
|
+
class Configuration < DataShift::Configuration
|
|
15
|
+
|
|
16
|
+
# @param [Boolean] Stop processing and abort if a row fails to export
|
|
17
|
+
# Default is false
|
|
18
|
+
# @return [Boolean]
|
|
19
|
+
#
|
|
20
|
+
attr_accessor :abort_on_failure
|
|
21
|
+
|
|
22
|
+
# @param [Char] Char to use as the column delimter for csv format
|
|
23
|
+
# @return [Char]
|
|
24
|
+
#
|
|
25
|
+
attr_accessor :csv_delimiter
|
|
26
|
+
|
|
27
|
+
# @param [Boolean] Export association data in single column in JSON format
|
|
28
|
+
# @return [Boolean]
|
|
29
|
+
#
|
|
30
|
+
attr_accessor :json
|
|
31
|
+
|
|
32
|
+
# @param [String] Name for worksheet, otherwise uses Class name
|
|
33
|
+
# @return [String]
|
|
34
|
+
#
|
|
35
|
+
attr_accessor :sheet_name
|
|
36
|
+
|
|
37
|
+
def initialize
|
|
38
|
+
super
|
|
39
|
+
@abort_on_failure = false
|
|
40
|
+
@csv_delimiter = ','
|
|
41
|
+
@json = false
|
|
42
|
+
@sheet_name = ''
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# @return [DataShift::Exporters::Configuration] DataShift's current configuration
|
|
46
|
+
def self.call
|
|
47
|
+
@configuration ||= Exporters::Configuration.new
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def self.reset
|
|
51
|
+
@configuration = Exporters::Configuration.new
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Set DataShift's configure
|
|
55
|
+
# @param config [DataShift::Exporters::Configuration]
|
|
56
|
+
class << self
|
|
57
|
+
attr_writer :configuration
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Modify DataShift's current Export configuration
|
|
61
|
+
# ```
|
|
62
|
+
# DataShift::Exporters::Configuration.configure do |config|
|
|
63
|
+
# config.abort_on_failure = false
|
|
64
|
+
# end
|
|
65
|
+
# ```
|
|
66
|
+
def self.configure
|
|
67
|
+
yield call
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Modify DataShift's current Export configuration from an options hash
|
|
71
|
+
|
|
72
|
+
def self.from_hash( options )
|
|
73
|
+
|
|
74
|
+
DataShift::Configuration.from_hash(options)
|
|
75
|
+
|
|
76
|
+
DataShift::Exporters::Configuration.configure do |config|
|
|
77
|
+
config.csv_delimiter = options[:csv_delimiter] if(options[:csv_delimiter])
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
end
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
# Copyright:: (c) Autotelik Media Ltd
|
|
1
|
+
# Copyright:: (c) Autotelik Media Ltd 2015
|
|
2
2
|
# Author :: Tom Statter
|
|
3
|
-
# Date :: Aug 2011
|
|
4
3
|
# License:: MIT
|
|
5
4
|
#
|
|
6
5
|
# Details:: Export a model to CSV
|
|
7
6
|
#
|
|
8
7
|
#
|
|
9
|
-
require 'exporter_base'
|
|
10
|
-
require 'csv_file'
|
|
11
8
|
|
|
12
9
|
module DataShift
|
|
13
10
|
|
|
@@ -16,92 +13,97 @@ module DataShift
|
|
|
16
13
|
include DataShift::Logging
|
|
17
14
|
include DataShift::ColumnPacker
|
|
18
15
|
|
|
19
|
-
def initialize
|
|
20
|
-
super
|
|
16
|
+
def initialize
|
|
17
|
+
super
|
|
18
|
+
|
|
19
|
+
@csv_delimiter = ','
|
|
21
20
|
end
|
|
22
21
|
|
|
23
22
|
# Create CSV file from set of ActiveRecord objects
|
|
23
|
+
#
|
|
24
24
|
# Options :
|
|
25
|
-
# => :filename
|
|
26
|
-
# => :text_delim => Char to use to delim columns, useful when data contain embedded ','
|
|
27
|
-
# => ::methods => List of methods to additionally call on each record
|
|
28
25
|
#
|
|
29
|
-
|
|
26
|
+
# :csv_delim => Char to use to delim columns, useful when data contain embedded ','
|
|
27
|
+
#
|
|
28
|
+
def export(file_name, export_records, options = {})
|
|
29
|
+
|
|
30
|
+
@file_name = file_name
|
|
30
31
|
|
|
31
32
|
records = [*export_records]
|
|
32
33
|
|
|
33
|
-
unless
|
|
34
|
-
logger.warn(
|
|
34
|
+
unless records && !records.empty?
|
|
35
|
+
logger.warn('No objects supplied for export')
|
|
35
36
|
return
|
|
36
37
|
end
|
|
37
38
|
|
|
38
39
|
first = records[0]
|
|
39
40
|
|
|
40
|
-
raise ArgumentError.new('Please supply set of ActiveRecord objects to export') unless
|
|
41
|
+
raise ArgumentError.new('Please supply set of ActiveRecord objects to export') unless first.is_a?(ActiveRecord::Base)
|
|
42
|
+
|
|
43
|
+
@csv_delimiter = options[:csv_delim] if options[:csv_delim]
|
|
41
44
|
|
|
42
|
-
|
|
45
|
+
headers = Headers.klass_to_headers(first.class)
|
|
43
46
|
|
|
44
|
-
|
|
47
|
+
logger.debug "Writing out CSV Export. Columns delimited by [#{csv_delimiter}]"
|
|
45
48
|
|
|
46
|
-
|
|
49
|
+
remove_list = DataShift::Transformation::Remove.new.remove_list
|
|
50
|
+
|
|
51
|
+
CSV.open(file_name, 'w', col_sep: csv_delimiter ) do |csv|
|
|
52
|
+
csv << headers.sources
|
|
47
53
|
|
|
48
54
|
records.each do |r|
|
|
49
|
-
next unless
|
|
50
|
-
csv.
|
|
55
|
+
next unless r.is_a?(ActiveRecord::Base)
|
|
56
|
+
csv.ar_to_row(r, remove_list)
|
|
51
57
|
end
|
|
52
58
|
end
|
|
59
|
+
|
|
60
|
+
logger.info "CSV export completed for #{records.size} records"
|
|
53
61
|
end
|
|
54
62
|
|
|
55
|
-
# Create
|
|
56
|
-
#
|
|
57
|
-
#
|
|
63
|
+
# Create CSV file from list of ActiveRecord objects
|
|
64
|
+
#
|
|
65
|
+
# Options :
|
|
58
66
|
#
|
|
59
|
-
|
|
67
|
+
# :csv_delim => Char to use to delim columns, useful when data contain embedded ','
|
|
68
|
+
#
|
|
69
|
+
def export_with_associations(file_name, klass, records, options = {})
|
|
60
70
|
|
|
61
|
-
|
|
71
|
+
state = DataShift::Configuration.call.with
|
|
62
72
|
|
|
63
|
-
|
|
73
|
+
DataShift::Configuration.call.with = :all
|
|
64
74
|
|
|
65
|
-
|
|
75
|
+
@file_name = file_name
|
|
66
76
|
|
|
67
|
-
|
|
77
|
+
@csv_delimiter = options[:csv_delim] if(options[:csv_delim])
|
|
68
78
|
|
|
69
|
-
|
|
70
|
-
# and create headers, then for each record call those operators
|
|
71
|
-
operators = options[:with] || MethodDetail::supported_types_enum
|
|
79
|
+
headers = Headers.klass_to_headers(klass)
|
|
72
80
|
|
|
73
|
-
|
|
81
|
+
schema = DataFlowSchema.new
|
|
74
82
|
|
|
75
|
-
|
|
83
|
+
model_methods = schema.klass_to_model_methods( klass )
|
|
76
84
|
|
|
77
|
-
|
|
85
|
+
logger.debug "Writing out CSV Export for #{klass} with Associations. Columns delimited by [#{csv_delimiter}]"
|
|
78
86
|
|
|
79
|
-
|
|
87
|
+
CSV.open(file_name, 'w', col_sep: csv_delimiter ) do |csv|
|
|
88
|
+
csv << headers.sources
|
|
80
89
|
|
|
90
|
+
records.each do |record|
|
|
81
91
|
row = []
|
|
82
92
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
operators_for_type.each do |md|
|
|
90
|
-
|
|
91
|
-
next if(only && !only.include?( md.name.to_sym ) )
|
|
92
|
-
|
|
93
|
-
if(MethodDetail.is_association_type?(op_type))
|
|
94
|
-
row << record_to_column( obj.send( md.operator )) # pack association into single column
|
|
95
|
-
else
|
|
96
|
-
row << escape_for_csv( obj.send( md.operator ) )
|
|
97
|
-
end
|
|
98
|
-
end
|
|
93
|
+
model_methods.each do |model_method|
|
|
94
|
+
row << if model_method.association_type?
|
|
95
|
+
record_to_column( record.send(model_method.operator) )
|
|
96
|
+
else
|
|
97
|
+
escape_for_csv( record.send(model_method.operator) )
|
|
98
|
+
end
|
|
99
99
|
end
|
|
100
|
-
|
|
101
|
-
csv << row # next record
|
|
100
|
+
csv.add_row(row)
|
|
102
101
|
end
|
|
103
102
|
end
|
|
104
103
|
|
|
105
|
-
|
|
104
|
+
ensure
|
|
105
|
+
DataShift::Configuration.call.with = state
|
|
106
|
+
end # end write file
|
|
107
|
+
|
|
106
108
|
end
|
|
107
109
|
end
|
|
@@ -1,130 +1,149 @@
|
|
|
1
|
-
# Copyright:: (c) Autotelik Media Ltd
|
|
1
|
+
# Copyright:: (c) Autotelik Media Ltd 2016
|
|
2
2
|
# Author :: Tom Statter
|
|
3
|
-
# Date ::
|
|
3
|
+
# Date :: Mar 2016
|
|
4
4
|
# License:: MIT
|
|
5
5
|
#
|
|
6
6
|
# Details:: Export a model to Excel '97(-2007) file format.
|
|
7
7
|
#
|
|
8
|
-
#
|
|
8
|
+
# TODO: Can we switch between .xls and XSSF (POI implementation of Excel 2007 OOXML (.xlsx) file format.)
|
|
9
9
|
#
|
|
10
10
|
#
|
|
11
11
|
module DataShift
|
|
12
12
|
|
|
13
|
-
require 'exporter_base'
|
|
14
|
-
|
|
15
|
-
require 'excel'
|
|
16
|
-
|
|
17
13
|
class ExcelExporter < ExporterBase
|
|
18
14
|
|
|
19
15
|
include DataShift::Logging
|
|
20
16
|
include DataShift::ColumnPacker
|
|
21
17
|
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
include DataShift::ExcelBase
|
|
19
|
+
|
|
20
|
+
# Optional, otherwise uses the standard collection of Model Methods for supplied klass
|
|
21
|
+
attr_accessor :data_flow_schema
|
|
22
|
+
|
|
23
|
+
def initialize
|
|
24
|
+
super
|
|
25
|
+
|
|
26
|
+
@data_flow_schema = nil
|
|
24
27
|
end
|
|
25
28
|
|
|
26
29
|
# Create an Excel file from list of ActiveRecord objects
|
|
27
|
-
def export(export_records, options = {})
|
|
30
|
+
def export(file_name, export_records, options = {})
|
|
31
|
+
|
|
32
|
+
@file_name = file_name
|
|
28
33
|
|
|
29
34
|
records = [*export_records]
|
|
30
35
|
|
|
31
|
-
|
|
32
|
-
logger.warn(
|
|
36
|
+
if(records.nil? || records.empty?)
|
|
37
|
+
logger.warn('Excel Export - No objects supplied for export - no file written')
|
|
33
38
|
return
|
|
34
39
|
end
|
|
35
40
|
|
|
36
41
|
first = records[0]
|
|
37
42
|
|
|
38
|
-
|
|
43
|
+
raise(ArgumentError, 'Please supply set of ActiveRecord objects to export') unless first.is_a?(ActiveRecord::Base)
|
|
39
44
|
|
|
40
|
-
|
|
45
|
+
klass = first.class
|
|
41
46
|
|
|
47
|
+
excel = start_excel(klass, options)
|
|
42
48
|
|
|
43
|
-
|
|
49
|
+
prepare_data_flow_schema(klass)
|
|
44
50
|
|
|
45
|
-
|
|
51
|
+
export_headers(klass)
|
|
46
52
|
|
|
47
|
-
|
|
48
|
-
excel.create_worksheet( :name => options[:sheet_name] )
|
|
49
|
-
else
|
|
50
|
-
excel.create_worksheet( :name => records.first.class.name )
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
excel.ar_to_headers(records)
|
|
53
|
+
logger.info("Exporting #{records.size} #{klass} to Excel")
|
|
54
54
|
|
|
55
55
|
excel.ar_to_xls(records)
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
logger.info("Writing Excel to file [#{file_name}]")
|
|
58
|
+
|
|
59
|
+
excel.write( file_name )
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def export_headers(klass)
|
|
63
|
+
|
|
64
|
+
headers = if(data_flow_schema)
|
|
65
|
+
data_flow_schema.sources
|
|
66
|
+
else
|
|
67
|
+
Headers.klass_to_headers(klass)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
excel.set_headers( headers )
|
|
71
|
+
|
|
72
|
+
logger.info("Wrote headers for #{klass} to Excel")
|
|
73
|
+
headers
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def prepare_data_flow_schema(klass)
|
|
77
|
+
@data_flow_schema = DataShift::DataFlowSchema.new
|
|
78
|
+
@data_flow_schema.prepare_from_klass( klass )
|
|
79
|
+
|
|
80
|
+
data_flow_schema
|
|
58
81
|
end
|
|
59
82
|
|
|
60
83
|
# Create an Excel file from list of ActiveRecord objects, includes relationships
|
|
61
84
|
#
|
|
62
|
-
#
|
|
85
|
+
# The Associations/relationships to include are driven by Configuration Options
|
|
63
86
|
#
|
|
64
|
-
#
|
|
65
|
-
# with: Specify which association types to export :with
|
|
66
|
-
# Possible values are : [:assignment, :belongs_to, :has_one, :has_many]
|
|
67
|
-
# with_only Specify (as symbols) columns for association types to export
|
|
68
|
-
# sheet_name Else uses Class name
|
|
69
|
-
# json: Export association data in single column in JSON format
|
|
87
|
+
# See - lib/exporters/configuration.rb
|
|
70
88
|
#
|
|
71
|
-
def export_with_associations(klass, records, options = {})
|
|
72
|
-
|
|
73
|
-
records = [*records]
|
|
89
|
+
def export_with_associations(file_name, klass, records, options = {})
|
|
74
90
|
|
|
75
|
-
|
|
91
|
+
state = DataShift::Configuration.call.with
|
|
76
92
|
|
|
77
|
-
|
|
93
|
+
DataShift::Configuration.call.with = :all
|
|
78
94
|
|
|
79
|
-
|
|
80
|
-
excel.create_worksheet( :name => options[:sheet_name] )
|
|
81
|
-
else
|
|
82
|
-
excel.create_worksheet( :name => records.first.class.name )
|
|
83
|
-
end
|
|
95
|
+
@file_name = file_name
|
|
84
96
|
|
|
85
|
-
|
|
97
|
+
excel = start_excel(klass, options)
|
|
86
98
|
|
|
87
|
-
|
|
99
|
+
logger.info("Processing [#{records.size}] #{klass} records to Excel")
|
|
88
100
|
|
|
89
|
-
|
|
90
|
-
# and create headers, then for each record call those operators
|
|
91
|
-
operators = options[:with] || MethodDetail::supported_types_enum
|
|
101
|
+
prepare_data_flow_schema(klass)
|
|
92
102
|
|
|
93
|
-
|
|
103
|
+
export_headers(klass)
|
|
94
104
|
|
|
95
|
-
|
|
105
|
+
nodes = data_flow_schema.nodes
|
|
96
106
|
|
|
97
107
|
row = 1
|
|
98
108
|
|
|
99
109
|
records.each do |obj|
|
|
100
|
-
|
|
101
110
|
column = 0
|
|
102
111
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
operators_for_type = details_mgr.get_list(op_type)
|
|
112
|
+
nodes.each do |node|
|
|
106
113
|
|
|
107
|
-
|
|
114
|
+
logger.info("Send to Excel: #{node.inspect}")
|
|
108
115
|
|
|
109
|
-
|
|
116
|
+
model_method = node.model_method
|
|
110
117
|
|
|
111
|
-
|
|
118
|
+
logger.info("Send to Excel: #{model_method.pp}")
|
|
112
119
|
|
|
113
|
-
|
|
114
|
-
|
|
120
|
+
begin
|
|
121
|
+
# pack association instances into single column
|
|
122
|
+
if model_method.association_type?
|
|
123
|
+
logger.info("Processing #{model_method.inspect} associations")
|
|
124
|
+
excel[row, column] = record_to_column( obj.send( model_method.operator ), configuration.json )
|
|
115
125
|
else
|
|
116
|
-
excel[row, column] = obj.send(
|
|
126
|
+
excel[row, column] = obj.send( model_method.operator )
|
|
117
127
|
end
|
|
118
|
-
|
|
128
|
+
rescue => x
|
|
129
|
+
logger.error("Failed to write #{model_method.inspect} to Excel")
|
|
130
|
+
logger.error(x.inspect)
|
|
119
131
|
end
|
|
132
|
+
|
|
133
|
+
column += 1
|
|
120
134
|
end
|
|
121
135
|
|
|
122
136
|
row += 1
|
|
123
137
|
end
|
|
124
138
|
|
|
125
|
-
|
|
139
|
+
logger.info("Writing Excel to file [#{file_name}]")
|
|
140
|
+
excel.write( file_name )
|
|
141
|
+
|
|
142
|
+
ensure
|
|
143
|
+
DataShift::Configuration.call.with = state
|
|
126
144
|
|
|
127
145
|
end
|
|
146
|
+
|
|
128
147
|
end # ExcelGenerator
|
|
129
148
|
|
|
130
|
-
end # DataShift
|
|
149
|
+
end # DataShift
|