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
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
# Copyright:: (c) Autotelik Media Ltd 2011
|
|
2
|
+
# Author :: Tom Statter
|
|
3
|
+
# Date :: Jan 2015
|
|
4
|
+
# License:: MIT
|
|
5
|
+
#
|
|
6
|
+
# Details:: Specs for Binder aspect of Active Record Loader
|
|
7
|
+
# Binder provides the bridge between 'strings' e.g column headings
|
|
8
|
+
# and a classes different types of assignment operators/associations
|
|
9
|
+
#
|
|
10
|
+
require File.join(File.dirname(__FILE__), '/../spec_helper')
|
|
11
|
+
|
|
12
|
+
module DataShift
|
|
13
|
+
|
|
14
|
+
describe Binder do
|
|
15
|
+
include_context 'ClearThenManageProject'
|
|
16
|
+
|
|
17
|
+
let(:binder) { Binder.new }
|
|
18
|
+
|
|
19
|
+
context 'errors binding headers' do
|
|
20
|
+
let(:headers) { [:value_as_string, :owner, :bad_no_such_column, :value_as_boolean, :value_as_double, :more_rubbish_as_nil] }
|
|
21
|
+
|
|
22
|
+
before(:each) do
|
|
23
|
+
@bindings = binder.map_inbound_headers( Project, headers )
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
let(:bindings) { @bindings }
|
|
27
|
+
|
|
28
|
+
it 'uses NoMethodBinding object methods when no such operator' do
|
|
29
|
+
expect(bindings.size).to eq 6
|
|
30
|
+
|
|
31
|
+
expect(bindings[2]).to be_a NoMethodBinding
|
|
32
|
+
expect(bindings[5]).to be_a NoMethodBinding
|
|
33
|
+
|
|
34
|
+
expect(bindings[0]).to be_a MethodBinding
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'should populate missing_bindings when no such operator' do
|
|
38
|
+
expect(binder.missing_bindings.size).to eq 2
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'should indicate when bindings missing' do
|
|
42
|
+
expect(binder.missing_bindings?).to eq true
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'should indicate names of missing bindings' do
|
|
46
|
+
missing = binder.headers_missing_bindings
|
|
47
|
+
|
|
48
|
+
expect(missing.size).to eq 2
|
|
49
|
+
|
|
50
|
+
expect(missing[0]).to eq 'bad_no_such_column'
|
|
51
|
+
expect(missing[1]).to eq 'more_rubbish_as_nil'
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it 'should indicate index of missing bindings ' do
|
|
55
|
+
missing = binder.indexes_missing_bindings
|
|
56
|
+
|
|
57
|
+
expect(missing[0]).to eq 2
|
|
58
|
+
expect(missing[1]).to eq 5
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it 'uses NoMethodBinding object methods when operator has no such lookup field', fail: true do
|
|
62
|
+
# Owner has_many :digitals which has field attachment_file_name
|
|
63
|
+
headers = ['digitals:attachment_file_name',
|
|
64
|
+
'Digitals:nonsense_lookup_field',
|
|
65
|
+
'Digitals:nonsense:with a value',
|
|
66
|
+
'Digitals:nonsense:with a value:and random data']
|
|
67
|
+
|
|
68
|
+
binder.map_inbound_headers( Owner, headers)
|
|
69
|
+
|
|
70
|
+
expect(binder.bindings.size).to eq 4
|
|
71
|
+
expect(binder.missing_bindings.size).to eq 3
|
|
72
|
+
|
|
73
|
+
expect(binder.missing_bindings?).to eq true
|
|
74
|
+
expect(binder.missing_bindings[0].reason).to include 'Field [nonsense_lookup_field] Not Found'
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
let (:headers) { [:value_as_string, :owner, :value_as_boolean, :value_as_double] }
|
|
79
|
+
|
|
80
|
+
it 'should find a set of methods based on a list of column symbols' do
|
|
81
|
+
bindings = binder.map_inbound_headers( Project, headers )
|
|
82
|
+
expect(bindings.size).to eq 4
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it 'should map a list of column names to a set of method details' do
|
|
86
|
+
headers = %w(value_as_double value_as_string bad_no_such_column value_as_boolean)
|
|
87
|
+
|
|
88
|
+
bindings = binder.map_inbound_headers( Project, headers )
|
|
89
|
+
|
|
90
|
+
expect(bindings.size).to eq 4
|
|
91
|
+
|
|
92
|
+
expect(bindings[2]).to be_a NoMethodBinding
|
|
93
|
+
|
|
94
|
+
expect(bindings[0]).to be_a MethodBinding
|
|
95
|
+
expect(bindings.last).to be_a MethodBinding
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it 'should populate a method binding instance based on column and database info' do
|
|
99
|
+
headers = [:value_as_string, :owner, :value_as_boolean, :value_as_double]
|
|
100
|
+
|
|
101
|
+
bindings = binder.map_inbound_headers( Project, headers )
|
|
102
|
+
|
|
103
|
+
expect(bindings.size).to eq 4
|
|
104
|
+
|
|
105
|
+
expect(bindings[0]).to be_a MethodBinding
|
|
106
|
+
|
|
107
|
+
headers.each_with_index do |_c, i|
|
|
108
|
+
expect(bindings[i].inbound_index).to eq i
|
|
109
|
+
expect(bindings[i].inbound_column.index).to eq i
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
it 'should map between user name and domain model attribute' do
|
|
114
|
+
headers = ['Value as string', :value_as_string, 'value_as boolean', 'Value_As_Double']
|
|
115
|
+
|
|
116
|
+
operators = %w(value_as_string value_as_string value_as_boolean value_as_double)
|
|
117
|
+
|
|
118
|
+
bindings = binder.map_inbound_headers( Project, headers )
|
|
119
|
+
|
|
120
|
+
expect(bindings.size).to eq headers.size
|
|
121
|
+
|
|
122
|
+
headers.each_with_index do |c, i|
|
|
123
|
+
expect(bindings[i].valid?).to eq true
|
|
124
|
+
expect(bindings[i].inbound_index).to eq i
|
|
125
|
+
expect(bindings[i].inbound_name).to eq c.to_s
|
|
126
|
+
expect(bindings[i].operator).to eq operators[i]
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
it 'should map between user name and domain model has_one association' do
|
|
131
|
+
# Project has_one :owner
|
|
132
|
+
headers = ['owner', 'Owner', :owner]
|
|
133
|
+
|
|
134
|
+
operators = %w(owner owner owner)
|
|
135
|
+
|
|
136
|
+
bindings = binder.map_inbound_headers( Project, headers )
|
|
137
|
+
|
|
138
|
+
expect(bindings.size).to eq headers.size
|
|
139
|
+
|
|
140
|
+
headers.each_with_index do |c, i|
|
|
141
|
+
expect(bindings[i].valid?).to eq true
|
|
142
|
+
expect(bindings[i].inbound_index).to eq i
|
|
143
|
+
expect(bindings[i].inbound_name).to eq c.to_s
|
|
144
|
+
expect(bindings[i].operator).to eq operators[i]
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
it 'should map between user name and domain model has_many association' do
|
|
149
|
+
# Project has_many :loader_releases
|
|
150
|
+
headers = ['loader_releases', 'Loader Releases', :loader_releases]
|
|
151
|
+
|
|
152
|
+
operators = %w(loader_releases loader_releases loader_releases)
|
|
153
|
+
|
|
154
|
+
bindings = binder.map_inbound_headers( Project, headers )
|
|
155
|
+
|
|
156
|
+
expect(bindings.size).to eq headers.size
|
|
157
|
+
|
|
158
|
+
headers.each_with_index do |c, i|
|
|
159
|
+
expect(bindings[i].valid?).to eq true
|
|
160
|
+
expect(bindings[i].inbound_index).to eq i
|
|
161
|
+
expect(bindings[i].inbound_name).to eq c.to_s
|
|
162
|
+
expect(bindings[i].operator).to eq operators[i]
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
it 'should parse header for where fields and make available through inbound_column' do
|
|
167
|
+
# Owner has a name and belongs_to Project which has a title i.e lookup on title
|
|
168
|
+
headers = ['project:title']
|
|
169
|
+
|
|
170
|
+
bindings = binder.map_inbound_headers( Owner, headers )
|
|
171
|
+
|
|
172
|
+
expect(bindings.size).to eq headers.size
|
|
173
|
+
|
|
174
|
+
headers.each_with_index do |_c, i|
|
|
175
|
+
expect(bindings[i].valid?).to eq true
|
|
176
|
+
expect(bindings[i].inbound_column).to be_a InboundData::Column
|
|
177
|
+
expect(bindings[i].inbound_column.lookup_list).to be_a Array
|
|
178
|
+
expect(bindings[i].inbound_column.lookup_list.size).to eq 1
|
|
179
|
+
expect(bindings[i].inbound_column.lookup_list[0]).to be_a InboundData::LookupSupport
|
|
180
|
+
expect(bindings[i].inbound_column.lookups.first).to be_a InboundData::LookupSupport
|
|
181
|
+
expect(bindings[i].inbound_column.lookups.first).to eq bindings[i].inbound_column.lookup_list[0]
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
it 'should parse header for where clause field' do
|
|
186
|
+
# Owner has a name and belongs_to Project which has a title i.e lookup on title
|
|
187
|
+
headers = ['project:title', 'Project:title']
|
|
188
|
+
|
|
189
|
+
bindings = binder.map_inbound_headers( Owner, headers )
|
|
190
|
+
|
|
191
|
+
expect(bindings.size).to eq headers.size
|
|
192
|
+
|
|
193
|
+
headers.each_with_index do |_c, i|
|
|
194
|
+
first_lookup = bindings[i].inbound_column.lookups.first
|
|
195
|
+
expect(first_lookup.klass).to eq Project
|
|
196
|
+
expect(first_lookup.field).to eq 'title'
|
|
197
|
+
expect(first_lookup.where_value).to eq nil
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
it 'should parse header for where clause field & value belongs_to' do
|
|
202
|
+
# Owner has a name and belongs_to Project
|
|
203
|
+
headers = ['project:title:my first project', 'Project:title:my first project']
|
|
204
|
+
|
|
205
|
+
bindings = binder.map_inbound_headers( Owner, headers )
|
|
206
|
+
|
|
207
|
+
expect(bindings.size).to eq headers.size
|
|
208
|
+
|
|
209
|
+
headers.each_with_index do |_c, i|
|
|
210
|
+
first_lookup = bindings[i].inbound_column.lookups.first
|
|
211
|
+
expect(first_lookup.klass).to eq Project
|
|
212
|
+
expect(first_lookup.field).to eq 'title'
|
|
213
|
+
expect(first_lookup.where_value).to eq 'my first project'
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
it 'should parse header for where clause field & value has_one' do
|
|
218
|
+
# class Version < ActiveRecord::Base has_many :releases
|
|
219
|
+
# has_one :long_and_complex_table_linked_to_version
|
|
220
|
+
headers = ['long_and_complex_table_linked_to_version:price:10.2', 'Long_And Complex Table_linked_to_version:price:10.2']
|
|
221
|
+
|
|
222
|
+
bindings = binder.map_inbound_headers( Version, headers )
|
|
223
|
+
|
|
224
|
+
expect(bindings.size).to eq headers.size
|
|
225
|
+
|
|
226
|
+
headers.each_with_index do |_c, i|
|
|
227
|
+
first_lookup = bindings[i].inbound_column.lookups.first
|
|
228
|
+
expect(first_lookup.klass).to eq LongAndComplexTableLinkedToVersion
|
|
229
|
+
expect(first_lookup.field).to eq 'price'
|
|
230
|
+
expect(first_lookup.where_value).to eq '10.2'
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
it 'should parse header for where clause field & value & global data has_many' do
|
|
235
|
+
# Owner has_many :digitals which has field attachment_file_name
|
|
236
|
+
headers = ['digitals:attachment_file_name:my pdf:random data for a loader',
|
|
237
|
+
'Digitals:attachment_file_name:my pdf:random data for a loader']
|
|
238
|
+
|
|
239
|
+
bindings = binder.map_inbound_headers( Owner, headers )
|
|
240
|
+
|
|
241
|
+
expect(bindings.size).to eq headers.size
|
|
242
|
+
|
|
243
|
+
headers.each_with_index do |_c, i|
|
|
244
|
+
first_lookup = bindings[i].inbound_column.lookups.first
|
|
245
|
+
expect(first_lookup.klass).to eq Digital
|
|
246
|
+
expect(first_lookup.field).to eq 'attachment_file_name'
|
|
247
|
+
expect(first_lookup.where_value).to eq 'my pdf'
|
|
248
|
+
expect(bindings[i].inbound_column.data).to be_a Array
|
|
249
|
+
expect(bindings[i].inbound_column.data).to include 'random data for a loader'
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
it 'should enable us to sort bindings into arbitrary processing order' do
|
|
254
|
+
headers = ['Value as string', :value_as_string, 'value_as boolean', 'Value_As_Double']
|
|
255
|
+
|
|
256
|
+
operators = %w(value_as_string value_as_string value_as_boolean value_as_double)
|
|
257
|
+
|
|
258
|
+
bindings = binder.map_inbound_headers( Project, headers )
|
|
259
|
+
|
|
260
|
+
pending 'sorting methods'
|
|
261
|
+
|
|
262
|
+
bindings.sort
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
end
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# Copyright:: (c) Autotelik Media Ltd 2016
|
|
2
|
+
# Author :: Tom Statter
|
|
3
|
+
# License:: MIT
|
|
4
|
+
#
|
|
5
|
+
require File.join(File.dirname(__FILE__), '/../spec_helper')
|
|
6
|
+
|
|
7
|
+
module DataShift
|
|
8
|
+
|
|
9
|
+
describe DataShift::ConfigGenerator do
|
|
10
|
+
include_context 'ClearAllCatalogues'
|
|
11
|
+
|
|
12
|
+
before(:each) do
|
|
13
|
+
results_clear
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
let(:config_generator) { DataShift::ConfigGenerator.new }
|
|
17
|
+
|
|
18
|
+
let(:expected_config_file) { result_file('mapping_service_project.yaml') }
|
|
19
|
+
|
|
20
|
+
let(:generate_config_file) { config_generator.write_import(expected_config_file, Project) }
|
|
21
|
+
|
|
22
|
+
context 'erb generation' do
|
|
23
|
+
|
|
24
|
+
context 'basic templates without a class' do
|
|
25
|
+
it 'should generate an standard ERB template containing default mappings & config' do
|
|
26
|
+
result = config_generator.create_import_config Project
|
|
27
|
+
|
|
28
|
+
expect(result).to be_a String
|
|
29
|
+
expect(result).to include 'Project:'
|
|
30
|
+
expect(result).to include 'nodes:'
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'should have a consistent starting title' do
|
|
34
|
+
result = config_generator.create_import_config Project
|
|
35
|
+
|
|
36
|
+
expect(result).to include 'Project'
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
context 'real mappings' do
|
|
41
|
+
let(:map_file) { result_file('project_mapper.yaml') }
|
|
42
|
+
|
|
43
|
+
it 'should generate a populated mapping doc for a class' do
|
|
44
|
+
generate_config_file
|
|
45
|
+
|
|
46
|
+
expect(File.exist?(expected_config_file)).to be true
|
|
47
|
+
expect( File.read(expected_config_file) ).to include 'Project:'
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it 'should be able to extract headers from_excel', fail: true do
|
|
51
|
+
config_generator.generate_from_excel(ifixture_file('SimpleProjects.xls') )
|
|
52
|
+
|
|
53
|
+
expect(config_generator.headers.empty?).to eq false
|
|
54
|
+
expect(config_generator.headers.class).to eq Headers
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'should be able to extract headers from_excel' do
|
|
58
|
+
config_generator.generate_from_excel(ifixture_file('SimpleProjects.xls') )
|
|
59
|
+
|
|
60
|
+
# bit flakey need to manually st expected spreadsheet values
|
|
61
|
+
# value_as_string, Value as Text, value as datetime, value_as_boolean, value_as_double
|
|
62
|
+
|
|
63
|
+
expect(config_generator.headers.size).to eq 5
|
|
64
|
+
expect(config_generator.headers[0]).to eq 'value_as_string'
|
|
65
|
+
expect(config_generator.headers[4]).to eq 'value_as_double'
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it 'should be able to generate a mapping from_excel' do
|
|
69
|
+
expect(File.exist?(map_file)).to be false
|
|
70
|
+
|
|
71
|
+
config_generator.generate_from_excel(ifixture_file('SimpleProjects.xls'), file: map_file )
|
|
72
|
+
|
|
73
|
+
expect(File.exist?(map_file)).to be true
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
context 'Import' do
|
|
79
|
+
|
|
80
|
+
let(:expected_columns) { Project.new.serializable_hash.keys }
|
|
81
|
+
|
|
82
|
+
it 'should be able to write out a basic configuration document for a class' do
|
|
83
|
+
expect(File.exist?(expected_config_file)).to_not be true
|
|
84
|
+
|
|
85
|
+
expect { generate_config_file }.to_not raise_error
|
|
86
|
+
|
|
87
|
+
expect(File.exist?(expected_config_file)).to be true
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it 'a basic mapping document should contain at least attributes of a class' do
|
|
91
|
+
generate_config_file
|
|
92
|
+
|
|
93
|
+
File.foreach(expected_config_file)
|
|
94
|
+
expect( $.).to be > expected_columns.size
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
it 'a basic mapping document can be configures to contain associations as well' do
|
|
99
|
+
|
|
100
|
+
DataShift::Exporters::Configuration.configure do |config|
|
|
101
|
+
config.with = [:all]
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
generate_config_file
|
|
105
|
+
|
|
106
|
+
expect(File.exist?(expected_config_file)).to be true
|
|
107
|
+
|
|
108
|
+
File.foreach(expected_config_file)
|
|
109
|
+
expect( $.).to be > expected_columns.size
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# TODO: split into two - with and without associations
|
|
115
|
+
|
|
116
|
+
context 'Reading' do
|
|
117
|
+
|
|
118
|
+
let(:data_flow_schema) { DataFlowSchema.new }
|
|
119
|
+
|
|
120
|
+
#let(:config_file) { ifixture_file('ProjectConfiguration.yml') }
|
|
121
|
+
|
|
122
|
+
let(:expected_config_file) { result_file('mapping_service_project.yaml') }
|
|
123
|
+
|
|
124
|
+
let(:options) {
|
|
125
|
+
{
|
|
126
|
+
defaults: {'value_as_string': 'some default text', 'value_as_double': 45.467 },
|
|
127
|
+
overrides: {'value_as_double': 45.467 },
|
|
128
|
+
postfixes: {'value_as_text': 'postfix value_as_text' },
|
|
129
|
+
substitutions: { 'owner' => ['sub this text', 'for some other text'] }
|
|
130
|
+
# prefixs
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
let(:generate_config_file) { config_generator.write_import(expected_config_file, Project, options) }
|
|
135
|
+
|
|
136
|
+
before(:each) do
|
|
137
|
+
|
|
138
|
+
config = generate_config_file
|
|
139
|
+
|
|
140
|
+
expect(config).to be_a String
|
|
141
|
+
expect(config).to_not be_empty
|
|
142
|
+
|
|
143
|
+
expect(File.exist?(expected_config_file)).to be true
|
|
144
|
+
|
|
145
|
+
data_flow_schema.prepare_from_file(expected_config_file)
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
it 'should store the raw mapping data' do
|
|
149
|
+
expect(data_flow_schema.raw_data).to_not be_empty
|
|
150
|
+
expect(data_flow_schema.yaml_data).to_not be_empty
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
it 'should read in the nodes for this data schema' do
|
|
154
|
+
expect(data_flow_schema.nodes).to be_a NodeCollection
|
|
155
|
+
expect(data_flow_schema.nodes).to_not be_empty
|
|
156
|
+
|
|
157
|
+
node = data_flow_schema.nodes[0]
|
|
158
|
+
expect(node).to be_a NodeContext
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
it 'should provide access to details of the schema' do
|
|
162
|
+
expect(data_flow_schema.nodes.doc_context).to be_a DocContext
|
|
163
|
+
expect(data_flow_schema.nodes.doc_context.klass).to eq Project
|
|
164
|
+
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
it 'should have configured the Transformer', duff: true do
|
|
168
|
+
|
|
169
|
+
postfixes = DataShift::Transformation.factory.postfixes_for(Project)
|
|
170
|
+
|
|
171
|
+
expect(postfixes).to be_a Hash
|
|
172
|
+
expect(postfixes.has_key?('value_as_integer')).to eq false
|
|
173
|
+
expect(postfixes.has_key?('value_as_text')).to eq true
|
|
174
|
+
expect(postfixes.size).to eq 1
|
|
175
|
+
|
|
176
|
+
expect(DataShift::Transformation.factory.defaults_for(Project).size).to eq 2
|
|
177
|
+
expect(DataShift::Transformation.factory.overrides_for(Project).size).to eq 1
|
|
178
|
+
expect(DataShift::Transformation.factory.substitutions_for(Project).size).to eq 1
|
|
179
|
+
expect(DataShift::Transformation.factory.prefixes_for(Project).size).to eq 0
|
|
180
|
+
|
|
181
|
+
expect(DataShift::Transformation.factory.get_postfix_on(Project, :value_as_text)).to eq 'postfix value_as_text'
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
end
|
|
186
|
+
end # module
|