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,27 @@
|
|
|
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 FailureData do
|
|
10
|
+
|
|
11
|
+
include_context 'ClearThenManageProject'
|
|
12
|
+
|
|
13
|
+
let(:load_object) { create(:project, title: 'my title') }
|
|
14
|
+
|
|
15
|
+
let(:model_method) { project_collection.search('value_as_string') }
|
|
16
|
+
|
|
17
|
+
let(:method_binding) { MethodBinding.new('value_as_string', 1, model_method) }
|
|
18
|
+
|
|
19
|
+
let(:node_context) { DataShift::NodeContext.new(self, method_binding, 1, "1,2,3") }
|
|
20
|
+
|
|
21
|
+
it 'should store details of load object and inbound context' do
|
|
22
|
+
failed = FailureData.new(load_object, node_context)
|
|
23
|
+
expect(failed).to be
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# To change this template, choose Tools | Templates
|
|
2
2
|
# and open the template in the editor.
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
|
5
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib', 'engine')
|
|
6
6
|
|
|
7
7
|
require 'test/unit'
|
|
8
8
|
require 'file_definitions'
|
|
@@ -27,12 +27,11 @@ class File_definitions < Test::Unit::TestCase
|
|
|
27
27
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
|
|
31
30
|
def test_fields_symbols
|
|
32
31
|
klass = Object.const_set('SymClass', Class.new)
|
|
33
32
|
klass.module_eval do
|
|
34
33
|
include FileDefinitions
|
|
35
|
-
create_field_definition
|
|
34
|
+
create_field_definition [:a_symbol, :b_symbol]
|
|
36
35
|
|
|
37
36
|
create_field_attr_accessors
|
|
38
37
|
end
|
|
@@ -45,16 +44,16 @@ class File_definitions < Test::Unit::TestCase
|
|
|
45
44
|
klass = Object.const_set('A', Class.new)
|
|
46
45
|
klass.module_eval do
|
|
47
46
|
include FileDefinitions
|
|
48
|
-
create_field_definition %w
|
|
47
|
+
create_field_definition %w(abc def ghi jkl)
|
|
49
48
|
|
|
50
49
|
create_field_attr_accessors
|
|
51
50
|
end
|
|
52
51
|
|
|
53
52
|
x = A.new
|
|
54
53
|
|
|
55
|
-
assert_equal
|
|
54
|
+
assert_equal %w(abc def ghi jkl), A.field_definition.sort
|
|
56
55
|
|
|
57
|
-
A
|
|
56
|
+
A.add_field( 'xyz' )
|
|
58
57
|
|
|
59
58
|
line = '1,2,3,4, 5'
|
|
60
59
|
x = A.new(line)
|
|
@@ -101,9 +100,9 @@ class File_definitions < Test::Unit::TestCase
|
|
|
101
100
|
assert_equal 3, AFixed.field_definition.size
|
|
102
101
|
assert_equal 3, AFixed.fixed_definition.keys.size
|
|
103
102
|
|
|
104
|
-
assert_equal
|
|
103
|
+
assert_equal %w(ccy date value), AFixed.field_definition.sort
|
|
105
104
|
|
|
106
|
-
assert_equal AFixed.field_definition.sort,
|
|
105
|
+
assert_equal AFixed.field_definition.sort, AFixed.fixed_definition.keys.sort
|
|
107
106
|
|
|
108
107
|
assert_instance_of Range, AFixed.fixed_definition.values[0]
|
|
109
108
|
|
|
@@ -133,7 +132,7 @@ class File_definitions < Test::Unit::TestCase
|
|
|
133
132
|
|
|
134
133
|
create_field_attr_accessors
|
|
135
134
|
end
|
|
136
|
-
flunk
|
|
135
|
+
flunk # We should never get here
|
|
137
136
|
rescue => e
|
|
138
137
|
assert e
|
|
139
138
|
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Copyright:: (c) Autotelik Media Ltd 2011
|
|
2
|
+
# Author :: Tom Statter
|
|
3
|
+
# Date :: Aug 2011
|
|
4
|
+
# License:: MIT
|
|
5
|
+
#
|
|
6
|
+
# Details:: Specs for base class Loader
|
|
7
|
+
#
|
|
8
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
9
|
+
|
|
10
|
+
describe 'Headers' do
|
|
11
|
+
before(:each) do
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context 'No Initial Headers' do
|
|
15
|
+
it 'should be able to populate empty' do
|
|
16
|
+
expect(DataShift::Headers.new( :csv, 0 )).to be
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it 'should be able to identify the source and index' do
|
|
20
|
+
h = DataShift::Headers.new( :csv, 2 )
|
|
21
|
+
expect(h.source).to eq :csv
|
|
22
|
+
expect(h.idx).to eq 2
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'should act like an Array' do
|
|
26
|
+
h = DataShift::Headers.new( :csv, 0 )
|
|
27
|
+
|
|
28
|
+
expect(h.respond_to?(:each)).to eq true
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'should be able to add headers as if using an Array' do
|
|
32
|
+
h = DataShift::Headers.new( :csv, 0 )
|
|
33
|
+
|
|
34
|
+
expect(h.size).to eq 0
|
|
35
|
+
expect(h.empty?).to eq true
|
|
36
|
+
|
|
37
|
+
h << 'sku'
|
|
38
|
+
|
|
39
|
+
expect(h.size).to eq 1
|
|
40
|
+
expect(h.empty?).to eq false
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it 'should be able to read headers as if using an Array' do
|
|
44
|
+
h = DataShift::Headers.new( :csv, 0 )
|
|
45
|
+
|
|
46
|
+
expect(h.size).to eq 0
|
|
47
|
+
expect(h.empty?).to eq true
|
|
48
|
+
|
|
49
|
+
h << 'sku'
|
|
50
|
+
|
|
51
|
+
expect(h.size).to eq 1
|
|
52
|
+
expect(h.empty?).to eq false
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Copyright:: (c) Autotelik Media Ltd 2015
|
|
2
|
+
# Author :: Tom Statter
|
|
3
|
+
# License:: MIT
|
|
4
|
+
#
|
|
5
|
+
require File.join(File.dirname(__FILE__), '/../spec_helper')
|
|
6
|
+
|
|
7
|
+
module DataShift
|
|
8
|
+
|
|
9
|
+
module InboundData
|
|
10
|
+
|
|
11
|
+
describe 'Inbound Data' do
|
|
12
|
+
it 'should store details of inbound lookup' do
|
|
13
|
+
ls = LookupSupport.new( Project, :title, 'my title')
|
|
14
|
+
expect(ls).to be
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'should store details of inbound column' do
|
|
18
|
+
c = Column.new( 'Value As A String')
|
|
19
|
+
expect(c).to be
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'should store details of inbound column with its column number' do
|
|
23
|
+
c = Column.new( 'Value As A String', 0)
|
|
24
|
+
expect(c).to be
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
context 'lookups' do
|
|
28
|
+
let(:create_project) { create(:project, title: 'my title') }
|
|
29
|
+
|
|
30
|
+
let(:lookup) { LookupSupport.new( Project, :title, 'my title') }
|
|
31
|
+
|
|
32
|
+
it 'should enable lookup of a domain object' do
|
|
33
|
+
create_project
|
|
34
|
+
result = lookup.klass.where( lookup.field => lookup.where_value ).first
|
|
35
|
+
expect(result).to be_a Project
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'should provide shortcut to return active record relation', fail: true do
|
|
39
|
+
id = create_project.id
|
|
40
|
+
result = lookup.find
|
|
41
|
+
expect(result).to be_a ActiveRecord::Relation
|
|
42
|
+
expect(result.first.id).to eq id
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Copyright:: (c) Autotelik Media Ltd 2015
|
|
2
|
+
# Author :: Tom Statter
|
|
3
|
+
# Date :: Aug 2015
|
|
4
|
+
# License:: MIT
|
|
5
|
+
#
|
|
6
|
+
# Details:: Specs for Mapping aspects
|
|
7
|
+
# Provides automatic mapping between different system's column headings
|
|
8
|
+
#
|
|
9
|
+
require File.join(File.dirname(__FILE__), '/../spec_helper')
|
|
10
|
+
|
|
11
|
+
describe 'MapperUtils' do
|
|
12
|
+
|
|
13
|
+
it 'should identify the class from a string' do
|
|
14
|
+
# Similar to const_get_from_string except this version
|
|
15
|
+
# returns nil if no such class found
|
|
16
|
+
# Support modules e.g "Spree::Property"
|
|
17
|
+
#
|
|
18
|
+
expect(DataShift::MapperUtils.class_from_string( Project)).to be_a Class
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'should identify the class from a string containing modules' do
|
|
22
|
+
# Similar to const_get_from_string except this version
|
|
23
|
+
# returns nil if no such class found
|
|
24
|
+
# Support modules e.g "Spree::Property"
|
|
25
|
+
#
|
|
26
|
+
expect(DataShift::MapperUtils.class_from_string( DataShift::AClassInAModule )).to be_a Class
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'should ensure a valid class is returned whether a class or string passed in' do
|
|
30
|
+
expect(DataShift::MapperUtils.ensure_class("Project")).to be_a Class
|
|
31
|
+
expect(DataShift::MapperUtils.ensure_class(Project)).to be_a Class
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'should throw when invalid class supplied' do
|
|
35
|
+
expect { DataShift::MapperUtils.ensure_class("Proj") }.to raise_error
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Copyright:: (c) Autotelik Media Ltd 2015
|
|
2
|
+
# Author :: Tom Statter
|
|
3
|
+
# Date :: Jan 2015
|
|
4
|
+
# License:: MIT
|
|
5
|
+
#
|
|
6
|
+
# Details:: Specs for MethodBinding aspect of Active Record Loader
|
|
7
|
+
# MethodBinding holds details of a method call on an AR object
|
|
8
|
+
# linked to the incoming column header/index
|
|
9
|
+
#
|
|
10
|
+
require File.join(File.dirname(__FILE__), '/../spec_helper')
|
|
11
|
+
|
|
12
|
+
module DataShift
|
|
13
|
+
|
|
14
|
+
describe 'Method Binding' do
|
|
15
|
+
include_context 'ClearThenManageProject'
|
|
16
|
+
|
|
17
|
+
let( :model_method) { project_collection.search('value_as_string') }
|
|
18
|
+
|
|
19
|
+
it 'should bind details of inbound header to domain model' do
|
|
20
|
+
binding = MethodBinding.new('value_as_string', 1, model_method)
|
|
21
|
+
expect(binding).to be
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
context ('Bound to Header') do
|
|
25
|
+
let(:binding) { MethodBinding.new('value_as_string', 1, model_method) }
|
|
26
|
+
|
|
27
|
+
let(:valid_column_on_project) { 'value_as_string' }
|
|
28
|
+
|
|
29
|
+
it 'should provide access to inbound column (header)' do
|
|
30
|
+
expect(binding.inbound_column).to be_a InboundData::Column
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'should provide access to domain model method' do
|
|
34
|
+
expect(binding.model_method).to eq model_method
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'should enable an index to be set for index style processors' do
|
|
38
|
+
binding = MethodBinding.new(valid_column_on_project, 2, model_method)
|
|
39
|
+
expect(binding.inbound_column.index).to eq 2
|
|
40
|
+
|
|
41
|
+
binding = MethodBinding.new(valid_column_on_project, 99999, model_method)
|
|
42
|
+
expect(binding.inbound_column.index).to eq 99999
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'should be valid when both name and model method provided' do
|
|
46
|
+
binding = MethodBinding.new(valid_column_on_project, 2, model_method)
|
|
47
|
+
expect(binding.valid?).to eq true
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it 'should be invalid when either name or model method nil' do
|
|
51
|
+
binding = MethodBinding.new(nil, 3, model_method)
|
|
52
|
+
expect(binding.valid?).to eq false
|
|
53
|
+
|
|
54
|
+
binding = MethodBinding.new(valid_column_on_project, 3, nil)
|
|
55
|
+
expect(binding.valid?).to eq false
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
end
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Copyright:: (c) Autotelik Media Ltd 2015
|
|
2
|
+
# Author :: Tom Statter
|
|
3
|
+
# Date :: Jan 2015
|
|
4
|
+
# License:: MIT
|
|
5
|
+
#
|
|
6
|
+
# Details:: Specs for ModelMethod aspect of
|
|
7
|
+
#
|
|
8
|
+
require File.join(File.dirname(__FILE__), '/../spec_helper')
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
module DataShift
|
|
12
|
+
|
|
13
|
+
describe 'Model Method' do
|
|
14
|
+
include_context 'ClearAllCatalogues'
|
|
15
|
+
|
|
16
|
+
it 'should hold details of assignment method on a class' do
|
|
17
|
+
model_method = DataShift::ModelMethod.new(Project, :value_as_string, :assignment )
|
|
18
|
+
|
|
19
|
+
expect(model_method).to be
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'should hold details of belongs_to method on a class' do
|
|
23
|
+
model_method = DataShift::ModelMethod.new(Project, 'user', :belongs_to )
|
|
24
|
+
|
|
25
|
+
expect(model_method).to be
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'should hold details of has_one method on a class' do
|
|
29
|
+
model_method = DataShift::ModelMethod.new(Project, 'owner', :has_one )
|
|
30
|
+
|
|
31
|
+
expect(model_method).to be
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'should hold details of has_many method on a class' do
|
|
35
|
+
model_method = DataShift::ModelMethod.new(Project, 'milestones', :has_many )
|
|
36
|
+
|
|
37
|
+
expect(model_method).to be
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'should hold details of a callable method on a class' do
|
|
41
|
+
model_method = DataShift::ModelMethod.new(Project, 'my_funky_method', :method )
|
|
42
|
+
|
|
43
|
+
expect(model_method).to be
|
|
44
|
+
|
|
45
|
+
expect(model_method.operator).to eq 'my_funky_method'
|
|
46
|
+
expect(model_method.operator_type).to eq :method
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it 'should hold details of operator type as a symbol' do
|
|
50
|
+
model_method = DataShift::ModelMethod.new(Project, 'my_funky_method', 'method' )
|
|
51
|
+
expect(model_method.operator_type).to eq :method
|
|
52
|
+
|
|
53
|
+
model_method = DataShift::ModelMethod.new(Owner, 'milestones', 'has_many' )
|
|
54
|
+
expect(model_method.operator_type).to eq :has_many
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'should raise when unknown type' do
|
|
58
|
+
expect { DataShift::ModelMethod.new(Project, 'milestones', :junk ) }.to raise_error BadOperatorType
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it 'should be comparable based on class' do
|
|
62
|
+
|
|
63
|
+
a = DataShift::ModelMethod.new(Owner, 'owner', :has_one)
|
|
64
|
+
b = DataShift::ModelMethod.new(Project, 'owner', :has_one)
|
|
65
|
+
|
|
66
|
+
expect(a == b).to eq false
|
|
67
|
+
|
|
68
|
+
expect(a).to be < b
|
|
69
|
+
expect(b).to be > a
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it 'should be comparable based on operator_type and operator' do
|
|
73
|
+
|
|
74
|
+
a = DataShift::ModelMethod.new(Project, 'value_as_text', :assignment )
|
|
75
|
+
b = DataShift::ModelMethod.new(Project, 'title', :assignment )
|
|
76
|
+
a_again = DataShift::ModelMethod.new(Project, 'value_as_text', :assignment )
|
|
77
|
+
a_diff_type = DataShift::ModelMethod.new(Project, 'value_as_text', :has_one )
|
|
78
|
+
|
|
79
|
+
c = DataShift::ModelMethod.new(Project, 'owner', :has_one )
|
|
80
|
+
|
|
81
|
+
d = DataShift::ModelMethod.new(Project, 'owner', :has_many )
|
|
82
|
+
d_again = DataShift::ModelMethod.new(Project, 'owner', :has_many )
|
|
83
|
+
|
|
84
|
+
expect(a == b).to eq false
|
|
85
|
+
expect(a == a).to eq true
|
|
86
|
+
expect(a == a_again).to eq true
|
|
87
|
+
expect(a == a_diff_type).to eq false
|
|
88
|
+
expect(c == d).to eq false
|
|
89
|
+
expect(d == d_again).to eq true
|
|
90
|
+
|
|
91
|
+
expect(a).to be > b
|
|
92
|
+
|
|
93
|
+
# i.e assignment comes before has_one
|
|
94
|
+
expect(a).to be < a_diff_type
|
|
95
|
+
|
|
96
|
+
expect(c).to be < a_diff_type
|
|
97
|
+
expect(c).to be < d
|
|
98
|
+
expect(d).to be > c
|
|
99
|
+
expect(d).to be >= d_again
|
|
100
|
+
|
|
101
|
+
clist = [a, d_again, b, d, c]
|
|
102
|
+
|
|
103
|
+
clist.sort!
|
|
104
|
+
|
|
105
|
+
expect(clist).to eq [b, a,c ,d, d_again]
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
end
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Copyright:: (c) Autotelik Media Ltd 2011
|
|
2
|
+
# Author :: Tom Statter
|
|
3
|
+
# Date :: Mar 2015
|
|
4
|
+
# License:: MIT
|
|
5
|
+
#
|
|
6
|
+
require File.join(File.dirname(__FILE__), '/../spec_helper')
|
|
7
|
+
|
|
8
|
+
module DataShift
|
|
9
|
+
|
|
10
|
+
module ModelMethods
|
|
11
|
+
|
|
12
|
+
describe 'Model Methods' do
|
|
13
|
+
include_context 'ClearAllCatalogues'
|
|
14
|
+
|
|
15
|
+
context 'Catalogue a Class' do
|
|
16
|
+
it 'should enable checking a model catalogued' do
|
|
17
|
+
expect(Catalogue.catalogued?(Milestone) ).to eq false
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'should report how many classes catalogued' do
|
|
21
|
+
expect(Catalogue.size ).to eq 0
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'should catalogue model methods on a domain model' do
|
|
25
|
+
Catalogue.populate( Milestone )
|
|
26
|
+
|
|
27
|
+
expect(Catalogue.size ).to eq 1
|
|
28
|
+
expect(Catalogue.catalogued?(Milestone) ).to eq true
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'should catalogue model methods on a domain model once' do
|
|
32
|
+
Catalogue.populate( Milestone )
|
|
33
|
+
Catalogue.populate( Milestone )
|
|
34
|
+
|
|
35
|
+
expect(Catalogue.size ).to eq 1
|
|
36
|
+
expect(Catalogue.catalogued?(Milestone) ).to eq true
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'should catalogue multiple domain models' do
|
|
40
|
+
Catalogue.populate( Milestone )
|
|
41
|
+
Catalogue.populate( Project )
|
|
42
|
+
expect(Catalogue.size ).to eq 2
|
|
43
|
+
|
|
44
|
+
expect(Catalogue.catalogued?(Project)).to eq true
|
|
45
|
+
expect(Catalogue.catalogued?(Owner)).to eq false
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
context 'interrogate a Class' do
|
|
50
|
+
before(:each) do
|
|
51
|
+
Catalogue.populate( Project )
|
|
52
|
+
Catalogue.populate( Milestone )
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it 'should interrogate a domain model to build has_many associations' do
|
|
56
|
+
expect(Catalogue.has_many).to_not be_empty
|
|
57
|
+
|
|
58
|
+
expect(Catalogue.has_many[Project]).to include('milestones')
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it 'should interrogate a domain model to build set of model methods' do
|
|
62
|
+
expect(Catalogue.assignments).to_not be_empty
|
|
63
|
+
expect(Catalogue.assignments[Project]).to include('id')
|
|
64
|
+
expect( Catalogue.assignments[Project]).to include('value_as_string')
|
|
65
|
+
expect(Catalogue.assignments[Project]).to include('value_as_text')
|
|
66
|
+
|
|
67
|
+
expect( Catalogue.belongs_to).to_not be_empty
|
|
68
|
+
expect(Catalogue.belongs_to[Project]).to include 'user'
|
|
69
|
+
|
|
70
|
+
expect(Catalogue.column_types).to be_is_a(Hash)
|
|
71
|
+
expect(Catalogue.column_types).to_not be_empty
|
|
72
|
+
expect(Catalogue.column_types[Project].size).to eq Project.columns.size
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it 'should return a list of assignment members' do
|
|
76
|
+
expect(Catalogue.assignments_for(Project)).to be_a Array
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it 'should populate assignment members without the equivalent association names' do
|
|
80
|
+
# we should remove has-many & belongs_to from basic assignment set as they require a DB lookup
|
|
81
|
+
# or a Model.create call, not a simple assignment
|
|
82
|
+
expect(Catalogue.assignments_for(Project)).to_not include Catalogue.belongs_to_for(Project)
|
|
83
|
+
expect(Catalogue.assignments_for(Project)).to_not include Catalogue.has_many_for(Project)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it 'has the operator names in the array' do
|
|
87
|
+
name = Catalogue.assignments_for(Project).first
|
|
88
|
+
|
|
89
|
+
expect(name).to be_a String
|
|
90
|
+
expect(name.size).to be > 0
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it 'can include instance methods' do
|
|
94
|
+
Catalogue.populate( Owner, instance_methods: true )
|
|
95
|
+
|
|
96
|
+
expect( Catalogue.assignments_for(Owner)).to include 'after_add_for_digitals'
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it 'can force a reload' do
|
|
100
|
+
Catalogue.populate( Owner )
|
|
101
|
+
|
|
102
|
+
count = Catalogue.assignments_for(Owner).size
|
|
103
|
+
|
|
104
|
+
Catalogue.populate( Owner, reload: true, instance_methods: true )
|
|
105
|
+
|
|
106
|
+
expect(Catalogue.assignments_for(Owner).size).to be > count
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|