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.
Files changed (422) hide show
  1. checksums.yaml +4 -4
  2. data/{LICENSE.txt → LICENSE} +0 -0
  3. data/Rakefile +1 -20
  4. data/datashift.thor +125 -0
  5. data/lib/applications/apache_poi_extensions.rb +21 -52
  6. data/lib/applications/excel.rb +64 -57
  7. data/lib/applications/hssf_row_extensions.rb +66 -0
  8. data/lib/applications/jexcel_file.rb +99 -95
  9. data/lib/applications/jexcel_file_extensions.rb +76 -83
  10. data/lib/applications/jruby/word.rb +36 -36
  11. data/lib/applications/ruby_poi_translations.rb +34 -32
  12. data/lib/applications/spreadsheet_extensions.rb +21 -19
  13. data/lib/datashift.rb +49 -59
  14. data/lib/datashift/binder.rb +217 -0
  15. data/lib/datashift/column_packer.rb +21 -72
  16. data/lib/datashift/configuration.rb +317 -0
  17. data/lib/datashift/context_factory.rb +88 -0
  18. data/lib/datashift/core_ext/array.rb +15 -0
  19. data/lib/datashift/core_ext/csv_ext.rb +46 -0
  20. data/lib/datashift/core_ext/string.rb +49 -0
  21. data/lib/datashift/core_ext/to_b.rb +11 -0
  22. data/lib/datashift/delimiters.rb +55 -61
  23. data/lib/datashift/doc_context.rb +137 -0
  24. data/lib/datashift/excel_base.rb +93 -81
  25. data/lib/datashift/exceptions.rb +30 -28
  26. data/lib/datashift/file_definitions.rb +44 -39
  27. data/lib/datashift/guards.rb +5 -5
  28. data/lib/datashift/header.rb +25 -0
  29. data/lib/datashift/headers.rb +94 -0
  30. data/lib/datashift/inbound_data/column.rb +44 -0
  31. data/lib/datashift/inbound_data/lookup_support.rb +33 -0
  32. data/lib/datashift/inbound_data/method_binding.rb +139 -0
  33. data/lib/datashift/load_object.rb +37 -12
  34. data/lib/datashift/logging.rb +54 -27
  35. data/lib/datashift/mandatory.rb +39 -0
  36. data/lib/datashift/mapping/data_flow_schema.rb +198 -0
  37. data/lib/datashift/{model_mapper.rb → mapping/mapper_utils.rb} +30 -10
  38. data/lib/datashift/model_methods/catalogue.rb +183 -0
  39. data/lib/datashift/model_methods/collection.rb +140 -0
  40. data/lib/datashift/model_methods/model_method.rb +162 -0
  41. data/lib/datashift/model_methods/model_methods_manager.rb +76 -0
  42. data/lib/datashift/model_methods/operator.rb +62 -0
  43. data/lib/datashift/node_collection.rb +26 -0
  44. data/lib/datashift/node_context.rb +68 -0
  45. data/lib/datashift/populator.rb +308 -282
  46. data/lib/datashift/progress_monitor.rb +91 -0
  47. data/lib/datashift/querying.rb +110 -52
  48. data/lib/datashift/templates/import_export_config.erb +55 -0
  49. data/lib/datashift/transformation/factory.rb +219 -0
  50. data/lib/datashift/transformation/remove.rb +44 -0
  51. data/lib/datashift/version.rb +3 -0
  52. data/lib/exporters/configuration.rb +84 -0
  53. data/lib/exporters/csv_exporter.rb +54 -52
  54. data/lib/exporters/excel_exporter.rb +80 -61
  55. data/lib/exporters/exporter_base.rb +8 -8
  56. data/lib/generators/config_generator.rb +218 -0
  57. data/lib/generators/csv_generator.rb +13 -70
  58. data/lib/generators/excel_generator.rb +23 -111
  59. data/lib/generators/generator_base.rb +15 -70
  60. data/lib/loaders/configuration.rb +90 -0
  61. data/lib/loaders/csv_loader.rb +63 -101
  62. data/lib/loaders/excel_loader.rb +71 -156
  63. data/lib/loaders/failure_data.rb +40 -0
  64. data/lib/loaders/file_loader.rb +16 -0
  65. data/lib/loaders/loader_base.rb +82 -410
  66. data/lib/loaders/loader_factory.rb +42 -0
  67. data/lib/loaders/paperclip/attachment_loader.rb +157 -140
  68. data/lib/loaders/paperclip/datashift_paperclip.rb +18 -35
  69. data/lib/loaders/paperclip/image_loading.rb +40 -35
  70. data/lib/loaders/reporters/basic_stdout_reporter.rb +40 -0
  71. data/lib/loaders/reporters/reporter.rb +26 -0
  72. data/lib/tasks/config.thor +65 -0
  73. data/{tasks → lib/tasks}/config/seed_fu_product_template.erb +0 -0
  74. data/{tasks → lib/tasks}/config/tidy_config.txt +0 -0
  75. data/lib/tasks/export.thor +192 -0
  76. data/lib/tasks/generate.thor +190 -0
  77. data/lib/tasks/import.thor +142 -0
  78. data/lib/{thor → tasks}/paperclip.thor +69 -69
  79. data/{tasks → lib/tasks/to_convert_to_thor}/db_tasks.rake +20 -20
  80. data/lib/tasks/tools.thor +109 -0
  81. data/spec/MissingAttachmentRecords/DEMO_001_ror_bag.jpeg +0 -0
  82. data/spec/MissingAttachmentRecords/DEMO_002_Powerstation.jpeg +0 -0
  83. data/spec/MissingAttachmentRecords/DEMO_003_ror_mug.jpeg +0 -0
  84. data/spec/MissingAttachmentRecords/DEMO_004_ror_ringer.jpeg +0 -0
  85. data/spec/datashift/binder_spec.rb +266 -0
  86. data/spec/datashift/config_generator_spec.rb +186 -0
  87. data/spec/datashift/configuration.rb +66 -0
  88. data/spec/datashift/context_factory_spec.rb +63 -0
  89. data/spec/datashift/data_flow_schema_spec.rb +150 -0
  90. data/spec/datashift/datashift_spec.rb +52 -0
  91. data/spec/datashift/excel_base_spec.rb +57 -0
  92. data/spec/datashift/excel_spec.rb +188 -0
  93. data/spec/datashift/failure_data_spec.rb +27 -0
  94. data/spec/{file_definitions.rb → datashift/file_definitions.rb} +9 -10
  95. data/spec/datashift/headers_spec.rb +56 -0
  96. data/spec/datashift/inbound_data_spec.rb +47 -0
  97. data/spec/datashift/mapper_utils_spec.rb +38 -0
  98. data/spec/datashift/method_binding_spec.rb +60 -0
  99. data/spec/datashift/model_method_spec.rb +109 -0
  100. data/spec/datashift/model_methods_catalogue.rb +111 -0
  101. data/spec/datashift/model_methods_collection_spec.rb +138 -0
  102. data/spec/datashift/model_methods_manager_spec.rb +329 -0
  103. data/spec/datashift/populator_spec.rb +117 -0
  104. data/spec/datashift/thor_spec.rb +314 -0
  105. data/spec/datashift/transformation/factory_spec.rb +195 -0
  106. data/spec/datashift/transformation/transformer_remove_spec.rb +43 -0
  107. data/spec/dummy/Gemfile +53 -0
  108. data/spec/dummy/Gemfile.lock +197 -0
  109. data/spec/dummy/README.rdoc +28 -0
  110. data/spec/dummy/Rakefile +6 -0
  111. data/spec/dummy/app/assets/javascripts/application.js +16 -0
  112. data/spec/dummy/app/assets/javascripts/categories.js +2 -0
  113. data/spec/dummy/app/assets/javascripts/digitals.js +2 -0
  114. data/spec/dummy/app/assets/javascripts/empties.js +2 -0
  115. data/spec/dummy/app/assets/javascripts/loader_releases.js +2 -0
  116. data/spec/dummy/app/assets/javascripts/long_and_complex_table_linked_to_versions.js +2 -0
  117. data/spec/dummy/app/assets/javascripts/milestones.js +2 -0
  118. data/spec/dummy/app/assets/javascripts/owners.js +2 -0
  119. data/spec/dummy/app/assets/javascripts/projects.js +2 -0
  120. data/spec/dummy/app/assets/javascripts/users.js +2 -0
  121. data/spec/dummy/app/assets/javascripts/versions.js +2 -0
  122. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  123. data/spec/dummy/app/assets/stylesheets/categories.css +4 -0
  124. data/spec/dummy/app/assets/stylesheets/digitals.css +4 -0
  125. data/spec/dummy/app/assets/stylesheets/empties.css +4 -0
  126. data/spec/dummy/app/assets/stylesheets/loader_releases.css +4 -0
  127. data/spec/dummy/app/assets/stylesheets/long_and_complex_table_linked_to_versions.css +4 -0
  128. data/spec/dummy/app/assets/stylesheets/milestones.css +4 -0
  129. data/spec/dummy/app/assets/stylesheets/owners.css +4 -0
  130. data/spec/dummy/app/assets/stylesheets/projects.css +4 -0
  131. data/spec/dummy/app/assets/stylesheets/scaffold.css +56 -0
  132. data/spec/dummy/app/assets/stylesheets/users.css +4 -0
  133. data/spec/dummy/app/assets/stylesheets/versions.css +4 -0
  134. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  135. data/spec/dummy/app/controllers/categories_controller.rb +58 -0
  136. data/spec/dummy/app/controllers/digitals_controller.rb +58 -0
  137. data/spec/dummy/app/controllers/empties_controller.rb +58 -0
  138. data/spec/dummy/app/controllers/loader_releases_controller.rb +58 -0
  139. data/spec/dummy/app/controllers/long_and_complex_table_linked_to_versions_controller.rb +58 -0
  140. data/spec/dummy/app/controllers/milestones_controller.rb +58 -0
  141. data/spec/dummy/app/controllers/owners_controller.rb +58 -0
  142. data/spec/dummy/app/controllers/projects_controller.rb +58 -0
  143. data/spec/dummy/app/controllers/users_controller.rb +58 -0
  144. data/spec/dummy/app/controllers/versions_controller.rb +58 -0
  145. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  146. data/spec/dummy/app/helpers/categories_helper.rb +2 -0
  147. data/spec/dummy/app/helpers/digitals_helper.rb +2 -0
  148. data/spec/dummy/app/helpers/empties_helper.rb +2 -0
  149. data/spec/dummy/app/helpers/loader_releases_helper.rb +2 -0
  150. data/spec/dummy/app/helpers/long_and_complex_table_linked_to_versions_helper.rb +2 -0
  151. data/spec/dummy/app/helpers/milestones_helper.rb +2 -0
  152. data/spec/dummy/app/helpers/owners_helper.rb +2 -0
  153. data/spec/dummy/app/helpers/projects_helper.rb +2 -0
  154. data/spec/dummy/app/helpers/users_helper.rb +2 -0
  155. data/spec/dummy/app/helpers/versions_helper.rb +2 -0
  156. data/spec/dummy/app/models/category.rb +6 -0
  157. data/spec/dummy/app/models/digital.rb +22 -0
  158. data/spec/dummy/app/models/empty.rb +2 -0
  159. data/spec/dummy/app/models/loader_release.rb +10 -0
  160. data/spec/dummy/app/models/long_and_complex_table_linked_to_version.rb +6 -0
  161. data/spec/dummy/app/models/milestone.rb +15 -0
  162. data/spec/dummy/app/models/owner.rb +13 -0
  163. data/spec/dummy/app/models/project.rb +53 -0
  164. data/spec/dummy/app/models/user.rb +5 -0
  165. data/spec/dummy/app/models/version.rb +7 -0
  166. data/spec/dummy/app/views/categories/_form.html.erb +17 -0
  167. data/spec/dummy/app/views/categories/edit.html.erb +6 -0
  168. data/spec/dummy/app/views/categories/index.html.erb +25 -0
  169. data/spec/dummy/app/views/categories/new.html.erb +5 -0
  170. data/spec/dummy/app/views/categories/show.html.erb +4 -0
  171. data/spec/dummy/app/views/digitals/_form.html.erb +17 -0
  172. data/spec/dummy/app/views/digitals/edit.html.erb +6 -0
  173. data/spec/dummy/app/views/digitals/index.html.erb +25 -0
  174. data/spec/dummy/app/views/digitals/new.html.erb +5 -0
  175. data/spec/dummy/app/views/digitals/show.html.erb +4 -0
  176. data/spec/dummy/app/views/empties/_form.html.erb +17 -0
  177. data/spec/dummy/app/views/empties/edit.html.erb +6 -0
  178. data/spec/dummy/app/views/empties/index.html.erb +25 -0
  179. data/spec/dummy/app/views/empties/new.html.erb +5 -0
  180. data/spec/dummy/app/views/empties/show.html.erb +4 -0
  181. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  182. data/spec/dummy/app/views/loader_releases/_form.html.erb +17 -0
  183. data/spec/dummy/app/views/loader_releases/edit.html.erb +6 -0
  184. data/spec/dummy/app/views/loader_releases/index.html.erb +25 -0
  185. data/spec/dummy/app/views/loader_releases/new.html.erb +5 -0
  186. data/spec/dummy/app/views/loader_releases/show.html.erb +4 -0
  187. data/spec/dummy/app/views/long_and_complex_table_linked_to_versions/_form.html.erb +17 -0
  188. data/spec/dummy/app/views/long_and_complex_table_linked_to_versions/edit.html.erb +6 -0
  189. data/spec/dummy/app/views/long_and_complex_table_linked_to_versions/index.html.erb +25 -0
  190. data/spec/dummy/app/views/long_and_complex_table_linked_to_versions/new.html.erb +5 -0
  191. data/spec/dummy/app/views/long_and_complex_table_linked_to_versions/show.html.erb +4 -0
  192. data/spec/dummy/app/views/milestones/_form.html.erb +17 -0
  193. data/spec/dummy/app/views/milestones/edit.html.erb +6 -0
  194. data/spec/dummy/app/views/milestones/index.html.erb +25 -0
  195. data/spec/dummy/app/views/milestones/new.html.erb +5 -0
  196. data/spec/dummy/app/views/milestones/show.html.erb +4 -0
  197. data/spec/dummy/app/views/owners/_form.html.erb +17 -0
  198. data/spec/dummy/app/views/owners/edit.html.erb +6 -0
  199. data/spec/dummy/app/views/owners/index.html.erb +25 -0
  200. data/spec/dummy/app/views/owners/new.html.erb +5 -0
  201. data/spec/dummy/app/views/owners/show.html.erb +4 -0
  202. data/spec/dummy/app/views/projects/_form.html.erb +17 -0
  203. data/spec/dummy/app/views/projects/edit.html.erb +6 -0
  204. data/spec/dummy/app/views/projects/index.html.erb +25 -0
  205. data/spec/dummy/app/views/projects/new.html.erb +5 -0
  206. data/spec/dummy/app/views/projects/show.html.erb +4 -0
  207. data/spec/dummy/app/views/users/_form.html.erb +17 -0
  208. data/spec/dummy/app/views/users/edit.html.erb +6 -0
  209. data/spec/dummy/app/views/users/index.html.erb +25 -0
  210. data/spec/dummy/app/views/users/new.html.erb +5 -0
  211. data/spec/dummy/app/views/users/show.html.erb +4 -0
  212. data/spec/dummy/app/views/versions/_form.html.erb +17 -0
  213. data/spec/dummy/app/views/versions/edit.html.erb +6 -0
  214. data/spec/dummy/app/views/versions/index.html.erb +25 -0
  215. data/spec/dummy/app/views/versions/new.html.erb +5 -0
  216. data/spec/dummy/app/views/versions/show.html.erb +4 -0
  217. data/spec/dummy/bin/bundle +3 -0
  218. data/spec/dummy/bin/rails +9 -0
  219. data/spec/dummy/bin/rake +9 -0
  220. data/spec/dummy/bin/setup +29 -0
  221. data/spec/dummy/bin/spring +16 -0
  222. data/spec/dummy/config.ru +4 -0
  223. data/spec/dummy/config/application.rb +26 -0
  224. data/spec/dummy/config/boot.rb +3 -0
  225. data/spec/dummy/config/database.yml +25 -0
  226. data/spec/dummy/config/environment.rb +5 -0
  227. data/spec/dummy/config/environments/development.rb +41 -0
  228. data/spec/dummy/config/environments/production.rb +79 -0
  229. data/spec/dummy/config/environments/test.rb +42 -0
  230. data/spec/dummy/config/initializers/assets.rb +11 -0
  231. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  232. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  233. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  234. data/spec/dummy/config/initializers/inflections.rb +16 -0
  235. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  236. data/spec/dummy/config/initializers/session_store.rb +3 -0
  237. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  238. data/spec/dummy/config/locales/en.yml +23 -0
  239. data/spec/dummy/config/routes.rb +76 -0
  240. data/spec/dummy/config/secrets.yml +22 -0
  241. data/spec/dummy/db/development.sqlite3 +0 -0
  242. data/spec/dummy/db/migrate/20110803201325_create_test_bed.rb +98 -0
  243. data/spec/dummy/db/migrate/20121009161700_add_digitals.rb +24 -0
  244. data/spec/dummy/db/migrate/20161005123106_create_digitals.rb +8 -0
  245. data/spec/dummy/db/migrate/20161005123106_create_long_and_complex_table_linked_to_versions.rb +8 -0
  246. data/spec/dummy/db/migrate/20161005123107_create_loader_releases.rb +8 -0
  247. data/spec/dummy/db/migrate/20161005123108_create_owners.rb +8 -0
  248. data/spec/dummy/db/migrate/20161005123109_create_empties.rb +8 -0
  249. data/spec/dummy/db/migrate/20161005123110_create_projects.rb +8 -0
  250. data/spec/dummy/db/migrate/20161005123111_create_users.rb +8 -0
  251. data/spec/dummy/db/migrate/20161005123111_create_versions.rb +8 -0
  252. data/spec/dummy/db/migrate/20161005123112_create_milestones.rb +8 -0
  253. data/spec/dummy/db/migrate/20161005123113_create_categories.rb +8 -0
  254. data/spec/dummy/db/schema.rb +93 -0
  255. data/spec/dummy/db/seeds.rb +9 -0
  256. data/spec/dummy/db/test.sqlite3 +0 -0
  257. data/spec/dummy/log/test.log +69 -0
  258. data/spec/dummy/public/404.html +67 -0
  259. data/spec/dummy/public/422.html +67 -0
  260. data/spec/dummy/public/500.html +66 -0
  261. data/spec/dummy/public/favicon.ico +0 -0
  262. data/spec/dummy/public/robots.txt +5 -0
  263. data/spec/dummy/sandbox_example.thor +4 -0
  264. data/spec/dummy/test/controllers/categories_controller_test.rb +49 -0
  265. data/spec/dummy/test/controllers/digitals_controller_test.rb +49 -0
  266. data/spec/dummy/test/controllers/empties_controller_test.rb +49 -0
  267. data/spec/dummy/test/controllers/loader_releases_controller_test.rb +49 -0
  268. data/spec/dummy/test/controllers/long_and_complex_table_linked_to_versions_controller_test.rb +49 -0
  269. data/spec/dummy/test/controllers/milestones_controller_test.rb +49 -0
  270. data/spec/dummy/test/controllers/owners_controller_test.rb +49 -0
  271. data/spec/dummy/test/controllers/projects_controller_test.rb +49 -0
  272. data/spec/dummy/test/controllers/users_controller_test.rb +49 -0
  273. data/spec/dummy/test/controllers/versions_controller_test.rb +49 -0
  274. data/spec/dummy/test/factories/categories.rb +5 -0
  275. data/spec/dummy/test/factories/digitals.rb +5 -0
  276. data/spec/dummy/test/factories/empties.rb +5 -0
  277. data/spec/dummy/test/factories/loader_releases.rb +5 -0
  278. data/spec/dummy/test/factories/long_and_complex_table_linked_to_versions.rb +5 -0
  279. data/spec/dummy/test/factories/milestones.rb +5 -0
  280. data/spec/dummy/test/factories/owners.rb +5 -0
  281. data/spec/dummy/test/factories/projects.rb +5 -0
  282. data/spec/dummy/test/factories/users.rb +5 -0
  283. data/spec/dummy/test/factories/versions.rb +5 -0
  284. data/spec/dummy/test/models/category_test.rb +7 -0
  285. data/spec/dummy/test/models/digital_test.rb +7 -0
  286. data/spec/dummy/test/models/empty_test.rb +7 -0
  287. data/spec/dummy/test/models/loader_release_test.rb +7 -0
  288. data/spec/dummy/test/models/long_and_complex_table_linked_to_version_test.rb +7 -0
  289. data/spec/dummy/test/models/milestone_test.rb +7 -0
  290. data/spec/dummy/test/models/owner_test.rb +7 -0
  291. data/spec/dummy/test/models/project_test.rb +7 -0
  292. data/spec/dummy/test/models/user_test.rb +7 -0
  293. data/spec/dummy/test/models/version_test.rb +7 -0
  294. data/spec/dummy/test/test_helper.rb +10 -0
  295. data/spec/exporters/csv_exporter_spec.rb +240 -0
  296. data/spec/exporters/csv_generator_spec.rb +139 -0
  297. data/spec/exporters/excel_exporter_spec.rb +193 -0
  298. data/spec/exporters/excel_generator_spec.rb +181 -0
  299. data/spec/exporters/generator_base_spec.rb +45 -0
  300. data/spec/factories/categories.rb +7 -0
  301. data/spec/factories/factories.rb +18 -0
  302. data/spec/factories/milestone.rb +16 -0
  303. data/spec/factories/projects.rb +41 -0
  304. data/spec/fixtures/BadAssociationName.xls +0 -0
  305. data/spec/fixtures/DemoNegativeTesting.xls +0 -0
  306. data/spec/fixtures/ProjectConfiguration.yml +18 -0
  307. data/spec/fixtures/ProjectsMultiCategories.xls +0 -0
  308. data/spec/fixtures/ProjectsMultiCategoriesHeaderLookup.xls +0 -0
  309. data/spec/fixtures/ProjectsSingleCategories.xls +0 -0
  310. data/spec/fixtures/ProjectsSingleCategories.xlsx +0 -0
  311. data/spec/fixtures/SimpleProjects.xls +0 -0
  312. data/spec/fixtures/config/database.yml +28 -0
  313. data/spec/fixtures/csv/BadAssociationName.csv +6 -0
  314. data/spec/fixtures/csv/DemoNegativeTesting.csv +6 -0
  315. data/spec/fixtures/csv/ProjectsMultiCategories.csv +5 -0
  316. data/spec/fixtures/csv/ProjectsMultiCategoriesHeaderLookup.csv +5 -0
  317. data/spec/fixtures/csv/ProjectsSingleCategories.csv +5 -0
  318. data/spec/fixtures/csv/SimpleProjects.csv +4 -0
  319. data/spec/fixtures/db/migrate/20110803201325_create_test_bed.rb +98 -0
  320. data/spec/fixtures/db/migrate/20121009161700_add_digitals.rb +24 -0
  321. data/spec/fixtures/db/seeds.rb +9 -0
  322. data/spec/fixtures/images/DEMO_001_ror_bag.jpeg +0 -0
  323. data/spec/fixtures/images/DEMO_002_Powerstation.jpeg +0 -0
  324. data/spec/fixtures/images/DEMO_003_ror_mug.jpeg +0 -0
  325. data/spec/fixtures/images/DEMO_004_ror_ringer.jpeg +0 -0
  326. data/spec/fixtures/load_datashift.thor +3 -0
  327. data/spec/fixtures/models/category.rb +6 -0
  328. data/spec/fixtures/models/digital.rb +22 -0
  329. data/spec/fixtures/models/empty.rb +2 -0
  330. data/spec/fixtures/models/loader_release.rb +10 -0
  331. data/spec/fixtures/models/long_and_complex_table_linked_to_version.rb +6 -0
  332. data/spec/fixtures/models/milestone.rb +15 -0
  333. data/spec/fixtures/models/owner.rb +13 -0
  334. data/spec/fixtures/models/project.rb +53 -0
  335. data/spec/fixtures/models/user.rb +5 -0
  336. data/spec/fixtures/models/version.rb +7 -0
  337. data/spec/fixtures/results/exp_project_assoc_headers.xls +0 -0
  338. data/spec/fixtures/results/exp_project_collection_spec.csv +2 -0
  339. data/spec/fixtures/results/exp_project_export.xls +0 -0
  340. data/spec/fixtures/results/exp_project_first_export.xls +0 -0
  341. data/spec/fixtures/results/exp_project_plus_assoc.xls +0 -0
  342. data/spec/fixtures/results/exp_project_plus_assoc_export_spec.csv +9 -0
  343. data/spec/fixtures/results/gen_project_plus_assoc_template.xls +0 -0
  344. data/spec/fixtures/results/gen_project_plus_some_assoc_template.xls +0 -0
  345. data/spec/fixtures/results/gen_project_template.xls +0 -0
  346. data/spec/fixtures/results/project_and_assoc_in_hash_export.xls +0 -0
  347. data/spec/fixtures/results/project_and_assoc_in_json_export.csv +9 -0
  348. data/spec/fixtures/results/project_and_assoc_in_json_export.xls +0 -0
  349. data/spec/fixtures/results/project_export_spec_with_custom_delim_,.csv +2 -0
  350. data/spec/fixtures/results/project_export_spec_with_custom_delim_/302/243.csv +2 -0
  351. data/spec/fixtures/results/project_export_spec_with_custom_delim_/302/247.csv +2 -0
  352. data/spec/fixtures/results/project_plus_assoc_template.csv +1 -0
  353. data/spec/fixtures/results/project_plus_some_assoc_template.csv +1 -0
  354. data/spec/fixtures/results/project_remove_export_spec.csv +2 -0
  355. data/spec/fixtures/results/project_template.csv +1 -0
  356. data/spec/fixtures/results/project_with_methods_export_spec.csv +2 -0
  357. data/spec/fixtures/results/thor_spec_gen_project.csv +1 -0
  358. data/spec/fixtures/sandbox_example.thor +4 -0
  359. data/spec/fixtures/simple_export_spec.xls +0 -0
  360. data/spec/fixtures/simple_template_spec.xls +0 -0
  361. data/spec/fixtures/test_model_defs.rb +7 -0
  362. data/spec/loaders/csv_loader_spec.rb +206 -0
  363. data/spec/loaders/data_flow_excel_loader_spec.rb +290 -0
  364. data/spec/loaders/excel_loader_failures_spec.rb +67 -0
  365. data/spec/loaders/excel_loader_spec.rb +294 -0
  366. data/spec/loaders/loader_base_spec.rb +29 -0
  367. data/spec/loaders/paperclip_loader_spec.rb +106 -0
  368. data/spec/log/datashift.log +14930 -0
  369. data/spec/private/digitals/1/DEMO_003_ror_mug.jpeg +0 -0
  370. data/spec/private/digitals/2/DEMO_002_Powerstation.jpeg +0 -0
  371. data/spec/private/digitals/3/DEMO_004_ror_ringer.jpeg +0 -0
  372. data/spec/private/digitals/4/DEMO_001_ror_bag.jpeg +0 -0
  373. data/spec/spec_helper.rb +26 -230
  374. data/spec/support/clear_and_manage_contexts.rb +25 -0
  375. data/spec/support/database_cleaner.rb +32 -0
  376. data/spec/support/datashift_test_helpers.rb +153 -0
  377. data/spec/support/files_paths_helper.rb +13 -0
  378. data/spec/support/fixtures/results/mapping_template.yaml +15 -0
  379. data/spec/support/sandbox.rb +136 -0
  380. metadata +804 -85
  381. data/README.markdown +0 -274
  382. data/README.rdoc +0 -19
  383. data/VERSION +0 -1
  384. data/datashift.gemspec +0 -48
  385. data/lib/applications/jruby/old_pre_proxy_jexcel_file.rb +0 -437
  386. data/lib/datashift/data_transforms.rb +0 -83
  387. data/lib/datashift/mapping_file_definitions.rb +0 -88
  388. data/lib/datashift/mapping_service.rb +0 -91
  389. data/lib/datashift/method_detail.rb +0 -165
  390. data/lib/datashift/method_details_manager.rb +0 -95
  391. data/lib/datashift/method_dictionary.rb +0 -281
  392. data/lib/datashift/method_mapper.rb +0 -174
  393. data/lib/datashift/thor_base.rb +0 -38
  394. data/lib/generators/mapping_generator.rb +0 -112
  395. data/lib/helpers/core_ext/csv_file.rb +0 -33
  396. data/lib/helpers/core_ext/to_b.rb +0 -24
  397. data/lib/loaders/reporter.rb +0 -58
  398. data/lib/thor/export.thor +0 -175
  399. data/lib/thor/generate.thor +0 -191
  400. data/lib/thor/import.thor +0 -110
  401. data/lib/thor/mapping.thor +0 -65
  402. data/lib/thor/tools.thor +0 -84
  403. data/spec/Gemfile +0 -31
  404. data/spec/Gemfile.lock +0 -134
  405. data/spec/csv_exporter_spec.rb +0 -144
  406. data/spec/csv_generator_spec.rb +0 -159
  407. data/spec/csv_loader_spec.rb +0 -212
  408. data/spec/datashift_spec.rb +0 -55
  409. data/spec/excel_exporter_spec.rb +0 -199
  410. data/spec/excel_generator_spec.rb +0 -203
  411. data/spec/excel_loader_spec.rb +0 -237
  412. data/spec/excel_spec.rb +0 -203
  413. data/spec/loader_base_spec.rb +0 -166
  414. data/spec/mapping_spec.rb +0 -117
  415. data/spec/method_dictionary_spec.rb +0 -300
  416. data/spec/method_mapper_spec.rb +0 -100
  417. data/spec/model_mapper_spec.rb +0 -41
  418. data/spec/paperclip_loader_spec.rb +0 -92
  419. data/spec/populator_spec.rb +0 -128
  420. data/spec/thor_spec.rb +0 -90
  421. data/tasks/file_tasks.rake +0 -37
  422. data/tasks/word_to_seedfu.rake +0 -167
@@ -1,252 +1,48 @@
1
- # Copyright:: (c) Autotelik Media Ltd 2011
1
+ # Copyright:: (c) Autotelik Media Ltd 2015
2
2
  # Author :: Tom Statter
3
- # Date :: Aug 2011
3
+ # Date ::
4
4
  # License:: MIT
5
5
  #
6
- # Details:: Spec Helper for Active Record Loader
7
- #
8
- #
9
- # We are not setup as a Rails project so need to mimic an active record database setup so
10
- # we have some AR models to test against. Create an in memory database from scratch.
11
- #
12
-
13
- # This file is copied to spec/ when you run 'rails generate rspec:install'
14
6
  ENV["RAILS_ENV"] ||= 'test'
15
7
 
16
- require 'active_record'
17
- require 'thor/actions'
18
- require 'bundler'
19
- require 'stringio'
20
- require 'paperclip'
21
- require 'factory_girl_rails'
22
- require 'database_cleaner'
23
-
24
- $:.unshift '.' # 1.9.3 quite strict, '.' must be in load path for relative paths to work from here
25
-
26
- require File.expand_path("../../lib/datashift", __FILE__)
27
-
28
- RSpec.configure do |config|
29
-
30
- config.before do
31
- ARGV.replace []
32
- FactoryGirl.reload # fixes factories not autoloading
33
- end
34
-
35
- config.include FactoryGirl::Syntax::Methods
36
-
37
- config.before(:suite) do
38
8
 
39
- FileUtils.mkdir_p(results_path()) unless File.exists?(results_path)
9
+ # Requires supporting ruby files with custom matchers and macros, etc,
10
+ # in spec/support/ and its subdirectories.
11
+ Dir[File.join(File.dirname(__FILE__), "support/**/*.rb")].each { |f| require f }
40
12
 
41
- bundler_setup()
13
+ # Need an active record DB to test against, so we manage own Rails sandbox
14
+ DataShift::Sandbox.gen_rails_sandbox
42
15
 
43
- rails_sandbox
44
16
 
45
- # load all test model definitions - Project etc
46
- require ifixture_file('test_model_defs')
17
+ require File.join( DataShift::Sandbox.rails_sandbox_path, "config/environment.rb")
18
+ require "rspec/rails"
47
19
 
48
- db_connect( 'test_file' ) # , test_memory, test_mysql
49
20
 
50
- migrate_up
21
+ require 'factory_girl_rails'
22
+ require 'database_cleaner'
51
23
 
52
- DatabaseCleaner.clean_with(:truncation)
24
+ require File.expand_path("../../lib/datashift", __FILE__)
53
25
 
54
- DataShift::MethodDictionary.clear
26
+ RSpec.configure do |config|
55
27
 
56
- #TODO this is bad here - remove
57
- DataShift::MethodDictionary.find_operators( Project )
28
+ #config.use_transactional_fixtures = false
58
29
 
59
- DataShift::MethodDictionary.build_method_details( Project )
30
+ config.before(:suite) do
31
+ # make sure we have dir for result files
32
+ FileUtils.mkdir_p(results_path()) unless File.exist?(results_path)
60
33
  end
61
34
 
62
35
  config.before(:each) do
63
- DatabaseCleaner.strategy = :transaction
64
-
65
- DatabaseCleaner.start
66
- end
67
-
68
- config.after(:each) do
69
- DatabaseCleaner.clean
70
- end
71
-
72
- =begin
73
- shared_context "ClearAndPopulateProject" do
74
- before(:each) do
75
- end
76
- end
77
- =end
78
-
79
- def run_in(dir)
80
- puts "RSpec .. running test in path [#{dir}]"
81
- original_dir = Dir.pwd
82
- begin
83
- Dir.chdir dir
84
- yield
85
- ensure
86
- Dir.chdir original_dir
87
- end
88
- end
89
-
90
- def capture(stream)
91
- begin
92
- stream = stream.to_s
93
- eval "$#{stream} = StringIO.new"
94
- yield
95
- result = eval("$#{stream}").string
96
- ensure
97
- eval("$#{stream} = #{stream.upcase}")
98
- end
99
-
100
- result
101
- end
102
-
103
- alias :silence :capture
104
-
105
- def rspec_datashift_root()
106
- File.expand_path("../../", __FILE__)
36
+ DataShift::Configuration.reset
37
+ DataShift::Exporters::Configuration.reset
38
+ DataShift::Loaders::Configuration.reset
107
39
  end
108
40
 
109
- def fixtures_path()
110
- File.expand_path(File.dirname(__FILE__) + '/fixtures')
111
- end
112
-
113
- def ifixture_file( name )
114
- File.join(fixtures_path(), name)
115
- end
116
-
117
- def results_path
118
- File.join(fixtures_path(), 'results')
119
- end
120
-
121
- # Return location of an expected results file and ensure tree clean before test
122
- def result_file( name )
123
- expect = File.join(results_path, name)
124
-
125
- begin FileUtils.rm(expect); rescue; end
126
-
127
- expect
128
- end
129
-
130
- def results_clear( glob = nil )
131
- if(glob)
132
- begin FileUtils.rm_rf( File.join(results_path, glob) ); rescue; end
133
- else
134
- begin FileUtils.rm_rf(results_path); rescue; end
135
-
136
- FileUtils.mkdir(results_path) unless File.exists?(results_path);
137
- end
138
- end
139
-
140
- def set_logger( name = 'datashift_spec.log')
141
-
142
- require 'logger'
143
- logdir = File.join(File.dirname(__FILE__), 'log')
144
- FileUtils.mkdir_p(logdir) unless File.exists?(logdir)
145
- ActiveRecord::Base.logger = Logger.new( File.join(logdir, name) )
146
- end
147
-
148
- def bundler_setup(gemfile = File.join(DataShift::root_path, 'spec', 'Gemfile') )
149
-
150
- $stderr.puts "No Such Gemfile #{gemfile}" unless File.exists?(gemfile)
151
-
152
- ENV['BUNDLE_GEMFILE'] = gemfile
153
- #Bundler.setup
154
- begin
155
- #Bundler.setup(:default, :development)
156
- Bundler.setup(:default, :test)
157
- rescue Bundler::BundlerError => e
158
- $stderr.puts e.message
159
- $stderr.puts "Run `bundle install` to install missing gems"
160
- exit e.status_code
161
- end
162
- end
163
-
164
- def db_clear_connections
165
- # We have multiple schemas and hence connections tested in single spec directory
166
- ActiveRecord::Base.clear_active_connections!()
167
- end
168
-
169
- def database_yml_path
170
- File.join(fixtures_path, 'config', 'database.yml')
171
- end
172
-
173
- def db_connect( env = 'test_file')
174
-
175
- # Some active record stuff seems to rely on the RAILS_ENV being set ?
176
-
177
- ENV['RAILS_ENV'] = env
178
-
179
- puts "Load DB Config for Env : #{env}"
180
-
181
- # We have multiple schemas and hence connections tested in single spec directory
182
- db_clear_connections
183
-
184
- configuration = {}
185
-
186
- configuration[:database_configuration] = YAML::load( ERB.new( IO.read(database_yml_path) ).result )
187
- db = configuration[:database_configuration][ env ]
188
-
189
- set_logger
190
-
191
- puts "Connecting to DB", db.inspect
192
-
193
- ActiveRecord::Base.establish_connection( db )
194
- end
195
-
196
- # These are our test models with associations
197
- def db_clear
198
- [Project, Milestone, Category, Version, LoaderRelease].each {|x| x.delete_all}
199
- end
200
-
201
- def load_in_memory
202
- load "#{Rails.root}/db/schema.rb"
203
- end
204
-
205
- def migrate_up( rails_root = fixtures_path )
206
- p = File.join(fixtures_path, 'db/migrate')
207
- raise "Cannot migrate DB - no such path #{p}" unless File.exists?(p)
208
- ActiveRecord::Migrator.up(p)
209
- end
210
-
211
- def rails_sandbox_path
212
- File.expand_path('../../spec/rails_sandbox', __FILE__)
213
- end
214
-
215
- def rails_sandbox( force = false)
216
-
217
- sandbox = rails_sandbox_path
218
-
219
- if(force == true && File.exists?(sandbox))
220
- FileUtils::rm_rf(sandbox)
221
- end
222
-
223
- unless(File.exists?(sandbox))
224
-
225
- sandbox_exe_path = File.expand_path( "#{sandbox}/.." )
226
-
227
- puts "Creating new Rails sandbox in : #{sandbox_exe_path}"
228
-
229
- run_in( sandbox_exe_path ) do |path|
230
-
231
- name = File.basename(rails_sandbox_path)
232
-
233
- system('rails new ' + name)
234
-
235
- puts "Copying over models :", Dir.glob(File.join(fixtures_path, 'models', '*.rb')).inspect
236
-
237
- FileUtils::cp_r( Dir.glob(File.join(fixtures_path, 'models', '*.rb')), File.join(name, 'app/models'))
238
-
239
- migrations = File.expand_path(File.join(fixtures_path, 'db', 'migrate'), __FILE__)
240
-
241
- FileUtils::cp_r( migrations, File.join(rails_sandbox_path, 'db'))
242
-
243
- puts "Running db:migrate"
244
- end
41
+ config.include FactoryGirl::Syntax::Methods
245
42
 
246
- run_in(rails_sandbox_path) { system('bundle exec rake db:migrate') }
43
+ # Print the 10 slowest examples and example groups at the
44
+ # end of the spec run, to help surface which specs are running
45
+ # particularly slow.
46
+ config.profile_examples = 10
247
47
 
248
- end
249
- return sandbox
250
- end
251
-
252
- end
48
+ end
@@ -0,0 +1,25 @@
1
+ # Copyright:: (c) Autotelik Media Ltd 2015
2
+ # Author :: Tom Statter
3
+ # License:: MIT
4
+ #
5
+
6
+ RSpec.configure do |_config|
7
+ shared_context 'ClearAllCatalogues' do
8
+ before(:each) do
9
+ DataShift::ModelMethods::Catalogue.clear
10
+ DataShift::ModelMethods::Manager.clear
11
+ end
12
+ end
13
+
14
+ shared_context 'ClearThenManageProject' do
15
+ before(:each) do
16
+ DataShift::ModelMethods::Catalogue.clear
17
+ DataShift::ModelMethods::Manager.clear
18
+ end
19
+
20
+ # A ModelMethods::Collection for Project
21
+ let(:project_collection) { DataShift::ModelMethods::Manager.catalog_class( Project ) }
22
+
23
+ let(:project_headers) { [:value_as_string, :owner, :value_as_boolean, :value_as_double] }
24
+ end
25
+ end
@@ -0,0 +1,32 @@
1
+ DB_CLEANER_TRUNCATION_OPTS = {} # except: %w(projects) }.freeze
2
+
3
+ RSpec.configure do |config|
4
+
5
+ config.before(:suite) do
6
+ DatabaseCleaner.strategy = :truncation, DB_CLEANER_TRUNCATION_OPTS
7
+ DatabaseCleaner.clean_with(:truncation)
8
+
9
+
10
+ begin
11
+ DatabaseCleaner.start
12
+ ensure
13
+ DatabaseCleaner.clean
14
+ end
15
+ end
16
+
17
+ config.before(:each) do
18
+ DatabaseCleaner.strategy = :transaction
19
+ end
20
+
21
+ config.before(:each, js: true) do
22
+ DatabaseCleaner.strategy = :truncation
23
+ end
24
+
25
+ config.before(:each) do
26
+ DatabaseCleaner.start
27
+ end
28
+
29
+ config.append_after(:each) do
30
+ DatabaseCleaner.clean
31
+ end
32
+ end
@@ -0,0 +1,153 @@
1
+ # Copyright:: (c) Autotelik Media Ltd 2015
2
+ # Author :: Tom Statter
3
+ # Date ::
4
+ # License:: MIT
5
+ #
6
+ module DataShift
7
+
8
+ module TestHelpers
9
+
10
+ def rspec_datashift_root
11
+ @rspec_datashift_root ||= File.expand_path('../..', __FILE__)
12
+ end
13
+
14
+ def run_in(dir)
15
+ puts "RSpec .. switching context to run tests in path [#{dir}]"
16
+ original_dir = Dir.pwd
17
+ begin
18
+ Dir.chdir dir
19
+ yield
20
+ ensure
21
+ Dir.chdir original_dir
22
+ end
23
+ end
24
+
25
+ def capture_stream(stream)
26
+ begin
27
+ stream = stream.to_s
28
+ eval "$#{stream} = StringIO.new"
29
+ yield
30
+ result = eval("$#{stream}").string
31
+ ensure
32
+ eval("$#{stream} = #{stream.upcase}")
33
+ end
34
+
35
+ result
36
+ end
37
+
38
+ # PATHS
39
+
40
+ def rails_sandbox_path
41
+ DataShift::Sandbox.rails_sandbox_path
42
+ end
43
+
44
+ def fixtures_path
45
+ File.join(rspec_datashift_root, 'fixtures')
46
+ end
47
+
48
+ def ifixture_file( name )
49
+ File.join(fixtures_path, name)
50
+ end
51
+
52
+ def results_path
53
+ File.join(fixtures_path, 'results')
54
+ end
55
+
56
+ def datashift_thor_root
57
+ @datashift_thor_root ||= File.expand_path('../../../lib/tasks', __FILE__)
58
+ end
59
+
60
+ # Return location of an expected results file and ensure tree clean before test
61
+ def result_file( name )
62
+ expect = File.join(results_path, name)
63
+
64
+ begin FileUtils.rm(expect); rescue; end
65
+
66
+ expect
67
+ end
68
+
69
+ def clear_everything
70
+ DataShift::Configuration.reset
71
+
72
+ results_clear
73
+ db_clear
74
+ end
75
+
76
+ # These are our test models with associations
77
+ def db_clear
78
+ [Project, Milestone, Category, Version, LoaderRelease].each(&:delete_all)
79
+ end
80
+
81
+
82
+ def results_clear( glob = nil )
83
+ if glob
84
+ begin FileUtils.rm_rf( File.join(results_path, glob) ); rescue; end
85
+ else
86
+ begin FileUtils.rm_rf(results_path); rescue; end
87
+
88
+ FileUtils.mkdir(results_path) unless File.exist?(results_path)
89
+ end
90
+ end
91
+
92
+ def bundler_setup(gemfile = File.join(DataShift.root_path, 'spec', 'Gemfile') )
93
+
94
+ $stderr.puts "No Such Gemfile #{gemfile}" unless File.exist?(gemfile)
95
+
96
+ ENV['BUNDLE_GEMFILE'] = gemfile
97
+ # Bundler.setup
98
+ begin
99
+ # Bundler.setup(:default, :development)
100
+ Bundler.setup(:default, :test)
101
+ rescue Bundler::BundlerError => e
102
+ $stderr.puts e.message
103
+ $stderr.puts 'Run `bundle install` to install missing gems'
104
+ exit e.status_code
105
+ end
106
+ end
107
+
108
+ def db_clear_connections
109
+ # We have multiple schemas and hence connections tested in single spec directory
110
+ ActiveRecord::Base.clear_active_connections!
111
+ end
112
+
113
+ def database_yml_path
114
+ File.join(fixtures_path, 'config', 'database.yml')
115
+ end
116
+
117
+ def db_connect( env = 'test_file')
118
+
119
+ # Some active record stuff seems to rely on the RAILS_ENV being set ?
120
+
121
+ ENV['RAILS_ENV'] = env
122
+
123
+ puts "Load DB Config for Env : #{env}"
124
+
125
+ # We have multiple schemas and hence connections tested in single spec directory
126
+ db_clear_connections
127
+
128
+ configuration = {}
129
+
130
+ configuration[:database_configuration] = YAML.load( ERB.new( IO.read(database_yml_path) ).result )
131
+ db = configuration[:database_configuration][env]
132
+
133
+ set_logger
134
+
135
+ puts 'Connecting to DB', db.inspect
136
+
137
+ ActiveRecord::Base.establish_connection( db )
138
+ end
139
+
140
+ def load_in_memory
141
+ load "#{Rails.root}/db/schema.rb"
142
+ end
143
+
144
+ def migrate_up( _rails_root = fixtures_path )
145
+ p = File.join(fixtures_path, 'db/migrate')
146
+ raise "Cannot migrate DB - no such path #{p}" unless File.exist?(p)
147
+ ActiveRecord::Migrator.up(p)
148
+ end
149
+
150
+
151
+ end
152
+
153
+ end