datashift 0.9.0 → 0.10.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 (163) hide show
  1. data/README.markdown +63 -64
  2. data/Rakefile +4 -7
  3. data/VERSION +1 -1
  4. data/datashift.gemspec +92 -62
  5. data/lib/applications/apache_poi_extensions.rb +62 -0
  6. data/lib/applications/excel.rb +78 -0
  7. data/lib/applications/excel_base.rb +65 -0
  8. data/lib/applications/jexcel_file.rb +222 -0
  9. data/lib/applications/jexcel_file_extensions.rb +244 -0
  10. data/lib/applications/jruby/{jexcel_file.rb → old_pre_proxy_jexcel_file.rb} +0 -0
  11. data/lib/applications/ruby_poi_translations.rb +64 -0
  12. data/lib/applications/spreadsheet_extensions.rb +31 -0
  13. data/lib/datashift/method_details_manager.rb +4 -0
  14. data/lib/exporters/csv_exporter.rb +3 -1
  15. data/lib/exporters/excel_exporter.rb +59 -74
  16. data/lib/generators/excel_generator.rb +70 -74
  17. data/lib/guards.rb +57 -0
  18. data/lib/loaders/excel_loader.rb +105 -105
  19. data/lib/loaders/loader_base.rb +43 -21
  20. data/lib/loaders/paperclip/attachment_loader.rb +104 -0
  21. data/lib/loaders/paperclip/datashift_paperclip.rb +78 -0
  22. data/lib/loaders/paperclip/{image_loader.rb → image_loading.rb} +2 -18
  23. data/lib/thor/{generate_excel.thor → generate.thor} +48 -0
  24. data/lib/thor/paperclip.thor +85 -0
  25. data/lib/thor/tools.thor +23 -2
  26. data/spec/Gemfile +1 -7
  27. data/spec/csv_exporter_spec.rb +4 -4
  28. data/spec/csv_loader_spec.rb +1 -1
  29. data/spec/excel_exporter_spec.rb +43 -45
  30. data/spec/excel_generator_spec.rb +132 -60
  31. data/spec/excel_loader_spec.rb +134 -140
  32. data/spec/excel_spec.rb +179 -0
  33. data/spec/fixtures/ProjectsMultiCategoriesHeaderLookup.xls +0 -0
  34. data/spec/fixtures/config/database.yml +2 -2
  35. data/spec/fixtures/db/datashift_test_models_db.sqlite +0 -0
  36. data/spec/{db → fixtures/db}/migrate/20110803201325_create_test_bed.rb +0 -0
  37. data/spec/fixtures/load_datashift.thor +3 -0
  38. data/spec/fixtures/models/category.rb +7 -0
  39. data/spec/fixtures/models/empty.rb +2 -0
  40. data/spec/fixtures/models/loader_release.rb +10 -0
  41. data/spec/fixtures/models/long_and_complex_table_linked_to_version.rb +6 -0
  42. data/spec/fixtures/models/milestone.rb +8 -0
  43. data/spec/fixtures/models/owner.rb +5 -0
  44. data/spec/fixtures/models/project.rb +26 -0
  45. data/spec/fixtures/models/test_model_defs.rb +67 -0
  46. data/spec/fixtures/models/version.rb +7 -0
  47. data/spec/loader_spec.rb +4 -3
  48. data/spec/method_dictionary_spec.rb +7 -6
  49. data/spec/method_mapper_spec.rb +3 -2
  50. data/spec/rails_sandbox/.gitignore +15 -0
  51. data/spec/rails_sandbox/Gemfile +40 -0
  52. data/spec/rails_sandbox/README.rdoc +261 -0
  53. data/spec/rails_sandbox/Rakefile +7 -0
  54. data/spec/rails_sandbox/app/assets/images/rails.png +0 -0
  55. data/spec/rails_sandbox/app/assets/javascripts/application.js +15 -0
  56. data/spec/rails_sandbox/app/assets/stylesheets/application.css +13 -0
  57. data/spec/rails_sandbox/app/controllers/application_controller.rb +3 -0
  58. data/spec/rails_sandbox/app/helpers/application_helper.rb +2 -0
  59. data/spec/rails_sandbox/app/mailers/.gitkeep +0 -0
  60. data/spec/rails_sandbox/app/models/.gitkeep +0 -0
  61. data/spec/rails_sandbox/app/models/category.rb +7 -0
  62. data/spec/rails_sandbox/app/models/empty.rb +2 -0
  63. data/spec/rails_sandbox/app/models/loader_release.rb +10 -0
  64. data/spec/rails_sandbox/app/models/long_and_complex_table_linked_to_version.rb +6 -0
  65. data/spec/rails_sandbox/app/models/milestone.rb +8 -0
  66. data/spec/rails_sandbox/app/models/owner.rb +5 -0
  67. data/spec/rails_sandbox/app/models/project.rb +26 -0
  68. data/spec/rails_sandbox/app/models/test_model_defs.rb +67 -0
  69. data/spec/rails_sandbox/app/models/version.rb +7 -0
  70. data/spec/rails_sandbox/app/views/layouts/application.html.erb +14 -0
  71. data/spec/rails_sandbox/config.ru +4 -0
  72. data/spec/rails_sandbox/config/application.rb +62 -0
  73. data/spec/rails_sandbox/config/boot.rb +6 -0
  74. data/spec/rails_sandbox/config/database.yml +20 -0
  75. data/spec/rails_sandbox/config/environment.rb +5 -0
  76. data/spec/rails_sandbox/config/environments/development.rb +37 -0
  77. data/spec/rails_sandbox/config/environments/production.rb +67 -0
  78. data/spec/rails_sandbox/config/environments/test.rb +37 -0
  79. data/spec/rails_sandbox/config/initializers/backtrace_silencers.rb +7 -0
  80. data/spec/rails_sandbox/config/initializers/inflections.rb +15 -0
  81. data/spec/rails_sandbox/config/initializers/mime_types.rb +5 -0
  82. data/spec/rails_sandbox/config/initializers/secret_token.rb +7 -0
  83. data/spec/rails_sandbox/config/initializers/session_store.rb +8 -0
  84. data/spec/rails_sandbox/config/initializers/wrap_parameters.rb +14 -0
  85. data/spec/rails_sandbox/config/locales/en.yml +5 -0
  86. data/spec/rails_sandbox/config/routes.rb +58 -0
  87. data/spec/rails_sandbox/db/migrate/20110803201325_create_test_bed.rb +96 -0
  88. data/spec/rails_sandbox/db/schema.rb +81 -0
  89. data/spec/rails_sandbox/db/seeds.rb +7 -0
  90. data/spec/rails_sandbox/lib/assets/.gitkeep +0 -0
  91. data/spec/rails_sandbox/lib/tasks/.gitkeep +0 -0
  92. data/spec/rails_sandbox/log/.gitkeep +0 -0
  93. data/spec/rails_sandbox/public/404.html +26 -0
  94. data/spec/rails_sandbox/public/422.html +26 -0
  95. data/spec/rails_sandbox/public/500.html +25 -0
  96. data/spec/rails_sandbox/public/favicon.ico +0 -0
  97. data/spec/rails_sandbox/public/index.html +241 -0
  98. data/spec/rails_sandbox/public/robots.txt +5 -0
  99. data/spec/rails_sandbox/script/rails +6 -0
  100. data/spec/rails_sandbox/test/fixtures/.gitkeep +0 -0
  101. data/spec/rails_sandbox/test/functional/.gitkeep +0 -0
  102. data/spec/rails_sandbox/test/integration/.gitkeep +0 -0
  103. data/spec/rails_sandbox/test/performance/browsing_test.rb +12 -0
  104. data/spec/rails_sandbox/test/test_helper.rb +13 -0
  105. data/spec/rails_sandbox/test/unit/.gitkeep +0 -0
  106. data/spec/rails_sandbox/vendor/assets/javascripts/.gitkeep +0 -0
  107. data/spec/rails_sandbox/vendor/assets/stylesheets/.gitkeep +0 -0
  108. data/spec/rails_sandbox/vendor/plugins/.gitkeep +0 -0
  109. data/spec/spec_helper.rb +144 -121
  110. data/spec/thor_spec.rb +34 -14
  111. metadata +207 -194
  112. data/lib/helpers/spree_helper.rb +0 -213
  113. data/lib/loaders/spreadsheet_loader.rb +0 -144
  114. data/lib/loaders/spree/image_loader.rb +0 -90
  115. data/lib/loaders/spree/product_loader.rb +0 -354
  116. data/lib/thor/spree/bootstrap_cleanup.thor +0 -61
  117. data/lib/thor/spree/products_images.thor +0 -252
  118. data/lib/thor/spree/reports.thor +0 -56
  119. data/public/spree/products/large/DEMO_001_ror_bag.jpeg +0 -0
  120. data/public/spree/products/large/DEMO_002_Powerstation.jpg +0 -0
  121. data/public/spree/products/large/DEMO_003_ror_mug.jpeg +0 -0
  122. data/public/spree/products/mini/DEMO_001_ror_bag.jpeg +0 -0
  123. data/public/spree/products/mini/DEMO_002_Powerstation.jpg +0 -0
  124. data/public/spree/products/mini/DEMO_003_ror_mug.jpeg +0 -0
  125. data/public/spree/products/original/DEMO_001_ror_bag.jpeg +0 -0
  126. data/public/spree/products/original/DEMO_002_Powerstation.jpg +0 -0
  127. data/public/spree/products/original/DEMO_003_ror_mug.jpeg +0 -0
  128. data/public/spree/products/product/DEMO_001_ror_bag.jpeg +0 -0
  129. data/public/spree/products/product/DEMO_002_Powerstation.jpg +0 -0
  130. data/public/spree/products/product/DEMO_003_ror_mug.jpeg +0 -0
  131. data/public/spree/products/small/DEMO_001_ror_bag.jpeg +0 -0
  132. data/public/spree/products/small/DEMO_002_Powerstation.jpg +0 -0
  133. data/public/spree/products/small/DEMO_003_ror_mug.jpeg +0 -0
  134. data/spec/fixtures/datashift_Spree_db.sqlite +0 -0
  135. data/spec/fixtures/datashift_test_models_db.sqlite +0 -0
  136. data/spec/fixtures/negative/SpreeProdMiss1Mandatory.csv +0 -4
  137. data/spec/fixtures/negative/SpreeProdMiss1Mandatory.xls +0 -0
  138. data/spec/fixtures/negative/SpreeProdMissManyMandatory.csv +0 -4
  139. data/spec/fixtures/negative/SpreeProdMissManyMandatory.xls +0 -0
  140. data/spec/fixtures/spree/SpreeImages.xls +0 -0
  141. data/spec/fixtures/spree/SpreeMultiVariant.csv +0 -4
  142. data/spec/fixtures/spree/SpreeProducts.csv +0 -4
  143. data/spec/fixtures/spree/SpreeProducts.xls +0 -0
  144. data/spec/fixtures/spree/SpreeProductsDefaults.yml +0 -15
  145. data/spec/fixtures/spree/SpreeProductsMandatoryOnly.xls +0 -0
  146. data/spec/fixtures/spree/SpreeProductsMultiColumn.csv +0 -4
  147. data/spec/fixtures/spree/SpreeProductsMultiColumn.xls +0 -0
  148. data/spec/fixtures/spree/SpreeProductsSimple.csv +0 -4
  149. data/spec/fixtures/spree/SpreeProductsSimple.xls +0 -0
  150. data/spec/fixtures/spree/SpreeProductsWithImages.csv +0 -4
  151. data/spec/fixtures/spree/SpreeProductsWithImages.xls +0 -0
  152. data/spec/fixtures/spree/SpreeZoneExample.csv +0 -5
  153. data/spec/fixtures/spree/SpreeZoneExample.xls +0 -0
  154. data/spec/spree_exporter_spec.rb +0 -72
  155. data/spec/spree_generator_spec.rb +0 -96
  156. data/spec/spree_images_loader_spec.rb +0 -107
  157. data/spec/spree_loader_spec.rb +0 -375
  158. data/spec/spree_method_mapping_spec.rb +0 -226
  159. data/spec/spree_variants_loader_spec.rb +0 -189
  160. data/tasks/export/excel_generator.rake +0 -102
  161. data/tasks/import/excel.rake +0 -75
  162. data/test/helper.rb +0 -18
  163. data/test/test_interact.rb +0 -7
@@ -7,72 +7,70 @@
7
7
  #
8
8
  require File.dirname(__FILE__) + '/spec_helper'
9
9
 
10
- if(Guards::jruby?)
11
- require 'erb'
12
- require 'excel_exporter'
13
-
14
- include DataShift
10
+
11
+ require 'erb'
12
+ require 'excel_exporter'
15
13
 
16
- describe 'Excel Generator' do
14
+ include DataShift
17
15
 
18
- before(:all) do
19
- db_connect( 'test_file' ) # , test_memory, test_mysql
16
+ describe 'Excel Exporter' do
20
17
 
21
- # load our test model definitions - Project etc
22
- require File.join($DataShiftFixturePath, 'test_model_defs')
18
+ before(:all) do
19
+
20
+ # load our test model definitions - Project etc
21
+ require ifixture_file('test_model_defs')
22
+
23
+ db_connect( 'test_file' ) # , test_memory, test_mysql
23
24
 
24
- # handle migration changes or reset of test DB
25
- migrate_up
25
+ # handle migration changes or reset of test DB
26
+ migrate_up
26
27
 
27
- db_clear() # todo read up about proper transactional fixtures
28
- results_clear()
28
+ db_clear() # todo read up about proper transactional fixtures
29
+ results_clear()
29
30
 
30
- @klazz = Project
31
- @assoc_klazz = Category
32
- end
31
+ @klazz = Project
32
+ @assoc_klazz = Category
33
+ end
33
34
 
34
- before(:each) do
35
- MethodDictionary.clear
36
- MethodDictionary.find_operators( @klazz )
37
- MethodDictionary.find_operators( @assoc_klazz )
38
- end
35
+ before(:each) do
36
+ MethodDictionary.clear
37
+ MethodDictionary.find_operators( @klazz )
38
+ MethodDictionary.find_operators( @assoc_klazz )
39
+ end
39
40
 
40
- it "should be able to create a new excel exporter" do
41
- generator = ExcelExporter.new( 'dummy.xls' )
41
+ it "should be able to create a new excel exporter" do
42
+ generator = ExcelExporter.new( 'dummy.xls' )
42
43
 
43
- generator.should_not be_nil
44
- end
44
+ generator.should_not be_nil
45
+ end
45
46
 
46
- it "should export a model to .xls file" do
47
+ it "should export a model to .xls file" do
47
48
 
48
- expect = result_file('project_export_spec.xls')
49
+ expect = result_file('project_export_spec.xls')
49
50
 
50
- gen = ExcelExporter.new( expect )
51
+ gen = ExcelExporter.new( expect )
51
52
 
52
- gen.export(Project.all)
53
+ gen.export(Project.all)
53
54
 
54
- File.exists?(expect).should be_true
55
+ File.exists?(expect).should be_true
55
56
 
56
- puts "Can manually check file @ #{expect}"
57
- end
58
-
59
- it "should export a model and associations to .xls file" do
57
+ puts "Can manually check file @ #{expect}"
58
+ end
60
59
 
61
- Project.create( :value_as_string => 'Value as Text', :value_as_boolean => true, :value_as_double => 75.672)
60
+ it "should export a model and associations to .xls file" do
62
61
 
63
- expect= result_file('project_plus_assoc_export_spec.xls')
62
+ Project.create( :value_as_string => 'Value as Text', :value_as_boolean => true, :value_as_double => 75.672)
64
63
 
65
- gen = ExcelExporter.new(expect)
64
+ expect= result_file('project_plus_assoc_export_spec.xls')
66
65
 
67
- items = Project.all
66
+ gen = ExcelExporter.new(expect)
68
67
 
69
- gen.export_with_associations(Project, items)
68
+ items = Project.all
70
69
 
71
- File.exists?(expect).should be_true
70
+ gen.export_with_associations(Project, items)
72
71
 
73
- end
72
+ File.exists?(expect).should be_true
74
73
 
75
74
  end
76
- else
77
- puts "WARNING: skipped excel_exporter_spec : Requires JRUBY - JExcelFile requires JAVA"
78
- end # jruby
75
+
76
+ end
@@ -7,106 +7,178 @@
7
7
  #
8
8
  require File.dirname(__FILE__) + '/spec_helper'
9
9
 
10
- if(Guards::jruby?)
11
- require 'erb'
12
- require 'excel_generator'
10
+ require 'erb'
11
+ require 'excel_generator'
13
12
 
14
- include DataShift
13
+ include DataShift
15
14
 
16
- describe 'Excel Generator' do
15
+ describe 'Excel Generator' do
17
16
 
18
- before(:all) do
19
- db_connect( 'test_file' ) # , test_memory, test_mysql
20
-
21
- # load our test model definitions - Project etc
22
- require File.join($DataShiftFixturePath, 'test_model_defs')
17
+ before(:all) do
18
+
19
+ # load our test model definitions - Project etc
20
+ require ifixture_file('test_model_defs')
21
+
22
+ db_connect( 'test_file' ) # , test_memory, test_mysql
23
23
 
24
- # handle migration changes or reset of test DB
25
- migrate_up
24
+ # handle migration changes or reset of test DB
25
+ migrate_up
26
26
 
27
- db_clear() # todo read up about proper transactional fixtures
28
- results_clear()
27
+ db_clear() # todo read up about proper transactional fixtures
28
+ results_clear()
29
29
 
30
- @klazz = Project
31
- @assoc_klazz = Category
32
- end
30
+ @klazz = Project
31
+ @assoc_klazz = Category
32
+ end
33
33
 
34
- before(:each) do
35
- MethodDictionary.clear
36
- MethodDictionary.find_operators( @klazz )
37
- MethodDictionary.find_operators( @assoc_klazz )
38
- end
34
+ before(:each) do
35
+ MethodDictionary.clear
36
+ MethodDictionary.find_operators( @klazz )
37
+ MethodDictionary.find_operators( @assoc_klazz )
38
+ end
39
39
 
40
- it "should be able to create a new excel generator" do
41
- generator = ExcelGenerator.new( 'dummy.xls' )
40
+ it "should be able to create a new excel generator" do
41
+ generator = ExcelGenerator.new( 'dummy.xls' )
42
42
 
43
- generator.should_not be_nil
44
- end
43
+ generator.should_not be_nil
44
+ end
45
45
 
46
- it "should generate template .xls file from model" do
46
+ it "should generate template .xls file from model" do
47
47
 
48
- expect = result_file('project_template_spec.xls')
48
+ expect = result_file('project_template_spec.xls')
49
49
 
50
- gen = ExcelGenerator.new( expect )
50
+ gen = ExcelGenerator.new( expect )
51
51
 
52
- gen.generate(Project)
52
+ gen.generate(Project)
53
53
 
54
- File.exists?(expect).should be_true
54
+ File.exists?(expect).should be_true
55
+
56
+ puts "Can manually check file @ #{expect}"
57
+
58
+ excel = Excel.new
59
+ excel.open(expect)
60
+
61
+ excel.worksheets.should have(1).items
62
+
63
+ excel.worksheet(0).name.should == 'Project'
55
64
 
56
- puts "Can manually check file @ #{expect}"
65
+ headers = excel.worksheets[0].row(0)
66
+
67
+ [ "title", "value_as_string", "value_as_text", "value_as_boolean", "value_as_datetime", "value_as_integer", "value_as_double"].each do |check|
68
+ headers.include?(check).should == true
57
69
  end
70
+ end
58
71
 
59
- it "should include all associations in template .xls file from model" do
72
+ # has_one :owner
73
+ # has_many :milestones
74
+ # has_many :loader_releases
75
+ # has_many :versions, :through => :loader_releases
76
+ # has_and_belongs_to_many :categories
77
+
78
+ it "should include all associations in template .xls file from model" do
60
79
 
61
- expect= result_file('project_plus_assoc_template_spec.xls')
80
+ expect= result_file('project_plus_assoc_template_spec.xls')
62
81
 
63
- gen = ExcelGenerator.new(expect)
82
+ gen = ExcelGenerator.new(expect)
64
83
 
65
- gen.generate_with_associations(Project)
84
+ gen.generate_with_associations(Project)
66
85
 
67
- File.exists?(expect).should be_true
86
+ File.exists?(expect).should be_true
68
87
 
69
- end
88
+ excel = Excel.new
89
+ excel.open(expect)
90
+
91
+ excel.worksheets.should have(1).items
70
92
 
93
+ excel.worksheet(0).name.should == 'Project'
94
+
95
+ headers = excel.worksheets[0].row(0)
71
96
 
72
- it "should enable us to exclude cetain associations in template .xls file from model" do
97
+ ["owner", "milestones", "loader_releases", "versions", "categories"].each do |check|
98
+ headers.include?(check).should == true
99
+ end
100
+ end
101
+
102
+
103
+ it "should enable us to exclude associations by type in template .xls file", :fail => true do
73
104
 
74
- expect= result_file('project_plus_some_assoc_template_spec.xls')
105
+ expect= result_file('project_plus_some_assoc_template_spec.xls')
75
106
 
76
- gen = ExcelGenerator.new(expect)
107
+ gen = ExcelGenerator.new(expect)
77
108
 
78
- options = {:exclude => :milestones }
109
+ options = {:exclude => :has_many }
79
110
 
80
- gen.generate_with_associations(Project, options)
111
+ gen.generate_with_associations(Project, options)
81
112
 
82
- File.exists?(expect).should be_true
83
-
84
- excel = JExcelFile.new(expect)
113
+ File.exists?(expect).should be_true, "Failed to find expected result file #{expect}"
85
114
 
86
- excel.each_row {|r| puts r.inspect }
115
+ excel = Excel.new
116
+ excel.open(expect)
117
+
118
+ excel.worksheets.should have(1).items
119
+
120
+ excel.worksheet(0).name.should == 'Project'
87
121
 
88
- end
122
+ headers = excel.worksheets[0].row(0)
89
123
 
124
+ headers.include?('title').should == true
125
+ headers.include?('owner').should == true
126
+
127
+ ["milestones", "loader_releases", "versions", "categories"].each do |check|
128
+ headers.should_not include check
129
+ end
130
+
131
+ end
132
+
90
133
 
91
- it "should enable us to autosize columns in the .xls file" do
134
+ it "should enable us to exclude certain associations in template .xls file ", :fail => true do
92
135
 
93
- expect= result_file('project_autosized_template_spec.xls')
136
+ expect= result_file('project_plus_some_assoc_template_spec.xls')
94
137
 
95
- gen = ExcelGenerator.new(expect)
138
+ gen = ExcelGenerator.new(expect)
96
139
 
97
- options = {:autosize => true, :exclude => :milestones }
140
+ options = {:remove => [:milestones, :versions] }
98
141
 
99
- gen.generate_with_associations(Project, options)
142
+ gen.generate_with_associations(Project, options)
100
143
 
101
- File.exists?(expect).should be_true
144
+ File.exists?(expect).should be_true, "Failed to find expected result file #{expect}"
102
145
 
103
- excel = JExcelFile.new(expect)
104
-
105
- excel.each_row {|r| puts r.inspect }
146
+ excel = Excel.new
147
+ excel.open(expect)
148
+
149
+ excel.worksheets.should have(1).items
150
+
151
+ excel.worksheet(0).name.should == 'Project'
106
152
 
153
+ headers = excel.worksheets[0].row(0)
154
+
155
+ ["title", "loader_releases", "owner", "categories"].each do |check|
156
+ headers.should include check
107
157
  end
108
158
 
159
+
160
+ ["milestones", "versions", ].each do |check|
161
+ headers.should_not include check
162
+ end
163
+
164
+ end
165
+
166
+
167
+ it "should enable us to autosize columns in the .xls file" do
168
+
169
+ expect= result_file('project_autosized_template_spec.xls')
170
+
171
+ gen = ExcelGenerator.new(expect)
172
+
173
+ options = {:autosize => true, :exclude => :milestones }
174
+
175
+ gen.generate_with_associations(Project, options)
176
+
177
+ File.exists?(expect).should be_true
178
+
179
+ excel = Excel.new
180
+ excel.open(expect)
181
+
109
182
  end
110
- else
111
- puts "WARNING: skipped excel_generator_spec : Requires JRUBY - JExcelFile requires JAVA"
112
- end # jruby
183
+
184
+ end
@@ -7,219 +7,213 @@
7
7
  #
8
8
  require File.dirname(__FILE__) + '/spec_helper'
9
9
 
10
- if(Guards::jruby?)
10
+ require 'erb'
11
+ require 'excel_loader'
11
12
 
12
- require 'erb'
13
- require 'excel_loader'
13
+ include DataShift
14
14
 
15
- include DataShift
15
+ describe 'Excel Loader' do
16
16
 
17
- describe 'Excel Loader' do
18
-
19
- before(:all) do
20
- db_connect( 'test_file' ) # , test_memory, test_mysql
21
-
22
- # load our test model definitions - Project etc
23
- require File.join($DataShiftFixturePath, 'test_model_defs')
24
-
25
- # handle migration changes or reset of test DB
26
- migrate_up
27
-
28
- db_clear() # todo read up about proper transactional fixtures
29
-
30
-
31
- Project = Project
32
- @assoc_klazz = Category
33
- end
17
+ before(:all) do
34
18
 
35
- before(:each) do
36
-
37
- Project.delete_all
19
+ # load our test model definitions - Project etc
20
+ require ifixture_file('test_model_defs')
21
+
22
+ db_connect( 'test_file' ) # , test_memory, test_mysql
38
23
 
39
- %w{category_001 category_002 category_003 category_004 category_005}.each do |cat|
40
- @assoc_klazz.find_or_create_by_reference(cat)
41
- end
24
+ # handle migration changes or reset of test DB
25
+ migrate_up
26
+
27
+ db_clear() # todo read up about proper transactional fixtures
42
28
 
29
+ @assoc_klazz = Category
30
+ end
31
+
32
+ before(:each) do
43
33
 
44
- MethodDictionary.clear
45
- MethodDictionary.find_operators( Project )
46
- MethodDictionary.find_operators( @assoc_klazz )
34
+ Project.delete_all
35
+
36
+ %w{category_001 category_002 category_003 category_004 category_005}.each do |cat|
37
+ @assoc_klazz.find_or_create_by_reference(cat)
47
38
  end
39
+
40
+ MethodDictionary.clear
41
+ MethodDictionary.find_operators( Project )
42
+ MethodDictionary.find_operators( @assoc_klazz )
43
+ end
48
44
 
49
- it "should be able to create a new excel loader and load object" do
50
- loader = ExcelLoader.new( Project)
45
+ it "should be able to create a new excel loader and load object" do
46
+ loader = ExcelLoader.new( Project)
51
47
 
52
- loader.load_object.should_not be_nil
53
- loader.load_object.should be_is_a(Project)
54
- loader.load_object.new_record?.should be_true
55
- end
48
+ loader.load_object.should_not be_nil
49
+ loader.load_object.should be_is_a(Project)
50
+ loader.load_object.new_record?.should be_true
51
+ end
56
52
 
57
- it "should process a simple .xls spreedsheet" do
53
+ it "should process a simple .xls spreedsheet" do
58
54
 
59
- loader = ExcelLoader.new(Project)
55
+ loader = ExcelLoader.new(Project)
60
56
 
61
- count = Project.count
62
- loader.perform_load( $DataShiftFixturePath + '/SimpleProjects.xls')
63
-
64
- loader.loaded_count.should == (Project.count - count)
57
+ count = Project.count
58
+ loader.perform_load ifixture_file('SimpleProjects.xls')
65
59
 
66
- end
60
+ loader.loaded_count.should == (Project.count - count)
61
+ end
67
62
 
68
- it "should process multiple associationss from single column" do
63
+ it "should process multiple associationss from single column" do
69
64
 
70
- Project.find_by_title('001').should be_nil
71
- count = Project.count
65
+ Project.find_by_title('001').should be_nil
66
+ count = Project.count
72
67
 
73
- loader = ExcelLoader.new(Project)
68
+ loader = ExcelLoader.new(Project)
74
69
 
75
- loader.perform_load( $DataShiftFixturePath + '/ProjectsSingleCategories.xls')
70
+ loader.perform_load( ifixture_file('ProjectsSingleCategories.xls') )
76
71
 
77
- loader.loaded_count.should be > 3
78
- loader.loaded_count.should == (Project.count - count)
72
+ loader.loaded_count.should be > 3
73
+ loader.loaded_count.should == (Project.count - count)
79
74
 
80
- {'001' => 2, '002' => 1, '003' => 3, '099' => 0 }.each do|title, expected|
81
- project = Project.find_by_title(title)
75
+ {'001' => 2, '002' => 1, '003' => 3, '099' => 0 }.each do|title, expected|
76
+ project = Project.find_by_title(title)
82
77
 
83
- project.should_not be_nil
84
- puts "#{project.inspect} [#{project.categories.size}]"
78
+ project.should_not be_nil
79
+ #puts "#{project.inspect} [#{project.categories.size}]"
85
80
 
86
- project.should have(expected).categories
87
- end
81
+ project.should have(expected).categories
88
82
  end
83
+ end
89
84
 
90
- it "should process multiple associations in excel spreedsheet" do
85
+ it "should process multiple associations in excel spreedsheet" do
91
86
 
92
- loader = ExcelLoader.new(Project)
87
+ loader = ExcelLoader.new(Project)
93
88
 
94
- count = Project.count
95
- loader.perform_load( $DataShiftFixturePath + '/ProjectsMultiCategories.xls')
89
+ count = Project.count
90
+ loader.perform_load( ifixture_file('ProjectsMultiCategories.xls' ))
96
91
 
97
- loader.loaded_count.should == (Project.count - count)
92
+ loader.loaded_count.should == (Project.count - count)
98
93
 
99
- {'004' => 3, '005' => 1, '006' => 0, '007' => 1 }.each do|title, expected|
100
- project = Project.find_by_title(title)
94
+ {'004' => 3, '005' => 1, '006' => 0, '007' => 1 }.each do|title, expected|
95
+ project = Project.find_by_title(title)
101
96
 
102
- project.should_not be_nil
97
+ project.should_not be_nil
103
98
 
104
- project.should have(expected).categories
105
- end
106
-
99
+ project.should have(expected).categories
107
100
  end
108
101
 
109
- it "should process multiple associations with lookup specified in column from excel spreedsheet", :fail => true do
102
+ end
103
+
104
+ it "should process multiple associations with lookup specified in column from excel spreedsheet" do
110
105
 
111
- loader = ExcelLoader.new(Project)
106
+ loader = ExcelLoader.new(Project)
112
107
 
113
- count = Project.count
114
- loader.perform_load( $DataShiftFixturePath + '/ProjectsMultiCategoriesHeaderLookup.xls')
108
+ count = Project.count
109
+ loader.perform_load( ifixture_file('ProjectsMultiCategoriesHeaderLookup.xls'))
115
110
 
116
- loader.loaded_count.should == (Project.count - count)
117
- loader.loaded_count.should > 3
111
+ loader.loaded_count.should == (Project.count - count)
112
+ loader.loaded_count.should > 3
118
113
 
119
- {'004' => 4, '005' => 1, '006' => 0, '007' => 1 }.each do|title, expected|
120
- project = Project.find_by_title(title)
114
+ {'004' => 4, '005' => 1, '006' => 0, '007' => 1 }.each do|title, expected|
115
+ project = Project.find_by_title(title)
121
116
 
122
- project.should_not be_nil
117
+ project.should_not be_nil
123
118
 
124
- project.should have(expected).categories
125
- end
126
-
119
+ project.should have(expected).categories
127
120
  end
121
+
122
+ end
128
123
 
129
- it "should process excel spreedsheet with extra undefined columns" do
130
- loader = ExcelLoader.new(Project)
131
- lambda {loader.perform_load( ifixture_file('BadAssociationName.xls') ) }.should_not raise_error
132
- end
124
+ it "should process excel spreedsheet with extra undefined columns" do
125
+ loader = ExcelLoader.new(Project)
126
+ lambda {loader.perform_load( ifixture_file('BadAssociationName.xls') ) }.should_not raise_error
127
+ end
133
128
 
134
- it "should NOT process excel spreedsheet with extra undefined columns when strict mode" do
135
- loader = ExcelLoader.new(Project)
136
- expect {loader.perform_load( ifixture_file('BadAssociationName.xls'), :strict => true)}.to raise_error(MappingDefinitionError)
137
- end
129
+ it "should NOT process excel spreedsheet with extra undefined columns when strict mode" do
130
+ loader = ExcelLoader.new(Project)
131
+ expect {loader.perform_load( ifixture_file('BadAssociationName.xls'), :strict => true)}.to raise_error(MappingDefinitionError)
132
+ end
138
133
 
139
- it "should raise an error when mandatory columns missing" do
140
- loader = ExcelLoader.new(Project)
141
- expect {loader.perform_load($DataShiftFixturePath + '/ProjectsMultiCategories.xls', :mandatory => ['not_an_option', 'must_be_there'] )}.to raise_error(DataShift::MissingMandatoryError)
142
- end
134
+ it "should raise an error when mandatory columns missing" do
135
+ loader = ExcelLoader.new(Project)
136
+ expect {loader.perform_load(ifixture_file('ProjectsMultiCategories.xls'), :mandatory => ['not_an_option', 'must_be_there'])}.to raise_error(DataShift::MissingMandatoryError)
137
+ end
143
138
 
144
- it "should provide facility to set default values", :focus => true do
145
- loader = ExcelLoader.new(Project)
139
+ it "should provide facility to set default values", :focus => true do
140
+ loader = ExcelLoader.new(Project)
146
141
 
147
- loader.set_default_value('value_as_string', 'some default text' )
148
- loader.set_default_value('value_as_double', 45.467 )
149
- loader.set_default_value('value_as_boolean', true )
142
+ loader.set_default_value('value_as_string', 'some default text' )
143
+ loader.set_default_value('value_as_double', 45.467 )
144
+ loader.set_default_value('value_as_boolean', true )
150
145
 
151
- texpected = Time.now.to_s(:db)
146
+ texpected = Time.now.to_s(:db)
152
147
 
153
- loader.set_default_value('value_as_datetime', texpected )
148
+ loader.set_default_value('value_as_datetime', texpected )
154
149
 
155
- #value_as_string Value as Text value as datetime value_as_boolean value_as_double category
150
+ #value_as_string Value as Text value as datetime value_as_boolean value_as_double category
156
151
 
157
- loader.perform_load($DataShiftFixturePath + '/ProjectsSingleCategories.xls')
152
+ loader.perform_load(ifixture_file('ProjectsSingleCategories.xls'))
158
153
 
159
- p = Project.find_by_title( '099' )
154
+ p = Project.find_by_title( '099' )
160
155
 
161
- p.should_not be_nil
156
+ p.should_not be_nil
162
157
 
163
- p.value_as_string.should == 'some default text'
164
- p.value_as_double.should == 45.467
165
- p.value_as_boolean.should == true
166
- p.value_as_datetime.should == texpected
158
+ p.value_as_string.should == 'some default text'
159
+ p.value_as_double.should == 45.467
160
+ p.value_as_boolean.should == true
161
+ p.value_as_datetime.to_s(:db).should == texpected
162
+
163
+ # expected: "2012-09-17 10:00:52"
164
+ # got: Mon Sep 17 10:00:52 +0100 2012 (using ==)
167
165
 
168
- p_no_defs = Project.first
166
+ p_no_defs = Project.first
169
167
 
170
- p_no_defs.value_as_string.should_not == 'some default text'
171
- p_no_defs.value_as_double.should_not == 45.467
172
- p_no_defs.value_as_datetime.should_not == texpected
168
+ p_no_defs.value_as_string.should_not == 'some default text'
169
+ p_no_defs.value_as_double.should_not == 45.467
170
+ p_no_defs.value_as_datetime.should_not == texpected
173
171
 
174
- end
172
+ end
175
173
 
176
- it "should provide facility to set pre and post fix values" do
177
- loader = ExcelLoader.new(Project)
174
+ it "should provide facility to set pre and post fix values" do
175
+ loader = ExcelLoader.new(Project)
178
176
 
179
- loader.set_prefix('value_as_string', 'myprefix' )
180
- loader.set_postfix('value_as_string', 'my post fix' )
177
+ loader.set_prefix('value_as_string', 'myprefix' )
178
+ loader.set_postfix('value_as_string', 'my post fix' )
181
179
 
182
- #value_as_string Value as Text value as datetime value_as_boolean value_as_double category
180
+ #value_as_string Value as Text value as datetime value_as_boolean value_as_double category
183
181
 
184
- loader.perform_load($DataShiftFixturePath + '/ProjectsSingleCategories.xls')
182
+ loader.perform_load( ifixture_file('ProjectsSingleCategories.xls'))
185
183
 
186
- p = Project.find_by_title( '001' )
184
+ p = Project.find_by_title( '001' )
187
185
 
188
- p.should_not be_nil
186
+ p.should_not be_nil
189
187
 
190
- p.value_as_string.should == 'myprefixDemo stringmy post fix'
191
- end
188
+ p.value_as_string.should == 'myprefixDemo stringmy post fix'
189
+ end
192
190
 
193
- it "should provide facility to set default values via YAML configuration", :excel => true do
194
- loader = ExcelLoader.new(Project)
191
+ it "should provide facility to set default values via YAML configuration", :excel => true do
192
+ loader = ExcelLoader.new(Project)
195
193
 
196
- loader.configure_from( File.join($DataShiftFixturePath, 'ProjectsDefaults.yml') )
194
+ loader.configure_from( ifixture_file('ProjectsDefaults.yml') )
197
195
 
198
196
 
199
- loader.perform_load( File.join($DataShiftFixturePath, 'ProjectsSingleCategories.xls') )
197
+ loader.perform_load( ifixture_file('ProjectsSingleCategories.xls') )
200
198
 
201
- p = Project.find_by_title( '099' )
199
+ p = Project.find_by_title( '099' )
202
200
 
203
- p.should_not be_nil
201
+ p.should_not be_nil
204
202
 
205
- p.value_as_string.should == "Default Project Value"
206
- end
203
+ p.value_as_string.should == "Default Project Value"
204
+ end
207
205
 
208
206
 
209
- it "should provide facility to over ride values via YAML configuration", :excel => true do
210
- loader = ExcelLoader.new(Project)
207
+ it "should provide facility to over ride values via YAML configuration", :excel => true do
208
+ loader = ExcelLoader.new(Project)
211
209
 
212
- loader.configure_from( File.join($DataShiftFixturePath, 'ProjectsDefaults.yml') )
210
+ loader.configure_from( ifixture_file('ProjectsDefaults.yml') )
213
211
 
214
212
 
215
- loader.perform_load( File.join($DataShiftFixturePath, 'ProjectsSingleCategories.xls') )
213
+ loader.perform_load( ifixture_file('ProjectsSingleCategories.xls') )
216
214
 
217
- Project.all.each {|p| p.value_as_double.should == 99.23546 }
218
- end
215
+ Project.all.each {|p| p.value_as_double.should == 99.23546 }
216
+ end
219
217
 
220
218
 
221
- end
222
-
223
- else
224
- puts "WARNING: skipped excel_loader_spec : Requires JRUBY - JExcelFile requires JAVA"
225
- end # jruby
219
+ end