datashift 0.16.0 → 0.40.0
Sign up to get free protection for your applications and to get access to all the features.
- 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,66 @@
|
|
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
|
+
module DataShift
|
11
|
+
|
12
|
+
describe Configuration do
|
13
|
+
|
14
|
+
let(:defaults) do
|
15
|
+
{ project:
|
16
|
+
{ value_as_string: 'Default Project Value',
|
17
|
+
category: 'reference:category_002',
|
18
|
+
value_as_datetime: Time.now.to_s(:db)
|
19
|
+
}
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
before do
|
24
|
+
end
|
25
|
+
|
26
|
+
let(:call) { DataShift::Exporters::Configuration.call }
|
27
|
+
|
28
|
+
context "with" do
|
29
|
+
|
30
|
+
it 'defaults to basic attribute data' do
|
31
|
+
expect(call.op_types_in_scope).to eq [:assignment, :enum]
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'returns complete list of op types when [:all] specified' do
|
35
|
+
DataShift::Exporters::Configuration.configure do |config|
|
36
|
+
config.with = [:all]
|
37
|
+
end
|
38
|
+
expect(call.op_types_in_scope).to eq ModelMethod.supported_types_enum
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'returns complete list of op types when :all specified' do
|
42
|
+
DataShift::Exporters::Configuration.configure do |config|
|
43
|
+
config.with = :all
|
44
|
+
end
|
45
|
+
expect(call.op_types_in_scope).to eq ModelMethod.supported_types_enum
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'can be configuresd complete list of op types when :all specified' do
|
49
|
+
DataShift::Exporters::Configuration.configure do |config|
|
50
|
+
config.with = :all
|
51
|
+
end
|
52
|
+
expect(call.op_types_in_scope).to eq ModelMethod.supported_types_enum
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'can be configured with custom list of op types to process' do
|
56
|
+
DataShift::Exporters::Configuration.configure do |config|
|
57
|
+
config.with = [:assignment, :enum, :belongs_to]
|
58
|
+
end
|
59
|
+
expect(call.op_types_in_scope).to eq [:assignment, :enum, :belongs_to]
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# Copyright:: (c) Autotelik Media Ltd 2015
|
2
|
+
# Author :: Tom Statter
|
3
|
+
# License:: MIT
|
4
|
+
#
|
5
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
6
|
+
|
7
|
+
module DataShift
|
8
|
+
|
9
|
+
describe 'Context Factory' do
|
10
|
+
|
11
|
+
include_context 'ClearThenManageProject'
|
12
|
+
|
13
|
+
# got burnt by other tests failing if run after this, we are caching stuff in this class
|
14
|
+
# that perissts across tests - so ContextFactory design probably a code smell
|
15
|
+
after(:all) do
|
16
|
+
ContextFactory.clear_populators
|
17
|
+
end
|
18
|
+
|
19
|
+
let(:model_method) { project_collection.search('value_as_string') }
|
20
|
+
|
21
|
+
let(:method_binding) { MethodBinding.new('column_for_value_as_string', 0, model_method) }
|
22
|
+
|
23
|
+
let(:another_populator) do
|
24
|
+
class AnotherPopulator
|
25
|
+
end
|
26
|
+
|
27
|
+
AnotherPopulator
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'configuring' do
|
31
|
+
it 'can be configured to provide a specific Populator per operator' do
|
32
|
+
expect {
|
33
|
+
ContextFactory.set_populator(method_binding, another_populator)
|
34
|
+
}.to change(ContextFactory.populators, :size).by(1)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'providing populators' do
|
39
|
+
before(:each) do
|
40
|
+
ContextFactory.clear_populators
|
41
|
+
|
42
|
+
ContextFactory.set_populator(method_binding, another_populator)
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should provide a default Populator when none specifically defined' do
|
46
|
+
|
47
|
+
mb = MethodBinding.new('value_as_boolean', 0, project_collection.search('value_as_boolean'))
|
48
|
+
|
49
|
+
populator = ContextFactory.get_populator(mb)
|
50
|
+
|
51
|
+
expect(populator).to be
|
52
|
+
expect(populator).to be_a Populator
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'should provide a specific Populator when one defined' do
|
56
|
+
populator = ContextFactory.get_populator(method_binding)
|
57
|
+
|
58
|
+
expect(populator).to_not be_nil
|
59
|
+
expect(populator).to be_a AnotherPopulator
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,150 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
module DataShift
|
4
|
+
|
5
|
+
RSpec.describe DataFlowSchema, type: :model do
|
6
|
+
|
7
|
+
let(:data_flow_schema) { subject }
|
8
|
+
|
9
|
+
let(:yaml_text) {
|
10
|
+
x=<<-EOS
|
11
|
+
data_flow_schema:
|
12
|
+
Project:
|
13
|
+
nodes:
|
14
|
+
- project_title:
|
15
|
+
heading:
|
16
|
+
source: "title"
|
17
|
+
operator: title
|
18
|
+
- value_as_string:
|
19
|
+
heading:
|
20
|
+
source: "Value:"
|
21
|
+
operator: value_as_string
|
22
|
+
- project_owner_budget:
|
23
|
+
heading:
|
24
|
+
source: "Budget"
|
25
|
+
operator: owner.budget
|
26
|
+
- value_as_integer:
|
27
|
+
heading:
|
28
|
+
source: "This Column goes to value_as_string"
|
29
|
+
EOS
|
30
|
+
x
|
31
|
+
}
|
32
|
+
|
33
|
+
context "DataFlowSchema" do
|
34
|
+
|
35
|
+
context("YAML (LOCALE) DSL") do
|
36
|
+
|
37
|
+
before(:each) do
|
38
|
+
@collection = data_flow_schema.prepare_from_string(yaml_text)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "build node collection from a locale based DSL" do
|
42
|
+
expect(@collection).to be_instance_of NodeCollection
|
43
|
+
expect(@collection.size).to eq operators_in_config.size
|
44
|
+
end
|
45
|
+
|
46
|
+
it "each section is an instance of Node" do
|
47
|
+
@collection = data_flow_schema.prepare_from_string(yaml_text)
|
48
|
+
expect(@collection.first).to be_instance_of DataShift::NodeContext
|
49
|
+
end
|
50
|
+
|
51
|
+
let(:operators_in_config) { ['title', 'value_as_string', 'owner.budget', ''] }
|
52
|
+
|
53
|
+
|
54
|
+
it "should preserve order of the nodes and cope with nil" do
|
55
|
+
@collection.each_with_index {|n, i| expect(n.operator).to eq operators_in_config[i] }
|
56
|
+
|
57
|
+
operators = @collection.collect(&:operator)
|
58
|
+
|
59
|
+
expect(operators).to eq operators_in_config
|
60
|
+
end
|
61
|
+
=begin
|
62
|
+
it "each row contains columns required to build view" do
|
63
|
+
review_data_column = review_data_sections.first.rows.first
|
64
|
+
|
65
|
+
expect(review_data_column).to be_instance_of Struct::ReviewDataRow
|
66
|
+
|
67
|
+
expect(review_data_column.title).to be_instance_of String
|
68
|
+
expect(review_data_column.link_state).to be_instance_of String
|
69
|
+
end
|
70
|
+
|
71
|
+
context("Specific YAML") do
|
72
|
+
include_examples "clear_and_after_reload_yaml"
|
73
|
+
|
74
|
+
it "can access methods directly on the model" do
|
75
|
+
I18n.backend.store_translations(:en, YAML.load(simple_review_farming_yaml))
|
76
|
+
|
77
|
+
expect(I18n.exists?("enrollment_review")).to eq true
|
78
|
+
|
79
|
+
review_data_list = enrollment_review.prepare_from_locale(enrollment)
|
80
|
+
|
81
|
+
expect(review_data_list.size).to eq 1
|
82
|
+
|
83
|
+
review_data_section = review_data_list.first
|
84
|
+
|
85
|
+
expect(review_data_section.heading).to eq "Farming data"
|
86
|
+
expect(review_data_section.rows.size).to eq 2
|
87
|
+
|
88
|
+
row = review_data_section.rows.first
|
89
|
+
|
90
|
+
expect(row).to be_instance_of Struct::ReviewDataRow
|
91
|
+
expect(row.data).to eq enrollment.on_a_farm?
|
92
|
+
end
|
93
|
+
|
94
|
+
it "can access methods on an association of the model", fail: true do
|
95
|
+
I18n.backend.store_translations(:en, YAML.load(direct_and_association_review_yaml))
|
96
|
+
|
97
|
+
expect(I18n.exists?("enrollment_review")).to eq true
|
98
|
+
|
99
|
+
review_data_list = enrollment_review.prepare_review_data_list
|
100
|
+
|
101
|
+
expect(review_data_list.size).to eq 2 # 2 sections
|
102
|
+
review_data_section = review_data_list.last
|
103
|
+
|
104
|
+
expect(review_data_section.heading).to eq "Waste Exemption Codes"
|
105
|
+
expect(review_data_section.rows.size).to eq enrollment.exemptions.count
|
106
|
+
|
107
|
+
row = review_data_section.rows.first
|
108
|
+
|
109
|
+
expect(row).to be_instance_of Struct::ReviewDataRow
|
110
|
+
|
111
|
+
expect(row.data).to eq enrollment.exemptions.first.code
|
112
|
+
expect(row.link_state).to eq "bad_link"
|
113
|
+
|
114
|
+
expect(row.target(enrollment)).to include "/reviews/"
|
115
|
+
expect(row.target(enrollment)).to include "/bad_link/"
|
116
|
+
expect(row.target(enrollment)).to include enrollment.id.to_s
|
117
|
+
end
|
118
|
+
|
119
|
+
context("association and method chaining") do
|
120
|
+
before(:each) do
|
121
|
+
I18n.backend.store_translations(:en, YAML.load(chained_review_yaml))
|
122
|
+
end
|
123
|
+
|
124
|
+
let(:review_data_list) { enrollment_review.prepare_review_data_list }
|
125
|
+
|
126
|
+
it "can access associated object down the whole association chain on model" do
|
127
|
+
expect(review_data_list.size).to eq 2
|
128
|
+
organisation_address_section = review_data_list.first
|
129
|
+
|
130
|
+
row = organisation_address_section.rows.first
|
131
|
+
|
132
|
+
expect(row.data).to eq enrollment.organisation.contact.email_address
|
133
|
+
end
|
134
|
+
|
135
|
+
it "can access methods down the whole association chain on model" do
|
136
|
+
expect(review_data_list.size).to eq 2
|
137
|
+
applicant_contact_section = review_data_list.last
|
138
|
+
|
139
|
+
row = applicant_contact_section.rows.first
|
140
|
+
|
141
|
+
expect(row.data).to eq enrollment.applicant_contact.business_number.tel_number
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
=end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# Copyright:: (c) Autotelik Media Ltd 2011
|
2
|
+
# Author :: Tom Statter
|
3
|
+
# Date :: Oct 2011
|
4
|
+
# License:: MIT
|
5
|
+
#
|
6
|
+
# Details:: Specs for high level apsects of DataShift library
|
7
|
+
#
|
8
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
9
|
+
|
10
|
+
require 'datashift/version'
|
11
|
+
|
12
|
+
describe 'DataShift' do
|
13
|
+
before(:each) do
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should provide gem version' do
|
17
|
+
expect(DataShift::VERSION).to be_a String
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should provide gem name' do
|
21
|
+
expect(DataShift.gem_name).to eq 'datashift'
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should provide root_path' do
|
25
|
+
expect(DataShift.root_path).to_not be_empty
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should provide a log' do
|
29
|
+
class Blah
|
30
|
+
include DataShift::Logging
|
31
|
+
|
32
|
+
def try_me
|
33
|
+
logger.info 'hello datashift spec'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
b = Blah.new
|
38
|
+
|
39
|
+
b.logger.info 'try me'
|
40
|
+
|
41
|
+
b.try_me
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should provide quick way to create exception class' do
|
45
|
+
DataShift::DataShiftException.generate( 'BadRspecError')
|
46
|
+
|
47
|
+
e = DataShift::BadRspecError.new('my new exception class')
|
48
|
+
|
49
|
+
expect(e).to be
|
50
|
+
expect(e.message).to eq 'my new exception class'
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
module DataShift
|
4
|
+
|
5
|
+
module ExcelBase
|
6
|
+
|
7
|
+
describe 'ExcelBase' do
|
8
|
+
before(:each) do
|
9
|
+
include DataShift::ExcelBase
|
10
|
+
extend DataShift::ExcelBase
|
11
|
+
end
|
12
|
+
|
13
|
+
let(:file_name) { ifixture_file('ProjectsSingleCategories.xls') }
|
14
|
+
|
15
|
+
it 'should provide fast access to an Excel instance' do
|
16
|
+
expect( start_excel(Project) ).to be_a DataShift::Excel
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should provide fast access to open an existing Excel file' do
|
20
|
+
expect( open_excel(file_name) ).to be_a DataShift::Excel
|
21
|
+
end
|
22
|
+
|
23
|
+
let(:sheet_name) { 'RspecTester' }
|
24
|
+
|
25
|
+
it 'should enable us to add a named worksheet' do
|
26
|
+
start_excel(Project, sheet_name: sheet_name)
|
27
|
+
expect( excel ).to be_a DataShift::Excel
|
28
|
+
|
29
|
+
expect( sheet ).to be_a Spreadsheet::Worksheet
|
30
|
+
expect( sheet.name ).to eq sheet_name
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should enable us to add a named worksheet to existing Excel file' do
|
34
|
+
open_excel(file_name, sheet_name: sheet_name)
|
35
|
+
expect( excel ).to be_a DataShift::Excel
|
36
|
+
|
37
|
+
expect( sheet ).to be_a Spreadsheet::Worksheet
|
38
|
+
expect( sheet.name ).to eq sheet_name
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'Once opened' do
|
42
|
+
|
43
|
+
before(:each) do
|
44
|
+
open_excel(file_name, sheet_number: 0)
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'should provide fast access to current sheet' do
|
48
|
+
expect( sheet ).to be_a Spreadsheet::Worksheet
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'should parse headers' do
|
52
|
+
parse_headers( sheet )
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,188 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '/../spec_helper')
|
2
|
+
|
3
|
+
require 'excel'
|
4
|
+
|
5
|
+
module DataShift
|
6
|
+
|
7
|
+
describe 'Excel Proxy' do
|
8
|
+
let(:excel) { Excel.new }
|
9
|
+
|
10
|
+
it 'should reject .xlsx until spreedsheet gem supports it' do
|
11
|
+
expect { excel.open( ifixture_file('ProjectsSingleCategories.xlsx') ) }.to raise_error Ole::Storage::FormatError
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'can open an existing spreadsheet' do
|
15
|
+
sheet = excel.open( ifixture_file('ProjectsSingleCategories.xls') )
|
16
|
+
|
17
|
+
expect(sheet).to_not be_nil
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'can create new un-named worksheet' do
|
21
|
+
sheet1 = excel.create_worksheet
|
22
|
+
|
23
|
+
expect( sheet1.name).to eq 'Worksheet1'
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'can create multiple un-named worksheets' do
|
27
|
+
sheet1 = excel.create_worksheet
|
28
|
+
sheet2 = excel.create_worksheet
|
29
|
+
expect(sheet1.name).to eq 'Worksheet1'
|
30
|
+
expect(sheet2.name).to eq 'Worksheet2'
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'can create new named worksheet' do
|
34
|
+
sheet = excel.create_worksheet( name: 'daft punk')
|
35
|
+
expect( sheet.name).to eq 'daft punk'
|
36
|
+
|
37
|
+
sheet2 = excel.create_worksheet( name: 'underworld')
|
38
|
+
expect( sheet2.name).to eq 'underworld'
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'can sanitize worksheet names as per Excel spec' do
|
42
|
+
include DataShift::ExcelBase
|
43
|
+
extend DataShift::ExcelBase
|
44
|
+
|
45
|
+
# name.gsub(/[\[\]:\*\/\\\?]/, '
|
46
|
+
|
47
|
+
expect(sanitize_sheet_name('aute?chre')).to eq 'autechre'
|
48
|
+
expect(sanitize_sheet_name('?autechre')).to eq 'autechre'
|
49
|
+
expect(sanitize_sheet_name('aute?chre?')).to eq 'autechre'
|
50
|
+
|
51
|
+
expect(sanitize_sheet_name('daft: ?punk')).to eq 'daft punk'
|
52
|
+
expect(sanitize_sheet_name('guy call[]ed *Gerald')).to eq 'guy called Gerald'
|
53
|
+
|
54
|
+
expect(sanitize_sheet_name('guy called */Gerald')).to eq 'guy called Gerald'
|
55
|
+
end
|
56
|
+
|
57
|
+
# Pending - inject create_worksheet method into Spreadsheet gem
|
58
|
+
if DataShift::Guards.jruby?
|
59
|
+
it 'ensures name of worksheet sanitized' do
|
60
|
+
sheet = excel.create_worksheet( name: 'daft: ?punk')
|
61
|
+
expect( sheet.name).to eq 'daft punk'
|
62
|
+
|
63
|
+
sheet = excel.create_worksheet( name: 'under[]world')
|
64
|
+
expect( sheet.name).to eq 'underworld'
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'can create multiple named worksheets' do
|
69
|
+
excel.create_worksheet( name: 'underworld')
|
70
|
+
excel.create_worksheet( name: 'jeff mills')
|
71
|
+
excel.create_worksheet( name: 'autechre')
|
72
|
+
excel.create_worksheet( name: 'swarms')
|
73
|
+
|
74
|
+
expect(excel.worksheets.size).to eq 4
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'can access a worksheet by index' do
|
78
|
+
excel.create_worksheet( name: 'underworld')
|
79
|
+
excel.create_worksheet( name: 'jeff mills')
|
80
|
+
excel.create_worksheet( name: 'autechre')
|
81
|
+
|
82
|
+
expect(excel.worksheets[0].name).to eq 'underworld'
|
83
|
+
expect(excel.worksheets[2].name).to eq 'autechre'
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'can access a worksheet by ID' do
|
87
|
+
excel.create_worksheet( name: 'daft punk')
|
88
|
+
excel.create_worksheet( name: 'underworld')
|
89
|
+
|
90
|
+
expect(excel.worksheet(0).name).to eq 'daft punk'
|
91
|
+
|
92
|
+
expect(excel.worksheet(1).name).to eq 'underworld'
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'can add data to a specific row and column' do
|
96
|
+
excel.create_worksheet( name: 'underworld')
|
97
|
+
|
98
|
+
excel[0, 1] = 'born slippy'
|
99
|
+
expect(excel[0, 1]).to eq 'born slippy'
|
100
|
+
|
101
|
+
excel[1, 23] = 23.0
|
102
|
+
expect(excel[1, 23]).to eq 23.0
|
103
|
+
|
104
|
+
excel[0, 5] = true
|
105
|
+
expect( excel[0, 5]).to eq true
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'can ask a row what index it is' do
|
109
|
+
excel.create_worksheet( name: 'underworld')
|
110
|
+
|
111
|
+
excel[3, 0] = 'do i know who i am?'
|
112
|
+
excel[28, 0] = 'who am i?'
|
113
|
+
|
114
|
+
r1 = excel.row(3)
|
115
|
+
expect(r1[0]).to eq 'do i know who i am?'
|
116
|
+
expect(r1.idx).to eq 3 # idx (0-based)
|
117
|
+
|
118
|
+
r2 = excel.row(28)
|
119
|
+
expect(r2[0]).to eq 'who am i?'
|
120
|
+
expect(r2.idx).to eq 28 # idx (0-based)
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'can iterate over the rows in a worksheet' do
|
124
|
+
sheet = excel.create_worksheet
|
125
|
+
|
126
|
+
excel[0, 1] = 12.30
|
127
|
+
excel[1, 1] = 25.30
|
128
|
+
excel[3, 1] = 4
|
129
|
+
|
130
|
+
sheet.each do |row|
|
131
|
+
row[0] = "A#{row.idx}"
|
132
|
+
end
|
133
|
+
|
134
|
+
expect(excel[0, 0]).to eq 'A0'
|
135
|
+
expect(excel[1, 0]).to eq 'A1'
|
136
|
+
|
137
|
+
# pending for JRuby ... spreadsheet iterates from 0 to max row, probably
|
138
|
+
# dynamically creating rows that have never been referenced ..
|
139
|
+
expect(excel[2, 0]).to eq 'A2' unless DataShift::Guards.jruby?
|
140
|
+
|
141
|
+
expect(excel[3, 0]).to eq 'A3'
|
142
|
+
|
143
|
+
expect(excel[0, 1]).to eq 12.30
|
144
|
+
expect(excel[1, 1]).to eq 25.30
|
145
|
+
expect(excel[2, 1]).to satisfy { |x| x == '' || x.nil? }
|
146
|
+
expect(excel[3, 1]).to eq 4
|
147
|
+
end
|
148
|
+
|
149
|
+
it 'can iterate over the cells in a row' do
|
150
|
+
sheet = excel.create_worksheet
|
151
|
+
|
152
|
+
values = ['hello world', 12.30, '', 4]
|
153
|
+
|
154
|
+
values.each_with_index do |v, i|
|
155
|
+
excel[0, i] = v
|
156
|
+
end
|
157
|
+
|
158
|
+
row = excel.row(0)
|
159
|
+
|
160
|
+
row.each { |col| expect(col).to eq values.shift }
|
161
|
+
end
|
162
|
+
|
163
|
+
# it "can support bools" do
|
164
|
+
# pending "reading back value sometimes returns "" when cell was set to false"
|
165
|
+
|
166
|
+
# sheet = excel.create_worksheet
|
167
|
+
|
168
|
+
# end
|
169
|
+
|
170
|
+
it 'can write an Excel file' do
|
171
|
+
excel = Excel.new
|
172
|
+
|
173
|
+
sheet1 = excel.create_worksheet
|
174
|
+
|
175
|
+
excel.create_worksheet( name: 'underworld')
|
176
|
+
|
177
|
+
excel[0, 1] = 'born slippy'
|
178
|
+
expect(excel[0, 1]).to eq 'born slippy'
|
179
|
+
|
180
|
+
expected = result_file('it_can_save_an_excel_file.xls')
|
181
|
+
|
182
|
+
excel.write( expected )
|
183
|
+
|
184
|
+
expect(File.exist?(expected)).to eq true
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
end
|