scaffolding 0.3.5 → 0.3.6
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/Gemfile +1 -0
- data/README.md +16 -0
- data/lib/generators/scaffolding_generator.rb +2 -3
- data/lib/scaffolding.rb +27 -16
- data/lib/scaffolding/parser/base.rb +0 -1
- data/lib/scaffolding/version.rb +1 -1
- data/lib/tasks/generators.rake +38 -4
- data/scaffolding.gemspec +1 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d4029ebf3a3e722d99ff153f3e3459b8d08755fb
|
4
|
+
data.tar.gz: cac7280590f98a488df5ce1ca965baf2754613e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b64924ac0ca17ae87729cf2d26fab34557848aaca18cb598f488fd422cca884083e9dc93d0ff29b8f6ca08d30b2c2b8166963b378be2945d171060f7a7b8a7e3
|
7
|
+
data.tar.gz: 4b8b7d234e236f12a2f8716f2c5277a95e21d77b8187e07a6720d0f70e9e3ecb3b77df3b2dbf5e25cb795d497d269e997ffbf718dfadf935fd56510ceda98d41
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -66,6 +66,22 @@ Example:
|
|
66
66
|
|
67
67
|
$ rails g scaffolding --auto --migrate --import
|
68
68
|
|
69
|
+
#### Import file uploads
|
70
|
+
|
71
|
+
To import data from a file uploaded through the web browser:
|
72
|
+
|
73
|
+
$ rake scaffolding:production
|
74
|
+
|
75
|
+
$ rails s
|
76
|
+
|
77
|
+
Then go to http://localhost:3000/scaffolding/new
|
78
|
+
|
79
|
+
And upload the file you wish to import.
|
80
|
+
|
81
|
+
##### Hot Tips:
|
82
|
+
* The file must be named after the Model.
|
83
|
+
* If the files are rather large use the activerecord-session_store gem: https://github.com/rails/activerecord-session_store
|
84
|
+
|
69
85
|
## Development
|
70
86
|
|
71
87
|
After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'rails/generators'
|
2
1
|
require 'rake'
|
3
2
|
Rails.application.load_tasks
|
4
3
|
require 'scaffolding'
|
@@ -18,10 +17,10 @@ class ScaffoldingGenerator < Rails::Generators::Base
|
|
18
17
|
|
19
18
|
if source == "" || source.nil?
|
20
19
|
Dir[Rails.root.join('tmp/scaffolding/*')].each do |source|
|
21
|
-
Scaffolding::Build.new(source, name, @auto, @migrate, @import).stack
|
20
|
+
Scaffolding::Build.new(source, name, @auto, @migrate, @import).time("stack")
|
22
21
|
end
|
23
22
|
else
|
24
|
-
Scaffolding::Build.new(source, name, @auto, @migrate, @import).stack
|
23
|
+
Scaffolding::Build.new(source, name, @auto, @migrate, @import).time("stack")
|
25
24
|
end
|
26
25
|
end
|
27
26
|
|
data/lib/scaffolding.rb
CHANGED
@@ -2,33 +2,23 @@ require "scaffolding/version"
|
|
2
2
|
|
3
3
|
module Scaffolding
|
4
4
|
require 'scaffolding/railtie' if defined?(Rails)
|
5
|
+
require 'rails/generators'
|
5
6
|
class Build
|
6
7
|
require 'uri'
|
7
8
|
|
8
9
|
def initialize(source, name, auto, migrate, import)
|
9
|
-
@source = source
|
10
|
-
@name = name
|
11
|
-
@auto = auto
|
12
|
-
@migrate = migrate
|
13
|
-
@import = import
|
10
|
+
@source, @name, @auto, @migrate, @import = source, name, auto, migrate, import
|
14
11
|
@uri = uri?
|
12
|
+
upload?
|
13
|
+
@parser = parser
|
15
14
|
end
|
16
15
|
|
17
16
|
def uri?
|
18
17
|
@source =~ URI::regexp
|
19
18
|
end
|
20
19
|
|
21
|
-
def
|
22
|
-
|
23
|
-
|
24
|
-
@parser = parser
|
25
|
-
@results = @parser.results
|
26
|
-
return if errors
|
27
|
-
generate
|
28
|
-
import_data if migrate_database
|
29
|
-
|
30
|
-
end_time = Time.now
|
31
|
-
puts "#{@parser.source_name} processed in #{(end_time - beginning_time).round(2)} seconds\n\n"
|
20
|
+
def upload?
|
21
|
+
@source = @source.path if @source.class == ActionDispatch::Http::UploadedFile
|
32
22
|
end
|
33
23
|
|
34
24
|
def parser
|
@@ -43,6 +33,20 @@ module Scaffolding
|
|
43
33
|
end
|
44
34
|
end
|
45
35
|
|
36
|
+
def time(method)
|
37
|
+
beginning_time = Time.now
|
38
|
+
self.send(method)
|
39
|
+
end_time = Time.now
|
40
|
+
puts "#{@parser.source_name} processed in #{(end_time - beginning_time).round(2)} seconds\n\n"
|
41
|
+
end
|
42
|
+
|
43
|
+
def stack
|
44
|
+
@results = @parser.results
|
45
|
+
return if errors
|
46
|
+
generate
|
47
|
+
import_data if migrate_database
|
48
|
+
end
|
49
|
+
|
46
50
|
def generate
|
47
51
|
Rails::Generators::Base.new.generate "scaffold", @results
|
48
52
|
end
|
@@ -81,6 +85,13 @@ module Scaffolding
|
|
81
85
|
puts "\e[31m#{@results[:failed]}\e[0m records failed"
|
82
86
|
end
|
83
87
|
end
|
88
|
+
|
89
|
+
def import_browser_data
|
90
|
+
@parser.groom_data
|
91
|
+
@results = @parser.import_data
|
92
|
+
return if errors
|
93
|
+
{saved: @results[:saved], failed: @results[:failed]}
|
94
|
+
end
|
84
95
|
end
|
85
96
|
|
86
97
|
end
|
data/lib/scaffolding/version.rb
CHANGED
data/lib/tasks/generators.rake
CHANGED
@@ -6,9 +6,43 @@ namespace :scaffolding do
|
|
6
6
|
Dir.mkdir(File.join(Rails.root, 'tmp/scaffolding'))
|
7
7
|
end
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
desc "Setup a production enviornemnt to import data from the files."
|
10
|
+
task :production do |t|
|
11
|
+
generators = Rails::Generators::Base.new
|
12
|
+
generators.generate "controller", "scaffolding new --skip --skip-routes"
|
13
|
+
generators.route "get 'scaffolding/new'"
|
14
|
+
generators.route "post 'scaffolding/import'"
|
15
|
+
|
16
|
+
File.open(File.join(Rails.root, "app/views/scaffolding/new.html.erb"), 'w') {|f| f.write(
|
17
|
+
"<div class='authform'>
|
18
|
+
<%= form_tag scaffolding_import_path, multipart: true do %>
|
19
|
+
<%= file_field_tag :file %>
|
20
|
+
<br>
|
21
|
+
<%= submit_tag 'Import', class: 'button-xs' %>
|
22
|
+
<% end %>
|
23
|
+
</div>"
|
24
|
+
) }
|
25
|
+
|
26
|
+
File.open(File.join(Rails.root, "app/controllers/scaffolding_controller.rb"), 'w') {|f| f.write(
|
27
|
+
"class ScaffoldingController < ApplicationController
|
28
|
+
|
29
|
+
def new
|
30
|
+
end
|
31
|
+
|
32
|
+
def import
|
33
|
+
name = params[:file].original_filename.to_s.downcase.gsub(File.extname(params[:file].path), '')
|
34
|
+
results = Scaffolding::Build.new(params[:file], name.singularize, true, false, true).import_browser_data
|
35
|
+
if results.kind_of?(Array)
|
36
|
+
flash[:alert] = results
|
37
|
+
else
|
38
|
+
flash[:notice] = \"\#{results[:saved]} records saved, \#{results[:failed]} results failed.\"
|
39
|
+
end
|
40
|
+
redirect_to '/' + (name.ends_with?('s') ? name : name.pluralize)
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
"
|
45
|
+
) }
|
46
|
+
end
|
13
47
|
|
14
48
|
end
|
data/scaffolding.gemspec
CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["Jordan-deJong"]
|
10
10
|
spec.email = ["jordan.dejong@me.com"]
|
11
11
|
|
12
|
-
spec.summary = %q{Generate a rails scaffold based on a CSV file.}
|
12
|
+
spec.summary = %q{Generate a rails scaffold based on a .CSV, .dat or .txt file.}
|
13
13
|
spec.homepage = "https://github.com/Jordan-deJong/scaffolding"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
@@ -20,5 +20,4 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.10"
|
22
22
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
-
|
24
23
|
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.6
|
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-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -86,5 +86,5 @@ rubyforge_project:
|
|
86
86
|
rubygems_version: 2.4.7
|
87
87
|
signing_key:
|
88
88
|
specification_version: 4
|
89
|
-
summary: Generate a rails scaffold based on a CSV file.
|
89
|
+
summary: Generate a rails scaffold based on a .CSV, .dat or .txt file.
|
90
90
|
test_files: []
|