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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 015002a5a2a74c904f082e2a86920896ac9d9512
4
- data.tar.gz: 328166889e9ec9d6b4c84e9be6e009dd40757635
3
+ metadata.gz: d4029ebf3a3e722d99ff153f3e3459b8d08755fb
4
+ data.tar.gz: cac7280590f98a488df5ce1ca965baf2754613e5
5
5
  SHA512:
6
- metadata.gz: b058669f4e0b664dcf10c5ae3f2b5047a362f026c65f3c72981670f8a4f8c3f53e62be5efb631bdf2e1ec4f526499aace4f2727b709eb8e5b2cfc047f90c9b06
7
- data.tar.gz: 3fe33d0c9410b972ccde9860322c474850d11bba2904abf78724f071cb39b58fd7c4e9d9c39b8660bd8d357db7661be8c07f32ca808ad73951670e325d4faa37
6
+ metadata.gz: b64924ac0ca17ae87729cf2d26fab34557848aaca18cb598f488fd422cca884083e9dc93d0ff29b8f6ca08d30b2c2b8166963b378be2945d171060f7a7b8a7e3
7
+ data.tar.gz: 4b8b7d234e236f12a2f8716f2c5277a95e21d77b8187e07a6720d0f70e9e3ecb3b77df3b2dbf5e25cb795d497d269e997ffbf718dfadf935fd56510ceda98d41
data/Gemfile CHANGED
@@ -2,3 +2,4 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in scaffolding.gemspec
4
4
  gemspec
5
+ gem 'roo'
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 stack
22
- beginning_time = Time.now
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
@@ -27,7 +27,6 @@ module Scaffolding
27
27
  name.to_s.downcase.split.join.camelize.strip.singularize
28
28
  end
29
29
 
30
-
31
30
  def valid_data?
32
31
  if @source == "" || @source.nil?
33
32
  @errors << "No source selected"
@@ -1,3 +1,3 @@
1
1
  module Scaffolding
2
- VERSION = "0.3.5"
2
+ VERSION = "0.3.6"
3
3
  end
@@ -6,9 +6,43 @@ namespace :scaffolding do
6
6
  Dir.mkdir(File.join(Rails.root, 'tmp/scaffolding'))
7
7
  end
8
8
 
9
- # desc "Setup a production enviornemnt to import data from the files."
10
- # task :production do |t|
11
- # Dir.mkdir(File.join(Rails.root, 'tmp/scaffolding'))
12
- # end
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.5
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-09 00:00:00.000000000 Z
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: []