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
@@ -0,0 +1,193 @@
1
+ # Copyright:: (c) Autotelik Media Ltd 2015
2
+ # Author :: Tom Statter
3
+ # License:: MIT
4
+ #
5
+ # Details:: Specs for Excel aspect of Active Record Loader
6
+ #
7
+ require File.dirname(__FILE__) + '/../spec_helper'
8
+
9
+ require 'erb'
10
+ require 'excel_exporter'
11
+
12
+ module DataShift
13
+
14
+ describe 'Excel Exporter' do
15
+ include_context 'ClearThenManageProject'
16
+
17
+ before(:all) do
18
+ results_clear( '*.xls' )
19
+ end
20
+
21
+ before(:each) do
22
+ DataShift::Exporters::Configuration.reset
23
+
24
+ DataShift::Configuration.reset
25
+ end
26
+
27
+ let(:exporter) { ExcelExporter.new }
28
+
29
+ it 'should be able to create a new excel exporter' do
30
+ expect(exporter).to_not be_nil
31
+ end
32
+
33
+ it 'should handle bad params to export' do
34
+ expect = result_file('project_first_export_spec.csv')
35
+
36
+ expect { exporter.export(expect, nil) }.not_to raise_error
37
+
38
+ expect { exporter.export(expect, []) }.not_to raise_error
39
+
40
+ puts "Can manually check file @ #{expect}"
41
+ end
42
+
43
+ context 'export model only' do
44
+ let(:expected_projects) { 7 }
45
+
46
+ before(:each) do
47
+ create_list(:project, expected_projects)
48
+ end
49
+
50
+ it 'should export model object to .xls file' do
51
+ expected = result_file('exp_project_first_export.xls')
52
+
53
+ exporter.export(expected, Project.all.first)
54
+
55
+ expect(File.exist?(expected)).to eq true
56
+ end
57
+
58
+ it 'should export model attributes as headers' do
59
+ expected = result_file('exp_project_export.xls')
60
+
61
+ exporter.export(expected, Project.all)
62
+
63
+ excel = Excel.new
64
+ excel.open(expected)
65
+
66
+ expect(excel.row(0)).to match Project.columns.collect(&:name)
67
+ end
68
+
69
+ it 'should export collection of model objects to .xls file' do
70
+ expected = result_file('exp_project_export.xls')
71
+
72
+ exporter.export(expected, Project.all)
73
+
74
+ excel = Excel.new
75
+ excel.open(expected)
76
+
77
+ expect(excel.num_rows).to eq expected_projects + 1
78
+ end
79
+ end
80
+
81
+ context 'project with associations' do
82
+ let(:expected_projects) { 7 }
83
+
84
+ before(:each) do
85
+
86
+ create( :project_with_milestones, milestones_count: 4 )
87
+
88
+ create_list(:project, expected_projects)
89
+
90
+ create( :project_with_user )
91
+
92
+ DataShift::Configuration.configure do |config|
93
+ config.with = :all
94
+ end
95
+ end
96
+
97
+ it 'should include associations in headers', duff: true do
98
+ expected = result_file('exp_project_assoc_headers.xls')
99
+
100
+ exporter.export_with_associations(expected, Project, Project.all)
101
+
102
+ expect(File.exist?(expected)).to eq true
103
+
104
+ excel = Excel.new
105
+ excel.open(expected)
106
+
107
+ expect(excel.row(0)).to include 'owner'
108
+ expect(excel.row(0)).to include 'user'
109
+ end
110
+
111
+ it 'should export a model and associations to .xls file' do
112
+ expected = result_file('exp_project_plus_assoc.xls')
113
+
114
+ exporter.export_with_associations(expected, Project, Project.all)
115
+
116
+ expect(File.exist?(expected)).to eq true
117
+
118
+ excel = Excel.new
119
+ excel.open(expected)
120
+
121
+ expected_rows = Project.count + 1
122
+ last_idx = Project.count
123
+
124
+ expect(excel.num_rows).to eq expected_rows
125
+
126
+ user_inx = excel.row(0).index 'user'
127
+ owner_inx = excel.row(0).index 'owner'
128
+
129
+ expect(user_inx).to be > -1
130
+ expect(owner_inx).to be > -1
131
+
132
+ # not all rows have an Owner
133
+ expect( excel[3, owner_inx] ).to be_nil
134
+ expect( excel[3, user_inx] ).to include "title: mr,first_name: ben}"
135
+
136
+ # project_with_user has real associated user data
137
+ expect( excel[last_idx, user_inx] ).to include 'mr'
138
+
139
+ owner_idx = excel.row(0).index 'owner'
140
+
141
+ expect(owner_idx).to be > -1
142
+
143
+ expect( excel[last_idx, owner_idx] ).to include '10000.23'
144
+ end
145
+
146
+ it 'should export associations in hash format by default to .xls file' do
147
+
148
+ expected = result_file('project_and_assoc_in_hash_export.xls')
149
+
150
+ exporter.export_with_associations(expected, Project, Project.all)
151
+
152
+ expect(File.exist?(expected)).to eq true
153
+
154
+ excel = Excel.new
155
+ excel.open(expected)
156
+
157
+ milestone_inx = excel.row(0).index 'milestones'
158
+
159
+ # project_with_milestones has real associated user data
160
+ last_row_idx = Project.count
161
+
162
+ expect( excel[1, milestone_inx].to_s ).to include ColumnPacker.multi_assoc_delim
163
+ expect( excel[1, milestone_inx].to_s ).to include '{'
164
+ expect( excel[1, milestone_inx].to_s ).to match(/name: milestone/)
165
+ expect( excel[1, milestone_inx].to_s ).to match(/project_id: \d+/)
166
+ end
167
+
168
+ it 'should export a model and assocs in json to .xls file' do
169
+
170
+ expected = result_file('project_and_assoc_in_json_export.xls')
171
+
172
+ DataShift::Exporters::Configuration.configure do |config|
173
+ config.json = true
174
+ end
175
+
176
+ exporter.export_with_associations(expected, Project, Project.all)
177
+
178
+ expect(File.exist?(expected)).to eq true
179
+
180
+ excel = Excel.new
181
+ excel.open(expected)
182
+
183
+ milestone_inx = excel.row(0).index 'milestones'
184
+
185
+ last_row_idx = Project.count
186
+
187
+ expect( excel[1, milestone_inx].to_s ).to include '['
188
+ expect( excel[1, milestone_inx].to_s ).to match(/name\":\"milestone/)
189
+ expect( excel[1, milestone_inx].to_s ).to match(/"project_id":\d+/)
190
+ end
191
+ end
192
+ end
193
+ end
@@ -0,0 +1,181 @@
1
+ # Copyright:: (c) Autotelik Media Ltd 2015
2
+ # Author :: Tom Statter
3
+ # License:: MIT
4
+ #
5
+ # Details:: Specs for Excel aspect of Active Record Loader
6
+ #
7
+ require File.dirname(__FILE__) + '/../spec_helper'
8
+
9
+ require 'erb'
10
+ require 'excel_generator'
11
+
12
+ module DataShift
13
+
14
+ describe 'Excel Generator' do
15
+ include_context 'ClearThenManageProject'
16
+
17
+ before(:all) do
18
+ results_clear( '*_template.xls' )
19
+ end
20
+
21
+ before(:each) do
22
+ DataShift::Exporters::Configuration.reset
23
+ end
24
+
25
+ let(:generator) { ExcelGenerator.new }
26
+
27
+ it 'should be able to create a new excel generator' do
28
+ expect(generator).to_not be_nil
29
+ end
30
+
31
+ it 'should generate template .xls file from model' do
32
+ expected = result_file('gen_project_template.xls')
33
+
34
+ generator.generate(expected, Project)
35
+
36
+ expect(File.exist?(expected)).to eq true
37
+
38
+ puts "Can manually check file @ #{expected}"
39
+
40
+ excel = Excel.new
41
+ excel.open(expected)
42
+
43
+ expect(excel.worksheets.size).to eq 1
44
+
45
+ expect(excel.worksheet(0).name).to eq 'Project'
46
+
47
+ headers = excel.worksheets[0].row(0)
48
+
49
+ expect(headers).to include(*Project.columns.collect(&:name))
50
+
51
+ end
52
+
53
+ # has_one :owner
54
+ # has_many :milestones
55
+ # has_many :loader_releases
56
+ # has_many :versions, :through => :loader_releases
57
+ # has_and_belongs_to_many :categories
58
+
59
+ it 'should include all associations in template .xls file from model', duff: true do
60
+ expected = result_file('gen_project_plus_assoc_template.xls')
61
+
62
+ generator.generate_with_associations(expected, Project)
63
+
64
+ expect( File.exist?(expected)).to eq true
65
+
66
+ excel = Excel.new
67
+ excel.open(expected)
68
+
69
+ expect(excel.worksheets.size).to eq 1
70
+
71
+ expect(excel.worksheet(0).name).to eq 'Project'
72
+
73
+ headers = excel.worksheets[0].row(0).to_a
74
+
75
+ expect(headers).to include(*Project.columns.collect(&:name))
76
+
77
+ %w(owner milestones loader_releases versions categories).each do |check|
78
+ expect(headers.include?(check)).to eq true
79
+ end
80
+ end
81
+
82
+ it 'should enable us to exclude associations by type in template .xls file' do
83
+ expected = result_file('gen_project_plus_some_assoc_template.xls')
84
+
85
+ DataShift::Configuration.configure do |config|
86
+ config.exclude = :has_many
87
+ end
88
+
89
+ generator.generate_with_associations(expected, Project)
90
+
91
+ expect(File.exist?(expected)).to eq true # , "Failed to find expected result file #{expected}"
92
+
93
+ excel = Excel.new
94
+ excel.open(expected)
95
+
96
+ expect(excel.worksheets.size).to eq 1
97
+
98
+ expect( excel.worksheet(0).name).to eq 'Project'
99
+
100
+ headers = excel.worksheets[0].row(0)
101
+
102
+
103
+ expect(headers).to include(*Project.columns.collect(&:name))
104
+
105
+ expect(headers.include?('title')).to eq true
106
+ expect(headers.include?('owner')).to eq true
107
+
108
+ %w(milestones loader_releases versions categories).each do |check|
109
+ expect(headers).to_not include check
110
+ end
111
+ end
112
+
113
+ it 'should enable us to exclude certain associations in template .xls file ', duff: true do
114
+ expected = result_file('gen_project_plus_some_assoc_template.xls')
115
+
116
+ DataShift::Configuration.call.remove_columns = [:milestones, :versions]
117
+
118
+ generator.generate_with_associations(expected, Project)
119
+
120
+ expect(File.exist?(expected)).to eq true # , "Failed to find expected result file #{expected}"
121
+
122
+ excel = Excel.new
123
+ excel.open(expected)
124
+
125
+ expect(excel.worksheets.size).to eq 1
126
+
127
+ expect(excel.worksheet(0).name).to eq 'Project'
128
+
129
+ headers = excel.worksheets[0].row(0)
130
+
131
+ %w(title loader_releases owner categories).each do |check|
132
+ expect(headers).to include check
133
+ end
134
+
135
+ %w(milestones versions).each do |check|
136
+ expect(headers).to_not include check
137
+ end
138
+ end
139
+
140
+ it 'should enable us to remove standard rails feilds from template .xls file ' do
141
+ expected = result_file('gen_project_plus_some_assoc_template.xls')
142
+
143
+ DataShift::Configuration.call.remove_rails = true
144
+
145
+ generator.generate_with_associations(expected, Project)
146
+
147
+ expect(File.exist?(expected)).to eq true # , "Failed to find expected result file #{expected}"
148
+
149
+ excel = Excel.new
150
+ excel.open(expected)
151
+
152
+ expect(excel.worksheets.size).to eq 1
153
+
154
+ expect(excel.worksheet(0).name).to eq 'Project'
155
+
156
+ headers = excel.worksheets[0].row(0)
157
+
158
+ %w(id updated_at created_at).each do |check|
159
+ expect(headers).to_not include check
160
+ end
161
+ end
162
+
163
+ it 'should enable us to autosize columns in the .xls file' do
164
+ expected = result_file('gen_project_autosized_template.xls')
165
+
166
+ pending "Auto sizing of Excel columns"
167
+
168
+ DataShift::Exporters::Configuration.configure do |config|
169
+ config.autosize = true
170
+ end
171
+
172
+ generator.generate_with_associations(expected, Project)
173
+
174
+ expect( File.exist?(expected)).to eq true
175
+
176
+ excel = Excel.new
177
+ excel.open(expected)
178
+ end
179
+ end
180
+
181
+ end
@@ -0,0 +1,45 @@
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 'Generator Base' do
10
+
11
+ before(:each) do
12
+ DataShift::Exporters::Configuration.reset
13
+ end
14
+
15
+ it 'should initialize' do
16
+ expect(GeneratorBase.new).to be
17
+ end
18
+ =begin Headers moved into Schema
19
+ context 'generation' do
20
+ include_context 'ClearThenManageProject'
21
+
22
+ let(:gb) { x = GeneratorBase.new; Headers.klass_to_headers(Project); x }
23
+
24
+ it 'should create an instance of Headers from a Domain Model' do
25
+ expect(gb.headers).to be_a Headers
26
+ expect(gb.headers[0]).to be_a Header
27
+ end
28
+
29
+ it 'sets the source of the Headers to the Domain Model' do
30
+ expect(gb.headers.source).to eq Project
31
+ end
32
+
33
+ it 'should create one header per Domain Model attribute' do
34
+ expect(gb.headers.size).to eq Project.new.serializable_hash.keys.size
35
+ end
36
+
37
+ it 'headers are the model method operator name' do
38
+ expect(gb.headers[0]).to be_a Header
39
+ expect(gb.headers[0].source).to be_a String
40
+ end
41
+
42
+ end
43
+ =end
44
+ end
45
+ end
@@ -0,0 +1,7 @@
1
+ FactoryGirl.define do
2
+
3
+ factory :category do
4
+ sequence(:reference) { |n| "category_00#{n}" }
5
+ end
6
+
7
+ end
@@ -0,0 +1,18 @@
1
+ FactoryGirl.define do
2
+
3
+ factory :user do
4
+ title 'mr'
5
+ first_name 'ben'
6
+ end
7
+
8
+ factory :owner do
9
+ name 'i am the owner'
10
+ budget 10000.23
11
+ end
12
+
13
+
14
+ factory :loader_release do
15
+ sequence(:name) { |n| "Loader Release V#{n}" }
16
+ end
17
+
18
+ end
@@ -0,0 +1,16 @@
1
+ FactoryGirl.define do
2
+
3
+ factory :milestone do
4
+ sequence(:name) { |n| "milestone #{n}" }
5
+ cost 100
6
+ datetime Time.new
7
+
8
+ association :project, factory: :project
9
+
10
+ factory :milestone_with_project do
11
+ project
12
+ end
13
+
14
+ end
15
+
16
+ end