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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4e73de99a2466b06c8dfb6bab01cb7c2ab00fb54
4
- data.tar.gz: 73c47634a567004886c55e75b1f03a63a75ff155
3
+ metadata.gz: 92ffa81322e27c8386ea8ff780d7750818782d09
4
+ data.tar.gz: 99090fa346d9b454d705178cf53709c30ec4ebca
5
5
  SHA512:
6
- metadata.gz: ec2035080b4d6cfc1560530639084e35271f2716a6772f0b8ada9d2d62752f8c3e5756babc4e5bc9afa83636b9adef4c047bc5db99ad26e31e8e75e51ff3b89d
7
- data.tar.gz: 426c72aadaab70fa3e1a09c8b131a0b862e75d94ad138316474cf75cf9af0a27aaf7d72037f85404d94dbdab7c668b8a47f5939da56914d0c6591421fd79fd4a
6
+ metadata.gz: f889be231a849eddd80057e685bd66732ce50b937d911f9e1dbf2a14622bf3bf2071510197bd7464dbb2557bee0857505547a06b735b5b607965d963ed7287e8
7
+ data.tar.gz: 5b16ceeac096d71d6fb3e16f44e2babb68ac78c061891ad080e527046b0467e3b71bfb93db90aba5d890439424e7098a2f78e204929dfd37933243219d7f180a
File without changes
data/Rakefile CHANGED
@@ -29,29 +29,10 @@ $:.unshift lib unless $:.include?(lib)
29
29
 
30
30
  require 'datashift'
31
31
 
32
- require 'rake/testtask'
33
- Rake::TestTask.new(:test) do |test|
34
- test.libs << 'lib' << 'test'
35
- test.pattern = 'test/**/test_*.rb'
36
- test.verbose = true
37
- end
38
-
39
- task :default => :test
40
-
41
- require 'rdoc/task'
42
- Rake::RDocTask.new do |rdoc|
43
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
44
-
45
- rdoc.rdoc_dir = 'rdoc'
46
- rdoc.title = "DataShift #{version}"
47
- rdoc.rdoc_files.include('README*')
48
- rdoc.rdoc_files.include('lib/**/*.rb')
49
- end
50
-
51
32
  # Add in our own Tasks
52
33
 
53
34
  desc 'Build gem and install in one step'
54
- task :build, :version do |t, args|
35
+ task :build, :version do |_t, args|
55
36
 
56
37
  v = (args[:version] || ENV['version'])
57
38
 
@@ -0,0 +1,125 @@
1
+ # Copyright:: (c) Autotelik Media Ltd 2011
2
+ # Author :: Tom Statter
3
+ # Date :: Aug 2010
4
+ #
5
+ # License:: MIT - Free, OpenSource
6
+ #
7
+ # Details:: Gem::Specification for DataShift gem.
8
+ #
9
+ # Provides classes for moving data between a number of enterprise
10
+ # type applications, files and databases.
11
+ #
12
+ # Provides support for moving data between .xls (Excel/OpenOffice)
13
+ # Spreedsheets via Ruby and AR, enabling direct import/export of
14
+ # ActiveRecord models with all their associations from database.
15
+ #
16
+ # Provides support for moving data between csv files and AR, enabling direct
17
+ # import/export of AR models and their associations from database.
18
+ #
19
+ require 'thor'
20
+
21
+ $:.push File.expand_path("lib", __FILE__)
22
+
23
+ require 'datashift'
24
+ require 'factory_girl_rails'
25
+ require 'database_cleaner'
26
+
27
+ require_relative File.join('spec', 'support/sandbox')
28
+ require_relative File.join('spec' ,'support/datashift_test_helpers')
29
+
30
+ module Datashift
31
+
32
+ class Utils < Thor
33
+
34
+ include DataShift::TestHelpers
35
+
36
+ desc "lint", "Run in spec - Verify that FactoryGirl factories are valid"
37
+
38
+ def lint
39
+
40
+ ENV['RAILS_ENV'] = 'test'
41
+
42
+ environment
43
+
44
+ begin
45
+ DatabaseCleaner.start
46
+
47
+ puts "Running FactoryGirl.lint"
48
+ FactoryGirl.lint
49
+ ensure
50
+ DatabaseCleaner.clean
51
+ end
52
+
53
+ end
54
+
55
+
56
+ desc "sandbox", 'Rebuild the dummy rails app in spec - required for testing'
57
+
58
+ def sandbox
59
+ # Need an active record DB to test against, so we manage own Rails sandbox
60
+ DataShift::Sandbox.gen_rails_sandbox( :force )
61
+ end
62
+
63
+ desc "build", 'Build gem and install in one step'
64
+
65
+ method_option :version, :aliases => '-v', :desc => "New version", required: false
66
+
67
+ method_option :push, :aliases => '-p', :desc => "Push resulting gem to rubygems.org"
68
+
69
+ method_option :install, :aliases => '-i',
70
+ :desc => "Install freshly built gem locally", type: :boolean, default: false
71
+
72
+ def build
73
+
74
+ version = options[:version] || DataShift::VERSION
75
+
76
+ # Bump the VERSION file in library
77
+ File.open( File.join('lib/datashift/version.rb'), 'w') do |f|
78
+ f << "module DataShift\n"
79
+ f << " VERSION = '#{version}'.freeze\n"
80
+ f << "end\n"
81
+ end if(options[:version] != DataShift::VERSION)
82
+
83
+ build_cmd = "gem build datashift.gemspec"
84
+
85
+ puts "\n*** Running build cmd [#{build_cmd}]"
86
+
87
+ system(build_cmd)
88
+
89
+ gem = "#{DataShift.gem_name}-#{version}.gem"
90
+
91
+ if(options[:install])
92
+ puts "Installing : #{gem}"
93
+
94
+ cmd = "gem install --no-ri --no-rdoc #{gem}"
95
+ system(cmd)
96
+ end
97
+
98
+ if(options[:push])
99
+ puts "Pushing version #{version} to rubygems"
100
+ cmd = "gem push #{gem}"
101
+ system(cmd)
102
+ end
103
+ end
104
+
105
+ no_commands do
106
+ def environment
107
+
108
+ env = File.expand_path('dummy/config/environment.rb')
109
+
110
+ if File.exist?(env)
111
+ begin
112
+ require env
113
+ rescue => e
114
+ logger.error("Failed to initialise ActiveRecord : #{e.message}")
115
+ raise ConnectionError.new("Failed to initialise ActiveRecord : #{e.message}")
116
+ end
117
+
118
+ else
119
+ raise DataShift::PathError.new('No config/environment.rb found - cannot initialise ActiveRecord')
120
+ end
121
+ end
122
+ end
123
+
124
+ end
125
+ end
@@ -1,62 +1,31 @@
1
1
  # Copyright:: Autotelik Media Ltd
2
2
  # Author :: Tom Statter
3
3
  # Date :: July 2010
4
- # License::
4
+ # License::
5
5
  #
6
6
  #
7
- if(DataShift::Guards::jruby?)
8
-
7
+ if DataShift::Guards.jruby?
8
+
9
9
  require 'java'
10
- require "poi-3.7-20101029.jar"
11
-
10
+ require 'poi-3.7-20101029.jar'
11
+
12
12
  # Extend the Poi classes with some syntactic sugar
13
-
14
- class Java::OrgApachePoiHssfUsermodel::HSSFSheet
15
- def name()
16
- getSheetName
17
- end
18
-
19
- def num_rows
20
- getPhysicalNumberOfRows
21
- end
22
-
23
- end
24
-
25
- class Java::OrgApachePoiHssfUsermodel::HSSFRow
26
-
27
- include RubyPoiTranslations
28
-
29
- include Enumerable
30
-
31
- def []( column)
32
- cell_value( get_or_create_cell( column ) )
33
- end
34
-
35
- def []=( column, value )
36
- get_or_create_cell(column, value).setCellValue( poi_cell_value(value) )
37
- end
38
-
39
- def get_or_create_cell( column, value = nil )
40
- if(value)
41
- java_send(:getCell, [Java::int], column) || createCell(column, poi_cell_type(value))
42
- else
43
- java_send(:getCell, [Java::int], column) || java_send(:createCell, [Java::int], column)
13
+
14
+ java_import 'org.apache.poi.ss.util.CellReference'
15
+
16
+ module Java
17
+
18
+ module OrgApachePoiHssfUsermodel
19
+ class HSSFSheet
20
+ def name
21
+ getSheetName
22
+ end
23
+
24
+ def num_rows
25
+ getPhysicalNumberOfRows
26
+ end
27
+
44
28
  end
45
29
  end
46
-
47
- def idx
48
- getRowNum()
49
- end
50
-
51
- # Iterate over each column in the row and yield on the cell
52
- def each(&block)
53
- cellIterator.each {|c| yield cell_value(c) }
54
- end
55
-
56
- # TODO
57
- # for min, max and sort from enumerable need <=>
58
- # def <=> end
59
-
60
30
  end
61
-
62
- end
31
+ end
@@ -1,78 +1,85 @@
1
1
  # Copyright:: Autotelik Media Ltd
2
2
  # Author :: Tom Statter
3
3
  # Date :: July 2010
4
- # License::
4
+ # License::
5
5
  #
6
- # Details:: A wrapper around creating and directly manipulating Excel files.
6
+ # Details:: A wrapper around creating and directly manipulating Excel files.
7
7
  # Acts as proxy over main Ruby gem spreadsheet and our own JRuby only implementation using Apache POI
8
8
  # Aim is to make it seamless to switch between any Excel implementation
9
- #
9
+ #
10
10
  # http://spreadsheet.rubyforge.org/GUIDE_txt.html
11
11
  #
12
12
  require 'guards'
13
13
 
14
- module ExcelProxy
15
- # Returns the current proxy class
16
- def self.proxy_class
17
- if(DataShift::Guards.jruby?)
18
- require 'jexcel_file'
19
- JExcelFile
20
- else
21
- require 'spreadsheet'
22
- require 'spreadsheet_extensions'
23
- Spreadsheet
14
+ if DataShift::Guards.jruby?
15
+ require 'jexcel_file'
16
+ else
17
+ require 'spreadsheet'
18
+ require 'spreadsheet_extensions'
19
+ end
20
+
21
+ module DataShift
22
+ module ExcelProxy
23
+ # Returns the current proxy class
24
+ def self.proxy_class
25
+ if DataShift::Guards.jruby?
26
+ JExcelFile
27
+ else
28
+ Spreadsheet
29
+ end
24
30
  end
25
- end
26
-
27
- def self.proxy_object
28
- if(DataShift::Guards.jruby?)
29
- ExcelProxy::proxy_class.new
30
- else
31
- ExcelProxy::proxy_class::Workbook.new
31
+
32
+ def self.proxy_object
33
+ if DataShift::Guards.jruby?
34
+ ExcelProxy.proxy_class.new
35
+ else
36
+ ExcelProxy.proxy_class::Workbook.new
37
+ end
32
38
  end
33
39
  end
34
- end
35
40
 
36
- class Excel #< BasicObject
41
+ class Excel # < BasicObject
37
42
 
38
- def initialize()
39
- @excel_class = ExcelProxy::proxy_class
40
- @excel = ExcelProxy::proxy_object
41
- end
42
-
43
- # Forward all undefined methods to the wrapped Excel object.
44
- def method_missing(method, *args, &block)
45
- #puts @excel.class, method, args.inspect
46
-
47
- if(@excel.respond_to?(method))
48
- @excel.send(method, *args, &block)
49
- elsif(@excel.worksheets.last.respond_to?(method)) # active_worksheet doesn't work so use the latest
50
- @excel.worksheets.last.send(method, *args, &block)
51
- elsif(@excel_class.respond_to?(method))
52
- if(method == :open || method == 'open')
53
- @excel = @excel_class.send(method, *args, &block)
43
+ def initialize
44
+ @excel_class = ExcelProxy.proxy_class
45
+ @excel = ExcelProxy.proxy_object
46
+ end
47
+
48
+ # Forward all undefined methods to the wrapped Excel object.
49
+ def method_missing(method, *args, &block)
50
+ # puts @excel.class, method, args.inspect
51
+
52
+ if @excel.respond_to?(method)
53
+ @excel.send(method, *args, &block)
54
+ elsif @excel.worksheets.last.respond_to?(method) # active_worksheet doesn't work so use the latest
55
+ @excel.worksheets.last.send(method, *args, &block)
56
+ elsif @excel_class.respond_to?(method)
57
+ if method == :open || method == 'open'
58
+ @excel = @excel_class.send(method, *args, &block)
59
+ else
60
+ @excel_class.send(method, *args, &block)
61
+ end
54
62
  else
55
- @excel_class.send(method, *args, &block)
63
+ super
56
64
  end
57
- else
58
- super
59
65
  end
60
- end
61
66
 
62
- def self.method_missing(method, *args, &block)
63
- @excel_class.send(method, *args, &block)
64
- end
65
-
66
- # Returns +true+ if _obj_ responds to the given method. Private methods are included in the search
67
- # only if the optional second parameter evaluates to +true+.
68
- def respond_to?(method, include_private=false)
69
- super || @excel.respond_to?(method, include_private)
70
- end
71
-
72
- # without this can't get at any defined modules etc
73
- #
74
- def self.const_missing(name)
75
- ::Object.const_get(name)
67
+ def self.method_missing(method, *args, &block)
68
+ @excel_class.send(method, *args, &block)
69
+ end
70
+
71
+ # Returns +true+ if _obj_ responds to the given method. Private methods are included in the search
72
+ # only if the optional second parameter evaluates to +true+.
73
+ def respond_to?(method, include_private = false)
74
+ super || @excel.respond_to?(method, include_private)
75
+ end
76
+
77
+ # without this can't get at any defined modules etc
78
+ #
79
+ def self.const_missing(name)
80
+ ::Object.const_get(name)
81
+ end
82
+
76
83
  end
77
-
84
+
78
85
  end
@@ -0,0 +1,66 @@
1
+ # Copyright:: Autotelik Media Ltd 2016
2
+ # Author :: Tom Statter
3
+ # Date :: April 2016
4
+ # License::
5
+ #
6
+ if DataShift::Guards.jruby?
7
+
8
+ # Extend the Poi classes with some syntactic sugar
9
+
10
+ java_import 'org.apache.poi.ss.util.CellReference'
11
+
12
+ module Java
13
+
14
+ module OrgApachePoiHssfUsermodel
15
+
16
+ # https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Row.html
17
+ class HSSFRow
18
+
19
+ include RubyPoiTranslations
20
+
21
+ include Enumerable
22
+
23
+ def empty?
24
+ getLastCellNum == -1
25
+ end
26
+
27
+ def size
28
+ # Gets the number of defined cells (NOT number of cells in the actual row!).
29
+ # That is to say if only columns 0,4,5 have values then there would be 3.
30
+ getPhysicalNumberOfCells # or getLastCellNum ?
31
+ end
32
+
33
+ def []( column)
34
+ cell_value( get_or_create_cell( column ) )
35
+ end
36
+
37
+ def []=( column, value )
38
+ get_or_create_cell(column, value).setCellValue( poi_cell_value(value) )
39
+ end
40
+
41
+ def get_or_create_cell( column, value = nil )
42
+ ref = CellReference.new(getRowNum, column)
43
+ if value
44
+ getCell(ref.getCol) # || createCell(column, poi_cell_type(value))
45
+ else
46
+ getCell(ref.getCol) # || java_send(:createCell, column)
47
+ end
48
+ end
49
+
50
+ def idx
51
+ getRowNum
52
+ end
53
+
54
+ # Iterate over each column in the row and yield on the cell
55
+ def each(&_block)
56
+ cellIterator.each { |c| yield cell_value(c) }
57
+ end
58
+
59
+ # TODO
60
+ # for min, max and sort from enumerable need <=>
61
+ # def <=> end
62
+
63
+ end
64
+ end
65
+ end
66
+ end