active_admin_csv_import 1.3.1 → 2.0.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.
- checksums.yaml +7 -0
- data/README.md +68 -0
- data/app/models/concerns/active_admin_csv_import/convenience.rb +19 -18
- data/lib/active_admin_csv_import.rb +5 -5
- data/lib/active_admin_csv_import/dsl.rb +20 -18
- data/lib/active_admin_csv_import/railtie.rb +3 -3
- data/lib/active_admin_csv_import/version.rb +1 -1
- metadata +17 -27
- data/README.rdoc +0 -3
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2c9d7a33e6c9e9fffec9f8419ea64d952ffbada9
|
4
|
+
data.tar.gz: 0e232f0c116103a0bf0a9b36003fa6415ca60e71
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 80657c5898a31b15f3ae616d85ef0d3e94be6fd11ef027490d7ce4f71d5cefcecc2fe2e60d215050519bf8681cf57e1e2c03f753878949f526e29215f05ba81d
|
7
|
+
data.tar.gz: 33c6d1e53db05fa0f0e14468128aa22589f8657b18a61f2589a2374ff8bab7d1af95799ff493687dafcba6702dd1addf844e6033d29f4725e4a6565aa8eb2e40
|
data/README.md
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
ActiveAdminCSVImport
|
2
|
+
=======================
|
3
|
+
|
4
|
+
[](https://travis-ci.org/Papercloud/active_admin_csv_import)
|
5
|
+
|
6
|
+
- Add CSV import with one line of code
|
7
|
+
- Parses the file client-side and imports line-by-line to avoid Heroku timeouts
|
8
|
+
- Validates the CSV has the correct column names before importing.
|
9
|
+
|
10
|
+
Inspired by https://github.com/krhorst/active_admin_importable and makes use of Recline.js. This is a relatively heavy solution with a lot of JS dependencies, but should be easier for large imports on Heroku than first uploading to a file server.
|
11
|
+
|
12
|
+
## Compatibility
|
13
|
+
|
14
|
+
As of v2.0.0 Active Admin master with Rails 4.1 is supported. For older versions of Active Admin use v1 of active_admin_csv_import.
|
15
|
+
|
16
|
+
## Installation
|
17
|
+
|
18
|
+
Add this line to your application's Gemfile:
|
19
|
+
|
20
|
+
gem 'active_admin_csv_import'
|
21
|
+
|
22
|
+
And then execute:
|
23
|
+
|
24
|
+
$ bundle
|
25
|
+
|
26
|
+
## Usage
|
27
|
+
|
28
|
+
Add 'csv_importable' into your active admin resource:
|
29
|
+
|
30
|
+
```
|
31
|
+
ActiveAdmin.register Thing do
|
32
|
+
csv_importable :columns => [:code, :name, :state_name],
|
33
|
+
:import_unique_key => :code
|
34
|
+
end
|
35
|
+
```
|
36
|
+
|
37
|
+
An import button should appear on the resource's index page. All columns are expected other than id, updated_at and created_at.
|
38
|
+
|
39
|
+
## Demo
|
40
|
+
|
41
|
+
http://active-admin-csv-import.herokuapp.com/admin
|
42
|
+
```
|
43
|
+
admin@example.com
|
44
|
+
password
|
45
|
+
```
|
46
|
+
Source: https://github.com/Papercloud/active-admin-csv-import-example
|
47
|
+
|
48
|
+
## Use other delimiter than semicolon
|
49
|
+
|
50
|
+
In `config/initializers/active_admin.rb`, search `csv_options` and set the csv separator as it's showed in the file.
|
51
|
+
|
52
|
+
## Wishlist / TODOS
|
53
|
+
|
54
|
+
1. Add Appraisal to test against multiple versions of Rails
|
55
|
+
|
56
|
+
## Specs
|
57
|
+
```
|
58
|
+
bundle exec rspec spec
|
59
|
+
```
|
60
|
+
The test suite is limited, but it's a start.
|
61
|
+
|
62
|
+
## Contributing
|
63
|
+
|
64
|
+
1. Fork it
|
65
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
66
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
67
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
68
|
+
5. Create new Pull Request
|
@@ -1,26 +1,27 @@
|
|
1
|
-
module ActiveAdminCsvImport
|
2
|
-
|
1
|
+
module ActiveAdminCsvImport
|
2
|
+
module Convenience
|
3
|
+
extend ActiveSupport::Concern
|
3
4
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
module ClassMethods
|
6
|
+
# Look up a belongs_to association by name.
|
7
|
+
# E.g.
|
8
|
+
# lookup_belongs_to :state, by: :name
|
9
|
+
# Adds state_name as an ivar.
|
10
|
+
def lookup_belongs_to(name, options)
|
11
|
+
lookup_by = options[:by]
|
10
12
|
|
11
|
-
|
13
|
+
code = <<-eoruby
|
14
|
+
attr_accessor :#{name}_#{lookup_by}
|
12
15
|
|
13
|
-
|
14
|
-
attr_accessor :#{name}_#{lookup_by}
|
16
|
+
before_validation :lookup_#{name}_by_#{lookup_by}
|
15
17
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
def lookup_#{name}_by_#{lookup_by}
|
19
|
+
return if self.#{name}_#{lookup_by}.blank?
|
20
|
+
self.#{name} = '#{name}'.camelize.constantize.where(#{lookup_by}: self.#{name}_#{lookup_by}).first
|
21
|
+
end
|
22
|
+
eoruby
|
23
|
+
class_eval(code)
|
21
24
|
end
|
22
|
-
eoruby
|
23
|
-
class_eval(code)
|
24
25
|
end
|
25
26
|
end
|
26
27
|
end
|
@@ -1,10 +1,10 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
1
|
+
require 'active_admin_csv_import/engine'
|
2
|
+
require 'active_admin_csv_import/dsl'
|
3
|
+
require 'active_admin_csv_import/railtie'
|
4
|
+
require 'active_admin_csv_import/version'
|
5
5
|
require 'activeadmin'
|
6
6
|
|
7
7
|
module ActiveAdminCsvImport
|
8
8
|
end
|
9
9
|
|
10
|
-
::ActiveAdmin::DSL.send(:include, ActiveAdminCsvImport::DSL)
|
10
|
+
::ActiveAdmin::DSL.send(:include, ActiveAdminCsvImport::DSL)
|
@@ -2,17 +2,17 @@ require 'csv'
|
|
2
2
|
|
3
3
|
module ActiveAdminCsvImport
|
4
4
|
module DSL
|
5
|
-
|
6
|
-
def csv_importable(options={})
|
7
|
-
|
5
|
+
def csv_importable(options = {})
|
8
6
|
# All columns
|
9
|
-
columns = options[:columns] ||= active_admin_config.resource_class.columns.map(&:name) -
|
7
|
+
columns = options[:columns] ||= active_admin_config.resource_class.columns.map(&:name) - %(id updated_at created_at)
|
10
8
|
|
11
|
-
# Required columns. A subset of all columns.
|
9
|
+
# Required columns. A subset of all columns.
|
10
|
+
# A client-side validation error is raised if one of these is not found.
|
12
11
|
required_columns = options[:required_columns] ||= columns
|
13
12
|
|
14
|
-
action_item :only => :index do
|
15
|
-
link_to "Import #{active_admin_config.resource_name.to_s.pluralize}",
|
13
|
+
action_item :import_csv, :only => :index do
|
14
|
+
link_to "Import #{active_admin_config.resource_name.to_s.pluralize}",
|
15
|
+
:action => 'import_csv'
|
16
16
|
end
|
17
17
|
|
18
18
|
# Returns an example CSV based on the columns expected for import.
|
@@ -20,27 +20,31 @@ module ActiveAdminCsvImport
|
|
20
20
|
csv_column_names = CSV.generate do |csv|
|
21
21
|
csv << columns.map(&:to_s).map(&:humanize)
|
22
22
|
end
|
23
|
-
send_data(csv_column_names,
|
23
|
+
send_data(csv_column_names,
|
24
|
+
type: 'text/csv; charset=utf-8; header=present',
|
25
|
+
filename: active_admin_config
|
26
|
+
.resource_class.name.to_s.pluralize + '.csv')
|
24
27
|
end
|
25
28
|
|
26
|
-
# Shows the form and JS which accepts a CSV file,
|
29
|
+
# Shows the form and JS which accepts a CSV file,
|
30
|
+
# parses it and posts each row to the server.
|
27
31
|
collection_action :import_csv do
|
28
32
|
@columns = columns
|
29
33
|
@required_columns = required_columns
|
30
34
|
|
31
35
|
@post_path = options[:path].try(:call)
|
32
|
-
@post_path ||= collection_path +
|
36
|
+
@post_path ||= collection_path + '/import_rows'
|
33
37
|
|
34
38
|
@redirect_path = options[:redirect_path].try(:call)
|
35
39
|
@redirect_path ||= collection_path
|
36
40
|
|
37
41
|
@delimiter = options[:delimiter]
|
38
42
|
|
39
|
-
render
|
43
|
+
render 'admin/csv/import_csv'
|
40
44
|
end
|
41
45
|
|
42
46
|
# Receives each row and saves it
|
43
|
-
collection_action :import_rows, :
|
47
|
+
collection_action :import_rows, method: :post do
|
44
48
|
|
45
49
|
@failures = []
|
46
50
|
|
@@ -49,9 +53,9 @@ module ActiveAdminCsvImport
|
|
49
53
|
row_number = row_params.delete('_row')
|
50
54
|
|
51
55
|
resource = existing_row_resource(options[:import_unique_key], row_params)
|
52
|
-
resource ||= active_admin_config.resource_class.new
|
56
|
+
resource ||= active_admin_config.resource_class.new
|
53
57
|
|
54
|
-
|
58
|
+
unless update_row_resource(resource, row_params)
|
55
59
|
@failures << {
|
56
60
|
row_number: row_number,
|
57
61
|
resource: resource
|
@@ -59,7 +63,7 @@ module ActiveAdminCsvImport
|
|
59
63
|
end
|
60
64
|
end
|
61
65
|
|
62
|
-
render :
|
66
|
+
render partial: 'admin/csv/import_csv_failed_row', status: 200
|
63
67
|
end
|
64
68
|
|
65
69
|
# Rails 4 Strong Parameters compatibility and backwards compatibility.
|
@@ -90,11 +94,9 @@ module ActiveAdminCsvImport
|
|
90
94
|
value = params[lookup_column]
|
91
95
|
return unless value.present?
|
92
96
|
|
93
|
-
|
97
|
+
active_admin_config.resource_class.send(finder_method, value)
|
94
98
|
end
|
95
99
|
end
|
96
|
-
|
97
100
|
end
|
98
|
-
|
99
101
|
end
|
100
102
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
class Railtie < ::Rails::Railtie
|
2
|
-
initializer
|
3
|
-
vendor_path = File.expand_path(
|
2
|
+
initializer 'active_admin_csv_import.setup_vendor', after: 'active_admin_csv_import.setup', group: :all do |app|
|
3
|
+
vendor_path = File.expand_path('../../vendor/assets', __FILE__)
|
4
4
|
app.config.assets.paths.push(vendor_path.to_s)
|
5
5
|
|
6
6
|
app.config.assets.precompile += %w( active_admin_csv_import/import_csv.js )
|
7
7
|
end
|
8
|
-
end
|
8
|
+
end
|
metadata
CHANGED
@@ -1,38 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_admin_csv_import
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 2.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Tomas Spacek
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2015-01-05 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rails
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: '
|
19
|
+
version: '4.0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
- !ruby/object:Gem::Dependency
|
26
|
-
name: railties
|
27
|
-
requirement: &70177170940860 !ruby/object:Gem::Requirement
|
28
|
-
none: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
29
23
|
requirements:
|
30
|
-
- -
|
24
|
+
- - ">="
|
31
25
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
33
|
-
type: :runtime
|
34
|
-
prerelease: false
|
35
|
-
version_requirements: *70177170940860
|
26
|
+
version: '4.0'
|
36
27
|
description: CSV import for Active Admin capable of handling CSV files too large to
|
37
28
|
import via direct file upload to Heroku
|
38
29
|
email:
|
@@ -41,16 +32,19 @@ executables: []
|
|
41
32
|
extensions: []
|
42
33
|
extra_rdoc_files: []
|
43
34
|
files:
|
35
|
+
- MIT-LICENSE
|
36
|
+
- README.md
|
37
|
+
- Rakefile
|
44
38
|
- app/assets/javascripts/active_admin_csv_import/import_csv.js
|
45
39
|
- app/models/concerns/active_admin_csv_import/convenience.rb
|
46
40
|
- app/views/admin/csv/_import_csv_failed_row.html.erb
|
47
41
|
- app/views/admin/csv/_instructions.html.erb
|
48
42
|
- app/views/admin/csv/import_csv.html.erb
|
43
|
+
- lib/active_admin_csv_import.rb
|
49
44
|
- lib/active_admin_csv_import/dsl.rb
|
50
45
|
- lib/active_admin_csv_import/engine.rb
|
51
46
|
- lib/active_admin_csv_import/railtie.rb
|
52
47
|
- lib/active_admin_csv_import/version.rb
|
53
|
-
- lib/active_admin_csv_import.rb
|
54
48
|
- vendor/assets/javascripts/backbone/backbone.js
|
55
49
|
- vendor/assets/javascripts/backbone/json2.js
|
56
50
|
- vendor/assets/javascripts/backbone/underscore.js
|
@@ -58,32 +52,28 @@ files:
|
|
58
52
|
- vendor/assets/javascripts/recline/backend.memory.js
|
59
53
|
- vendor/assets/javascripts/recline/model.js
|
60
54
|
- vendor/assets/javascripts/underscore.string.min.js
|
61
|
-
- MIT-LICENSE
|
62
|
-
- Rakefile
|
63
|
-
- README.rdoc
|
64
55
|
homepage: http://www.papercloud.com.au
|
65
56
|
licenses: []
|
57
|
+
metadata: {}
|
66
58
|
post_install_message:
|
67
59
|
rdoc_options: []
|
68
60
|
require_paths:
|
69
61
|
- lib
|
70
62
|
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
-
none: false
|
72
63
|
requirements:
|
73
|
-
- -
|
64
|
+
- - ">="
|
74
65
|
- !ruby/object:Gem::Version
|
75
66
|
version: '0'
|
76
67
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
|
-
none: false
|
78
68
|
requirements:
|
79
|
-
- -
|
69
|
+
- - ">="
|
80
70
|
- !ruby/object:Gem::Version
|
81
71
|
version: '0'
|
82
72
|
requirements: []
|
83
73
|
rubyforge_project:
|
84
|
-
rubygems_version:
|
74
|
+
rubygems_version: 2.2.2
|
85
75
|
signing_key:
|
86
|
-
specification_version:
|
76
|
+
specification_version: 4
|
87
77
|
summary: Add CSV import to Active Admin
|
88
78
|
test_files: []
|
89
79
|
has_rdoc:
|
data/README.rdoc
DELETED