scaffolding 0.3.1 → 0.3.2
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 +4 -4
- data/README.md +3 -3
- data/Rakefile +3 -2
- data/lib/generators/scaffolding_generator.rb +7 -3
- data/lib/scaffolding.rb +27 -7
- data/lib/scaffolding/parser/base.rb +64 -18
- data/lib/scaffolding/parser/csv.rb +4 -32
- data/lib/scaffolding/parser/importer/base.rb +30 -0
- data/lib/scaffolding/parser/raw.rb +60 -0
- data/lib/scaffolding/railtie.rb +1 -1
- data/lib/scaffolding/version.rb +1 -1
- data/lib/tasks/generators.rake +0 -42
- data/usage.rb +24 -0
- metadata +5 -3
- data/lib/scaffolding/parser/importer/csvdata.rb +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8671e3427494760d1568c7846a1728f05bd7eec5
|
4
|
+
data.tar.gz: cfb03213051ffb7ccf930f4380ffa10be042985a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8cf10c9d7692cb5554ed704119f68e5f6475e80563c8154cbca6f98d1da1e3053c1db8dae485e9b76119e6efaeede7ecda16a407c0d4cb39e2e75f4aa679ed11
|
7
|
+
data.tar.gz: b44127223ecc9063cb35d05135626cdb20330ebf7da09eee9998919c4555ded9c1b450456f8de467ef90701b57be224ac44a6365a7b9021052432e7def349304
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Scaffolding
|
2
2
|
|
3
|
-
Generate a rails scaffold from a CSV file and import the data into your rails application.
|
3
|
+
Generate a rails scaffold from a CSV, Dat or Txt file and import the data into your rails application.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -28,12 +28,12 @@ Or
|
|
28
28
|
|
29
29
|
$ rake scaffolding:folder
|
30
30
|
|
31
|
-
then add
|
31
|
+
then add files to the 'tmp/scaffolding' directory and process them all with:
|
32
32
|
|
33
33
|
$ rails g/generate scaffolding
|
34
34
|
|
35
35
|
### Options:
|
36
|
-
(You will be asked these at the terminal if not
|
36
|
+
(You will be asked these at the terminal if not specified)
|
37
37
|
|
38
38
|
Automatically determine the data types of each column:
|
39
39
|
|
data/Rakefile
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
|
3
|
-
#C
|
4
|
-
#C:\Users\jdejong\Desktop\data.xlsx
|
3
|
+
# C:\Users\jdejong\Desktop\Windows.csv
|
4
|
+
# C:\Users\jdejong\Desktop\data.xlsx
|
5
5
|
# /Users/Jordandejong/Desktop/ht.csv
|
6
|
+
# ftp://ftp2.bom.gov.au/anon/gen/fwo/IDY02128.dat
|
@@ -4,19 +4,23 @@ Rails.application.load_tasks
|
|
4
4
|
require 'scaffolding'
|
5
5
|
|
6
6
|
class ScaffoldingGenerator < Rails::Generators::Base
|
7
|
-
desc "This generator generates a scaffold based on a CSV file and imports the data"
|
7
|
+
desc "This generator generates a scaffold based on a CSV, Dat or Txt file and imports the data"
|
8
8
|
argument :source, :type => :string, :default => ""
|
9
9
|
class_option :auto, :type => :boolean, :default => false, :description => "Automatically choose data types"
|
10
10
|
class_option :migrate, :type => :boolean, :default => false, :description => "Migrate the database"
|
11
11
|
class_option :import, :type => :boolean, :default => false, :description => "Import data from source"
|
12
12
|
|
13
13
|
def analyize_sources
|
14
|
+
@auto = options[:auto]
|
15
|
+
@migrate = options[:migrate]
|
16
|
+
@import = options[:import]
|
17
|
+
|
14
18
|
if source == "" || source.nil?
|
15
19
|
Dir[Rails.root.join('tmp/scaffolding/*')].each do |source|
|
16
|
-
Scaffolding.generate(source,
|
20
|
+
Scaffolding.generate(source, @auto, @migrate, @import)
|
17
21
|
end
|
18
22
|
else
|
19
|
-
Scaffolding.generate(source,
|
23
|
+
Scaffolding.generate(source, @auto, @migrate, @import)
|
20
24
|
end
|
21
25
|
end
|
22
26
|
|
data/lib/scaffolding.rb
CHANGED
@@ -2,17 +2,39 @@ require "scaffolding/version"
|
|
2
2
|
|
3
3
|
module Scaffolding
|
4
4
|
require 'scaffolding/railtie'
|
5
|
+
require 'uri'
|
5
6
|
|
6
7
|
def self.generate(source, auto, migrate, import)
|
7
8
|
@source = source
|
9
|
+
@auto = auto
|
8
10
|
@migrate = migrate
|
9
11
|
@import = import
|
10
|
-
|
12
|
+
@uri = Scaffolding.uri?
|
13
|
+
|
14
|
+
results = Scaffolding.parser
|
11
15
|
return if Scaffolding.errors(results)
|
16
|
+
|
12
17
|
Rails::Generators::Base.new.generate "scaffold", results
|
13
18
|
Scaffolding.import_data if Scaffolding.migrate_database
|
14
19
|
end
|
15
20
|
|
21
|
+
def self.uri?
|
22
|
+
@source =~ URI::regexp
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.parser(namespace="")
|
26
|
+
"Scaffolding::Parser#{namespace + "::" + Scaffolding.class_ref}".constantize.process(@source, @auto, @uri)
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.class_ref
|
30
|
+
case File.extname(@source)
|
31
|
+
when ".csv" && @uri == false
|
32
|
+
"Csv"
|
33
|
+
else
|
34
|
+
"Raw"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
16
38
|
def self.errors(results)
|
17
39
|
if results.kind_of?(Array)
|
18
40
|
results.each do |error|
|
@@ -28,6 +50,7 @@ module Scaffolding
|
|
28
50
|
answer = STDIN.gets.chomp.downcase
|
29
51
|
end
|
30
52
|
if @migrate || answer == "y"
|
53
|
+
Rake::Task["db:migrate"].reenable
|
31
54
|
Rake::Task["db:migrate"].invoke
|
32
55
|
else
|
33
56
|
false
|
@@ -39,15 +62,12 @@ module Scaffolding
|
|
39
62
|
puts "\n\n\e[32mImport the data from #{@source}?(y/n)\e[0m\n"
|
40
63
|
answer = STDIN.gets.chomp.downcase
|
41
64
|
end
|
42
|
-
if @import || answer == "y"
|
43
|
-
Scaffolding::Parser::Importer::CsvData.process(@source, false).each do |k,v|
|
44
|
-
puts "#{v} records #{k}"
|
45
|
-
end
|
46
|
-
end
|
65
|
+
Scaffolding.parser("::Importer").each{ |k,v| puts "#{v} records #{k}" } if @import || answer == "y"
|
47
66
|
end
|
48
67
|
|
49
68
|
end
|
50
69
|
|
51
70
|
require 'scaffolding/parser/base'
|
71
|
+
require 'scaffolding/parser/raw'
|
52
72
|
require 'scaffolding/parser/csv'
|
53
|
-
require 'scaffolding/parser/importer/
|
73
|
+
require 'scaffolding/parser/importer/base'
|
@@ -4,30 +4,45 @@ module Scaffolding
|
|
4
4
|
require 'rails'
|
5
5
|
require 'csv'
|
6
6
|
|
7
|
-
def initialize(
|
8
|
-
@
|
9
|
-
@data = valid_data?(file)
|
10
|
-
@file_name = File.basename(file, ".*" ).to_s.split.join.camelize.strip.singularize
|
11
|
-
@scaffold_builder = @file_name
|
7
|
+
def initialize(source="", auto, uri)
|
8
|
+
@source = source
|
12
9
|
@auto = auto
|
10
|
+
@uri = uri
|
11
|
+
@errors = []
|
13
12
|
@scaffolding = {}
|
13
|
+
@row_number = 0
|
14
|
+
setup
|
15
|
+
end
|
16
|
+
|
17
|
+
def setup
|
18
|
+
return unless @data = valid_data?
|
19
|
+
@col_seperator = col_seperator
|
20
|
+
@source_name = File.basename(@source, ".*" ).to_s.split.join.camelize.strip.singularize
|
21
|
+
@scaffold_builder = @source_name
|
14
22
|
end
|
15
23
|
|
16
24
|
def errors
|
17
25
|
@errors
|
18
26
|
end
|
19
27
|
|
20
|
-
def valid_data?
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
28
|
+
def valid_data?
|
29
|
+
if @source == "" || @source.nil?
|
30
|
+
@errors << "No source selected"
|
31
|
+
return false
|
32
|
+
end
|
33
|
+
@uri ? web : file
|
34
|
+
end
|
35
|
+
|
36
|
+
def web
|
37
|
+
`curl "#{@source}"`
|
38
|
+
end
|
39
|
+
|
40
|
+
def file
|
41
|
+
ext = File.extname(@source)
|
42
|
+
if [".csv", ".dat", ".txt"].include? ext
|
43
|
+
File.read(utf8_encode(@source))
|
29
44
|
else
|
30
|
-
@errors << "
|
45
|
+
@errors << "Unknown source type #{ext} for #{@source}"
|
31
46
|
false
|
32
47
|
end
|
33
48
|
end
|
@@ -54,13 +69,44 @@ module Scaffolding
|
|
54
69
|
data_type = :time if Time.parse(Time.strptime(data, '%H:%M:%S')) rescue data_type
|
55
70
|
data_type = :datetime if DateTime.parse(DateTime.strptime(data, '%m/%d/%Y %H:%M:%S')) || DateTime.parse(DateTime.strptime(data, '%d/%m/%Y %H:%M:%S')) rescue data_type
|
56
71
|
data_type = :integer if Integer(data) rescue data_type
|
57
|
-
data_type = :decimal if (
|
72
|
+
data_type = :decimal if (data =~ (/[-]?\d*[,]?\d*[.]\d*[%]?$/)) == 0 rescue data_type
|
58
73
|
@scaffolding[column.to_sym][data_type] += 1 unless data == ""
|
59
74
|
end
|
60
75
|
end
|
61
76
|
|
62
|
-
def
|
63
|
-
|
77
|
+
def scaffold_rank
|
78
|
+
unless @auto
|
79
|
+
puts "\n\e[33mManually choose data types?(y/n) for #{@source_name}\e[0m"
|
80
|
+
manual = STDIN.gets.chomp
|
81
|
+
end
|
82
|
+
@scaffolding.each do |scaffold, data_types|
|
83
|
+
data_type = data_types.max_by{|k,v| v}[0]
|
84
|
+
unless @auto || manual != "y"
|
85
|
+
puts "\n\e[32m#{scaffold}\e[0m is a \e[33m#{data_type}\e[0m? ([Enter]/string/integer/date ect)"
|
86
|
+
answer = STDIN.gets.chomp.downcase
|
87
|
+
data_type = answer if data_types.keys.include?(answer.to_sym)
|
88
|
+
end
|
89
|
+
@scaffolding[scaffold] = data_type
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def build_string
|
94
|
+
@scaffolding.each do |k, v|
|
95
|
+
@scaffold_builder << " #{k}:#{v}" unless k.to_s.downcase == "id"
|
96
|
+
end
|
97
|
+
@scaffold_builder
|
98
|
+
end
|
99
|
+
|
100
|
+
def results
|
101
|
+
groom_data
|
102
|
+
process_data
|
103
|
+
return @errors unless @errors.count == 0
|
104
|
+
scaffold_rank
|
105
|
+
build_string
|
106
|
+
end
|
107
|
+
|
108
|
+
def self.process(source, auto, uri)
|
109
|
+
importer = self.new(source, auto, uri)
|
64
110
|
return importer.errors unless importer.errors.count == 0
|
65
111
|
importer.results
|
66
112
|
end
|
@@ -2,20 +2,19 @@ module Scaffolding
|
|
2
2
|
module Parser
|
3
3
|
class Csv < Scaffolding::Parser::Base
|
4
4
|
|
5
|
-
def
|
6
|
-
super
|
5
|
+
def groom_data
|
7
6
|
@headers = true
|
8
|
-
|
7
|
+
setup_columns
|
9
8
|
end
|
10
9
|
|
11
10
|
def setup_columns
|
12
|
-
CSV.parse(@data, headers: @headers, col_sep: col_seperator, skip_blanks: true).first.each do |column|
|
11
|
+
CSV.parse(@data, headers: @headers, col_sep: @col_seperator, skip_blanks: true).first.each do |column|
|
13
12
|
@scaffolding[column[0].downcase.to_sym] = data_types
|
14
13
|
end
|
15
14
|
end
|
16
15
|
|
17
16
|
def process_data
|
18
|
-
CSV.parse(@data, headers: @headers, col_sep: col_seperator, skip_blanks: true) do |row|
|
17
|
+
CSV.parse(@data, headers: @headers, col_sep: @col_seperator, skip_blanks: true) do |row|
|
19
18
|
@row_number += 1
|
20
19
|
begin
|
21
20
|
process_row(row.inject({}){|row,(k,v)| row[k.downcase.to_sym] = v; row})
|
@@ -25,33 +24,6 @@ module Scaffolding
|
|
25
24
|
end
|
26
25
|
end
|
27
26
|
|
28
|
-
def scaffold_rank
|
29
|
-
unless @auto
|
30
|
-
puts "\n\e[33mManually choose data types?(y/n)\e[0m"
|
31
|
-
manual = STDIN.gets.chomp
|
32
|
-
end
|
33
|
-
@scaffolding.each do |scaffold, data_types|
|
34
|
-
data_type = data_types.max_by{|k,v| v}[0]
|
35
|
-
unless @auto || manual != "y"
|
36
|
-
puts "\n\e[32m#{scaffold}\e[0m is a \e[33m#{data_type}\e[0m? (y/string/integer/date ect)"
|
37
|
-
answer = STDIN.gets.chomp.downcase
|
38
|
-
data_type = answer unless answer == "y" || answer == ""
|
39
|
-
end
|
40
|
-
@scaffolding[scaffold] = data_type
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def results
|
45
|
-
setup_columns
|
46
|
-
process_data
|
47
|
-
return @errors unless @errors.count == 0
|
48
|
-
scaffold_rank
|
49
|
-
@scaffolding.each do |k, v|
|
50
|
-
@scaffold_builder << " #{k}:#{v}" unless k.to_s.downcase == "id"
|
51
|
-
end
|
52
|
-
@scaffold_builder
|
53
|
-
end
|
54
|
-
|
55
27
|
end
|
56
28
|
end
|
57
29
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Scaffolding
|
2
|
+
module Parser
|
3
|
+
module Importer
|
4
|
+
["Csv", "Raw"].each do |type|
|
5
|
+
importer_class = Class.new("Scaffolding::Parser::#{type}".constantize) do
|
6
|
+
|
7
|
+
def initialize(file="", auto, uri)
|
8
|
+
super
|
9
|
+
@saved = 0
|
10
|
+
@failed = 0
|
11
|
+
end
|
12
|
+
|
13
|
+
def process_row(row)
|
14
|
+
model = @source_name.classify.constantize.new(row.except!(:id))
|
15
|
+
model.save ? @saved += 1 : @failed += 1
|
16
|
+
end
|
17
|
+
|
18
|
+
def results
|
19
|
+
groom_data
|
20
|
+
process_data
|
21
|
+
return @errors unless @errors.count == 0
|
22
|
+
{saved: @saved, failed: @failed}
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
Scaffolding::Parser::Importer.const_set(type, importer_class)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Scaffolding
|
2
|
+
module Parser
|
3
|
+
class Raw < Scaffolding::Parser::Base
|
4
|
+
|
5
|
+
def groom_data
|
6
|
+
@data = @data.split("\n")
|
7
|
+
find_headers
|
8
|
+
setup_columns
|
9
|
+
hashed_data
|
10
|
+
end
|
11
|
+
|
12
|
+
def find_headers
|
13
|
+
hc = header_count
|
14
|
+
rows = 0
|
15
|
+
@data.map do |row|
|
16
|
+
rows += 1
|
17
|
+
if row.split(@col_seperator).count == hc
|
18
|
+
@headers = row.split(@col_seperator).map{ |header| header.strip.downcase.gsub(/(\W|\d)/, "") }
|
19
|
+
rows.times{ @data.shift }
|
20
|
+
return
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def header_count
|
26
|
+
row_counts = []
|
27
|
+
@data.map{ |row| row_counts << row.split(@col_seperator).count }
|
28
|
+
row_counts.uniq.max_by{ |i| row_counts.count(i) }
|
29
|
+
end
|
30
|
+
|
31
|
+
def setup_columns
|
32
|
+
@headers.each{ |column| @scaffolding[column.to_sym] = data_types }
|
33
|
+
end
|
34
|
+
|
35
|
+
def hashed_data
|
36
|
+
@data = @data.map do |row|
|
37
|
+
fields = row.split(@col_seperator)
|
38
|
+
hash = {}
|
39
|
+
@headers.each_with_index do |header, index|
|
40
|
+
hash[header] = fields[index].to_s.strip
|
41
|
+
end
|
42
|
+
hash
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def process_data
|
47
|
+
@data.each do |row|
|
48
|
+
@row_number += 1
|
49
|
+
begin
|
50
|
+
process_row(row)
|
51
|
+
rescue => e
|
52
|
+
@errors << "Unable to process row #{@row_number} Error: #{e}\n"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
data/lib/scaffolding/railtie.rb
CHANGED
data/lib/scaffolding/version.rb
CHANGED
data/lib/tasks/generators.rake
CHANGED
@@ -5,45 +5,3 @@ namespace :scaffolding do
|
|
5
5
|
Dir.mkdir(File.join(Rails.root, 'tmp/scaffolding'))
|
6
6
|
end
|
7
7
|
end
|
8
|
-
|
9
|
-
# namespace :g do
|
10
|
-
# desc 'generate a scaffold from a csv file'
|
11
|
-
# task :scaffold, [:file] do |t, args|
|
12
|
-
# require 'rails/generators'
|
13
|
-
# require 'scaffolding'
|
14
|
-
#
|
15
|
-
# system "clear" or system "cls"
|
16
|
-
# puts "\n***** Scaffolding Gem *****\n\n\n"
|
17
|
-
#
|
18
|
-
# if args[:file]
|
19
|
-
# file = args[:file]
|
20
|
-
# else
|
21
|
-
# puts "\e[32mEnter a relative file name to build the scaffold\e[0m\n"
|
22
|
-
# puts "You are currently here: #{Dir.pwd}\n\n"
|
23
|
-
# file = STDIN.gets.chomp
|
24
|
-
# end
|
25
|
-
#
|
26
|
-
# results = Scaffolding.generate(file)
|
27
|
-
# if results.kind_of?(Array)
|
28
|
-
# results.each do |error|
|
29
|
-
# puts "\e[31m#{error}\e[0m"
|
30
|
-
# end
|
31
|
-
# puts ""
|
32
|
-
# next
|
33
|
-
# end
|
34
|
-
#
|
35
|
-
# Rails::Generators::Base.new.generate "scaffold", results
|
36
|
-
#
|
37
|
-
# puts "\n\n\e[32mMigrate the database?(y/n)\e[0m\n"
|
38
|
-
# if STDIN.gets.chomp == "y"
|
39
|
-
# Rake::Task["db:migrate"].invoke
|
40
|
-
#
|
41
|
-
# puts "\n\n\e[32mImport the data from #{file}?(y/n)\e[0m\n"
|
42
|
-
# if STDIN.gets.chomp == "y"
|
43
|
-
# Scaffolding.import_data(file).each do |k,v|
|
44
|
-
# puts "#{v} records #{k}"
|
45
|
-
# end
|
46
|
-
# end
|
47
|
-
# end
|
48
|
-
# end
|
49
|
-
# end
|
data/usage.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
gem_name = "scaffolding"
|
5
|
+
|
6
|
+
def rubygems_get(gem_name: "", endpoint: "")
|
7
|
+
path = File.join("/api/v1/gems/", gem_name, endpoint).chomp("/") + ".json"
|
8
|
+
JSON.parse(Net::HTTP.get("rubygems.org", path))
|
9
|
+
end
|
10
|
+
|
11
|
+
results = rubygems_get(gem_name: gem_name, endpoint: "reverse_dependencies")
|
12
|
+
|
13
|
+
weighted_results = {}
|
14
|
+
results.each do |name|
|
15
|
+
begin
|
16
|
+
weighted_results[name] = rubygems_get(gem_name: name)["downloads"]
|
17
|
+
rescue => e
|
18
|
+
puts "#{name} #{e.message}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
weighted_results.sort {|(k1, v1), (k2, v2)| v2 <=> v1 }.first(50).each_with_index do |(k, v), i|
|
23
|
+
puts "#{i}) #{k}: #{v}"
|
24
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scaffolding
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jordan-deJong
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -57,11 +57,13 @@ files:
|
|
57
57
|
- lib/scaffolding.rb
|
58
58
|
- lib/scaffolding/parser/base.rb
|
59
59
|
- lib/scaffolding/parser/csv.rb
|
60
|
-
- lib/scaffolding/parser/importer/
|
60
|
+
- lib/scaffolding/parser/importer/base.rb
|
61
|
+
- lib/scaffolding/parser/raw.rb
|
61
62
|
- lib/scaffolding/railtie.rb
|
62
63
|
- lib/scaffolding/version.rb
|
63
64
|
- lib/tasks/generators.rake
|
64
65
|
- scaffolding.gemspec
|
66
|
+
- usage.rb
|
65
67
|
homepage: https://github.com/Jordan-deJong/scaffolding
|
66
68
|
licenses:
|
67
69
|
- MIT
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module Scaffolding
|
2
|
-
module Parser
|
3
|
-
module Importer
|
4
|
-
class CsvData < Scaffolding::Parser::Csv
|
5
|
-
|
6
|
-
def initialize(file="", auto)
|
7
|
-
super
|
8
|
-
@saved = 0
|
9
|
-
@failed = 0
|
10
|
-
end
|
11
|
-
|
12
|
-
def process_row(row)
|
13
|
-
model = @file_name.classify.constantize.new(row.except!(:id))
|
14
|
-
model.save ? @saved += 1 : @failed += 1
|
15
|
-
end
|
16
|
-
|
17
|
-
def results
|
18
|
-
process_data
|
19
|
-
return @errors unless @errors.count == 0
|
20
|
-
{saved: @saved, failed: @failed}
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|