effective_developer 0.0.7 → 0.0.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/README.md +18 -3
- data/app/scaffolds/controllers/controller.rb +13 -0
- data/app/scaffolds/datatables/datatable.rb +14 -0
- data/app/scaffolds/models/model.rb +15 -0
- data/app/scaffolds/views/_form.html.haml +15 -0
- data/app/scaffolds/views/edit.html.haml +7 -0
- data/app/scaffolds/views/index.html.haml +25 -0
- data/app/scaffolds/views/new.html.haml +5 -0
- data/app/scaffolds/views/show.html.haml +11 -0
- data/config/effective_developer.rb +0 -2
- data/lib/effective_developer.rb +1 -0
- data/lib/effective_developer/version.rb +1 -1
- data/lib/generators/effective/controller_generator.rb +35 -0
- data/lib/generators/effective/datatable_generator.rb +20 -0
- data/lib/generators/effective/helpers.rb +31 -0
- data/lib/generators/effective/migration_generator.rb +20 -0
- data/lib/generators/effective/model_generator.rb +20 -0
- data/lib/generators/effective/route_generator.rb +20 -0
- data/lib/generators/effective/scaffold_generator.rb +85 -0
- data/lib/generators/effective/view_generator.rb +40 -0
- data/lib/generators/effective_developer/csv_importer.rb.erb +1 -0
- data/lib/tasks/effective_csv_importer.rake +1 -1
- data/lib/tasks/pg_pull.rake +5 -5
- data/lib/tasks/validate.rake +30 -0
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f8689f1bc4992384e17f61c4d8c65dc4c9eff7d8
|
4
|
+
data.tar.gz: a0f2a455a5bf32d0284deebbd5761ec246e146e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 10cc81aa4428dc08fe8c2f94e9e63702d8ee95e7316b3f4ff9a6dd7cffd06a407e6e22f95233b4f292e2e02dc893fa84f1e2c515627741abcb481961c7cde5dc
|
7
|
+
data.tar.gz: 0c6397219c15e4256b563d251c0d53bdb3ce20b1977ebeb719cd67bce70c0b5f99e718431c0aadb6e594d8be60d30a0b102d05509ec60e3a9ff82a27fdd638da
|
data/README.md
CHANGED
@@ -208,12 +208,27 @@ end
|
|
208
208
|
|
209
209
|
Override `before_import()` or `after_import()` to run code before or after the import.
|
210
210
|
|
211
|
-
|
211
|
+
# Scaffolding
|
212
|
+
|
213
|
+
Scaffolding is the fastest way to build a rails app. Take advantage of scaffolding.
|
214
|
+
|
215
|
+
|
216
|
+
```ruby
|
217
|
+
rails generate scaffold product name:string # active_record, test_unit, resource_route, scaffold_controller, haml, test_unit, helper, assets
|
218
|
+
rails generate scaffold_controller product # haml, test_unit, helper,
|
219
|
+
rails generate model product # active_record, test_unit
|
220
|
+
rails generate active_record:model product # test_unit
|
221
|
+
rails generate resource_route product
|
222
|
+
rails generate test_unit:model product
|
223
|
+
rails generate mailer product
|
224
|
+
rails generate job product
|
225
|
+
```
|
212
226
|
|
213
|
-
MIT License. Copyright [Code and Effect Inc.](http://www.codeandeffect.com/)
|
214
227
|
|
215
|
-
Code and Effect is the product arm of [AgileStyle](http://www.agilestyle.com/), an Edmonton-based shop that specializes in building custom web applications with Ruby on Rails.
|
216
228
|
|
229
|
+
## License
|
230
|
+
|
231
|
+
MIT License. Copyright [Code and Effect Inc.](http://www.codeandeffect.com/)
|
217
232
|
|
218
233
|
## Contributing
|
219
234
|
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<% if namespaced? -%>
|
2
|
+
require_dependency "<%= namespaced_path %>/application_controller"
|
3
|
+
|
4
|
+
<% end -%>
|
5
|
+
<% module_namespacing do -%>
|
6
|
+
class <%= class_name %>Controller < ApplicationController
|
7
|
+
<% actions.each do |action| -%>
|
8
|
+
def <%= action %>
|
9
|
+
end
|
10
|
+
<%= "\n" unless action == actions.last -%>
|
11
|
+
<% end -%>
|
12
|
+
end
|
13
|
+
<% end -%>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<% module_namespacing do -%>
|
2
|
+
class <%= class_name %> < <%= parent_class_name.classify %>
|
3
|
+
<% attributes.select(&:reference?).each do |attribute| -%>
|
4
|
+
belongs_to :<%= attribute.name %><%= ', polymorphic: true' if attribute.polymorphic? %><%= ', required: true' if attribute.required? %>
|
5
|
+
<% end -%>
|
6
|
+
<% attributes.select(&:token?).each do |attribute| -%>
|
7
|
+
has_secure_token<% if attribute.name != "token" %> :<%= attribute.name %><% end %>
|
8
|
+
<% end -%>
|
9
|
+
<% if attributes.any?(&:password_digest?) -%>
|
10
|
+
has_secure_password
|
11
|
+
<% end -%>
|
12
|
+
end
|
13
|
+
<% end -%>
|
14
|
+
|
15
|
+
MINE
|
@@ -0,0 +1,15 @@
|
|
1
|
+
= form_for @<%= singular_table_name %> do |f|
|
2
|
+
- if @<%= singular_table_name %>.errors.any?
|
3
|
+
#error_explanation
|
4
|
+
%h2= "#{pluralize(@<%= singular_table_name %>.errors.count, "error")} prohibited this <%= singular_table_name %> from being saved:"
|
5
|
+
%ul
|
6
|
+
- @<%= singular_table_name %>.errors.full_messages.each do |msg|
|
7
|
+
%li= msg
|
8
|
+
|
9
|
+
<% for attribute in attributes -%>
|
10
|
+
.field
|
11
|
+
= f.label :<%= attribute.name %>
|
12
|
+
= f.<%= attribute.field_type %> :<%= attribute.name %>
|
13
|
+
<% end -%>
|
14
|
+
.actions
|
15
|
+
= f.submit 'Save'
|
@@ -0,0 +1,25 @@
|
|
1
|
+
%h1 Listing <%= plural_table_name %>
|
2
|
+
|
3
|
+
%table
|
4
|
+
%thead
|
5
|
+
%tr
|
6
|
+
<% for attribute in attributes -%>
|
7
|
+
%th <%= attribute.human_name %>
|
8
|
+
<% end -%>
|
9
|
+
%th
|
10
|
+
%th
|
11
|
+
%th
|
12
|
+
|
13
|
+
%tbody
|
14
|
+
- @<%= plural_table_name %>.each do |<%= singular_table_name %>|
|
15
|
+
%tr
|
16
|
+
<% for attribute in attributes -%>
|
17
|
+
%td= <%= singular_table_name %>.<%= attribute.name %>
|
18
|
+
<% end -%>
|
19
|
+
%td= link_to 'Show', <%= singular_table_name %>
|
20
|
+
%td= link_to 'Edit', edit_<%= singular_table_name %>_path(<%= singular_table_name %>)
|
21
|
+
%td= link_to 'Destroy', <%= singular_table_name %>, method: :delete, data: { confirm: 'Are you sure?' }
|
22
|
+
|
23
|
+
%br
|
24
|
+
|
25
|
+
= link_to 'New <%= human_name %>', new_<%= singular_table_name %>_path
|
@@ -0,0 +1,11 @@
|
|
1
|
+
%p#notice= notice
|
2
|
+
|
3
|
+
<% for attribute in attributes -%>
|
4
|
+
%p
|
5
|
+
%b <%= attribute.human_name %>:
|
6
|
+
= @<%= singular_table_name %>.<%= attribute.name %>
|
7
|
+
<% end -%>
|
8
|
+
|
9
|
+
= link_to 'Edit', edit_<%= singular_table_name %>_path(@<%= singular_table_name %>)
|
10
|
+
\|
|
11
|
+
= link_to 'Back', <%= index_helper %>_path
|
data/lib/effective_developer.rb
CHANGED
@@ -0,0 +1,35 @@
|
|
1
|
+
# rails generate effective:controller NAME [action action] [options]
|
2
|
+
|
3
|
+
module Effective
|
4
|
+
module Generators
|
5
|
+
class ControllerGenerator < Rails::Generators::NamedBase
|
6
|
+
include Helpers
|
7
|
+
|
8
|
+
source_root File.expand_path(('../' * 4) + 'app/scaffolds', __FILE__)
|
9
|
+
|
10
|
+
desc 'Creates a controller in your app/controllers folder.'
|
11
|
+
|
12
|
+
argument :actions, type: :array, default: ['crud'], banner: 'action action'
|
13
|
+
class_option :attributes, type: :array, default: [], desc: 'Included permitted params, otherwise read from model'
|
14
|
+
|
15
|
+
attr_accessor :attributes
|
16
|
+
|
17
|
+
def initialize(args, *options)
|
18
|
+
if options.kind_of?(Array) && options.second.kind_of?(Hash)
|
19
|
+
self.attributes = options.second.delete(:attributes)
|
20
|
+
end
|
21
|
+
|
22
|
+
super
|
23
|
+
end
|
24
|
+
|
25
|
+
def assign_actions
|
26
|
+
@actions = invoked_actions
|
27
|
+
end
|
28
|
+
|
29
|
+
def create_controller
|
30
|
+
template 'controllers/controller.rb', File.join('app/controllers', class_path, "#{file_name}_controller.rb")
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# rails generate effective:datatable NAME [field[:type] field[:type]] [options]
|
2
|
+
|
3
|
+
module Effective
|
4
|
+
module Generators
|
5
|
+
class DatatableGenerator < Rails::Generators::NamedBase
|
6
|
+
include Helpers
|
7
|
+
|
8
|
+
source_root File.expand_path(('../' * 4) + 'app/scaffolds', __FILE__)
|
9
|
+
|
10
|
+
desc 'Creates an Effective::Datatable in your app/effective/datatables folder.'
|
11
|
+
|
12
|
+
argument :attributes, type: :array, default: [], banner: 'field[:type] field[:type]'
|
13
|
+
|
14
|
+
def create_datatable
|
15
|
+
template 'datatables/datatable.rb', File.join('app/models/effective/datatables', class_path, "#{file_name}.rb")
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Effective
|
2
|
+
module Generators
|
3
|
+
module Helpers
|
4
|
+
|
5
|
+
protected
|
6
|
+
|
7
|
+
def invoked_attributes
|
8
|
+
_attributes = (respond_to?(:attributes) ? attributes : Array(options.attributes).compact)
|
9
|
+
_attributes.map { |att| "#{att.name}:#{att.type}" }
|
10
|
+
end
|
11
|
+
|
12
|
+
def invoked_actions
|
13
|
+
_actions = (respond_to?(:actions) ? actions : options.actions)
|
14
|
+
_actions = Array(_actions).flat_map { |arg| arg.gsub('[', '').gsub(']', '').split(',') }
|
15
|
+
|
16
|
+
case _actions
|
17
|
+
when ['crud']
|
18
|
+
%w(index new create show edit update destroy)
|
19
|
+
else
|
20
|
+
_actions
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Used by model and datatable
|
25
|
+
def parent_class_name
|
26
|
+
options[:parent] || 'ApplicationRecord'
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# rails generate effective:migration NAME [field[:type] field[:type]] [options]
|
2
|
+
|
3
|
+
module Effective
|
4
|
+
module Generators
|
5
|
+
class MigrationGenerator < Rails::Generators::NamedBase
|
6
|
+
include Helpers
|
7
|
+
|
8
|
+
source_root File.expand_path(('../' * 4) + 'app/scaffolds', __FILE__)
|
9
|
+
|
10
|
+
desc 'Creates a migration.'
|
11
|
+
|
12
|
+
argument :attributes, type: :array, default: [], banner: 'field[:type] field[:type]'
|
13
|
+
|
14
|
+
def create_migration
|
15
|
+
Rails::Generators.invoke('migration', ["create_#{file_name.pluralize}"] + invoked_attributes)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# rails generate effective:model NAME [field[:type] field[:type]] [options]
|
2
|
+
|
3
|
+
module Effective
|
4
|
+
module Generators
|
5
|
+
class ModelGenerator < Rails::Generators::NamedBase
|
6
|
+
include Helpers
|
7
|
+
|
8
|
+
source_root File.expand_path(('../' * 4) + 'app/scaffolds', __FILE__)
|
9
|
+
|
10
|
+
desc 'Creates a model in your app/models folder.'
|
11
|
+
|
12
|
+
argument :attributes, type: :array, default: [], banner: 'field[:type] field[:type]'
|
13
|
+
|
14
|
+
def create_model
|
15
|
+
template 'models/model.rb', File.join('app/models', class_path, "#{file_name}.rb")
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# rails generate effective:route NAME [action action] [options]
|
2
|
+
|
3
|
+
module Effective
|
4
|
+
module Generators
|
5
|
+
class RouteGenerator < Rails::Generators::NamedBase
|
6
|
+
include Helpers
|
7
|
+
|
8
|
+
source_root File.expand_path(('../' * 4) + 'app/scaffolds', __FILE__)
|
9
|
+
|
10
|
+
desc 'Creates a route.'
|
11
|
+
|
12
|
+
argument :actions, type: :array, default: ['crud'], banner: 'action action'
|
13
|
+
|
14
|
+
def create_route
|
15
|
+
Rails::Generators.invoke('resource_route', [name])
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# rails generate effective:scaffold NAME [field[:type] field[:type]] [options]
|
2
|
+
|
3
|
+
# rails generate effective:scaffold Thing
|
4
|
+
# rails generate effective:scaffold admin/thing name:string details:text --actions index show edit update
|
5
|
+
# rails generate effective:scaffold admin/thing name:string details:text
|
6
|
+
|
7
|
+
module Effective
|
8
|
+
module Generators
|
9
|
+
class ScaffoldGenerator < Rails::Generators::NamedBase
|
10
|
+
include Helpers
|
11
|
+
|
12
|
+
source_root File.expand_path(('../' * 4) + 'app/scaffolds', __FILE__)
|
13
|
+
|
14
|
+
desc 'Creates an Effective Scaffold'
|
15
|
+
|
16
|
+
argument :attributes, type: :array, default: [], banner: 'field[:type] field[:type]'
|
17
|
+
class_option :actions, type: :array, default: ['crud'], desc: 'Included actions', banner: 'index show'
|
18
|
+
|
19
|
+
def create_migration
|
20
|
+
Rails::Generators.invoke('effective:migration', [name] + invoked_attributes)
|
21
|
+
end
|
22
|
+
|
23
|
+
def create_model
|
24
|
+
Rails::Generators.invoke('effective:model', [name] + invoked_attributes)
|
25
|
+
end
|
26
|
+
|
27
|
+
def create_datatable
|
28
|
+
Rails::Generators.invoke('effective:datatable', [name] + invoked_attributes)
|
29
|
+
end
|
30
|
+
|
31
|
+
def create_routes
|
32
|
+
Rails::Generators.invoke('effective:route', [name] + invoked_actions)
|
33
|
+
end
|
34
|
+
|
35
|
+
def create_controller
|
36
|
+
Rails::Generators.invoke('effective:controller', [name] + invoked_actions, attributes: invoked_attributes)
|
37
|
+
end
|
38
|
+
|
39
|
+
def create_views
|
40
|
+
Rails::Generators.invoke('effective:view', [name] + invoked_actions, attributes: invoked_attributes)
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# class_name
|
48
|
+
# class_path
|
49
|
+
# file_path
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
# require "rails/generators/rails/resource/resource_generator"
|
54
|
+
|
55
|
+
# module Effective
|
56
|
+
# module Generators
|
57
|
+
# class ScaffoldGenerator < ResourceGenerator # :nodoc:
|
58
|
+
# remove_hook_for :resource_controller
|
59
|
+
# remove_class_option :actions
|
60
|
+
|
61
|
+
# class_option :stylesheets, type: :boolean, desc: "Generate Stylesheets"
|
62
|
+
# class_option :stylesheet_engine, desc: "Engine for Stylesheets"
|
63
|
+
# class_option :assets, type: :boolean
|
64
|
+
# class_option :resource_route, type: :boolean
|
65
|
+
# class_option :scaffold_stylesheet, type: :boolean
|
66
|
+
|
67
|
+
# def handle_skip
|
68
|
+
# @options = @options.merge(stylesheets: false) unless options[:assets]
|
69
|
+
# @options = @options.merge(stylesheet_engine: false) unless options[:stylesheets] && options[:scaffold_stylesheet]
|
70
|
+
# end
|
71
|
+
|
72
|
+
# hook_for :scaffold_controller, required: true
|
73
|
+
|
74
|
+
# hook_for :assets do |assets|
|
75
|
+
# invoke assets, [controller_name]
|
76
|
+
# end
|
77
|
+
|
78
|
+
# hook_for :stylesheet_engine do |stylesheet_engine|
|
79
|
+
# if behavior == :invoke
|
80
|
+
# invoke stylesheet_engine, [controller_name]
|
81
|
+
# end
|
82
|
+
# end
|
83
|
+
# end
|
84
|
+
# end
|
85
|
+
# end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# rails generate effective:view NAME [index show] [options]
|
2
|
+
|
3
|
+
module Effective
|
4
|
+
module Generators
|
5
|
+
class ViewGenerator < Rails::Generators::NamedBase
|
6
|
+
include Helpers
|
7
|
+
source_root File.expand_path(('../' * 4) + 'app/scaffolds', __FILE__)
|
8
|
+
|
9
|
+
desc 'Creates one or more views in your app/views folder.'
|
10
|
+
|
11
|
+
argument :actions, type: :array, default: ['crud'], banner: 'index show'
|
12
|
+
class_option :attributes, type: :array, default: [], desc: 'Included form attributes, otherwise read from model'
|
13
|
+
|
14
|
+
attr_accessor :attributes
|
15
|
+
|
16
|
+
def initialize(args, *options)
|
17
|
+
if options.kind_of?(Array) && options.second.kind_of?(Hash)
|
18
|
+
self.attributes = options.second.delete(:attributes)
|
19
|
+
end
|
20
|
+
|
21
|
+
super
|
22
|
+
end
|
23
|
+
|
24
|
+
def create_views
|
25
|
+
(invoked_actions & available_actions).each do |action|
|
26
|
+
filename = "#{action}.html.haml"
|
27
|
+
|
28
|
+
template "views/#{filename}", File.join('app/views', file_path, filename)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
protected
|
33
|
+
|
34
|
+
def available_actions
|
35
|
+
%w(index new show edit)
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -84,7 +84,7 @@ namespace :csv do
|
|
84
84
|
path = Rails.root.to_s + '/tmp/csv_exports/'
|
85
85
|
FileUtils.mkdir_p(path) unless File.directory?(path)
|
86
86
|
|
87
|
-
(ActiveRecord::Base.connection.tables - ['schema_migrations']).each do |table|
|
87
|
+
(ActiveRecord::Base.connection.tables - ['schema_migrations', 'ar_internal_metadata']).each do |table|
|
88
88
|
records = ActiveRecord::Base.connection.exec_query("SELECT * FROM #{table} ORDER BY id")
|
89
89
|
|
90
90
|
CSV.open(path + "#{table}.csv", 'wb') do |csv|
|
data/lib/tasks/pg_pull.rake
CHANGED
@@ -10,12 +10,12 @@ namespace :pg do
|
|
10
10
|
puts "=== Pulling remote '#{args.remote}' database into latest.dump"
|
11
11
|
|
12
12
|
Bundler.with_clean_env do
|
13
|
-
unless system("heroku pg:backups
|
13
|
+
unless system("heroku pg:backups:capture --remote #{args.remote}")
|
14
14
|
puts "Error capturing heroku backup"
|
15
15
|
exit
|
16
16
|
end
|
17
17
|
|
18
|
-
if system("curl -o latest.dump `heroku pg:backups
|
18
|
+
if system("curl -o latest.dump `heroku pg:backups:public-url --remote #{args.remote}`")
|
19
19
|
puts "Downloading database completed"
|
20
20
|
else
|
21
21
|
puts "Error downloading database"
|
@@ -71,19 +71,19 @@ namespace :pg do
|
|
71
71
|
puts "=== Cloning remote '#{args.source_remote}' to '#{args.target_remote}'"
|
72
72
|
|
73
73
|
Bundler.with_clean_env do
|
74
|
-
unless system("heroku pg:backups
|
74
|
+
unless system("heroku pg:backups:capture --remote #{args.source_remote}")
|
75
75
|
puts "Error capturing heroku backup"
|
76
76
|
exit
|
77
77
|
end
|
78
78
|
|
79
|
-
url = (`heroku pg:backups
|
79
|
+
url = (`heroku pg:backups:public-url --remote #{args.source_remote}`).chomp
|
80
80
|
|
81
81
|
unless (url || '').length > 0
|
82
82
|
puts "Error reading public-url from remote #{args.source_remote}"
|
83
83
|
exit
|
84
84
|
end
|
85
85
|
|
86
|
-
unless system("heroku pg:backups
|
86
|
+
unless system("heroku pg:backups:restore '#{url}' DATABASE_URL --remote #{args.target_remote}")
|
87
87
|
puts "Error cloning heroku backup"
|
88
88
|
exit
|
89
89
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# bundle exec rake validate
|
2
|
+
# bundle exec rake validate[user]
|
3
|
+
|
4
|
+
desc 'Validates all records of the given ActiveRecord model, defaults to all'
|
5
|
+
task :validate, [:model] => :environment do |t, args|
|
6
|
+
args.with_defaults(:model => 'all')
|
7
|
+
|
8
|
+
Rails.application.eager_load!
|
9
|
+
klasses = ActiveRecord::Base.descendants.sort { |a, b| a.name <=> b.name }
|
10
|
+
|
11
|
+
if args.model != 'all'
|
12
|
+
klasses.delete_if { |klass| klass.name.downcase != args.model.singularize.downcase }
|
13
|
+
end
|
14
|
+
|
15
|
+
klasses.each do |klass|
|
16
|
+
invalids = klass.unscoped.order(:id).map do |resource|
|
17
|
+
[resource.id, '(' + resource.errors.map { |key, value| "#{key}: #{value}"}.join(', ') + ')'] unless resource.valid?
|
18
|
+
end.compact
|
19
|
+
|
20
|
+
if invalids.present?
|
21
|
+
puts "#{klass.name}: #{invalids.length} invalid records"
|
22
|
+
invalids.each { |invalid| puts invalid.join(' ') }
|
23
|
+
puts "Invalid #{klass.name} records: #{invalids.map { |invalid| invalid.first }.join(',')}"
|
24
|
+
else
|
25
|
+
puts "#{klass.name}: all records valid"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: effective_developer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Code and Effect
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -36,15 +36,32 @@ files:
|
|
36
36
|
- Rakefile
|
37
37
|
- app/models/effective/access_denied.rb
|
38
38
|
- app/models/effective/csv_importer.rb
|
39
|
+
- app/scaffolds/controllers/controller.rb
|
40
|
+
- app/scaffolds/datatables/datatable.rb
|
41
|
+
- app/scaffolds/models/model.rb
|
42
|
+
- app/scaffolds/views/_form.html.haml
|
43
|
+
- app/scaffolds/views/edit.html.haml
|
44
|
+
- app/scaffolds/views/index.html.haml
|
45
|
+
- app/scaffolds/views/new.html.haml
|
46
|
+
- app/scaffolds/views/show.html.haml
|
39
47
|
- config/effective_developer.rb
|
40
48
|
- lib/effective_developer.rb
|
41
49
|
- lib/effective_developer/engine.rb
|
42
50
|
- lib/effective_developer/version.rb
|
51
|
+
- lib/generators/effective/controller_generator.rb
|
52
|
+
- lib/generators/effective/datatable_generator.rb
|
53
|
+
- lib/generators/effective/helpers.rb
|
54
|
+
- lib/generators/effective/migration_generator.rb
|
55
|
+
- lib/generators/effective/model_generator.rb
|
56
|
+
- lib/generators/effective/route_generator.rb
|
57
|
+
- lib/generators/effective/scaffold_generator.rb
|
58
|
+
- lib/generators/effective/view_generator.rb
|
43
59
|
- lib/generators/effective_developer/csv_importer.rb.erb
|
44
60
|
- lib/generators/effective_developer/install_generator.rb
|
45
61
|
- lib/tasks/effective_csv_importer.rake
|
46
62
|
- lib/tasks/pg_pull.rake
|
47
63
|
- lib/tasks/reset_pk_sequence.rake
|
64
|
+
- lib/tasks/validate.rake
|
48
65
|
homepage: https://github.com/code-and-effect/effective_developer
|
49
66
|
licenses:
|
50
67
|
- MIT
|