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
|
@@ -6,11 +6,14 @@
|
|
|
6
6
|
# Details:: Helper for creating consistent import/export format
|
|
7
7
|
# of model's attributes/associations
|
|
8
8
|
#
|
|
9
|
+
require 'datashift/delimiters'
|
|
10
|
+
|
|
9
11
|
module DataShift
|
|
10
12
|
|
|
11
13
|
module ColumnPacker
|
|
12
14
|
|
|
13
15
|
include Delimiters
|
|
16
|
+
extend Delimiters
|
|
14
17
|
|
|
15
18
|
# Return opposite of text delim - "hello, 'barry'" => '"hello, "barry""'
|
|
16
19
|
def escape_text_delim
|
|
@@ -18,111 +21,57 @@ module DataShift
|
|
|
18
21
|
"\'"
|
|
19
22
|
end
|
|
20
23
|
|
|
21
|
-
|
|
22
24
|
# Ensure a value is written to CSV correctly
|
|
23
|
-
# TODO - better ways ?? - see transcoding and String#encode
|
|
25
|
+
# TODO: - better ways ?? - see transcoding and String#encode
|
|
24
26
|
|
|
25
27
|
def escape_for_csv(value)
|
|
26
|
-
|
|
28
|
+
return nil if value.blank?
|
|
29
|
+
text = value.to_s.gsub(text_delim, escape_text_delim).gsub("\n", '\\n')
|
|
27
30
|
|
|
28
|
-
text = "#{text_delim}#{text}#{text_delim}" if(text.include?(
|
|
31
|
+
text = "#{text_delim}#{text}#{text_delim}" if(text.include?(csv_delimiter) && text.present?)
|
|
29
32
|
text
|
|
30
33
|
end
|
|
31
34
|
|
|
32
|
-
|
|
33
|
-
def to_headers( records, associations = nil, options = {} )
|
|
34
|
-
return if( !records.first.is_a?(ActiveRecord::Base) || records.empty?)
|
|
35
|
-
|
|
36
|
-
only = *options[:only] ? [*options[:only]] : nil
|
|
37
|
-
|
|
38
|
-
headers =[]
|
|
39
|
-
|
|
40
|
-
if associations
|
|
41
|
-
details_mgr = DataShift::MethodDictionary.method_details_mgrs[records.first.class]
|
|
42
|
-
|
|
43
|
-
[*associations].each do |a|
|
|
44
|
-
|
|
45
|
-
details_mgr.get_list(a).each do |md|
|
|
46
|
-
|
|
47
|
-
next if(only && !only.include?( md.name.to_sym ) )
|
|
48
|
-
|
|
49
|
-
headers << "#{md.operator}"
|
|
50
|
-
|
|
51
|
-
end
|
|
52
|
-
end if(details_mgr)
|
|
53
|
-
|
|
54
|
-
else
|
|
55
|
-
|
|
56
|
-
headers = records.first.class.columns.collect( &:name )
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
headers
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
|
|
63
35
|
# Convert an AR instance to a single column
|
|
64
36
|
# e.g User : ":name = > 'tom', :role => 'developer'"
|
|
65
37
|
#
|
|
66
38
|
# OPTIONS
|
|
67
|
-
# with_only Specify (as symbols) columns for association types to export
|
|
68
|
-
# json: Export association data in single column in JSON format
|
|
69
39
|
#
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
return "" if(record.nil? || (record.respond_to?(:each) && record.empty?) )
|
|
73
|
-
|
|
74
|
-
with_only = *options[:with_only] ? [*options[:with_only]] : nil
|
|
40
|
+
# json: Export association data in single column in JSON format
|
|
75
41
|
|
|
76
|
-
|
|
42
|
+
def record_to_column(record, json = false)
|
|
77
43
|
|
|
78
|
-
if
|
|
44
|
+
return '' if record.nil? || (record.respond_to?(:each) && record.empty?)
|
|
79
45
|
|
|
80
|
-
|
|
46
|
+
return record.to_json if json # packs associations into single column
|
|
81
47
|
|
|
82
|
-
|
|
48
|
+
data = []
|
|
83
49
|
|
|
84
|
-
|
|
50
|
+
if record.respond_to?(:each)
|
|
51
|
+
return '' if record.empty?
|
|
85
52
|
|
|
86
|
-
|
|
87
|
-
return data.to_json
|
|
88
|
-
else
|
|
89
|
-
return "#{data.join(Delimiters::multi_assoc_delim)}"
|
|
90
|
-
end
|
|
53
|
+
record.each { |r| data << record_to_column(r, json) }
|
|
91
54
|
|
|
55
|
+
data.join(multi_assoc_delim).to_s
|
|
92
56
|
else
|
|
93
|
-
|
|
94
|
-
data = options[:json] ? {} : []
|
|
95
|
-
|
|
96
57
|
record.serializable_hash.each do |name, value|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
if(options[:json])
|
|
100
|
-
data[name] = value
|
|
101
|
-
else
|
|
102
|
-
data << "#{name.to_sym} #{Delimiters::key_value_sep} #{value.to_s.gsub(text_delim, escape_text_delim)}"
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
if(options[:json])#
|
|
107
|
-
return data.to_json
|
|
108
|
-
else
|
|
109
|
-
"#{Delimiters::attribute_list_start}#{data.join(Delimiters::multi_value_delim)}#{Delimiters::attribute_list_end}"
|
|
58
|
+
text = value.to_s.gsub(text_delim, escape_text_delim)
|
|
59
|
+
data << "#{name}:#{key_value_sep}#{text}"
|
|
110
60
|
end
|
|
111
61
|
|
|
62
|
+
"#{attribute_list_start}#{data.join(multi_value_delim)}#{attribute_list_end}"
|
|
112
63
|
end
|
|
113
64
|
|
|
114
65
|
end
|
|
115
66
|
|
|
116
|
-
|
|
117
67
|
# Convert an AR instance to a set of CSV columns
|
|
118
68
|
def record_to_csv(record, options = {})
|
|
119
69
|
csv_data = record.serializable_hash.values.collect { |value| escape_for_csv(value) }
|
|
120
70
|
|
|
121
|
-
[*options[:methods]].each { |x| csv_data << escape_for_csv(record.send(x)) if
|
|
71
|
+
[*options[:methods]].each { |x| csv_data << escape_for_csv(record.send(x)) if record.respond_to?(x) } if options[:methods]
|
|
122
72
|
|
|
123
|
-
csv_data.join(
|
|
73
|
+
csv_data.join( csv_delimiter )
|
|
124
74
|
end
|
|
125
75
|
|
|
126
|
-
|
|
127
76
|
end
|
|
128
77
|
end
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
# Copyright:: (c) Autotelik Media Ltd 2015
|
|
2
|
+
# Author :: Tom Statter
|
|
3
|
+
# Date :: Feb 2015
|
|
4
|
+
# License:: MIT
|
|
5
|
+
#
|
|
6
|
+
# Details:: Read mappings and provide cache type services for source=>destination mappings
|
|
7
|
+
#
|
|
8
|
+
require 'erubis'
|
|
9
|
+
|
|
10
|
+
module DataShift
|
|
11
|
+
|
|
12
|
+
class Configuration
|
|
13
|
+
|
|
14
|
+
# List of association +TYPES+ to INCLUDE [:assignment, :enum, :belongs_to, :has_one, :has_many, :method]
|
|
15
|
+
# Defaults to [:assignment, :enum]
|
|
16
|
+
#
|
|
17
|
+
# @param [Array<#call>] List of association Types to include (:has_one etc)
|
|
18
|
+
# @return [Array<#call>]
|
|
19
|
+
#
|
|
20
|
+
attr_accessor :with
|
|
21
|
+
|
|
22
|
+
# When calling the export with associations methods the default
|
|
23
|
+
# is to include ALL all association TYPES as defined by
|
|
24
|
+
# ModelMethod.supported_types_enum
|
|
25
|
+
#
|
|
26
|
+
# This can be used to reduce this down to only export specific types
|
|
27
|
+
#
|
|
28
|
+
# @param [Array<#call>] List of association Types to EXCLUDE (:has_one etc)
|
|
29
|
+
# @return [Array<#call>]
|
|
30
|
+
#
|
|
31
|
+
attr_accessor :exclude
|
|
32
|
+
|
|
33
|
+
# @param [Array<#call>] List of columns to remove from files
|
|
34
|
+
# @return [Array<#call>]
|
|
35
|
+
#
|
|
36
|
+
attr_accessor :remove_columns
|
|
37
|
+
|
|
38
|
+
# List of headers/columns that are Mandatory i.e must be present in the inbound data
|
|
39
|
+
#
|
|
40
|
+
# @param [Array<#call>] List of headers/columns that are Mandatory
|
|
41
|
+
# @return [Array<#call>]
|
|
42
|
+
#
|
|
43
|
+
attr_accessor :mandatory
|
|
44
|
+
|
|
45
|
+
# @param [Boolean] Remove standard Rails cols like :id, created_at etc
|
|
46
|
+
# Default is false - i.e id, created_at etc are included by default
|
|
47
|
+
# @return [Boolean]
|
|
48
|
+
#
|
|
49
|
+
attr_accessor :remove_rails
|
|
50
|
+
|
|
51
|
+
# When performing import, default is to ignore any columns that cannot be mapped (via headers)
|
|
52
|
+
# To raise an error set strict => true
|
|
53
|
+
# Defaults to `false`. Set to `true` to cause exceptions to be thrown
|
|
54
|
+
# The setting is ignored if routes are disabled.
|
|
55
|
+
# @param [Boolean] value
|
|
56
|
+
# @return [Boolean]
|
|
57
|
+
attr_accessor :strict
|
|
58
|
+
|
|
59
|
+
# When performing writes use update methods that write immediately to DB
|
|
60
|
+
# and use validations.
|
|
61
|
+
#
|
|
62
|
+
# Validations can ensure business logic but this can be far less efficient as writes to DB once per column
|
|
63
|
+
#
|
|
64
|
+
# To raise an error set strict => true
|
|
65
|
+
# Default is to use more efficient but less strict attribute writing,
|
|
66
|
+
# no write to DB/No validations run
|
|
67
|
+
# @param [Boolean] value
|
|
68
|
+
# @return [Boolean]
|
|
69
|
+
attr_accessor :update_and_validate
|
|
70
|
+
|
|
71
|
+
# Controls the amount of information written to the log
|
|
72
|
+
# Defaults to `false`. Set to `true` to cause extensive progress messages to be logged
|
|
73
|
+
# @param [Boolean] value
|
|
74
|
+
# @return [Boolean]
|
|
75
|
+
attr_accessor :verbose
|
|
76
|
+
|
|
77
|
+
# Do everything except commit changes.
|
|
78
|
+
# For import save will not be called on the final object
|
|
79
|
+
# Defaults to `false`. Set to `true` to cause extensive progress messages to be logged
|
|
80
|
+
# @param [Boolean] value
|
|
81
|
+
# @return [Boolean]
|
|
82
|
+
attr_accessor :dummy_run
|
|
83
|
+
|
|
84
|
+
# Expand association data into multiple columns
|
|
85
|
+
#
|
|
86
|
+
# @param [Boolean]
|
|
87
|
+
# @return [Boolean]
|
|
88
|
+
#
|
|
89
|
+
attr_accessor :expand_associations
|
|
90
|
+
|
|
91
|
+
# When importing/exporting associations default is to include ALL associations of included TYPES
|
|
92
|
+
#
|
|
93
|
+
# Specify associations by name to remove
|
|
94
|
+
#
|
|
95
|
+
# @param [Array<#call>] List of association Names to EXCLUDE
|
|
96
|
+
# @return [Array<#call>]
|
|
97
|
+
#
|
|
98
|
+
attr_accessor :exclude_associations
|
|
99
|
+
|
|
100
|
+
# List of external columns that do not map to any operator but should be included in processing.
|
|
101
|
+
#
|
|
102
|
+
# Example use cases
|
|
103
|
+
#
|
|
104
|
+
# Provides the opportunity for loaders to provide specific methods to handle columns
|
|
105
|
+
# that do not map directly to a model's operators or associations
|
|
106
|
+
#
|
|
107
|
+
# Enable handling delegated methods i.e no direct association but method is on a model through it's delegate
|
|
108
|
+
#
|
|
109
|
+
# @param [Array] value
|
|
110
|
+
# @return [Array]
|
|
111
|
+
attr_accessor :force_inclusion_of_columns
|
|
112
|
+
|
|
113
|
+
# All external columns should be included in processing whether or not they automatically map to an operator
|
|
114
|
+
#
|
|
115
|
+
# @param [Boolean]
|
|
116
|
+
# @return [Boolean]
|
|
117
|
+
#
|
|
118
|
+
attr_accessor :include_all_columns
|
|
119
|
+
|
|
120
|
+
def self.rails_columns
|
|
121
|
+
@rails_standard_columns ||= [:id, :created_at, :created_on, :updated_at, :updated_on]
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def initialize
|
|
125
|
+
@with = [:assignment, :enum]
|
|
126
|
+
@exclude = []
|
|
127
|
+
@remove_columns = []
|
|
128
|
+
|
|
129
|
+
@strict = false
|
|
130
|
+
@verbose = false
|
|
131
|
+
@dummy_run = false
|
|
132
|
+
@force_inclusion_of_columns = []
|
|
133
|
+
@exclude_associations = []
|
|
134
|
+
|
|
135
|
+
@expand_associations = false
|
|
136
|
+
|
|
137
|
+
# default to more efficient attribute writing - no write to DB/no validations run
|
|
138
|
+
@update_and_validate = false
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# @return [DataShift::Configuration] DataShift's current configuration
|
|
142
|
+
def self.call
|
|
143
|
+
@configuration ||= Configuration.new
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def self.reset
|
|
147
|
+
@configuration = Configuration.new
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
# Set DataShift's configuration
|
|
151
|
+
# @param config [DataShift::Configuration]
|
|
152
|
+
class << self
|
|
153
|
+
attr_writer :configuration
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# Modify DataShift's current configuration
|
|
157
|
+
# @yieldparam [DataShift::Configuration] config current DataShift config
|
|
158
|
+
# ```
|
|
159
|
+
# DataShift::Configuration.call do |config|
|
|
160
|
+
# config.verbose = false
|
|
161
|
+
# end
|
|
162
|
+
# ```
|
|
163
|
+
def self.configure
|
|
164
|
+
yield call
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
# Prepare the operators types in scope based on number of configuration attributes
|
|
168
|
+
# Default is assignment only
|
|
169
|
+
#
|
|
170
|
+
# Responds to Configuration params :
|
|
171
|
+
#
|
|
172
|
+
# with: [:assignment, :enum, :belongs_to, :has_one, :has_many, :method]
|
|
173
|
+
#
|
|
174
|
+
# with: :all -> all op types
|
|
175
|
+
#
|
|
176
|
+
# exclude: - Remove any of [::assignment, :enum, :belongs_to, :has_one, :has_many, :method]
|
|
177
|
+
#
|
|
178
|
+
def op_types_in_scope
|
|
179
|
+
|
|
180
|
+
types_in_scope = if with_all?
|
|
181
|
+
ModelMethod.supported_types_enum.dup
|
|
182
|
+
else
|
|
183
|
+
[*@with].dup
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
types_in_scope -= [*@exclude]
|
|
187
|
+
|
|
188
|
+
types_in_scope
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def op_type_in_scope?( model_method )
|
|
192
|
+
op_types_in_scope.include? model_method.operator_type
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def with_all?
|
|
196
|
+
[*@with].include?(:all)
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# Take options and create a list of symbols to remove from headers
|
|
200
|
+
#
|
|
201
|
+
# Rails columns like id, created_at etc are included by default
|
|
202
|
+
# Specify option :remove_rails to remove them from output
|
|
203
|
+
#
|
|
204
|
+
def prep_remove_list
|
|
205
|
+
remove_list = [*remove_columns].compact.collect { |x| x.to_s.downcase.to_sym }
|
|
206
|
+
|
|
207
|
+
remove_list += DataShift::Configuration.rails_columns if remove_rails
|
|
208
|
+
|
|
209
|
+
remove_list
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
# Modify DataShift's current Export configuration from an options hash
|
|
213
|
+
def self.from_hash( options )
|
|
214
|
+
DataShift::Configuration.configure do |config|
|
|
215
|
+
options.each do |key, value|
|
|
216
|
+
config.send("#{key}=", value) if(config.respond_to?(key))
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
class YamlConfiguration
|
|
224
|
+
|
|
225
|
+
attr_accessor :datashift_defaults, :datashift_populators
|
|
226
|
+
|
|
227
|
+
include DataShift::Logging
|
|
228
|
+
|
|
229
|
+
# N.B @mappings is an OpenStruct data structure
|
|
230
|
+
#
|
|
231
|
+
attr_reader :key
|
|
232
|
+
attr_accessor :yaml_data, :key_config
|
|
233
|
+
|
|
234
|
+
def initialize( key = nil)
|
|
235
|
+
@key = key
|
|
236
|
+
|
|
237
|
+
@config = OpenStruct.new
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
def read( file, key = nil )
|
|
241
|
+
|
|
242
|
+
unless File.exist?(file)
|
|
243
|
+
logger.error "Cannot open configuration file - #{file} - file does not exist."
|
|
244
|
+
raise FileNotFound.new("Cannot open mapping file - #{file}")
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
begin
|
|
248
|
+
# Load application configuration
|
|
249
|
+
set_mapping( file )
|
|
250
|
+
|
|
251
|
+
set_key_config!( key ) if key
|
|
252
|
+
rescue => e
|
|
253
|
+
logger.error e.inspect
|
|
254
|
+
logger.error "Failed to parse config file #{map_file_name} - bad YAML ?"
|
|
255
|
+
raise e
|
|
256
|
+
end
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
# OpenStruct not a hash .. supports form ... config.path, config.full_name etc
|
|
260
|
+
def method_missing(method, *_args, &_block)
|
|
261
|
+
@config.send(method)
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
# Config file can contain sets of entries, identified with a key.
|
|
265
|
+
# e.g
|
|
266
|
+
# A:
|
|
267
|
+
# log_level: 1
|
|
268
|
+
# B:
|
|
269
|
+
# log_level: 2
|
|
270
|
+
#
|
|
271
|
+
# Restrict searches/config entries to single set via key e.g 'A'
|
|
272
|
+
#
|
|
273
|
+
def set_key_config!( key )
|
|
274
|
+
raise MissingConfigOptionError.new("No config entry found for key [#{key}]") unless yaml_data && yaml_data[key].is_a?(Hash)
|
|
275
|
+
@key_config = OpenStruct.new( yaml_config[key] ) # Argument HAS to be a hash
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
# Merge another YAML section (identified by key) into @key_config
|
|
279
|
+
def merge_key_config!( key )
|
|
280
|
+
raise Beeline::MissingConfigOptionError.new("No config entry found for key [#{key}]") unless yaml_data && yaml_data[key].is_a?(Hash)
|
|
281
|
+
|
|
282
|
+
temp = yaml_data[key].merge(@key_config.instance_variable_get('@table') || {})
|
|
283
|
+
|
|
284
|
+
key_config = OpenStruct.new(temp)
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
def set( key, value)
|
|
288
|
+
key_config.instance_variable_get('@table')[key] = value
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
private
|
|
292
|
+
|
|
293
|
+
def set_mapping( file )
|
|
294
|
+
|
|
295
|
+
erb = begin
|
|
296
|
+
Erubis::Eruby.new( File.read(file )).result
|
|
297
|
+
rescue => e
|
|
298
|
+
logger.error "Failed to parse erb template #{file} error: #{e.inspect}"
|
|
299
|
+
raise e
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
begin
|
|
303
|
+
yaml_data = YAML.load(erb)
|
|
304
|
+
|
|
305
|
+
logger.info "Loaded YAML config from [#{file}]"
|
|
306
|
+
|
|
307
|
+
rescue => e
|
|
308
|
+
logger.error "YAML parse error: #{e.inspect}"
|
|
309
|
+
raise e
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
@config = OpenStruct.new(yaml_data)
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
end
|