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,203 +0,0 @@
1
- # Copyright:: (c) Autotelik Media Ltd 2011
2
- # Author :: Tom Statter
3
- # Date :: Aug 2011
4
- # License:: MIT
5
- #
6
- # Details:: Specs for Excel aspect of Active Record Loader
7
- #
8
- require File.dirname(__FILE__) + '/spec_helper'
9
-
10
- require 'erb'
11
- require 'excel_generator'
12
-
13
- include DataShift
14
-
15
- describe 'Excel Generator' do
16
-
17
- before(:all) do
18
-
19
- results_clear("gen_*.xls")
20
-
21
- @klazz = Project
22
- @assoc_klazz = Category
23
- end
24
-
25
- before(:each) do
26
- MethodDictionary.clear
27
- MethodDictionary.find_operators( @klazz )
28
- MethodDictionary.find_operators( @assoc_klazz )
29
- end
30
-
31
- it "should be able to create a new excel generator" do
32
- generator = ExcelGenerator.new( 'gen_dummy.xls' )
33
-
34
- generator.should_not be_nil
35
- end
36
-
37
- it "should generate template .xls file from model" do
38
-
39
- expected = result_file('gen_project_template_spec.xls')
40
-
41
- gen = ExcelGenerator.new( expected )
42
-
43
- gen.generate(Project)
44
-
45
- expect(File.exists?(expected)).to eq true
46
-
47
- puts "Can manually check file @ #{expected}"
48
-
49
- excel = Excel.new
50
- excel.open(expected)
51
-
52
- expect(excel.worksheets.size).to eq 1
53
-
54
- excel.worksheet(0).name.should == 'Project'
55
-
56
- headers = excel.worksheets[0].row(0)
57
-
58
- [ "title", "value_as_string", "value_as_text", "value_as_boolean", "value_as_datetime", "value_as_integer", "value_as_double"].each do |check|
59
- headers.include?(check).should == true
60
- end
61
- end
62
-
63
- # has_one :owner
64
- # has_many :milestones
65
- # has_many :loader_releases
66
- # has_many :versions, :through => :loader_releases
67
- # has_and_belongs_to_many :categories
68
-
69
- it "should include all associations in template .xls file from model" do
70
-
71
- expected = result_file('gen_project_plus_assoc_template_spec.xls')
72
-
73
- gen = ExcelGenerator.new(expected)
74
-
75
- gen.generate_with_associations(Project)
76
-
77
- expect( File.exists?(expected)).to eq true
78
-
79
- excel = Excel.new
80
- excel.open(expected)
81
-
82
- expect(excel.worksheets.size).to eq 1
83
-
84
- excel.worksheet(0).name.should == 'Project'
85
-
86
- headers = excel.worksheets[0].row(0)
87
-
88
- ["owner", "milestones", "loader_releases", "versions", "categories"].each do |check|
89
- headers.include?(check).should == true
90
- end
91
- end
92
-
93
-
94
- it "should enable us to exclude associations by type in template .xls file" do
95
-
96
- expected = result_file('gen_project_plus_some_assoc_template_spec.xls')
97
-
98
- gen = ExcelGenerator.new(expected)
99
-
100
- options = {:exclude => :has_many }
101
-
102
- gen.generate_with_associations(Project, options)
103
-
104
- expect(File.exists?(expected)).to eq true #, "Failed to find expected result file #{expected}"
105
-
106
- excel = Excel.new
107
- excel.open(expected)
108
-
109
- expect(excel.worksheets.size).to eq 1
110
-
111
- excel.worksheet(0).name.should == 'Project'
112
-
113
- headers = excel.worksheets[0].row(0)
114
-
115
- headers.include?('title').should == true
116
- headers.include?('owner').should == true
117
-
118
- ["milestones", "loader_releases", "versions", "categories"].each do |check|
119
- headers.should_not include check
120
- end
121
-
122
- end
123
-
124
-
125
- it "should enable us to exclude certain associations in template .xls file " do
126
-
127
- expected = result_file('gen_project_plus_some_assoc_template_spec.xls')
128
-
129
- gen = ExcelGenerator.new(expected)
130
-
131
- options = {:remove => [:milestones, :versions] }
132
-
133
- gen.generate_with_associations(Project, options)
134
-
135
- expect(File.exists?(expected)).to eq true#, "Failed to find expected result file #{expected}"
136
-
137
- excel = Excel.new
138
- excel.open(expected)
139
-
140
- expect(excel.worksheets.size).to eq 1
141
-
142
- excel.worksheet(0).name.should == 'Project'
143
-
144
- headers = excel.worksheets[0].row(0)
145
-
146
- ["title", "loader_releases", "owner", "categories"].each do |check|
147
- headers.should include check
148
- end
149
-
150
-
151
- ["milestones", "versions", ].each do |check|
152
- headers.should_not include check
153
- end
154
-
155
- end
156
-
157
-
158
- it "should enable us to remove standard rails feilds from template .xls file " do
159
-
160
- expected = result_file('gen_project_plus_some_assoc_template_spec.xls')
161
-
162
- gen = ExcelGenerator.new(expected)
163
-
164
- options = {:remove_rails => true}
165
-
166
- gen.generate_with_associations(Project, options)
167
-
168
- expect(File.exists?(expected)).to eq true#, "Failed to find expected result file #{expected}"
169
-
170
- excel = Excel.new
171
- excel.open(expected)
172
-
173
- expect(excel.worksheets.size).to eq 1
174
-
175
- excel.worksheet(0).name.should == 'Project'
176
-
177
- headers = excel.worksheets[0].row(0)
178
-
179
- ["id", "updated_at", "created_at"].each do |check|
180
- headers.should_not include check
181
- end
182
-
183
-
184
- end
185
-
186
- it "should enable us to autosize columns in the .xls file" do
187
-
188
- expected = result_file('gen_project_autosized_template_spec.xls')
189
-
190
- gen = ExcelGenerator.new(expected)
191
-
192
- options = {:autosize => true, :exclude => :milestones }
193
-
194
- gen.generate_with_associations(Project, options)
195
-
196
- expect( File.exists?(expected)).to eq true
197
-
198
- excel = Excel.new
199
- excel.open(expected)
200
-
201
- end
202
-
203
- end
@@ -1,237 +0,0 @@
1
- # Copyright:: (c) Autotelik Media Ltd 2011
2
- # Author :: Tom Statter
3
- # Date :: Aug 2011
4
- # License:: MIT
5
- #
6
- # Details:: Specs for Excel aspect of Active Record Loader
7
- #
8
- require File.dirname(__FILE__) + '/spec_helper'
9
-
10
- require 'erb'
11
- require 'excel_loader'
12
-
13
- include DataShift
14
-
15
- describe 'Excel Loader' do
16
-
17
- # include_context "ActiveRecordTestModelsConnected"
18
-
19
- before(:each) do
20
- end
21
-
22
-
23
- before(:each) do
24
- create_list(:category, 5)
25
- end
26
-
27
- context 'loader creates new records' do
28
-
29
- it "should be able to create a new excel loader and load object" do
30
- loader = ExcelLoader.new( Project)
31
-
32
- loader.load_object.should_not be_nil
33
- loader.load_object.should be_is_a(Project)
34
- expect(loader.load_object.new_record?).to eq true
35
- end
36
-
37
- it "should process a simple .xls spreedsheet" do
38
-
39
- loader = ExcelLoader.new(Project)
40
-
41
- count = Project.count
42
- loader.perform_load ifixture_file('SimpleProjects.xls')
43
-
44
- loader.loaded_count.should == (Project.count - count)
45
- end
46
-
47
- it "should process multiple associations from single column" do
48
-
49
- DataShift::MethodDictionary.find_operators( Category )
50
-
51
- DataShift::MethodDictionary.build_method_details( Category )
52
-
53
- expect(Project.find_by_title('001')).to be_nil
54
-
55
- count = Project.count
56
-
57
- loader = ExcelLoader.new(Project)
58
-
59
- loader.perform_load( ifixture_file('ProjectsSingleCategories.xls') )
60
-
61
- expect(loader.loaded_count).to eq 4
62
-
63
- loader.loaded_count.should == (Project.count - count)
64
-
65
- {'001' => 2, '002' => 1, '003' => 3, '099' => 0 }.each do|title, expected|
66
- project = Project.find_by_title(title)
67
-
68
- expect(project).to_not be_nil
69
-
70
- expect(project.categories.size).to eq expected
71
- end
72
- end
73
-
74
- it "should process multiple associations in excel spreedsheet" do
75
-
76
- loader = ExcelLoader.new(Project)
77
-
78
- count = Project.count
79
- loader.perform_load( ifixture_file('ProjectsMultiCategories.xls' ))
80
-
81
- loader.loaded_count.should == (Project.count - count)
82
-
83
- {'004' => 3, '005' => 1, '006' => 0, '007' => 1 }.each do|title, expected|
84
- project = Project.find_by_title(title)
85
-
86
- project.should_not be_nil
87
-
88
- expect(project.categories.size).to eq expected
89
- end
90
-
91
- end
92
-
93
- it "should process multiple associations with lookup specified in column from excel spreedsheet" do
94
-
95
- loader = ExcelLoader.new(Project)
96
-
97
- count = Project.count
98
- loader.perform_load( ifixture_file('ProjectsMultiCategoriesHeaderLookup.xls'))
99
-
100
- loader.loaded_count.should == (Project.count - count)
101
- loader.loaded_count.should > 3
102
-
103
- {'004' => 4, '005' => 1, '006' => 0, '007' => 1 }.each do|title, expected|
104
- project = Project.find_by_title(title)
105
-
106
- project.should_not be_nil
107
-
108
- expect(project.categories.size).to eq expected
109
- end
110
-
111
- end
112
-
113
- it "should process excel spreedsheet with extra undefined columns" do
114
- loader = ExcelLoader.new(Project)
115
- lambda {loader.perform_load( ifixture_file('BadAssociationName.xls') ) }.should_not raise_error
116
- end
117
-
118
- it "should NOT process excel spreedsheet with extra undefined columns when strict mode" do
119
- loader = ExcelLoader.new(Project)
120
- expect {loader.perform_load( ifixture_file('BadAssociationName.xls'), :strict => true)}.to raise_error(MappingDefinitionError)
121
- end
122
-
123
- it "should raise an error when mandatory columns missing" do
124
- loader = ExcelLoader.new(Project)
125
- expect {loader.perform_load(ifixture_file('ProjectsMultiCategories.xls'), :mandatory => ['not_an_option', 'must_be_there'])}.to raise_error(DataShift::MissingMandatoryError)
126
- end
127
-
128
- end
129
-
130
- context 'update existing records' do
131
- end
132
-
133
- context 'external configuration of loader' do
134
-
135
- it "should provide facility to set default values", :focus => true do
136
- loader = ExcelLoader.new(Project)
137
-
138
- populator = loader.populator
139
-
140
- populator.set_default_value('value_as_string', 'some default text' )
141
- populator.set_default_value('value_as_double', 45.467 )
142
- populator.set_default_value('value_as_boolean', true )
143
-
144
- texpected = Time.now.to_s(:db)
145
-
146
- populator.set_default_value('value_as_datetime', texpected )
147
-
148
- #value_as_string Value as Text value as datetime value_as_boolean value_as_double category
149
-
150
- loader.perform_load(ifixture_file('ProjectsSingleCategories.xls'))
151
-
152
- p = Project.find_by_title( '099' )
153
-
154
- p.should_not be_nil
155
-
156
- p.value_as_string.should == 'some default text'
157
- p.value_as_double.should == 45.467
158
- p.value_as_boolean.should == true
159
- p.value_as_datetime.to_s(:db).should == texpected
160
-
161
- # expected: "2012-09-17 10:00:52"
162
- # got: Mon Sep 17 10:00:52 +0100 2012 (using ==)
163
-
164
- p_no_defs = Project.first
165
-
166
- p_no_defs.value_as_string.should_not == 'some default text'
167
- p_no_defs.value_as_double.should_not == 45.467
168
- p_no_defs.value_as_datetime.should_not == texpected
169
-
170
- end
171
-
172
- it "should provide facility to set pre and post fix values" do
173
- loader = ExcelLoader.new(Project)
174
-
175
- loader.populator.set_prefix('value_as_string', 'myprefix' )
176
- loader.populator.set_postfix('value_as_string', 'my post fix' )
177
-
178
- #value_as_string Value as Text value as datetime value_as_boolean value_as_double category
179
-
180
- loader.perform_load( ifixture_file('ProjectsSingleCategories.xls'))
181
-
182
- p = Project.find_by_title( '001' )
183
-
184
- p.should_not be_nil
185
-
186
- p.value_as_string.should == 'myprefixDemo stringmy post fix'
187
- end
188
-
189
- it "should provide facility to set default values via YAML configuration", :excel => true do
190
- loader = ExcelLoader.new(Project)
191
-
192
- loader.configure_from( ifixture_file('ProjectsDefaults.yml') )
193
-
194
-
195
- loader.perform_load( ifixture_file('ProjectsSingleCategories.xls') )
196
-
197
- p = Project.find_by_title( '099' )
198
-
199
- p.should_not be_nil
200
-
201
- p.value_as_string.should == "Default Project Value"
202
- end
203
-
204
-
205
- it "should provide facility to over ride values via YAML configuration", :excel => true do
206
- loader = ExcelLoader.new(Project)
207
-
208
- loader.configure_from( ifixture_file('ProjectsDefaults.yml') )
209
-
210
-
211
- loader.perform_load( ifixture_file('ProjectsSingleCategories.xls') )
212
-
213
- Project.all.each {|p| p.value_as_double.should == 99.23546 }
214
- end
215
-
216
-
217
-
218
- it "should provide facility to over ride values via YAML configuration", :yaml => true do
219
- loader = ExcelLoader.new(Project)
220
-
221
- expect(Project.count).to eq 0
222
-
223
- loader.configure_from( ifixture_file('ProjectsDefaults.yml') )
224
-
225
-
226
- loader.perform_load( ifixture_file('ProjectsSingleCategories.xls') )
227
-
228
- Project.all.each do |p|
229
- expect(p.value_as_double).to be_a BigDecimal
230
- expect(p.value_as_double).to eq 99.23546
231
- end
232
- end
233
-
234
-
235
- end
236
-
237
- end
@@ -1,203 +0,0 @@
1
- # To change this template, choose Tools | Templates
2
- # and open the template in the editor.
3
-
4
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
5
-
6
- require 'excel'
7
-
8
- describe 'Excel Proxy' do
9
-
10
- before(:each) do
11
- @excel = Excel.new
12
- end
13
-
14
- it "can open an existing spreadsheet" do
15
-
16
- sheet = @excel.open( ifixture_file('ProjectsSingleCategories.xls') )
17
-
18
- sheet.should_not be_nil
19
- end
20
-
21
- it "can create new un-named worksheet" do
22
- sheet1 = @excel.create_worksheet
23
-
24
- sheet1.name.should == "Worksheet1"
25
- end
26
-
27
- it "can create multiple un-named worksheets" do
28
- sheet1 = @excel.create_worksheet
29
- sheet2 = @excel.create_worksheet
30
- sheet1.name.should == "Worksheet1"
31
- sheet2.name.should == "Worksheet2"
32
- end
33
-
34
- it "can create new named worksheet" do
35
-
36
- sheet = @excel.create_worksheet( :name => "daft punk")
37
- sheet.name.should == "daft punk"
38
-
39
- sheet2 = @excel.create_worksheet( :name => "underworld")
40
- sheet2.name.should == "underworld"
41
- end
42
-
43
- it "can sanitize worksheet names as per Excel spec" do
44
-
45
- include ExcelBase
46
- extend ExcelBase
47
-
48
- # name.gsub(/[\[\]:\*\/\\\?]/, '
49
-
50
- sanitize_sheet_name("aute?chre").should == "autechre"
51
- sanitize_sheet_name("?autechre").should == "autechre"
52
- sanitize_sheet_name("aute?chre?").should == "autechre"
53
-
54
- sanitize_sheet_name("daft: ?punk").should == "daft punk"
55
- sanitize_sheet_name("guy call[]ed *Gerald").should == "guy called Gerald"
56
-
57
- sanitize_sheet_name("guy called */Gerald").should == "guy called Gerald"
58
- end
59
-
60
- # Pending - inject create_worksheet method into Spreadsheet gem
61
- if(DataShift::Guards.jruby?)
62
- it "ensures name of worksheet sanitized" do
63
-
64
- sheet = @excel.create_worksheet( :name => "daft: ?punk")
65
- sheet.name.should == "daft punk"
66
-
67
- sheet = @excel.create_worksheet( :name => "under[]world")
68
- sheet.name.should == "underworld"
69
- end
70
- end
71
-
72
- it "can create multiple named worksheets" do
73
-
74
- @excel.create_worksheet( :name => "underworld")
75
- @excel.create_worksheet( :name => "jeff mills")
76
- @excel.create_worksheet( :name => "autechre")
77
- @excel.create_worksheet( :name => "swarms")
78
-
79
- expect(@excel.worksheets.size).to eq 4
80
- end
81
-
82
- it "can access a worksheet by index" do
83
-
84
- @excel.create_worksheet( :name => "underworld")
85
- @excel.create_worksheet( :name => "jeff mills")
86
- @excel.create_worksheet( :name => "autechre")
87
-
88
- @excel.worksheets[0].name.should == "underworld"
89
- @excel.worksheets[2].name.should == "autechre"
90
- end
91
-
92
-
93
- it "can access a worksheet by ID" do
94
-
95
- @excel.create_worksheet( :name => "daft punk")
96
- @excel.create_worksheet( :name => "underworld")
97
-
98
- @excel.worksheet(0).name.should == "daft punk"
99
-
100
- @excel.worksheet(1).name.should == "underworld"
101
-
102
- end
103
-
104
- it "can add data to a specific row and column" do
105
-
106
- @excel.create_worksheet( :name => "underworld")
107
-
108
- @excel[0, 1] = "born slippy"
109
- @excel[0, 1].should == "born slippy"
110
-
111
- @excel[1, 23] = 23.0
112
- @excel[1, 23].should == 23.0
113
-
114
- @excel[0, 5] = true
115
- @excel[0, 5].should == true
116
- end
117
-
118
- it "can ask a row what index it is" do
119
-
120
- @excel.create_worksheet( :name => "underworld")
121
-
122
- @excel[3, 0] = "do i know who i am?"
123
- @excel[28, 0] = "who am i?"
124
-
125
- r1 = @excel.row(3)
126
- r1[0].should == "do i know who i am?"
127
- r1.idx.should == 3 # idx (0-based)
128
-
129
- r2 = @excel.row(28)
130
- r2[0].should == "who am i?"
131
- r2.idx.should == 28 # idx (0-based)
132
- end
133
-
134
- it "can iterate over the rows in a worksheet" do
135
-
136
- sheet = @excel.create_worksheet
137
-
138
- @excel[0, 1] = 12.30
139
- @excel[1, 1] = 25.30
140
- @excel[3, 1] = 4
141
-
142
- sheet.each do |row|
143
- row[0] = "A#{row.idx}"
144
- end
145
-
146
- @excel[0, 0].should == "A0"
147
- @excel[1, 0].should == "A1"
148
-
149
- # pending for JRuby ... spreadsheet iterates from 0 to max row, probably
150
- # dynamically creating rows that have never been referenced ..
151
- @excel[2, 0].should == "A2" unless DataShift::Guards.jruby?
152
-
153
- @excel[3, 0].should == "A3"
154
-
155
- @excel[0, 1].should == 12.30
156
- @excel[1, 1].should == 25.30
157
- @excel[2, 1].should satisfy {|x| x == "" || x == nil }
158
- @excel[3, 1].should == 4
159
- end
160
-
161
-
162
- it "can iterate over the cells in a row"do
163
-
164
- sheet = @excel.create_worksheet
165
-
166
- values = [ 'hello world', 12.30, "", 4 ]
167
-
168
- values.each_with_index do |v, i|
169
- @excel[0, i] = v
170
- end
171
-
172
- row = @excel.row(0)
173
-
174
- row.each { |col| col.should == values.shift }
175
- end
176
-
177
-
178
- #it "can support bools" do
179
- # pending "reading back value sometimes returns "" when cell was set to false"
180
-
181
- # sheet = @excel.create_worksheet
182
-
183
- #end
184
-
185
- it "can write an Excel file" do
186
- @excel = Excel.new
187
-
188
- sheet1 = @excel.create_worksheet
189
-
190
- @excel.create_worksheet( :name => "underworld")
191
-
192
- @excel[0, 1] = "born slippy"
193
- @excel[0, 1].should == "born slippy"
194
-
195
- expected = result_file('it_can_save_an_excel_file.xls')
196
-
197
- @excel.write( expected )
198
-
199
- expect(File.exists?(expected)).to eq true
200
-
201
- end
202
- end
203
-