active_admin_importable 1.0.0 → 1.1.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/README.md CHANGED
@@ -6,7 +6,7 @@ CSV imports for Active Admin with one line of code.
6
6
 
7
7
  Add this line to your application's Gemfile:
8
8
 
9
- gem 'active_admin_importable', :git => "git://github.com/krhorst/active_admin_importable.git"
9
+ gem 'active_admin_importable'
10
10
 
11
11
  And then execute:
12
12
 
@@ -20,10 +20,26 @@ Or install it yourself as:
20
20
 
21
21
  Add the following line into your active admin resource:
22
22
 
23
+
23
24
  active_admin_importable
24
25
 
25
26
  The Import button should now appear. Click it and upload a CSV file with a header row corresponding to your model attributes. Press submit. Profit.
26
27
 
28
+ ## Custom Import Behavior
29
+
30
+ Need to do something special with the import? active_admin_importable accepts an optional block that will be called on each row, replacing the default functionality ( calling create! on the associated model). The associated model and a hash of the current row will get passed into the block. For example:
31
+
32
+ ```
33
+ ActiveAdmin.register Product do
34
+ active_admin_importable do |model, hash|
35
+ store = Store.find_by_name(hash[:store_name])
36
+ hash[:store_id] = store.id
37
+ hash.delete(:store_name)
38
+ model.create!(hash)
39
+ end
40
+ end
41
+ ```
42
+
27
43
  ## Contributing
28
44
 
29
45
  1. Fork it
data/app/models/csv_db.rb CHANGED
@@ -1,11 +1,15 @@
1
1
  require 'csv'
2
2
  class CsvDb
3
3
  class << self
4
- def convert_save(model_name, csv_data)
4
+ def convert_save(model_name, csv_data, &block)
5
5
  csv_file = csv_data.read
6
+ target_model = model_name.pluralize.classify.constantize
6
7
  CSV.parse(csv_file, :headers => true, header_converters: :symbol ) do |row|
7
- target_model = model_name.classify.constantize
8
- target_model.create!(row.to_hash)
8
+ if(block_given?)
9
+ block.call(target_model, row.to_hash)
10
+ else
11
+ target_model.create!(row.to_hash)
12
+ end
9
13
  end
10
14
  end
11
15
  end
@@ -1,6 +1,6 @@
1
1
  module ActiveAdminImportable
2
2
  module DSL
3
- def active_admin_importable
3
+ def active_admin_importable(&block)
4
4
  action_item :only => :index do
5
5
  link_to "Import #{active_admin_config.resource_name.to_s.pluralize}", :action => 'upload_csv'
6
6
  end
@@ -10,7 +10,7 @@ module ActiveAdminImportable
10
10
  end
11
11
 
12
12
  collection_action :import_csv, :method => :post do
13
- CsvDb.convert_save(active_admin_config.resource_name.to_s, params[:dump][:file])
13
+ CsvDb.convert_save(active_admin_config.resource_name.to_s, params[:dump][:file], &block)
14
14
  redirect_to :action => :index, :notice => "#{active_admin_config.resource_name.to_s} imported successfully!"
15
15
  end
16
16
  end
@@ -1,3 +1,3 @@
1
1
  module ActiveAdminImportable
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_admin_importable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-12 00:00:00.000000000 Z
12
+ date: 2013-04-17 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: CSV import for Active Admin
15
15
  email: