scaffolding 0.2.7 → 0.2.8
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/.gitignore +0 -0
- data/CODE_OF_CONDUCT.md +0 -0
- data/Gemfile +0 -0
- data/LICENSE.txt +0 -0
- data/README.md +6 -2
- data/Rakefile +1 -1
- data/lib/generators/scaffolding_generator.rb +6 -21
- data/lib/scaffolding.rb +35 -4
- data/lib/scaffolding/parser/base.rb +16 -3
- data/lib/scaffolding/parser/csv.rb +13 -26
- data/lib/scaffolding/parser/importer/csvdata.rb +2 -3
- data/lib/scaffolding/railtie.rb +0 -0
- data/lib/scaffolding/version.rb +1 -1
- data/lib/tasks/generators.rake +0 -0
- data/scaffolding.gemspec +0 -0
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b27e170528a4592ad0fd5b5c6d5f824523b9db2f
|
4
|
+
data.tar.gz: a61ae31c98a294fcfcdc0b32785ba119bbda8cc4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ee1e534fa8cd2ed3cfb8ed0b7b23718ee0d285d36c32596a0c631f3aab19ac7f084516b7ab5c59773eadd83154d49b8a798b7265799d5a263c50ec8398a493a
|
7
|
+
data.tar.gz: 353276fe879483d99b92e636b8011fdc43db98d23feb563daf90d045081c2dea88e52f0cf375a050b8f4f7d978ecf4c0b5e683d6da7d39d91831a0daf601902e
|
data/.gitignore
CHANGED
File without changes
|
data/CODE_OF_CONDUCT.md
CHANGED
File without changes
|
data/Gemfile
CHANGED
File without changes
|
data/LICENSE.txt
CHANGED
File without changes
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Scaffolding
|
2
2
|
|
3
|
-
|
3
|
+
Generate a rails scaffold from a CSV and import the data into your rails application.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -20,7 +20,11 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
$ rails generate
|
23
|
+
$ rails g/generate scaffolding path/to/file.csv
|
24
|
+
|
25
|
+
Or add CSV files to the tmp/scaffolding directory and process them all with:
|
26
|
+
|
27
|
+
$ rails g/generate scaffolding
|
24
28
|
|
25
29
|
## Development
|
26
30
|
|
data/Rakefile
CHANGED
@@ -6,28 +6,13 @@ require 'scaffolding'
|
|
6
6
|
class ScaffoldingGenerator < Rails::Generators::Base
|
7
7
|
argument :file, :type => :string, :default => ""
|
8
8
|
|
9
|
-
def
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
results.each do |error|
|
14
|
-
puts "\e[31m#{error}\e[0m"
|
15
|
-
end
|
16
|
-
return
|
17
|
-
end
|
18
|
-
|
19
|
-
Rails::Generators::Base.new.generate "scaffold", results
|
20
|
-
|
21
|
-
puts "\n\n\e[32mMigrate the database?(y/n)\e[0m\n"
|
22
|
-
if STDIN.gets.chomp == "y"
|
23
|
-
Rake::Task["db:migrate"].invoke
|
24
|
-
|
25
|
-
puts "\n\n\e[32mImport the data from #{file}?(y/n)\e[0m\n"
|
26
|
-
if STDIN.gets.chomp == "y"
|
27
|
-
Scaffolding.import_data(file).each do |k,v|
|
28
|
-
puts "#{v} records #{k}"
|
29
|
-
end
|
9
|
+
def analyize_files
|
10
|
+
if file == "" || file.nil?
|
11
|
+
Dir[Rails.root.join('tmp/scaffolding/*')].each do |file|
|
12
|
+
Scaffolding.generate(file)
|
30
13
|
end
|
14
|
+
else
|
15
|
+
Scaffolding.generate(file)
|
31
16
|
end
|
32
17
|
end
|
33
18
|
|
data/lib/scaffolding.rb
CHANGED
@@ -1,15 +1,46 @@
|
|
1
1
|
require "scaffolding/version"
|
2
2
|
|
3
3
|
module Scaffolding
|
4
|
-
|
4
|
+
if defined?(Rails)
|
5
|
+
require 'scaffolding/railtie'
|
6
|
+
Dir.mkdir(Rails.root.join('tmp/scaffolding/*'))
|
7
|
+
end
|
5
8
|
|
6
9
|
def self.generate(file)
|
7
|
-
|
10
|
+
@file = file
|
11
|
+
results = Scaffolding::Parser::Csv.process(@file)
|
12
|
+
return if Scaffolding.errors(results)
|
13
|
+
Rails::Generators::Base.new.generate "scaffold", results
|
14
|
+
Scaffolding.import_data if Scaffolding.migrate_database
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.errors(results)
|
18
|
+
if results.kind_of?(Array)
|
19
|
+
results.each do |error|
|
20
|
+
puts "\e[31m#{error}\e[0m"
|
21
|
+
end
|
22
|
+
true
|
23
|
+
end
|
8
24
|
end
|
9
25
|
|
10
|
-
def self.
|
11
|
-
|
26
|
+
def self.migrate_database
|
27
|
+
puts "\n\n\e[32mMigrate the database?(y/n)\e[0m\n"
|
28
|
+
if STDIN.gets.chomp == "y"
|
29
|
+
Rake::Task["db:migrate"].invoke
|
30
|
+
else
|
31
|
+
false
|
32
|
+
end
|
12
33
|
end
|
34
|
+
|
35
|
+
def self.import_data
|
36
|
+
puts "\n\n\e[32mImport the data from #{@file}?(y/n)\e[0m\n"
|
37
|
+
if STDIN.gets.chomp == "y"
|
38
|
+
Scaffolding::Parser::Importer::CsvData.process(@file).each do |k,v|
|
39
|
+
puts "#{v} records #{k}"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
13
44
|
end
|
14
45
|
|
15
46
|
require 'scaffolding/parser/base'
|
@@ -17,12 +17,12 @@ module Scaffolding
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def valid_data?(file)
|
20
|
-
unless file == ""
|
20
|
+
unless file == "" || file.nil?
|
21
21
|
# if [".csv", ".xls", ".xlsx"].include? File.extname(file)
|
22
22
|
if File.extname(file) == ".csv"
|
23
23
|
File.read(utf8_encode(file))
|
24
24
|
else
|
25
|
-
@errors << "Unknown file type
|
25
|
+
@errors << "Unknown file type #{File.extname(file)} for #{file}"
|
26
26
|
false
|
27
27
|
end
|
28
28
|
else
|
@@ -45,10 +45,23 @@ module Scaffolding
|
|
45
45
|
seperators.max_by{|k,v| v}[0]
|
46
46
|
end
|
47
47
|
|
48
|
+
def process_row(row)
|
49
|
+
row.each do |column, data|
|
50
|
+
data_type = :string
|
51
|
+
data_type = :boolean if ["true", "false"].include?(data.to_s.downcase) rescue data_type
|
52
|
+
data_type = :date if Date.parse(Date.strptime(data, '%m/%d/%Y')) rescue data_type
|
53
|
+
data_type = :time if Time.parse(Time.strptime(data, '%H:%M:%S')) rescue data_type
|
54
|
+
data_type = :datetime if DateTime.parse(DateTime.strptime(data, '%m/%d/%Y %H:%M:%S')) rescue data_type
|
55
|
+
data_type = :integer if Integer(data) rescue data_type
|
56
|
+
data_type = :decimal if ((data.to_f - data.to_i).abs > 0.0) rescue data_type
|
57
|
+
@scaffolding[column.to_sym][data_type] += 1 unless data == ""
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
48
61
|
def self.process(file)
|
49
62
|
importer = self.new(file)
|
50
63
|
return importer.errors unless importer.errors.count == 0
|
51
|
-
importer.
|
64
|
+
importer.results
|
52
65
|
end
|
53
66
|
|
54
67
|
end
|
@@ -8,9 +8,14 @@ module Scaffolding
|
|
8
8
|
@row_number = 0
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
12
|
-
CSV.parse(data, headers: @headers, col_sep: col_seperator, skip_blanks: true) do |
|
13
|
-
|
11
|
+
def setup_columns
|
12
|
+
CSV.parse(@data, headers: @headers, col_sep: col_seperator, skip_blanks: true).first.each do |column|
|
13
|
+
@scaffolding[column[0].downcase.to_sym] = data_types
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def process_data
|
18
|
+
CSV.parse(@data, headers: @headers, col_sep: col_seperator, skip_blanks: true) do |row|
|
14
19
|
@row_number += 1
|
15
20
|
begin
|
16
21
|
process_row(row.inject({}){|row,(k,v)| row[k.downcase.to_sym] = v; row})
|
@@ -18,28 +23,6 @@ module Scaffolding
|
|
18
23
|
@errors << "Unable to process row #{@row_number} Error: #{e}\n"
|
19
24
|
end
|
20
25
|
end
|
21
|
-
return @errors unless @errors.count == 0
|
22
|
-
scaffold_rank
|
23
|
-
results
|
24
|
-
end
|
25
|
-
|
26
|
-
def setup_columns(columns)
|
27
|
-
columns.each do |column|
|
28
|
-
@scaffolding[column.downcase.to_sym] = data_types
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def process_row(row)
|
33
|
-
row.each do |column, data|
|
34
|
-
data_type = :string
|
35
|
-
data_type = :boolean if ["true", "false"].include?(data.to_s.downcase) rescue data_type
|
36
|
-
data_type = :date if Date.parse(data) rescue data_type
|
37
|
-
data_type = :time if Time.parse(data) rescue data_type
|
38
|
-
data_type = :datetime if DateTime.parse(data) rescue data_type
|
39
|
-
data_type = :integer if Integer(data) rescue data_type
|
40
|
-
data_type = :decimal if ((data.to_f - data.to_i).abs > 0.0) rescue data_type
|
41
|
-
@scaffolding[column.to_sym][data_type] += 1
|
42
|
-
end
|
43
26
|
end
|
44
27
|
|
45
28
|
def scaffold_rank
|
@@ -50,13 +33,17 @@ module Scaffolding
|
|
50
33
|
if @manual == "y"
|
51
34
|
puts "\n\e[32m#{scaffold}\e[0m is a \e[33m#{data_type}\e[0m? (y/string/integer/date ect)"
|
52
35
|
answer = STDIN.gets.chomp
|
53
|
-
data_type = answer unless answer == "y"
|
36
|
+
data_type = answer unless answer == "y" || answer == ""
|
54
37
|
end
|
55
38
|
@scaffolding[scaffold] = data_type
|
56
39
|
end
|
57
40
|
end
|
58
41
|
|
59
42
|
def results
|
43
|
+
setup_columns
|
44
|
+
process_data
|
45
|
+
return @errors unless @errors.count == 0
|
46
|
+
scaffold_rank
|
60
47
|
@scaffolding.each do |k, v|
|
61
48
|
@scaffold_builder << " #{k}:#{v}" unless k.to_s.downcase == "id"
|
62
49
|
end
|
data/lib/scaffolding/railtie.rb
CHANGED
File without changes
|
data/lib/scaffolding/version.rb
CHANGED
data/lib/tasks/generators.rake
CHANGED
File without changes
|
data/scaffolding.gemspec
CHANGED
File without changes
|
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.2.
|
4
|
+
version: 0.2.8
|
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-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -82,9 +82,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
82
|
version: '0'
|
83
83
|
requirements: []
|
84
84
|
rubyforge_project:
|
85
|
-
rubygems_version: 2.4.
|
85
|
+
rubygems_version: 2.4.7
|
86
86
|
signing_key:
|
87
87
|
specification_version: 4
|
88
88
|
summary: Generate a rails scaffold based on a CSV file.
|
89
89
|
test_files: []
|
90
|
-
has_rdoc:
|