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,110 +0,0 @@
1
- # Copyright:: (c) Autotelik Media Ltd 2012
2
- # Author :: Tom Statter
3
- # Date :: Mar 2012
4
- # License:: MIT.
5
- #
6
- # Usage::
7
- #
8
- # To pull Datashift commands into your main application :
9
- #
10
- # require 'datashift'
11
- #
12
- # DataShift::load_commands
13
- #
14
- # N.B Requires JRuby
15
- #
16
- # => bundle exec thor datashift:import:excel -m <active record class> -i <output_template.xls> -a
17
- #
18
-
19
- require 'datashift'
20
-
21
-
22
- # Note, not DataShift, case sensitive, create namespace for command line : datashift
23
- module Datashift
24
-
25
-
26
- class Import < Thor
27
-
28
- include DataShift::Logging
29
-
30
- desc "excel", "import .xls file for specifiec active record model"
31
- method_option :model, :aliases => '-m', :required => true, :desc => "The related active record model"
32
- method_option :input, :aliases => '-i', :required => true, :desc => "The input .xls file"
33
- method_option :config, :aliases => '-c', :desc => "YAML config file with defaults, over-rides etc"
34
- method_option :assoc, :aliases => '-a', :type => :boolean, :desc => "Include any associations supplied in the input"
35
- method_option :exclude, :aliases => '-e', :type => :array, :desc => "Use with -a : Exclude association types. Any from #{DataShift::MethodDetail::supported_types_enum.to_a.inspect}"
36
- method_option :verbose, :aliases => '-v', :type => :boolean, :desc => "Verbose logging"
37
-
38
- def excel()
39
-
40
- # TODO - We're assuming run from a rails app/top level dir...
41
- # ...can we make this more robust ? e.g what about when using active record but not in Rails app,
42
- require File.expand_path('config/environment.rb')
43
-
44
- require 'excel_loader'
45
-
46
- model = options[:model]
47
-
48
- klass = DataShift::ModelMapper.class_from_string_or_raise( model )
49
-
50
- loader_options = { :instance_methods => true }
51
-
52
- if(options[:loader])
53
- begin
54
-
55
- loader_klass = DataShift::ModelMapper::class_from_string(options[:loader])
56
-
57
- loader = loader_klass.new(klass)
58
-
59
- logger.info("INFO: Using loader : #{loader.class}")
60
- rescue
61
- logger.error("INFO: No specific #{model}Loader found - using generic ExcelLoader")
62
- loader = DataShift::ExcelLoader.new(klass, nil, loader_options)
63
- end
64
- else
65
- logger.info("No Loader specified - using generic ExcelLoader")
66
- loader = DataShift::ExcelLoader.new(klass, nil, loader_options)
67
- end
68
-
69
- #TOFIX - multi loggers to file + STDOUT
70
- # loader.logger.verbose if(options['verbose'])
71
-
72
- loader.configure_from( options[:config] ) if(options[:config])
73
-
74
- loader.perform_load(options[:input])
75
- end
76
-
77
- desc "csv", "import CSV file for specified active record model"
78
- method_option :model, :aliases => '-m', :required => true, :desc => "The related active record model"
79
- method_option :input, :aliases => '-i', :required => true, :desc => "The input .xls file"
80
- method_option :config, :aliases => '-c', :desc => "YAML config file with defaults, over-rides etc"
81
- method_option :assoc, :aliases => '-a', :type => :boolean, :desc => "Include any associations supplied in the input"
82
- method_option :exclude, :aliases => '-e', :type => :array, :desc => "Use with -a : Exclude association types. Any from #{DataShift::MethodDetail::supported_types_enum.to_a.inspect}"
83
- method_option :verbose, :aliases => '-v', :type => :boolean, :desc => "Verbose logging"
84
-
85
- def csv()
86
-
87
- # TODO - We're assuming run from a rails app/top level dir...
88
- # ...can we make this more robust ? e.g what about when using active record but not in Rails app,
89
- require File.expand_path('config/environment.rb')
90
-
91
- require 'csv_loader'
92
-
93
- model = options[:model]
94
-
95
- klass = DataShift::ModelMapper.class_from_string_or_raise( model )
96
-
97
- loader = DataShift::CsvLoader.new(klass)
98
-
99
- #TOFIX - multi loggers to file + STDOUT
100
- # loader.logger.verbose if(options['verbose'])
101
-
102
- loader.configure_from( options[:config] ) if(options[:config])
103
-
104
- loader.perform_load(options[:input])
105
- end
106
-
107
- end
108
-
109
- end
110
-
@@ -1,65 +0,0 @@
1
- # Copyright:: (c) Autotelik Media Ltd 2015
2
- # Author :: Tom Statter
3
- # Date :: Mar 2015
4
- # License:: MIT.
5
- #
6
- # Usage::
7
- #
8
- # To pull Datashift commands into your main application :
9
- #
10
- # require 'datashift'
11
- #
12
- # DataShift::load_commands
13
- #
14
- require 'datashift'
15
-
16
- # Note, not DataShift, case sensitive, create namespace for command line : datashift
17
- module Datashift
18
-
19
-
20
- class Mapping < Thor
21
-
22
- include DataShift::Logging
23
-
24
- desc "template", "Generate a simple mappings template\nInput is treated as the *source* unless otherwise directed"
25
-
26
- method_option :model, :aliases => '-m', :desc => "The active record model to use for mappings"
27
- method_option :model_as_dest, :aliases => '-d', :type=> :boolean, :desc => "Set model attributes as destination"
28
-
29
- method_option :excel, :aliases => '-e', :desc => "The excel spreadsheet to use for mappings"
30
- method_option :excel_as_dest, :aliases => '-a', :type=> :boolean, :desc => "Set excel headers as destination"
31
-
32
- method_option :result, :aliases => '-r', :required => true, :desc => "Create template of model in supplied file"
33
-
34
- def template()
35
-
36
- # TODO - We're assuming run from a rails app/top level dir...
37
- # ...can we make this more robust ? e.g what about when using active record but not in Rails app,
38
- require File.expand_path('config/environment.rb')
39
-
40
- result = options[:result]
41
-
42
- if(File.directory?(result))
43
- result = File.join(result, "mapping_template.yaml")
44
- puts "Output generated in #{result}"
45
- end
46
-
47
- logger.info "Datashift: Starting mapping template generation in #{result}"
48
-
49
- mapper = DataShift::MappingGenerator.new(result)
50
-
51
- model = options[:model]
52
-
53
- mappings = String.new
54
-
55
- mappings += mapper.generate(model, options) unless(model.nil? && options[:excel])
56
-
57
- mappings += mapper.generate_from_excel(options[:excel], options) if(options[:excel])
58
-
59
- File.open(result, 'w') { |f| f << mappings }
60
-
61
- end
62
-
63
- end
64
-
65
- end
@@ -1,84 +0,0 @@
1
- # Copyright:: (c) Autotelik Media Ltd 2012
2
- # Author :: Tom Statter
3
- # Date :: Sept 2012
4
- # License:: MIT.
5
- #
6
- # Usage::
7
- #
8
- # To pull Datashift commands into your main application :
9
- #
10
- # require 'datashift'
11
- #
12
- # DataShift::load_commands
13
- #
14
- require 'datashift'
15
-
16
- # Note, not DataShift, case sensitive, create namespace for command line : datashift
17
- module Datashift
18
- class Tools < Thor
19
-
20
- include DataShift::Logging
21
-
22
- desc "zip", "Create zip of files"
23
-
24
- method_option :path, :aliases => '-p', :required => true, :desc => "The path to the digital files"
25
- method_option :output, :aliases => '-o', :required => true, :desc => "The resulting zip file name"
26
-
27
- def zip()
28
-
29
- require 'zip/zip'
30
- require 'zip/zipfilesystem'
31
-
32
- output = options[:output]
33
-
34
- Zip::ZipOutputStream.open(output) do |zos|
35
- Dir[File.join(options[:path], '**', '*.*')].each do |p|
36
- zos.put_next_entry(File.basename(p))
37
- zos.print IO.read(p)
38
- end
39
- end
40
- end
41
-
42
- desc "zip_matching", "Create zip of matching digital files e.g zip up pdf, jpg and png versions of a file"
43
-
44
- method_option :path, :aliases => '-p', :required => true, :desc => "The path to the digital files"
45
- method_option :results, :aliases => '-r', :required => true, :desc => "The path to store resulting zip files"
46
-
47
- def zip_matching()
48
-
49
- require 'zip/zip'
50
- require 'zip/zipfilesystem'
51
-
52
- ready_to_zip = {}
53
- Dir[File.join(options[:path], '**', '*.*')].each do |p|
54
- next if File.directory? p
55
-
56
- basename = File.basename(p, '.*')
57
- ready_to_zip[basename] ||= []
58
- ready_to_zip[basename] << p
59
- end
60
-
61
- output = options[:results]
62
-
63
- FileUtils::mkdir_p(output) unless File.exists?(output)
64
-
65
- puts "Creating #{ready_to_zip.keys.size} new zips"
66
- ready_to_zip.each do |basename, paths|
67
-
68
- z= File.join(output, basename + '.zip')
69
- puts "zipping to #{z}"
70
-
71
- Zip::ZipOutputStream.open(z) do |zos|
72
- paths.each do |file|
73
- zos.put_next_entry(File.basename(file))
74
- zos.print IO.read(file)
75
- end
76
- end
77
- end
78
-
79
- end
80
-
81
- end
82
-
83
- end
84
-
@@ -1,31 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
-
4
- # DEFINE WHICH VERSIONS ON VITAL GEMS WE WANT TO TEST WITH
5
-
6
- gem 'rails', '4.1.8'
7
-
8
- gem 'spreadsheet', '1.0.0'
9
- gem 'paperclip'
10
- gem 'activesupport'
11
-
12
- gem 'database_cleaner'
13
-
14
- gem 'factory_girl_rails'
15
-
16
- gem 'rspec'
17
- gem 'rspec-core'
18
- gem 'rspec-expectations' # RSpec matchers for should and should_not.
19
- gem 'rspec-mocks' # RSpec test double framework with stubbing and mocking.
20
- gem 'rspec-rails' # RSpec version 2.x for Rails version 3.x.
21
-
22
- # we need both, for JRuby testing of Excel and non JRuby csv
23
- platform :jruby do
24
- gem 'jruby-openssl'
25
- gem 'activerecord-jdbcsqlite3-adapter'
26
- end
27
-
28
- platform :ruby do
29
- gem 'sqlite3'
30
- end
31
-
@@ -1,134 +0,0 @@
1
- GEM
2
- remote: https://rubygems.org/
3
- specs:
4
- actionmailer (4.1.8)
5
- actionpack (= 4.1.8)
6
- actionview (= 4.1.8)
7
- mail (~> 2.5, >= 2.5.4)
8
- actionpack (4.1.8)
9
- actionview (= 4.1.8)
10
- activesupport (= 4.1.8)
11
- rack (~> 1.5.2)
12
- rack-test (~> 0.6.2)
13
- actionview (4.1.8)
14
- activesupport (= 4.1.8)
15
- builder (~> 3.1)
16
- erubis (~> 2.7.0)
17
- activemodel (4.1.8)
18
- activesupport (= 4.1.8)
19
- builder (~> 3.1)
20
- activerecord (4.1.8)
21
- activemodel (= 4.1.8)
22
- activesupport (= 4.1.8)
23
- arel (~> 5.0.0)
24
- activesupport (4.1.8)
25
- i18n (~> 0.6, >= 0.6.9)
26
- json (~> 1.7, >= 1.7.7)
27
- minitest (~> 5.1)
28
- thread_safe (~> 0.1)
29
- tzinfo (~> 1.1)
30
- arel (5.0.1.20140414130214)
31
- builder (3.2.2)
32
- climate_control (0.0.3)
33
- activesupport (>= 3.0)
34
- cocaine (0.5.8)
35
- climate_control (>= 0.0.3, < 1.0)
36
- concurrent-ruby (1.0.1)
37
- database_cleaner (1.5.1)
38
- diff-lcs (1.2.5)
39
- erubis (2.7.0)
40
- factory_girl (4.5.0)
41
- activesupport (>= 3.0.0)
42
- factory_girl_rails (4.6.0)
43
- factory_girl (~> 4.5.0)
44
- railties (>= 3.0.0)
45
- i18n (0.7.0)
46
- json (1.8.3)
47
- mail (2.6.3)
48
- mime-types (>= 1.16, < 3)
49
- mime-types (2.99.1)
50
- mimemagic (0.3.0)
51
- minitest (5.8.4)
52
- paperclip (4.3.5)
53
- activemodel (>= 3.2.0)
54
- activesupport (>= 3.2.0)
55
- cocaine (~> 0.5.5)
56
- mime-types
57
- mimemagic (= 0.3.0)
58
- rack (1.5.5)
59
- rack-test (0.6.3)
60
- rack (>= 1.0)
61
- rails (4.1.8)
62
- actionmailer (= 4.1.8)
63
- actionpack (= 4.1.8)
64
- actionview (= 4.1.8)
65
- activemodel (= 4.1.8)
66
- activerecord (= 4.1.8)
67
- activesupport (= 4.1.8)
68
- bundler (>= 1.3.0, < 2.0)
69
- railties (= 4.1.8)
70
- sprockets-rails (~> 2.0)
71
- railties (4.1.8)
72
- actionpack (= 4.1.8)
73
- activesupport (= 4.1.8)
74
- rake (>= 0.8.7)
75
- thor (>= 0.18.1, < 2.0)
76
- rake (11.0.1)
77
- rspec (3.4.0)
78
- rspec-core (~> 3.4.0)
79
- rspec-expectations (~> 3.4.0)
80
- rspec-mocks (~> 3.4.0)
81
- rspec-core (3.4.4)
82
- rspec-support (~> 3.4.0)
83
- rspec-expectations (3.4.0)
84
- diff-lcs (>= 1.2.0, < 2.0)
85
- rspec-support (~> 3.4.0)
86
- rspec-mocks (3.4.1)
87
- diff-lcs (>= 1.2.0, < 2.0)
88
- rspec-support (~> 3.4.0)
89
- rspec-rails (3.4.2)
90
- actionpack (>= 3.0, < 4.3)
91
- activesupport (>= 3.0, < 4.3)
92
- railties (>= 3.0, < 4.3)
93
- rspec-core (~> 3.4.0)
94
- rspec-expectations (~> 3.4.0)
95
- rspec-mocks (~> 3.4.0)
96
- rspec-support (~> 3.4.0)
97
- rspec-support (3.4.1)
98
- ruby-ole (1.2.12)
99
- spreadsheet (1.0.0)
100
- ruby-ole (>= 1.0)
101
- sprockets (3.5.2)
102
- concurrent-ruby (~> 1.0)
103
- rack (> 1, < 3)
104
- sprockets-rails (2.3.3)
105
- actionpack (>= 3.0)
106
- activesupport (>= 3.0)
107
- sprockets (>= 2.8, < 4.0)
108
- sqlite3 (1.3.11)
109
- thor (0.19.1)
110
- thread_safe (0.3.5)
111
- tzinfo (1.2.2)
112
- thread_safe (~> 0.1)
113
-
114
- PLATFORMS
115
- ruby
116
-
117
- DEPENDENCIES
118
- activerecord-jdbcsqlite3-adapter
119
- activesupport
120
- database_cleaner
121
- factory_girl_rails
122
- jruby-openssl
123
- paperclip
124
- rails (= 4.1.8)
125
- rspec
126
- rspec-core
127
- rspec-expectations
128
- rspec-mocks
129
- rspec-rails
130
- spreadsheet (= 1.0.0)
131
- sqlite3
132
-
133
- BUNDLED WITH
134
- 1.11.2
@@ -1,144 +0,0 @@
1
- # Copyright:: (c) Autotelik Media Ltd 2012
2
- # Author :: Tom Statter
3
- # Date :: Sept 2012
4
- # License:: MIT
5
- #
6
- # Details:: Specs for CSV aspect of export
7
- #
8
- require File.dirname(__FILE__) + '/spec_helper'
9
-
10
- require 'erb'
11
- require 'csv_exporter'
12
-
13
- describe 'CSV Exporter' do
14
-
15
- before(:all) do
16
- results_clear( "*.csv" )
17
- end
18
-
19
- before(:each) do
20
- DataShift::MethodDictionary.clear
21
- DataShift::MethodDictionary.find_operators( Project )
22
-
23
- db_clear() # todo read up about proper transactional fixtures
24
- end
25
-
26
- context 'simple project' do
27
-
28
- before(:each) do
29
- create( :project )
30
- end
31
-
32
- it "should be able to create a new CSV exporter" do
33
- exporter = DataShift::CsvExporter.new( 'exp_rspec_csv_empty.csv' )
34
-
35
- expect(exporter).not_to be_nil
36
- end
37
-
38
- it "should throw if not active record objects" do
39
- exporter = DataShift::CsvExporter.new( 'exp_rspec_csv_empty.csv' )
40
-
41
- expect{ exporter.export([123.45]) }.to raise_error(ArgumentError)
42
- end
43
-
44
-
45
- it "should export collection of model objects to .xls file" do
46
-
47
- expected = result_file('exp_project_collection_spec.csv')
48
-
49
- exporter = DataShift::CsvExporter.new( expected )
50
-
51
- count = Project.count
52
-
53
- Project.create( :value_as_string => 'Value as String', :value_as_boolean => true, :value_as_double => 75.672)
54
-
55
- Project.count.should == count + 1
56
-
57
- exporter.export(Project.all)
58
-
59
- expect(File.exists?(expected)).to eq true
60
-
61
- puts "Can manually check file @ #{expected}"
62
-
63
- File.foreach(expected) {}
64
- count = $.
65
- count.should == Project.count + 1
66
- end
67
-
68
- it "should handle bad params to export" do
69
-
70
- expected = result_file('project_first_export_spec.csv')
71
-
72
- exporter = DataShift::CsvExporter.new( expected )
73
-
74
- expect{ exporter.export(nil) }.not_to raise_error
75
-
76
- expect{ exporter.export([]) }.not_to raise_error
77
-
78
- puts "Can manually check file @ #{expected}"
79
- end
80
-
81
- it "should export a model object to csv file" do
82
-
83
- expected = result_file('project_first_export_spec.csv')
84
-
85
- exporter = DataShift::CsvExporter.new( expected )
86
-
87
- exporter.export(Project.all[0])
88
-
89
- expect(File.exists?(expected)).to eq true
90
-
91
- puts "Can manually check file @ #{expected}"
92
- end
93
-
94
- it "should export a model and result of method calls on it to csv file" do
95
-
96
- expected = result_file('project_with_methods_export_spec.csv')
97
-
98
- exporter = DataShift::CsvExporter.new( expected )
99
-
100
- exporter.export(Project.all, {:methods => [:multiply]})
101
-
102
- expect(File.exists?(expected)).to eq true
103
-
104
- puts "Can manually check file @ #{expected}"
105
-
106
- File.foreach(expected) {}
107
- count = $.
108
- count.should == Project.count + 1
109
- end
110
-
111
- end
112
-
113
- it "should export a model and associations to csv" do
114
-
115
- create( :project_user )
116
- create_list(:project, 7)
117
-
118
- expected = result_file('exp_project_plus_assoc_export_spec.csv')
119
-
120
- gen = DataShift::CsvExporter.new(expected)
121
-
122
- items = Project.all
123
-
124
- gen.export_with_associations(Project, items)
125
-
126
- File.foreach(expected) {}
127
- count = $.
128
- count.should == items.size + 1
129
-
130
- expect(File.exists?(expected)).to eq true
131
-
132
- csv = CSV.read(expected)
133
-
134
- expect(csv[0]).to include 'owner'
135
- expect(csv[0]).to include 'user'
136
-
137
- user_inx = csv[0].index 'user'
138
-
139
- expect(user_inx).to be > -1
140
-
141
- expect( csv[1][user_inx] ).to include 'mr'
142
- end
143
-
144
- end