importable 0.0.1
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.
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +37 -0
- data/app/assets/javascripts/importable/application.js +7 -0
- data/app/assets/javascripts/importable/spreadsheets.js +2 -0
- data/app/assets/stylesheets/importable/application.css +7 -0
- data/app/assets/stylesheets/importable/spreadsheets.css +4 -0
- data/app/controllers/importable/application_controller.rb +4 -0
- data/app/controllers/importable/spreadsheets_controller.rb +74 -0
- data/app/models/importable/spreadsheet.rb +88 -0
- data/app/views/importable/spreadsheets/_actions.erb +6 -0
- data/app/views/importable/spreadsheets/_choose_worksheet_step.erb +23 -0
- data/app/views/importable/spreadsheets/_errors.erb +11 -0
- data/app/views/importable/spreadsheets/_form.html.erb +1 -0
- data/app/views/importable/spreadsheets/_upload_file_step.erb +12 -0
- data/app/views/importable/spreadsheets/new.html.erb +3 -0
- data/app/views/importable/spreadsheets/show.html.erb +3 -0
- data/config/routes.rb +16 -0
- data/db/development.sqlite3 +0 -0
- data/db/migrate/20110915001957_create_importable_spreadsheets.rb +10 -0
- data/lib/importable/engine.rb +5 -0
- data/lib/importable/exceptions.rb +3 -0
- data/lib/importable/mapper.rb +40 -0
- data/lib/importable/multi_step/import_helpers.rb +39 -0
- data/lib/importable/uploader.rb +13 -0
- data/lib/importable/validator.rb +16 -0
- data/lib/importable/version.rb +3 -0
- data/lib/importable.rb +12 -0
- data/lib/tasks/importable_tasks.rake +0 -0
- data/spec/acceptance/import_spreadsheet_spec.rb +33 -0
- data/spec/controllers/importable/spreadsheets_controller_spec.rb +152 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +7 -0
- data/spec/dummy/app/assets/stylesheets/application.css +7 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/imports/foo_mapper.rb +5 -0
- data/spec/dummy/app/imports/foo_required_field_mapper.rb +5 -0
- data/spec/dummy/app/imports/plural_widgets_mapper.rb +5 -0
- data/spec/dummy/app/imports/singular_widget_mapper.rb +5 -0
- data/spec/dummy/app/models/foo.rb +2 -0
- data/spec/dummy/app/models/foo_required_field.rb +3 -0
- data/spec/dummy/app/views/layouts/importable/application.html.erb +18 -0
- data/spec/dummy/config/application.rb +45 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +11 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +30 -0
- data/spec/dummy/config/environments/production.rb +60 -0
- data/spec/dummy/config/environments/test.rb +42 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +10 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +3 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/migrate/20110913175340_create_foo_required_fields.rb +10 -0
- data/spec/dummy/db/migrate/20110913175348_create_foos.rb +20 -0
- data/spec/dummy/db/schema.rb +45 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +1440 -0
- data/spec/dummy/log/test.log +12899 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +26 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/dummy/tmp/cache/assets/C84/C40/sprockets%2F7f0912160518f10045d9e488fc7436af +0 -0
- data/spec/dummy/tmp/cache/assets/C92/520/sprockets%2F22333678e07cb97428c92fe9a9f33283 +0 -0
- data/spec/dummy/tmp/cache/assets/CAD/170/sprockets%2F96fb203c710450777e6c21c337e5a9d3 +0 -0
- data/spec/dummy/tmp/cache/assets/CC8/800/sprockets%2F804f348fd27bfb7555b2e9977494612e +0 -0
- data/spec/dummy/tmp/cache/assets/CEC/F40/sprockets%2Feef825d9227d8044ea22a9ce75328574 +0 -0
- data/spec/dummy/tmp/cache/assets/D0F/F30/sprockets%2F1c0c77bdf759cb307e0d9a071367476b +0 -0
- data/spec/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/spec/dummy/tmp/cache/assets/D4D/A30/sprockets%2F256edbd7ad8e5d6e144e648e82150b89 +0 -0
- data/spec/dummy/tmp/cache/assets/D4F/9D0/sprockets%2Fd1cf18a7bc4837a9f12a55e76608f79e +0 -0
- data/spec/dummy/tmp/cache/assets/D54/ED0/sprockets%2F71c9fa01091d432b131da3bb73faf3d4 +0 -0
- data/spec/dummy/tmp/cache/assets/D7B/2D0/sprockets%2F67457fb6359b5cc7faf0ad1e432996db +0 -0
- data/spec/dummy/tmp/cache/assets/D84/210/sprockets%2Fabd0103ccec2b428ac62c94e4c40b384 +0 -0
- data/spec/dummy/tmp/cache/assets/DAC/950/sprockets%2Fbc53a3fdde9e5350798e72aa7f78ab28 +0 -0
- data/spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/spec/dummy/tmp/capybara/capybara-201109142003362645406331.html +14 -0
- data/spec/dummy/tmp/capybara/capybara-201109142004009667888038.html +14 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/503/foo_single_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/504/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/505/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/506/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/507/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/508/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/509/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/510/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/511/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/512/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/513/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/514/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/515/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/516/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/517/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/518/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/519/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/520/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/521/foo_single_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/522/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/523/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/524/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/525/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/526/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/527/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/528/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/529/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/530/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/531/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/532/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/533/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/534/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/535/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/536/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/537/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/538/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/539/foo_single_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/540/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/541/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/542/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/543/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/544/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/545/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/546/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/547/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/548/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/549/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/550/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/551/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/552/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/553/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/554/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/555/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/556/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/557/foo_single_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/558/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/559/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/560/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/561/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/562/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/563/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/564/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/565/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/566/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/567/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/568/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/569/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/570/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/571/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/572/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/573/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/574/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/575/foo_single_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/576/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/577/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/578/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/579/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/580/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/581/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/582/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/583/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/584/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/585/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/586/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/587/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/588/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/589/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/590/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/591/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/592/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/593/foo_single_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/594/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/595/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/596/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/597/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/598/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/599/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/600/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/601/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/602/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/603/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/604/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/605/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/606/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/607/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/608/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/609/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/610/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/611/foo_single_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/612/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/613/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/614/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/615/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/616/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/617/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/618/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/619/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/620/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/621/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/622/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/623/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/624/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/625/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/626/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/627/foo_multi_worksheet.xlsx +0 -0
- data/spec/dummy/uploads/importable/spreadsheet/file/foo/628/foo_multi_worksheet.xlsx +0 -0
- data/spec/lib/mapper_spec.rb +70 -0
- data/spec/lib/multi_step/import_helpers_spec.rb +94 -0
- data/spec/lib/uploader_spec.rb +28 -0
- data/spec/lib/validator_spec.rb +29 -0
- data/spec/models/spreadsheet_spec.rb +149 -0
- data/spec/spec_helper.rb +20 -0
- data/spec/support/foo_multi_worksheet.xls +0 -0
- data/spec/support/foo_multi_worksheet.xlsx +0 -0
- data/spec/support/foo_required_field_invalid.xlsx +0 -0
- data/spec/support/foo_required_field_valid.xlsx +0 -0
- data/spec/support/foo_single_worksheet.xls +0 -0
- data/spec/support/foo_single_worksheet.xlsx +0 -0
- data/spec/support/text.txt +1 -0
- metadata +584 -0
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module MultiStep
|
4
|
+
class FooMultiStepImport
|
5
|
+
include MultiStep::ImportHelpers
|
6
|
+
|
7
|
+
def sheets
|
8
|
+
# multiple fake sheets
|
9
|
+
[nil, nil]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe ImportHelpers do
|
14
|
+
let(:foo_multi_step_import) { FooMultiStepImport.new }
|
15
|
+
|
16
|
+
describe "#steps" do
|
17
|
+
it "should return a list of import steps" do
|
18
|
+
steps = foo_multi_step_import.steps
|
19
|
+
steps[0].should eq 'upload_file'
|
20
|
+
steps[1].should eq 'choose_worksheet'
|
21
|
+
steps[2].should eq 'import_data'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#current_step" do
|
26
|
+
it "should initially return 'upload_file'" do
|
27
|
+
foo_multi_step_import.current_step.should eq 'upload_file'
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should return whatever the current step is set to" do
|
31
|
+
foo_multi_step_import.current_step = 'moof'
|
32
|
+
foo_multi_step_import.current_step.should eq 'moof'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "#first_step?" do
|
37
|
+
it "should return true if current step is 'upload_file'" do
|
38
|
+
foo_multi_step_import.current_step = 'upload_file'
|
39
|
+
foo_multi_step_import.first_step?.should be_true
|
40
|
+
foo_multi_step_import.current_step = 'moof'
|
41
|
+
foo_multi_step_import.first_step?.should be_false
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "#last_step?" do
|
46
|
+
it "should return true if current step is 'import_data'" do
|
47
|
+
foo_multi_step_import.current_step = 'import_data'
|
48
|
+
foo_multi_step_import.last_step?.should be_true
|
49
|
+
foo_multi_step_import.current_step = 'moof'
|
50
|
+
foo_multi_step_import.last_step?.should be_false
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "#next_step" do
|
55
|
+
it "should step through each available step" do
|
56
|
+
foo_multi_step_import.current_step.should eq 'upload_file'
|
57
|
+
foo_multi_step_import.next_step
|
58
|
+
foo_multi_step_import.current_step.should eq 'choose_worksheet'
|
59
|
+
foo_multi_step_import.next_step
|
60
|
+
foo_multi_step_import.current_step.should eq 'import_data'
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should step skip choosing worksheet if there's only one" do
|
64
|
+
foo_multi_step_import.stub(:sheets).and_return(['one fake worksheet'])
|
65
|
+
|
66
|
+
foo_multi_step_import.current_step.should eq 'upload_file'
|
67
|
+
foo_multi_step_import.next_step
|
68
|
+
foo_multi_step_import.current_step.should eq 'import_data'
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "#previous_step" do
|
73
|
+
before do
|
74
|
+
# fast forward
|
75
|
+
foo_multi_step_import.current_step = 'import_data'
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should step through each available step backwards" do
|
79
|
+
foo_multi_step_import.previous_step
|
80
|
+
foo_multi_step_import.current_step.should eq 'choose_worksheet'
|
81
|
+
foo_multi_step_import.previous_step
|
82
|
+
foo_multi_step_import.current_step.should eq 'upload_file'
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should step skip choosing worksheet if there's only one" do
|
86
|
+
foo_multi_step_import.stub(:sheets).and_return(['one fake worksheet'])
|
87
|
+
|
88
|
+
foo_multi_step_import.current_step.should eq 'import_data'
|
89
|
+
foo_multi_step_import.previous_step
|
90
|
+
foo_multi_step_import.current_step.should eq 'upload_file'
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Importable
|
4
|
+
describe Uploader do
|
5
|
+
|
6
|
+
let(:importable_spreadsheet) { Spreadsheet.new }
|
7
|
+
|
8
|
+
before do
|
9
|
+
Importable::Uploader.enable_processing = false
|
10
|
+
@uploader = Importable::Uploader.new(importable_spreadsheet, :file)
|
11
|
+
end
|
12
|
+
|
13
|
+
after do
|
14
|
+
Importable::Uploader.enable_processing = true
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should not allow storing files that are not Excel spreadsheets" do
|
18
|
+
text_file = File.open support_file('text.txt')
|
19
|
+
|
20
|
+
lambda {
|
21
|
+
@uploader.store!(text_file)
|
22
|
+
}.should raise_error(
|
23
|
+
CarrierWave::IntegrityError,
|
24
|
+
'You are not allowed to upload "txt" files, allowed types: ["xls", "xlsx"]'
|
25
|
+
)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Importable
|
4
|
+
describe Validator do
|
5
|
+
let(:valid_spreadsheet) do
|
6
|
+
spreadsheet_file = support_file('foo_required_field_valid.xlsx')
|
7
|
+
Spreadsheet.new(file: File.open(spreadsheet_file), object_type: 'foo_required_field')
|
8
|
+
end
|
9
|
+
let(:invalid_spreadsheet) do
|
10
|
+
spreadsheet_file = support_file('foo_required_field_invalid.xlsx')
|
11
|
+
Spreadsheet.new(file: File.open(spreadsheet_file), object_type: 'foo_required_field')
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should be invalid if any underlying objects are invalid" do
|
15
|
+
invalid_spreadsheet.should_not be_valid
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should generate a list of meaningful error messages" do
|
19
|
+
invalid_spreadsheet.valid?
|
20
|
+
messages = invalid_spreadsheet.errors.messages[:doof]
|
21
|
+
messages[0].should eq "can't be blank (line 3)"
|
22
|
+
messages[1].should eq "can't be blank (line 4)"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should be valid if all underlying objects are valid" do
|
26
|
+
valid_spreadsheet.should be_valid
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Importable
|
4
|
+
describe Spreadsheet do
|
5
|
+
let(:single_worksheet_importable_spreadsheet) do
|
6
|
+
spreadsheet_file = File.open support_file('foo_single_worksheet.xlsx')
|
7
|
+
Spreadsheet.new(object_type: 'foo', file: spreadsheet_file)
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:multi_worksheet_importable_spreadsheet) do
|
11
|
+
spreadsheet_file = File.open support_file('foo_multi_worksheet.xlsx')
|
12
|
+
Spreadsheet.new(file: spreadsheet_file)
|
13
|
+
end
|
14
|
+
|
15
|
+
let(:older_excel_importable_spreadsheet) do
|
16
|
+
spreadsheet_file = File.open support_file('foo_single_worksheet.xls')
|
17
|
+
Spreadsheet.new(file: spreadsheet_file)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should be valid with valid attributes" do
|
21
|
+
single_worksheet_importable_spreadsheet.should be_valid
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should be invalid without a file" do
|
25
|
+
spreadsheet = Spreadsheet.new(object_type: 'foo')
|
26
|
+
spreadsheet.should_not be_valid
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "#headers" do
|
30
|
+
it "should return a list of header values" do
|
31
|
+
single_worksheet_importable_spreadsheet.headers.should eq %w[ a b c d ]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "#import!" do
|
36
|
+
it "should initialize a mapper to handle the actual importing" do
|
37
|
+
data = single_worksheet_importable_spreadsheet.rows
|
38
|
+
mapper = FooMapper.new(data)
|
39
|
+
|
40
|
+
FooMapper.should_receive(:new).and_return(mapper)
|
41
|
+
|
42
|
+
single_worksheet_importable_spreadsheet.import!
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "#sheets" do
|
47
|
+
it "should return a list of header values" do
|
48
|
+
multi_worksheet_importable_spreadsheet.sheets.should eq %w[ Sheet1 Sheet2 ]
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "#spreadsheet" do
|
53
|
+
it "should be an Excel spreadsheet object if the file is an xls file" do
|
54
|
+
older_excel_importable_spreadsheet.spreadsheet.should be_an Excel
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should be an Excelx spreadsheet object if the file is an xlsx file" do
|
58
|
+
multi_worksheet_importable_spreadsheet.spreadsheet.should be_an Excelx
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "#spreadsheet_class" do
|
63
|
+
it "should be an Excel class object if the file is an xls file" do
|
64
|
+
older_excel_importable_spreadsheet.spreadsheet_class.should eq Excel
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should be an Excelx class object if the file is an xlsx file" do
|
68
|
+
multi_worksheet_importable_spreadsheet.spreadsheet_class.should eq Excelx
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "#rows" do
|
73
|
+
it "should return the spreadsheet rows as a list of hashes" do
|
74
|
+
rows = single_worksheet_importable_spreadsheet.rows
|
75
|
+
|
76
|
+
rows.each do |row|
|
77
|
+
row.keys.should eq %w[ a b c d ]
|
78
|
+
end
|
79
|
+
|
80
|
+
rows[0].values.should eq [1, 2, 3, 4]
|
81
|
+
rows[1].values.should eq [2, 3, 4, 5]
|
82
|
+
rows[2].values.should eq [3, 4, 5, 6]
|
83
|
+
rows[3].values.should eq [4, 5, 6, 7]
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe "#mapper_class" do
|
88
|
+
it "should return the mapper class for the spreadsheet" do
|
89
|
+
mapper_class = single_worksheet_importable_spreadsheet.mapper_class
|
90
|
+
mapper_class.should eq FooMapper
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should not care if the mappers have pluralization" do
|
94
|
+
spreadsheet_file = File.open support_file('foo_single_worksheet.xlsx')
|
95
|
+
spreadsheet = Spreadsheet.new(object_type: 'singular_widgets', file: spreadsheet_file)
|
96
|
+
spreadsheet.mapper_class.should eq SingularWidgetMapper
|
97
|
+
spreadsheet = Spreadsheet.new(object_type: 'singular_widget', file: spreadsheet_file)
|
98
|
+
spreadsheet.mapper_class.should eq SingularWidgetMapper
|
99
|
+
spreadsheet = Spreadsheet.new(object_type: 'plural_widgets', file: spreadsheet_file)
|
100
|
+
spreadsheet.mapper_class.should eq PluralWidgetsMapper
|
101
|
+
spreadsheet = Spreadsheet.new(object_type: 'plural_widget', file: spreadsheet_file)
|
102
|
+
spreadsheet.mapper_class.should eq PluralWidgetsMapper
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe "#mapper" do
|
107
|
+
it "should return the mapper instance for the spreadsheet" do
|
108
|
+
mapper = single_worksheet_importable_spreadsheet.mapper
|
109
|
+
mapper.should be_a FooMapper
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe "self#mapper_files" do
|
114
|
+
it "should list the available mapper files" do
|
115
|
+
Spreadsheet.mapper_files[0].ends_with?('foo_mapper.rb').should be_true
|
116
|
+
Spreadsheet.mapper_files[1].ends_with?('foo_required_field_mapper.rb').should be_true
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
describe "self#mapper_types" do
|
121
|
+
it "should list the available mapper types" do
|
122
|
+
Spreadsheet.mapper_types[0].should eq 'foo'
|
123
|
+
Spreadsheet.mapper_types[1].should eq 'foo_required_field'
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
describe "self#mapper_type_exists?" do
|
128
|
+
it "should return true if the supplied mapper type exists" do
|
129
|
+
Spreadsheet.mapper_type_exists?('foo').should be_true
|
130
|
+
Spreadsheet.mapper_type_exists?('foo_required_field').should be_true
|
131
|
+
end
|
132
|
+
|
133
|
+
it "should return false if the supplied mapper type doesn't exist" do
|
134
|
+
Spreadsheet.mapper_type_exists?('bar').should be_false
|
135
|
+
Spreadsheet.mapper_type_exists?('').should be_false
|
136
|
+
Spreadsheet.mapper_type_exists?(nil).should be_false
|
137
|
+
end
|
138
|
+
|
139
|
+
it "should not care about pluralization" do
|
140
|
+
Spreadsheet.mapper_type_exists?('singular_widget').should be_true
|
141
|
+
Spreadsheet.mapper_type_exists?('singular_widgets').should be_true
|
142
|
+
Spreadsheet.mapper_type_exists?('plural_widget').should be_true
|
143
|
+
Spreadsheet.mapper_type_exists?('plural_widgets').should be_true
|
144
|
+
Spreadsheet.mapper_type_exists?('foos').should be_true
|
145
|
+
Spreadsheet.mapper_type_exists?('foo_required_fields').should be_true
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# Configure Rails Environment
|
2
|
+
ENV["RAILS_ENV"] = "test"
|
3
|
+
|
4
|
+
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
5
|
+
require 'rspec/rails'
|
6
|
+
require 'capybara/rspec'
|
7
|
+
|
8
|
+
Rails.backtrace_cleaner.remove_silencers!
|
9
|
+
|
10
|
+
# Load support files
|
11
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
12
|
+
|
13
|
+
RSpec.configure do |config|
|
14
|
+
config.mock_with :rspec
|
15
|
+
config.use_transactional_fixtures = false
|
16
|
+
end
|
17
|
+
|
18
|
+
def support_file(name)
|
19
|
+
File.expand_path("spec/support/#{name}")
|
20
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
text
|