active_admin_csv_import 1.2.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,6 +4,7 @@
4
4
  default: 'Import %{resource_name} from a CSV File' ) %>
5
5
  </h3>
6
6
  <ul>
7
- <li><%= t('.file_type', default: "Save a CSV as 'Windows Comma Separated' from Excel.") %></li>
8
- <li><%= t('.must_have_headings', columns: @required_columns.to_sentence, default: "Your CSV should have the following column headings: %{columns}. The order doesn't matter.") %></li>
7
+ <li><%= t('.file_type', default: "Save a CSV as 'Windows Comma Separated' from Excel if you're on Mac, or 'CSV' otherwise.") %></li>
8
+ <li><%= t('.must_have_headings', columns: @required_columns.map(&:to_s).map(&:humanize).to_sentence, default: "Your CSV should have the following column headings: %{columns}. The order doesn't matter.") %></li>
9
+ <li><%= link_to(t('.example_link', default: "Download an example"), url_for(:controller => controller_name, :action => 'example_csv')) %></li>
9
10
  </ul>
@@ -1,16 +1,32 @@
1
+ require 'csv'
2
+
1
3
  module ActiveAdminCsvImport
2
4
  module DSL
3
5
 
4
6
  def csv_importable(options={})
5
7
 
8
+ # All columns
9
+ columns = options[:columns] ||= active_admin_config.resource_class.columns.map(&:name) - ["id", "updated_at", "created_at"]
10
+
11
+ # Required columns. A subset of all columns. A client-side validation error is raised if one of these is not found.
12
+ required_columns = options[:required_columns] ||= columns
13
+
6
14
  action_item :only => :index do
7
15
  link_to "Import #{active_admin_config.resource_name.to_s.pluralize}", :action => 'import_csv'
8
16
  end
9
17
 
18
+ # Returns an example CSV based on the columns expected for import.
19
+ collection_action :example_csv do
20
+ csv_column_names = CSV.generate do |csv|
21
+ csv << columns.map(&:to_s).map(&:humanize)
22
+ end
23
+ send_data(csv_column_names, :type => 'text/csv; charset=utf-8; header=present', :filename => active_admin_config.resource_class.name.to_s.pluralize + ".csv")
24
+ end
25
+
10
26
  # Shows the form and JS which accepts a CSV file, parses it and posts each row to the server.
11
27
  collection_action :import_csv do
12
- @columns = options[:columns] ||= active_admin_config.resource_class.columns.map(&:name) - ["id", "updated_at", "created_at"]
13
- @required_columns = options[:required_columns] ||= @columns
28
+ @columns = columns
29
+ @required_columns = required_columns
14
30
 
15
31
  @post_path = options[:path].try(:call)
16
32
  @post_path ||= collection_path + "/import_rows"
@@ -1,3 +1,3 @@
1
1
  module ActiveAdminCsvImport
2
- VERSION = "1.2.1"
2
+ VERSION = "1.3.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_admin_csv_import
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-07 00:00:00.000000000 Z
12
+ date: 2014-01-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &70301211983820 !ruby/object:Gem::Requirement
16
+ requirement: &70339062483560 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3.1'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70301211983820
24
+ version_requirements: *70339062483560
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: railties
27
- requirement: &70301211983180 !ruby/object:Gem::Requirement
27
+ requirement: &70339062497880 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '3.1'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70301211983180
35
+ version_requirements: *70339062497880
36
36
  description: CSV import for Active Admin capable of handling CSV files too large to
37
37
  import via direct file upload to Heroku
38
38
  email: