lazy-head-gen 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +0 -2
- data/README.md +10 -2
- data/VERSION +1 -1
- data/lazy-head-gen.gemspec +43 -10
- data/lib/lazy-head-gen.rb +1 -1
- data/lib/lazy-head-gen/admin_controller_test.rb +2 -1
- data/lib/lazy-head-gen/bootstrapped_admin_app.rb +121 -0
- data/lib/lazy-head-gen/bootstrapped_admin_page.rb +58 -0
- data/lib/lazy-head-gen/scaffold.rb +8 -7
- data/lib/lazy-head-gen/templates/admin_app/account/activerecord.rb.tt +38 -0
- data/lib/lazy-head-gen/templates/admin_app/account/seeds.rb.tt +28 -0
- data/lib/lazy-head-gen/templates/admin_app/app.rb.tt +36 -0
- data/lib/lazy-head-gen/templates/admin_app/app/controllers/base.rb +6 -0
- data/lib/lazy-head-gen/templates/admin_app/app/controllers/sessions.rb.tt +26 -0
- data/lib/lazy-head-gen/templates/admin_app/assets/css/bootstrap-responsive.css +815 -0
- data/lib/lazy-head-gen/templates/admin_app/assets/css/bootstrap-responsive.min.css +9 -0
- data/lib/lazy-head-gen/templates/admin_app/assets/css/bootstrap.css +4983 -0
- data/lib/lazy-head-gen/templates/admin_app/assets/css/bootstrap.min.css +9 -0
- data/lib/lazy-head-gen/templates/admin_app/assets/ico/apple-touch-icon-114-precomposed.png +0 -0
- data/lib/lazy-head-gen/templates/admin_app/assets/ico/apple-touch-icon-144-precomposed.png +0 -0
- data/lib/lazy-head-gen/templates/admin_app/assets/ico/apple-touch-icon-57-precomposed.png +0 -0
- data/lib/lazy-head-gen/templates/admin_app/assets/ico/apple-touch-icon-72-precomposed.png +0 -0
- data/lib/lazy-head-gen/templates/admin_app/assets/ico/favicon.ico +0 -0
- data/lib/lazy-head-gen/templates/admin_app/assets/img/glyphicons-halflings-white.png +0 -0
- data/lib/lazy-head-gen/templates/admin_app/assets/img/glyphicons-halflings.png +0 -0
- data/lib/lazy-head-gen/templates/admin_app/assets/js/bootstrap.js +1825 -0
- data/lib/lazy-head-gen/templates/admin_app/assets/js/bootstrap.min.js +6 -0
- data/lib/lazy-head-gen/templates/admin_app/assets/js/jquery-min.js +4 -0
- data/lib/lazy-head-gen/templates/admin_app/assets/js/jquery-ujs.js +92 -0
- data/lib/lazy-head-gen/templates/admin_app/assets/js/jquery.js +9404 -0
- data/lib/lazy-head-gen/templates/admin_app/erb/app/base/index.erb.tt +14 -0
- data/lib/lazy-head-gen/templates/admin_app/erb/app/layouts/application.erb.tt +79 -0
- data/lib/lazy-head-gen/templates/admin_app/erb/app/sessions/new.erb.tt +98 -0
- data/lib/lazy-head-gen/templates/admin_app/erb/page/_form.erb.tt +16 -0
- data/lib/lazy-head-gen/templates/admin_app/erb/page/edit.erb.tt +26 -0
- data/lib/lazy-head-gen/templates/admin_app/erb/page/index.erb.tt +41 -0
- data/lib/lazy-head-gen/templates/admin_app/erb/page/new.erb.tt +23 -0
- data/lib/lazy-head-gen/templates/admin_app/page/controller.rb.tt +47 -0
- data/lib/lazy-head-gen/templates/{admin_controller_test.rb.tt → admin_controller_test/admin_controller_test.rb.tt} +0 -0
- data/lib/lazy-head-gen/templates/{blueprints.rb.tt → scaffold/blueprints.rb.tt} +0 -0
- data/lib/lazy-head-gen/templates/{controller.rb.tt → scaffold/controller.rb.tt} +0 -0
- data/lib/lazy-head-gen/templates/{controller_test.rb.tt → scaffold/controller_test.rb.tt} +0 -0
- data/lib/lazy-head-gen/templates/{helper.rb.tt → scaffold/helper.rb.tt} +0 -0
- data/lib/lazy-head-gen/templates/{model.rb.tt → scaffold/model.rb.tt} +0 -0
- data/lib/lazy-head-gen/templates/{model_test.rb.tt → scaffold/model_test.rb.tt} +0 -0
- data/lib/lazy-head-gen/templates/{view.erb.tt → scaffold/view.erb.tt} +0 -0
- data/test/helper.rb +1 -5
- data/test/lazy-head-gen/test_bootstrapped_admin_app_generator.rb +211 -0
- data/test/lazy-head-gen/test_bootstrapped_admin_page_generator.rb +94 -0
- metadata +45 -12
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -19,9 +19,9 @@ gem 'lazy-head-gen', :group => [:development, :test]
|
|
19
19
|
Padrino gotcha: You'll need to put the `gem 'lazy-head-gen'` requirement *after* `gem 'padrino'` in your Gemfile.
|
20
20
|
Lazy Head Gen needs Padrino loaded before it can work.
|
21
21
|
|
22
|
-
|
22
|
+
Also you will need to add this gem for both :development and :test groups. This is because there are a couple of added test helper functions and assertions used by the output from the generators.
|
23
23
|
|
24
|
-
|
24
|
+
## Usage
|
25
25
|
|
26
26
|
### Scaffold Generator
|
27
27
|
|
@@ -67,6 +67,14 @@ padrino g admin_controller_tests products
|
|
67
67
|
|
68
68
|
This will generate a fully tested admin controller test for the 6 CRUD routes of a standard Padrino admin controller.
|
69
69
|
|
70
|
+
### Bootstrapped Admin Generator
|
71
|
+
|
72
|
+
TODO: write about this
|
73
|
+
|
74
|
+
### Bootstrapped Admin Page Generator
|
75
|
+
|
76
|
+
TODO: write about this
|
77
|
+
|
70
78
|
## Extras
|
71
79
|
|
72
80
|
### Built in assertions and test helpers
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/lazy-head-gen.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "lazy-head-gen"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Stuart Chinery"]
|
12
|
-
s.date = "2012-
|
12
|
+
s.date = "2012-07-04"
|
13
13
|
s.description = "Lazy Head Gen is simply a couple of extra generators for the excellent Padrino framework."
|
14
14
|
s.email = "stuart.chinery@headlondon.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -27,17 +27,50 @@ Gem::Specification.new do |s|
|
|
27
27
|
"lazy-head-gen.gemspec",
|
28
28
|
"lib/lazy-head-gen.rb",
|
29
29
|
"lib/lazy-head-gen/admin_controller_test.rb",
|
30
|
+
"lib/lazy-head-gen/bootstrapped_admin_app.rb",
|
31
|
+
"lib/lazy-head-gen/bootstrapped_admin_page.rb",
|
30
32
|
"lib/lazy-head-gen/scaffold.rb",
|
31
|
-
"lib/lazy-head-gen/templates/
|
32
|
-
"lib/lazy-head-gen/templates/
|
33
|
-
"lib/lazy-head-gen/templates/
|
34
|
-
"lib/lazy-head-gen/templates/
|
35
|
-
"lib/lazy-head-gen/templates/
|
36
|
-
"lib/lazy-head-gen/templates/
|
37
|
-
"lib/lazy-head-gen/templates/
|
38
|
-
"lib/lazy-head-gen/templates/
|
33
|
+
"lib/lazy-head-gen/templates/admin_app/account/activerecord.rb.tt",
|
34
|
+
"lib/lazy-head-gen/templates/admin_app/account/seeds.rb.tt",
|
35
|
+
"lib/lazy-head-gen/templates/admin_app/app.rb.tt",
|
36
|
+
"lib/lazy-head-gen/templates/admin_app/app/controllers/base.rb",
|
37
|
+
"lib/lazy-head-gen/templates/admin_app/app/controllers/sessions.rb.tt",
|
38
|
+
"lib/lazy-head-gen/templates/admin_app/assets/css/bootstrap-responsive.css",
|
39
|
+
"lib/lazy-head-gen/templates/admin_app/assets/css/bootstrap-responsive.min.css",
|
40
|
+
"lib/lazy-head-gen/templates/admin_app/assets/css/bootstrap.css",
|
41
|
+
"lib/lazy-head-gen/templates/admin_app/assets/css/bootstrap.min.css",
|
42
|
+
"lib/lazy-head-gen/templates/admin_app/assets/ico/apple-touch-icon-114-precomposed.png",
|
43
|
+
"lib/lazy-head-gen/templates/admin_app/assets/ico/apple-touch-icon-144-precomposed.png",
|
44
|
+
"lib/lazy-head-gen/templates/admin_app/assets/ico/apple-touch-icon-57-precomposed.png",
|
45
|
+
"lib/lazy-head-gen/templates/admin_app/assets/ico/apple-touch-icon-72-precomposed.png",
|
46
|
+
"lib/lazy-head-gen/templates/admin_app/assets/ico/favicon.ico",
|
47
|
+
"lib/lazy-head-gen/templates/admin_app/assets/img/glyphicons-halflings-white.png",
|
48
|
+
"lib/lazy-head-gen/templates/admin_app/assets/img/glyphicons-halflings.png",
|
49
|
+
"lib/lazy-head-gen/templates/admin_app/assets/js/bootstrap.js",
|
50
|
+
"lib/lazy-head-gen/templates/admin_app/assets/js/bootstrap.min.js",
|
51
|
+
"lib/lazy-head-gen/templates/admin_app/assets/js/jquery-min.js",
|
52
|
+
"lib/lazy-head-gen/templates/admin_app/assets/js/jquery-ujs.js",
|
53
|
+
"lib/lazy-head-gen/templates/admin_app/assets/js/jquery.js",
|
54
|
+
"lib/lazy-head-gen/templates/admin_app/erb/app/base/index.erb.tt",
|
55
|
+
"lib/lazy-head-gen/templates/admin_app/erb/app/layouts/application.erb.tt",
|
56
|
+
"lib/lazy-head-gen/templates/admin_app/erb/app/sessions/new.erb.tt",
|
57
|
+
"lib/lazy-head-gen/templates/admin_app/erb/page/_form.erb.tt",
|
58
|
+
"lib/lazy-head-gen/templates/admin_app/erb/page/edit.erb.tt",
|
59
|
+
"lib/lazy-head-gen/templates/admin_app/erb/page/index.erb.tt",
|
60
|
+
"lib/lazy-head-gen/templates/admin_app/erb/page/new.erb.tt",
|
61
|
+
"lib/lazy-head-gen/templates/admin_app/page/controller.rb.tt",
|
62
|
+
"lib/lazy-head-gen/templates/admin_controller_test/admin_controller_test.rb.tt",
|
63
|
+
"lib/lazy-head-gen/templates/scaffold/blueprints.rb.tt",
|
64
|
+
"lib/lazy-head-gen/templates/scaffold/controller.rb.tt",
|
65
|
+
"lib/lazy-head-gen/templates/scaffold/controller_test.rb.tt",
|
66
|
+
"lib/lazy-head-gen/templates/scaffold/helper.rb.tt",
|
67
|
+
"lib/lazy-head-gen/templates/scaffold/model.rb.tt",
|
68
|
+
"lib/lazy-head-gen/templates/scaffold/model_test.rb.tt",
|
69
|
+
"lib/lazy-head-gen/templates/scaffold/view.erb.tt",
|
39
70
|
"test/helper.rb",
|
40
71
|
"test/lazy-head-gen/test_admin_controller_test.rb",
|
72
|
+
"test/lazy-head-gen/test_bootstrapped_admin_app_generator.rb",
|
73
|
+
"test/lazy-head-gen/test_bootstrapped_admin_page_generator.rb",
|
41
74
|
"test/lazy-head-gen/test_scaffold.rb",
|
42
75
|
"test/load_paths.rb",
|
43
76
|
"test/test_lazy-head-gen.rb"
|
data/lib/lazy-head-gen.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
begin
|
2
2
|
require 'padrino-gen'
|
3
|
-
Padrino::Generators.load_paths << Dir[File.dirname(__FILE__) + '/lazy-head-gen/{admin_controller_test,scaffold}.rb']
|
3
|
+
Padrino::Generators.load_paths << Dir[File.dirname(__FILE__) + '/lazy-head-gen/{admin_controller_test,scaffold,actions,orm,bootstrapped_admin_app,bootstrapped_admin_page}.rb']
|
4
4
|
rescue LoadError
|
5
5
|
# Fail silently
|
6
6
|
end
|
@@ -23,6 +23,7 @@ module Padrino
|
|
23
23
|
|
24
24
|
class_option :root, :desc => "The root destination", :aliases => '-r', :default => ".", :type => :string
|
25
25
|
|
26
|
+
# Show help if no argv given
|
26
27
|
require_arguments!
|
27
28
|
|
28
29
|
def create_admin_controller_test
|
@@ -41,7 +42,7 @@ module Padrino
|
|
41
42
|
controller_path = destination_root("admin", "controllers", "#{@pluralized}.rb")
|
42
43
|
|
43
44
|
if File.exist?(controller_path)
|
44
|
-
template "templates/admin_controller_test.rb.tt", destination_root("test", "admin", "controllers", "#{@pluralized}_controller_test.rb")
|
45
|
+
template "templates/admin_controller_test/admin_controller_test.rb.tt", destination_root("test", "admin", "controllers", "#{@pluralized}_controller_test.rb")
|
45
46
|
else
|
46
47
|
say "The controller '#{controller_path} does not exist, please run 'padrino g admin_page #{@model}' to create the initial admin controller", :red
|
47
48
|
return
|
@@ -0,0 +1,121 @@
|
|
1
|
+
module Padrino
|
2
|
+
module Generators
|
3
|
+
##
|
4
|
+
# Defines the generator for creating a new admin app.
|
5
|
+
#
|
6
|
+
class BootstrappedAdminApp < Thor::Group
|
7
|
+
|
8
|
+
# Add this generator to our padrino-gen
|
9
|
+
Padrino::Generators.add_generator(:bootstrapped_admin, self)
|
10
|
+
|
11
|
+
# Define the source template root and themes.
|
12
|
+
def self.source_root; File.expand_path(File.dirname(__FILE__)); end
|
13
|
+
# Defines the "banner" text for the CLI.
|
14
|
+
def self.banner; "padrino-gen bootstrapped_admin"; end
|
15
|
+
# Defines the theme names for admin based on available.
|
16
|
+
# def self.themes; Dir[File.dirname(__FILE__) + "/templates/admin_app/assets/stylesheets/themes/*"].map { |t| File.basename(t) }.sort; end
|
17
|
+
|
18
|
+
# Include related modules
|
19
|
+
include Thor::Actions
|
20
|
+
include Padrino::Generators::Actions
|
21
|
+
include Padrino::Generators::Admin::Actions
|
22
|
+
|
23
|
+
desc "Description:\n\n\tpadrino-gen bootstrapped_admin generates a new Padrino Admin application with Twitter Bootstrapped integrated"
|
24
|
+
|
25
|
+
class_option :skip_migration, :aliases => "-s", :default => false, :type => :boolean
|
26
|
+
|
27
|
+
class_option :app, :aliases => "-a", :desc => "The model destination path", :default => '.', :type => :string
|
28
|
+
|
29
|
+
class_option :root, :desc => "The root destination", :aliases => '-r', :default => ".", :type => :string
|
30
|
+
|
31
|
+
class_option :destroy, :aliases => '-d', :default => false, :type => :boolean
|
32
|
+
|
33
|
+
class_option :admin_model, :aliases => '-m', :desc => "The name of model for access controlling", :default => 'Account', :type => :string
|
34
|
+
|
35
|
+
# Copies over the Padrino base admin application
|
36
|
+
def create_admin
|
37
|
+
self.destination_root = options[:root]
|
38
|
+
if in_app_root?
|
39
|
+
store_component_choice(:admin_renderer, :erb)
|
40
|
+
|
41
|
+
self.behavior = :revoke if options[:destroy]
|
42
|
+
|
43
|
+
empty_directory destination_root("admin")
|
44
|
+
directory "templates/admin_app/app", destination_root("admin")
|
45
|
+
directory "templates/admin_app/assets", destination_root("public", "admin")
|
46
|
+
template "templates/admin_app/app.rb.tt", destination_root("admin/app.rb")
|
47
|
+
append_file destination_root("config/apps.rb"), "\nPadrino.mount(\"Admin\").to(\"/admin\")"
|
48
|
+
insert_middleware 'ActiveRecord::ConnectionAdapters::ConnectionManagement', 'admin'
|
49
|
+
|
50
|
+
account_params = [
|
51
|
+
options[:admin_model].underscore, "name:string", "surname:string", "email:string", "crypted_password:string", "role:string",
|
52
|
+
"-a=#{options[:app]}",
|
53
|
+
"-r=#{options[:root]}"
|
54
|
+
]
|
55
|
+
|
56
|
+
account_params << "-s" if options[:skip_migration]
|
57
|
+
account_params << "-d" if options[:destroy]
|
58
|
+
|
59
|
+
Padrino::Generators::Model.start(account_params)
|
60
|
+
column = Struct.new(:name, :type)
|
61
|
+
columns = [:id, :name, :surname, :email].map { |col| column.new(col) }
|
62
|
+
column_fields = [
|
63
|
+
{ :name => :name, :field_type => :text_field },
|
64
|
+
{ :name => :surname, :field_type => :text_field },
|
65
|
+
{ :name => :email, :field_type => :text_field },
|
66
|
+
{ :name => :password, :field_type => :password_field },
|
67
|
+
{ :name => :password_confirmation, :field_type => :password_field },
|
68
|
+
{ :name => :role, :field_type => :text_field }
|
69
|
+
]
|
70
|
+
|
71
|
+
admin_page = Padrino::Generators::BootstrappedAdminPage.new([options[:admin_model].underscore], :root => options[:root], :destroy => options[:destroy])
|
72
|
+
admin_page.default_orm = Padrino::Admin::Generators::Orm.new(options[:admin_model].underscore, orm, columns, column_fields)
|
73
|
+
admin_page.invoke_all
|
74
|
+
|
75
|
+
template "templates/admin_app/account/activerecord.rb.tt", destination_root(options[:app], "models", "#{options[:admin_model].underscore}.rb"), :force => true
|
76
|
+
|
77
|
+
if File.exist?(destination_root("db/seeds.rb"))
|
78
|
+
run "mv #{destination_root('db/seeds.rb')} #{destination_root('db/seeds.old')}"
|
79
|
+
end
|
80
|
+
template "templates/admin_app/account/seeds.rb.tt", destination_root("db/seeds.rb")
|
81
|
+
|
82
|
+
empty_directory destination_root("admin/controllers")
|
83
|
+
empty_directory destination_root("admin/views")
|
84
|
+
empty_directory destination_root("admin/views/base")
|
85
|
+
empty_directory destination_root("admin/views/layouts")
|
86
|
+
empty_directory destination_root("admin/views/sessions")
|
87
|
+
|
88
|
+
template "templates/admin_app/#{ext}/app/base/index.#{ext}.tt", destination_root("admin/views/base/index.#{ext}")
|
89
|
+
template "templates/admin_app/#{ext}/app/layouts/application.#{ext}.tt", destination_root("admin/views/layouts/application.#{ext}")
|
90
|
+
template "templates/admin_app/#{ext}/app/sessions/new.#{ext}.tt", destination_root("admin/views/sessions/new.#{ext}")
|
91
|
+
|
92
|
+
model_singular = options[:admin_model].underscore
|
93
|
+
model_plural = model_singular.pluralize
|
94
|
+
|
95
|
+
add_project_module model_plural
|
96
|
+
require_dependencies('bcrypt-ruby', :require => 'bcrypt')
|
97
|
+
gsub_file destination_root("admin/views/#{model_plural}/_form.#{ext}"), "f.text_field :role, :class => :text_field", "f.select :role, :options => access_control.roles"
|
98
|
+
gsub_file destination_root("admin/controllers/#{model_plural}.rb"), "if #{model_singular}.destroy", "if #{model_singular} != current_account && #{model_singular}.destroy"
|
99
|
+
return if self.behavior == :revoke
|
100
|
+
|
101
|
+
instructions = []
|
102
|
+
instructions << "Run 'bundle install'"
|
103
|
+
instructions << "Run 'padrino rake ar:migrate'"
|
104
|
+
instructions << "Run 'padrino rake seed'"
|
105
|
+
instructions << "Visit the admin panel in the browser at '/admin'"
|
106
|
+
instructions.map! { |i| " #{instructions.index(i)+1}) #{i}" }
|
107
|
+
|
108
|
+
say
|
109
|
+
say "="*65, :green
|
110
|
+
say "The admin panel has been mounted! Next, follow these steps:", :green
|
111
|
+
say "="*65, :green
|
112
|
+
say instructions.join("\n")
|
113
|
+
say "="*65, :green
|
114
|
+
say
|
115
|
+
else
|
116
|
+
say "You are not at the root of a Padrino application! (config/boot.rb not found)"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end # AdminApp
|
120
|
+
end # Generators
|
121
|
+
end # Padrino
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Padrino
|
2
|
+
module Generators
|
3
|
+
##
|
4
|
+
# Defines the generator for creating a new admin page.
|
5
|
+
#
|
6
|
+
class BootstrappedAdminPage < Thor::Group
|
7
|
+
attr_accessor :default_orm
|
8
|
+
|
9
|
+
# Add this generator to our padrino-gen
|
10
|
+
Padrino::Generators.add_generator(:bootstrapped_admin_page, self)
|
11
|
+
|
12
|
+
# Define the source template root
|
13
|
+
def self.source_root; File.expand_path(File.dirname(__FILE__)); end
|
14
|
+
# Defines the "banner" text for the CLI.
|
15
|
+
def self.banner; "padrino-gen bootstrapped_admin_page [model]"; end
|
16
|
+
|
17
|
+
# Include related modules
|
18
|
+
include Thor::Actions
|
19
|
+
include Padrino::Generators::Actions
|
20
|
+
include Padrino::Generators::Admin::Actions
|
21
|
+
|
22
|
+
desc "Description:\n\n\tpadrino-gen bootstrapped_admin_page model(s) generates a new Padrino Admin page with Twitter Bootstrapped integrated"
|
23
|
+
|
24
|
+
argument :models, :desc => "The name(s) of your model(s)", :type => :array
|
25
|
+
|
26
|
+
class_option :skip_migration, :aliases => "-s", :default => false, :type => :boolean
|
27
|
+
|
28
|
+
class_option :root, :desc => "The root destination", :aliases => '-r', :type => :string
|
29
|
+
|
30
|
+
class_option :destroy, :aliases => '-d', :default => false, :type => :boolean
|
31
|
+
|
32
|
+
# Show help if no argv given
|
33
|
+
require_arguments!
|
34
|
+
|
35
|
+
# Create controller for admin
|
36
|
+
def create_controller
|
37
|
+
self.destination_root = options[:root]
|
38
|
+
if in_app_root?
|
39
|
+
models.each do |model|
|
40
|
+
@orm = default_orm || Padrino::Admin::Generators::Orm.new(model, adapter)
|
41
|
+
self.behavior = :revoke if options[:destroy]
|
42
|
+
empty_directory destination_root("/admin/views/#{@orm.name_plural}")
|
43
|
+
|
44
|
+
template "templates/admin_app/page/controller.rb.tt", destination_root("/admin/controllers/#{@orm.name_plural}.rb")
|
45
|
+
template "templates/admin_app/erb/page/_form.erb.tt", destination_root("/admin/views/#{@orm.name_plural}/_form.erb")
|
46
|
+
template "templates/admin_app/erb/page/edit.erb.tt", destination_root("/admin/views/#{@orm.name_plural}/edit.erb")
|
47
|
+
template "templates/admin_app/erb/page/index.erb.tt", destination_root("/admin/views/#{@orm.name_plural}/index.erb")
|
48
|
+
template "templates/admin_app/erb/page/new.erb.tt", destination_root("/admin/views/#{@orm.name_plural}/new.erb")
|
49
|
+
|
50
|
+
options[:destroy] ? remove_project_module(@orm.name_plural) : add_project_module(@orm.name_plural)
|
51
|
+
end
|
52
|
+
else
|
53
|
+
say "You are not at the root of a Padrino application! (config/boot.rb not found)"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end # AdminPage
|
57
|
+
end # Generators
|
58
|
+
end # Padrino
|
@@ -38,6 +38,7 @@ module Padrino
|
|
38
38
|
class_option :skip_migration, :aliases => "-s", :default => false, :type => :boolean,
|
39
39
|
:desc => "Specify whether to skip generating a migration"
|
40
40
|
|
41
|
+
# Show help if no argv given
|
41
42
|
require_arguments!
|
42
43
|
|
43
44
|
def create_scaffold
|
@@ -74,13 +75,13 @@ module Padrino
|
|
74
75
|
# model_path = options[:model_path]
|
75
76
|
model_path = "."
|
76
77
|
|
77
|
-
template "templates/model.rb.tt", destination_root(model_path, "models", "#{@singular}.rb")
|
78
|
-
template "templates/model_test.rb.tt", destination_root("test", model_path, "models", "#{@singular}_test.rb")
|
78
|
+
template "templates/scaffold/model.rb.tt", destination_root(model_path, "models", "#{@singular}.rb")
|
79
|
+
template "templates/scaffold/model_test.rb.tt", destination_root("test", model_path, "models", "#{@singular}_test.rb")
|
79
80
|
|
80
81
|
# Create controller
|
81
|
-
template "templates/controller.rb.tt", destination_root(app, "controllers", "#{@pluralized}.rb")
|
82
|
-
template "templates/controller_test.rb.tt", destination_root("test", app, "controllers", "#{@pluralized}_controller_test.rb")
|
83
|
-
template "templates/helper.rb.tt", destination_root(app, "helpers", "#{@pluralized}_helper.rb")
|
82
|
+
template "templates/scaffold/controller.rb.tt", destination_root(app, "controllers", "#{@pluralized}.rb")
|
83
|
+
template "templates/scaffold/controller_test.rb.tt", destination_root("test", app, "controllers", "#{@pluralized}_controller_test.rb")
|
84
|
+
template "templates/scaffold/helper.rb.tt", destination_root(app, "helpers", "#{@pluralized}_helper.rb")
|
84
85
|
|
85
86
|
# Create views
|
86
87
|
views = ["index", "show"]
|
@@ -90,7 +91,7 @@ module Padrino
|
|
90
91
|
|
91
92
|
views.each do |view|
|
92
93
|
@view = view
|
93
|
-
template "templates/view.erb.tt", destination_root(app, "views", "#{@pluralized}", "#{@view}.erb")
|
94
|
+
template "templates/scaffold/view.erb.tt", destination_root(app, "views", "#{@pluralized}", "#{@view}.erb")
|
94
95
|
end
|
95
96
|
|
96
97
|
# Create a migration unless skipped
|
@@ -98,7 +99,7 @@ module Padrino
|
|
98
99
|
|
99
100
|
# Check if blueprints file exists and copy into place if not
|
100
101
|
if !File.exist?(destination_root("test", "blueprints.rb"))
|
101
|
-
template "templates/blueprints.rb.tt", destination_root("test", "blueprints.rb")
|
102
|
+
template "templates/scaffold/blueprints.rb.tt", destination_root("test", "blueprints.rb")
|
102
103
|
end
|
103
104
|
|
104
105
|
# Insert into text_config.rb require blueprints.rb
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class <%= options[:admin_model].underscore.camelize %> < ActiveRecord::Base
|
2
|
+
attr_accessor :password, :password_confirmation
|
3
|
+
|
4
|
+
# Validations
|
5
|
+
validates_presence_of :email, :role
|
6
|
+
validates_presence_of :password, :if => :password_required
|
7
|
+
validates_presence_of :password_confirmation, :if => :password_required
|
8
|
+
validates_length_of :password, :within => 4..40, :if => :password_required
|
9
|
+
validates_confirmation_of :password, :if => :password_required
|
10
|
+
validates_length_of :email, :within => 3..100
|
11
|
+
validates_uniqueness_of :email, :case_sensitive => false
|
12
|
+
validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
|
13
|
+
validates_format_of :role, :with => /[A-Za-z]/
|
14
|
+
|
15
|
+
# Callbacks
|
16
|
+
before_save :encrypt_password, :if => :password_required
|
17
|
+
|
18
|
+
##
|
19
|
+
# This method is for authentication purpose
|
20
|
+
#
|
21
|
+
def self.authenticate(email, password)
|
22
|
+
account = first(:conditions => { :email => email }) if email.present?
|
23
|
+
account && account.has_password?(password) ? account : nil
|
24
|
+
end
|
25
|
+
|
26
|
+
def has_password?(password)
|
27
|
+
::BCrypt::Password.new(crypted_password) == password
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
def encrypt_password
|
32
|
+
self.crypted_password = ::BCrypt::Password.create(password)
|
33
|
+
end
|
34
|
+
|
35
|
+
def password_required
|
36
|
+
crypted_password.blank? || password.present?
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# Seed add you the ability to populate your db.
|
2
|
+
# We provide you a basic shell for interaction with the end user.
|
3
|
+
# So try some code like below:
|
4
|
+
#
|
5
|
+
# name = shell.ask("What's your name?")
|
6
|
+
# shell.say name
|
7
|
+
#
|
8
|
+
email = shell.ask "Which email do you want use for logging into admin?"
|
9
|
+
password = shell.ask "Tell me the password to use:"
|
10
|
+
|
11
|
+
shell.say ""
|
12
|
+
|
13
|
+
account = <%= options[:admin_model].underscore.camelize %>.create(:email => email, :name => "Foo", :surname => "Bar", :password => password, :password_confirmation => password, :role => "admin")
|
14
|
+
|
15
|
+
if account.valid?
|
16
|
+
shell.say "================================================================="
|
17
|
+
shell.say "<%= options[:admin_model].underscore.camelize %> has been successfully created, now you can login with:"
|
18
|
+
shell.say "================================================================="
|
19
|
+
shell.say " email: #{email}"
|
20
|
+
shell.say " password: #{password}"
|
21
|
+
shell.say "================================================================="
|
22
|
+
else
|
23
|
+
shell.say "Sorry but some thing went wrong!"
|
24
|
+
shell.say ""
|
25
|
+
account.errors.full_messages.each { |m| shell.say " - #{m}" }
|
26
|
+
end
|
27
|
+
|
28
|
+
shell.say ""
|
@@ -0,0 +1,36 @@
|
|
1
|
+
class Admin < Padrino::Application
|
2
|
+
register Padrino::Rendering
|
3
|
+
register Padrino::Mailer
|
4
|
+
register Padrino::Helpers
|
5
|
+
register Padrino::Admin::AccessControl
|
6
|
+
|
7
|
+
##
|
8
|
+
# Application configuration options
|
9
|
+
#
|
10
|
+
# set :raise_errors, true # Raise exceptions (will stop application) (default for test)
|
11
|
+
# set :dump_errors, true # Exception backtraces are written to STDERR (default for production/development)
|
12
|
+
# set :show_exceptions, true # Shows a stack trace in browser (default for development)
|
13
|
+
# set :logging, true # Logging in STDOUT for development and file for production (default only for development)
|
14
|
+
# set :public_folder, "foo/bar" # Location for static assets (default root/public)
|
15
|
+
# set :reload, false # Reload application files (default in development)
|
16
|
+
# set :default_builder, "foo" # Set a custom form builder (default 'StandardFormBuilder')
|
17
|
+
# set :locale_path, "bar" # Set path for I18n translations (default your_app/locales)
|
18
|
+
# disable :sessions # Disabled sessions by default (enable if needed)
|
19
|
+
# disable :flash # Disables sinatra-flash (enabled by default if Sinatra::Flash is defined)
|
20
|
+
# layout :my_layout # Layout can be in views/layouts/foo.ext or views/foo.ext (default :application)
|
21
|
+
#
|
22
|
+
|
23
|
+
set :admin_model, '<%= options[:admin_model] %>'
|
24
|
+
set :login_page, "/admin/sessions/new"
|
25
|
+
|
26
|
+
enable :sessions
|
27
|
+
disable :store_location
|
28
|
+
|
29
|
+
access_control.roles_for :any do |role|
|
30
|
+
role.protect "/"
|
31
|
+
role.allow "/sessions"
|
32
|
+
end
|
33
|
+
|
34
|
+
access_control.roles_for :admin do |role|
|
35
|
+
end
|
36
|
+
end
|