csv_magic 0.2.0 → 0.2.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/.gitignore +3 -1
- data/README.md +2 -0
- data/app/views/csv_magic/import.html.erb +3 -3
- data/app/views/csv_magic/import_errors.html.erb +1 -1
- data/app/views/csv_magic/mapper.html.erb +4 -4
- data/csv_magic.gemspec +0 -1
- data/lib/csv_magic/controller_actions.rb +5 -5
- data/lib/csv_magic/i18n_helpers.rb +2 -2
- data/lib/csv_magic/version.rb +1 -1
- data/spec/dummy/app/models/person.rb +1 -0
- data/spec/fixtures/files/file.csv +3 -0
- data/spec/importer_spec.rb +12 -7
- data/spec/integration/resource_integration_spec.rb +0 -1
- data/spec/requests/import_action_spec.rb +46 -0
- data/spec/spec_helper.rb +1 -5
- metadata +11 -23
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/integration/get_request_spec.rb +0 -1
- data/spec/integration/post_request_spec.rb +0 -13
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
## Description
|
2
2
|
|
3
|
+
[](http://travis-ci.org/magiclabs/csv_magic)
|
4
|
+
|
3
5
|
This gem adds an import action in every controller you like to be able to handle csv imports.
|
4
6
|
It includes the complete workflow:
|
5
7
|
|
@@ -1,10 +1,10 @@
|
|
1
|
-
<h1><%=
|
1
|
+
<h1><%= csv_magic_t(:import_csv_file) %></h1>
|
2
2
|
|
3
|
-
<p><%=
|
3
|
+
<p><%= csv_magic_t(:please_choose_a_csv_file) %>:</p>
|
4
4
|
|
5
5
|
<%= form_tag(url_for(:action => 'import'), :multipart => true) do %>
|
6
6
|
<div class="field">
|
7
7
|
<%= file_field_tag 'file' %>
|
8
|
-
<%= submit_tag
|
8
|
+
<%= submit_tag csv_magic_t(:import) %>
|
9
9
|
</div>
|
10
10
|
<% end %>
|
@@ -1,6 +1,6 @@
|
|
1
|
-
<h1><%=
|
1
|
+
<h1><%= csv_magic_t(:import_csv_file) %></h1>
|
2
2
|
|
3
|
-
<p><%=
|
3
|
+
<p><%= csv_magic_t(:please_map_columns) %></p>
|
4
4
|
|
5
5
|
<%= form_tag nil, :id => 'map_fields_form', :method => :post do -%>
|
6
6
|
<%= hidden_field_tag :filename, @mapper.filename %>
|
@@ -33,10 +33,10 @@
|
|
33
33
|
<div class="option">
|
34
34
|
<p>
|
35
35
|
<%= check_box_tag 'ignore_first_row', '1', true %>
|
36
|
-
<%= label_tag 'ignore_first_row',
|
36
|
+
<%= label_tag 'ignore_first_row', csv_magic_t(:ignore_first_row) %>
|
37
37
|
</p>
|
38
38
|
</div>
|
39
39
|
<div class="action">
|
40
|
-
<%= submit_tag
|
40
|
+
<%= submit_tag csv_magic_t(:import) %>
|
41
41
|
</div>
|
42
42
|
<%- end -%>
|
data/csv_magic.gemspec
CHANGED
@@ -55,10 +55,10 @@ module CSVMagic
|
|
55
55
|
if params[:fields]
|
56
56
|
create_resource_items_from_csv(resource_class)
|
57
57
|
if @csv_import_errors.empty?
|
58
|
-
flash[:notice] =
|
58
|
+
flash[:notice] = csv_magic_t(:successfully_imported_data)
|
59
59
|
redirect_to :action => :index
|
60
60
|
else
|
61
|
-
flash[:warning] =
|
61
|
+
flash[:warning] = csv_magic_t(:errors_while_importing)
|
62
62
|
render 'csv_magic/import_errors'
|
63
63
|
end
|
64
64
|
#no mapping yet
|
@@ -68,13 +68,13 @@ module CSVMagic
|
|
68
68
|
render 'csv_magic/mapper'
|
69
69
|
end
|
70
70
|
rescue MissingFileContentsError
|
71
|
-
flash[:warning] =
|
71
|
+
flash[:warning] = csv_magic_t(:please_upload_a_csv_file)
|
72
72
|
render_csv_import_form
|
73
73
|
rescue ::CSV::MalformedCSVError => e
|
74
|
-
flash[:warning] =
|
74
|
+
flash[:warning] = csv_magic_t(:csv_file_has_wrong_format) % {:error => e.message}
|
75
75
|
render_csv_import_form
|
76
76
|
rescue ::Errno::ENOENT
|
77
|
-
flash[:warning] =
|
77
|
+
flash[:warning] = csv_magic_t(:file_not_on_server_any_more)
|
78
78
|
render_csv_import_form
|
79
79
|
rescue Exception => e
|
80
80
|
flash[:warning] = e.message
|
@@ -3,7 +3,7 @@ module CSVMagic
|
|
3
3
|
|
4
4
|
def self.included(controller)
|
5
5
|
if controller.respond_to?(:helper_method)
|
6
|
-
controller.send(:helper_method, [:
|
6
|
+
controller.send(:helper_method, [:csv_magic_t])
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
@@ -14,7 +14,7 @@ module CSVMagic
|
|
14
14
|
# The keys are scoped into +csv_magic+ namespace.
|
15
15
|
# Even if you pass a scope this is scoped under +csv_magic+.
|
16
16
|
#
|
17
|
-
def
|
17
|
+
def csv_magic_t(key, options={})
|
18
18
|
scope = options[:scope].blank? ? 'csv_magic' : "csv_magic.#{options.delete(:scope)}"
|
19
19
|
::I18n.t(key, {:scope => scope, :default => key.to_s.humanize}.merge(options))
|
20
20
|
end
|
data/lib/csv_magic/version.rb
CHANGED
data/spec/importer_spec.rb
CHANGED
@@ -1,9 +1,14 @@
|
|
1
|
-
require "
|
2
|
-
require 'csv_magic/importer'
|
1
|
+
require "spec_helper"
|
3
2
|
|
4
|
-
|
3
|
+
module CSVMagic
|
4
|
+
describe Importer do
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
describe "raw_data", :type => :request do
|
7
|
+
it "should return an array from the given csv-file" do
|
8
|
+
@file = fixture_file_upload('/files/file.csv', 'text/csv')
|
9
|
+
@importer = Importer.new({:file => @file}, {:file_field => :file})
|
10
|
+
@importer.raw_data.should == [["Lastname", " Given Name"], ["Doe", " John"], ["Mustermann", " Max"]]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "Controller#import action." do
|
4
|
+
|
5
|
+
describe "Sending a get request" do
|
6
|
+
it "renders the import form." do
|
7
|
+
get 'people/import'
|
8
|
+
response.body.should match(/please choose a csv file/i)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "Sending a post request" do
|
13
|
+
|
14
|
+
before(:each) do
|
15
|
+
@file = fixture_file_upload('/files/file.csv', 'text/csv')
|
16
|
+
end
|
17
|
+
|
18
|
+
context "if csv is given in params" do
|
19
|
+
it "it renders the mapper view." do
|
20
|
+
post 'people/import', {:file => @file}
|
21
|
+
response.body.should match(/Please map columns/)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context "if mapping is given in params" do
|
26
|
+
it "it redirects to index view." do
|
27
|
+
@file_handler = CSVMagic::FileHandler.new
|
28
|
+
@file_handler.save_temp_file(@file)
|
29
|
+
post 'people/import', {:filename => @file_handler.filename, :fields => {"1" => "Firstname", "2" => "Lastname"}}
|
30
|
+
response.code.should == "302"
|
31
|
+
response.should redirect_to(people_path)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "if wrong mapping is given in params" do
|
36
|
+
it "it shows the import errors view." do
|
37
|
+
@file_handler = CSVMagic::FileHandler.new
|
38
|
+
@file_handler.save_temp_file(@file)
|
39
|
+
post 'people/import', {:filename => @file_handler.filename, :fields => {"1" => "Firstname"}}
|
40
|
+
response.body.should match /import errors/i
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -11,13 +11,9 @@ ActionMailer::Base.default_url_options[:host] = "test.com"
|
|
11
11
|
|
12
12
|
Rails.backtrace_cleaner.remove_silencers!
|
13
13
|
|
14
|
-
# Configure capybara for integration testing
|
15
|
-
require "capybara/rails"
|
16
|
-
Capybara.default_driver = :rack_test
|
17
|
-
Capybara.default_selector = :css
|
18
|
-
|
19
14
|
# Run any available migration
|
20
15
|
ActiveRecord::Migrator.migrate File.expand_path("../dummy/db/migrate/", __FILE__)
|
16
|
+
ActionController::TestCase.fixture_path = File.join(File.dirname(__FILE__), 'fixtures')
|
21
17
|
|
22
18
|
# Load support files
|
23
19
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: csv_magic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -14,7 +14,7 @@ date: 2012-03-29 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
17
|
-
requirement: &
|
17
|
+
requirement: &70132287098180 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: 3.1.4
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70132287098180
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: rspec-rails
|
28
|
-
requirement: &
|
28
|
+
requirement: &70132287096580 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: 2.8.0
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70132287096580
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: sqlite3
|
39
|
-
requirement: &
|
39
|
+
requirement: &70132287112120 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ~>
|
@@ -44,18 +44,7 @@ dependencies:
|
|
44
44
|
version: 1.3.5
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: capybara
|
50
|
-
requirement: &70288960305660 !ruby/object:Gem::Requirement
|
51
|
-
none: false
|
52
|
-
requirements:
|
53
|
-
- - ! '>='
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version: 0.4.0
|
56
|
-
type: :development
|
57
|
-
prerelease: false
|
58
|
-
version_requirements: *70288960305660
|
47
|
+
version_requirements: *70132287112120
|
59
48
|
description: Provides controller actions, views and field mapping for data from a
|
60
49
|
csv file.
|
61
50
|
email:
|
@@ -107,7 +96,6 @@ files:
|
|
107
96
|
- spec/dummy/config/locales/en.yml
|
108
97
|
- spec/dummy/config/routes.rb
|
109
98
|
- spec/dummy/db/migrate/20110808105053_create_people.rb
|
110
|
-
- spec/dummy/db/test.sqlite3
|
111
99
|
- spec/dummy/log/production.log
|
112
100
|
- spec/dummy/log/server.log
|
113
101
|
- spec/dummy/public/404.html
|
@@ -124,10 +112,10 @@ files:
|
|
124
112
|
- spec/dummy/script/rails
|
125
113
|
- spec/dummy_data.csv
|
126
114
|
- spec/file_handler_spec.rb
|
115
|
+
- spec/fixtures/files/file.csv
|
127
116
|
- spec/importer_spec.rb
|
128
|
-
- spec/integration/get_request_spec.rb
|
129
|
-
- spec/integration/post_request_spec.rb
|
130
117
|
- spec/integration/resource_integration_spec.rb
|
118
|
+
- spec/requests/import_action_spec.rb
|
131
119
|
- spec/spec_helper.rb
|
132
120
|
- spec/test.file
|
133
121
|
homepage: https://github.com/magiclabs/csv_magic
|
@@ -144,7 +132,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
144
132
|
version: '0'
|
145
133
|
segments:
|
146
134
|
- 0
|
147
|
-
hash:
|
135
|
+
hash: -983402596518867676
|
148
136
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
149
137
|
none: false
|
150
138
|
requirements:
|
@@ -153,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
153
141
|
version: '0'
|
154
142
|
segments:
|
155
143
|
- 0
|
156
|
-
hash:
|
144
|
+
hash: -983402596518867676
|
157
145
|
requirements: []
|
158
146
|
rubyforge_project: csv_magic
|
159
147
|
rubygems_version: 1.8.15
|
data/spec/dummy/db/test.sqlite3
DELETED
Binary file
|
@@ -1 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require "rspec"
|
2
|
-
|
3
|
-
describe CSVMagic do
|
4
|
-
context "when csv is given as param" do
|
5
|
-
it "renders the mapper view"
|
6
|
-
end
|
7
|
-
context "when mapping and filename is given as param" do
|
8
|
-
it "saves the csv-lines as resource-objects"
|
9
|
-
end
|
10
|
-
context "when csv has been imported" do
|
11
|
-
it "redirects to resources index"
|
12
|
-
end
|
13
|
-
end
|