padrino-admin 0.12.8.1 → 0.12.9
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 +13 -5
- data/Rakefile +0 -4
- data/lib/padrino-admin.rb +0 -1
- data/lib/padrino-admin/access_control.rb +9 -3
- data/lib/padrino-admin/generators/admin_app.rb +3 -2
- data/lib/padrino-admin/generators/templates/account/datamapper.rb.tt +5 -0
- data/lib/padrino-admin/generators/templates/account/seeds.rb.tt +5 -4
- data/lib/padrino-admin/generators/templates/erb/app/layouts/application.erb.tt +1 -1
- data/lib/padrino-admin/generators/templates/erb/page/index.erb.tt +2 -2
- data/lib/padrino-admin/generators/templates/haml/app/layouts/application.haml.tt +2 -2
- data/lib/padrino-admin/generators/templates/page/controller.rb.tt +1 -1
- data/lib/padrino-admin/generators/templates/slim/app/layouts/application.slim.tt +3 -2
- data/test/fixtures/sequel.rb +89 -0
- data/test/generators/test_account_model_generator.rb +8 -8
- data/test/generators/test_admin_app_generator.rb +46 -32
- data/test/generators/test_admin_page_generator.rb +51 -62
- data/test/helper.rb +8 -38
- data/test/test_admin_application.rb +18 -1
- metadata +18 -18
- data/test/fixtures/data_mapper.rb +0 -52
checksums.yaml
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
|
|
2
|
+
!binary "U0hBMQ==":
|
|
3
|
+
metadata.gz: !binary |-
|
|
4
|
+
YTdlNDEzYzg0NjE3NDNkOTFhOTdlODFiY2I3Y2IwOTMwNGIyMDFhMw==
|
|
5
|
+
data.tar.gz: !binary |-
|
|
6
|
+
MDNjMzgzODk4MmIyN2ZmZTM0MTIyZjU5ZjRiNzk3OTU4ZDY1MTZlOQ==
|
|
5
7
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
|
|
8
|
+
metadata.gz: !binary |-
|
|
9
|
+
NjM4YzEwMThlNjBhNmFmNzFhNjkwZWRjY2M2ODI5OWI4NDRiZWE5NDk5MWYy
|
|
10
|
+
YzViMjg0YTEyM2U5YWFhZDdjMGUzZGNlMjE2M2U2NjU5NDRhY2U3MWJmOTM5
|
|
11
|
+
ZTBlMmQwMjlhZTZkNjczM2E4MDE1YTc3ZTA3NGZiZmNjODU0NGM=
|
|
12
|
+
data.tar.gz: !binary |-
|
|
13
|
+
YTJhZjkxZDVjMjdjNzMwODZmNjBjN2QyZmZhNmM1NTUwYmY3YmEwNmMwYzYx
|
|
14
|
+
NzAzYjk2MDQzNmJkMzRlZjZkZDYyOTg3Y2MxODE4ZDhlZjdjY2FkNzk4OWE5
|
|
15
|
+
NjdhMDE4MWE4OWVhNWQzY2RkODdjYTQ5NGUzZTI0NmZkNDU3Njg=
|
data/Rakefile
CHANGED
data/lib/padrino-admin.rb
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
require 'active_support/core_ext/class/attribute_accessors'
|
|
2
|
-
|
|
3
1
|
module Padrino
|
|
4
2
|
module Admin
|
|
5
3
|
class AccessControlError < StandardError
|
|
@@ -19,7 +17,15 @@ module Padrino
|
|
|
19
17
|
app.helpers Padrino::Admin::Helpers::AuthenticationHelpers
|
|
20
18
|
app.helpers Padrino::Admin::Helpers::ViewHelpers
|
|
21
19
|
app.before { login_required }
|
|
22
|
-
app.
|
|
20
|
+
app.class_eval do
|
|
21
|
+
class << self
|
|
22
|
+
attr_accessor :access_control
|
|
23
|
+
end
|
|
24
|
+
def access_control
|
|
25
|
+
self.class.access_control
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
23
29
|
app.send(:access_control=, Padrino::Admin::AccessControl::Base.new)
|
|
24
30
|
end
|
|
25
31
|
alias :included :registered
|
|
@@ -49,7 +49,7 @@ module Padrino
|
|
|
49
49
|
|
|
50
50
|
tmp_ext = options[:renderer] || fetch_component_choice(:renderer)
|
|
51
51
|
unless supported_ext.include?(tmp_ext.to_sym)
|
|
52
|
-
say "<=
|
|
52
|
+
say "<= You are using '#{tmp_ext}' and for admin we only support '#{supported_ext.join(', ')}'. Please use #{supported_ext.map { |ext| '-e ' + ext }.join(' or ')}", :yellow
|
|
53
53
|
raise SystemExit
|
|
54
54
|
end
|
|
55
55
|
|
|
@@ -76,7 +76,8 @@ module Padrino
|
|
|
76
76
|
template "templates/app.rb.tt", destination_root(@admin_path + "/app.rb")
|
|
77
77
|
inject_into_file destination_root('config/apps.rb'), "\nPadrino.mount(\"#{@app_name}::#{@admin_name}\", :app_file => Padrino.root('#{@admin_path}/app.rb')).to(\"/#{@admin_path}\")\n", :before => /^Padrino.mount.*\.to\('\/'\)$/
|
|
78
78
|
unless options[:destroy]
|
|
79
|
-
insert_middleware '
|
|
79
|
+
insert_middleware 'ConnectionPoolManagement', @admin_path if [:minirecord, :activerecord].include?(orm)
|
|
80
|
+
insert_middleware 'IdentityMap', @admin_path if orm == :datamapper
|
|
80
81
|
end
|
|
81
82
|
|
|
82
83
|
params = [
|
|
@@ -6,21 +6,22 @@
|
|
|
6
6
|
# shell.say name
|
|
7
7
|
#
|
|
8
8
|
email = shell.ask "Which email do you want use for logging into admin?"
|
|
9
|
-
password = shell.ask "Tell me the password to use:"
|
|
9
|
+
password = shell.ask "Tell me the password to use:", :echo => false
|
|
10
10
|
|
|
11
11
|
shell.say ""
|
|
12
12
|
|
|
13
|
-
account = <%= @model_name %>.
|
|
13
|
+
account = <%= @model_name %>.new(:email => email, :name => "Foo", :surname => "Bar", :password => password, :password_confirmation => password, :role => "admin")
|
|
14
14
|
|
|
15
15
|
if account.valid?
|
|
16
|
+
account.save
|
|
16
17
|
shell.say "================================================================="
|
|
17
18
|
shell.say "<%= @model_name %> has been successfully created, now you can login with:"
|
|
18
19
|
shell.say "================================================================="
|
|
19
20
|
shell.say " email: #{email}"
|
|
20
|
-
shell.say " password: #{password}"
|
|
21
|
+
shell.say " password: #{?* * password.length}"
|
|
21
22
|
shell.say "================================================================="
|
|
22
23
|
else
|
|
23
|
-
shell.say "Sorry but
|
|
24
|
+
shell.say "Sorry, but something went wrong!"
|
|
24
25
|
shell.say ""
|
|
25
26
|
account.errors.full_messages.each { |m| shell.say " - #{m}" }
|
|
26
27
|
end
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
<ul class="nav navbar-nav pull-right">
|
|
21
21
|
<li class=navbar-edit-account><%%= link_to tag_icon(:user), url(:<%= @model_plural %>, :edit, :id => current_account.id), :title => pat(:profile), :class => 'navbar-nav-link' %></li>
|
|
22
22
|
<li class=navbar-logout>
|
|
23
|
-
<%%= button_to(:logout, url(:sessions, :destroy), :method => :delete, :class => 'navbar-nav-form'
|
|
23
|
+
<%%= button_to(:logout, url(:sessions, :destroy), :method => :delete, :class => 'navbar-nav-form', :submit_options => { :type => :submit, :title => pat(:logout), :class => 'navbar-nav-form-link' }) { tag_icon(:'power-off') } %>
|
|
24
24
|
</li>
|
|
25
25
|
</ul>
|
|
26
26
|
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
<%%= tag_icon :magic %> <span class=caret></span>
|
|
13
13
|
</a>
|
|
14
14
|
<ul class="list-menu dropdown-menu" role=menu>
|
|
15
|
-
<li class=
|
|
15
|
+
<li class=list-menu-wrapper>
|
|
16
16
|
<%%= link_to tag_icon('check-square-o', pat(:select_all)), '#', :id => 'select-all', :class => 'list-menu-link' %>
|
|
17
17
|
</li>
|
|
18
18
|
<li class=list-menu-wrapper.list-menu-wrapper-disabled>
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
<div class=arrow> </div>
|
|
67
67
|
<h3 class=popover-title><%%= pat(:delete, :model => "<%= @orm.name_singular %>") %></h3>
|
|
68
68
|
<div class=popover-content>
|
|
69
|
-
|
|
69
|
+
<%% form_tag url(:<%= @orm.name_plural %>, :destroy, :id => <%= @orm.name_singular %>.id), :method => :delete do %>
|
|
70
70
|
<%%= submit_tag pat(:delete), :class =>'list-row-action-popover-delete-one-btn btn btn-danger btn-small' %>
|
|
71
71
|
<div class="btn btn-default btn-small cancel"><%%= pat(:cancel) %></div>
|
|
72
72
|
<%% end %>
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
%ul.nav.navbar-nav.pull-right
|
|
21
21
|
%li.navbar-edit-account=link_to tag_icon(:user), url(:accounts, :edit, :id => current_account.id), :title => pat(:profile), :class => 'navbar-nav-link'
|
|
22
22
|
%li.navbar-logout
|
|
23
|
-
=button_to :logout, url(:sessions, :destroy), :method => :delete, :class => 'navbar-nav-form' do
|
|
24
|
-
=
|
|
23
|
+
= button_to :logout, url(:sessions, :destroy), :method => :delete, :class => 'navbar-nav-form', :submit_options => { :type => :submit, :title => pat(:logout), :class => 'navbar-nav-form-link' } do
|
|
24
|
+
= tag_icon('power-off')
|
|
25
25
|
|
|
26
26
|
%ul.nav.navbar-nav.pull-left
|
|
27
27
|
- project_modules.each do |project_module|
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
<% else %>
|
|
86
86
|
if <%= @orm.multiple_destroy(@orm.name_plural) %>
|
|
87
87
|
<% end %>
|
|
88
|
-
flash[:success] = pat(:destroy_many_success, :model => '<%= @orm.name_plural.capitalize %>', :ids => "#{ids.
|
|
88
|
+
flash[:success] = pat(:destroy_many_success, :model => '<%= @orm.name_plural.capitalize %>', :ids => "#{ids.join(', ')}")
|
|
89
89
|
end
|
|
90
90
|
redirect url(:<%= @orm.name_plural %>, :index)
|
|
91
91
|
end
|
|
@@ -20,8 +20,9 @@ html lang='en'
|
|
|
20
20
|
|
|
21
21
|
ul class='nav navbar-nav pull-right'
|
|
22
22
|
li class='navbar-edit-account' = link_to tag_icon(:user), url(:<%= @model_plural %>, :edit, :id => current_account.id), :title => pat(:profile), :class => 'navbar-nav-link'
|
|
23
|
-
li class='navbar-logout'
|
|
24
|
-
=
|
|
23
|
+
li class='navbar-logout'
|
|
24
|
+
= button_to pat(:logout), url(:sessions, :destroy), :method => :delete, :class => 'navbar-nav-form', :submit_options => { :type => :submit, :title => pat(:logout), :class => 'navbar-nav-form-link' } do
|
|
25
|
+
= tag_icon(:'power-off')
|
|
25
26
|
|
|
26
27
|
ul class='nav navbar-nav pull-left'
|
|
27
28
|
- project_modules.each do |project_module|
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
require 'digest/sha1'
|
|
2
|
+
require 'sequel'
|
|
3
|
+
require 'sequel/extensions/migration'
|
|
4
|
+
|
|
5
|
+
Sequel::Model.db =
|
|
6
|
+
if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
|
|
7
|
+
require 'jdbc/sqlite3'
|
|
8
|
+
Sequel.connect("jdbc:sqlite::memory:")
|
|
9
|
+
else
|
|
10
|
+
require 'sqlite3'
|
|
11
|
+
Sequel.sqlite(":memory:")
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
migration = Sequel.migration do
|
|
15
|
+
up do
|
|
16
|
+
create_table :accounts do
|
|
17
|
+
primary_key :id
|
|
18
|
+
String :name
|
|
19
|
+
String :surname
|
|
20
|
+
String :email
|
|
21
|
+
String :crypted_password
|
|
22
|
+
String :role
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
create_table :sections do
|
|
26
|
+
primary_key :id
|
|
27
|
+
foreign_key :account_id
|
|
28
|
+
String :name
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
create_table :friends do
|
|
32
|
+
primary_key :id
|
|
33
|
+
String :name
|
|
34
|
+
String :age
|
|
35
|
+
String :email
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
create_table :pages do
|
|
39
|
+
primary_key :id
|
|
40
|
+
String :name
|
|
41
|
+
String :body
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
down do
|
|
46
|
+
drop_table :accounts
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
migration.apply(Sequel::Model.db, :up)
|
|
51
|
+
|
|
52
|
+
class Friend < Sequel::Model
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
class Page < Sequel::Model
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Fake Section Model
|
|
59
|
+
class Section < Sequel::Model
|
|
60
|
+
many_to_one :account
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Fake Account Model
|
|
64
|
+
class Account < Sequel::Model
|
|
65
|
+
attr_accessor :password, :password_confirmation
|
|
66
|
+
|
|
67
|
+
one_to_many :sections
|
|
68
|
+
|
|
69
|
+
def self.admin; first(:role => "admin"); end
|
|
70
|
+
def self.editor; first(:role => "editor"); end
|
|
71
|
+
|
|
72
|
+
##
|
|
73
|
+
# Replace ActiveRecord method.
|
|
74
|
+
#
|
|
75
|
+
def self.find_by_id(id)
|
|
76
|
+
self[id] rescue nil
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# We build some fake accounts
|
|
81
|
+
admin = Account.create(:name => "DAddYE", :role => "admin", :email => "d.dagostino@lipsiasoft.com",
|
|
82
|
+
:password => "some", :password_confirmation => "some")
|
|
83
|
+
editor = Account.create(:name => "Dexter", :role => "editor", :email => "editor@lipsiasoft.com",
|
|
84
|
+
:password => "some", :password_confirmation => "some")
|
|
85
|
+
|
|
86
|
+
%w(News Press HowTo).each do |c|
|
|
87
|
+
admin.add_section(:name => c)
|
|
88
|
+
editor.add_section(:name => c)
|
|
89
|
+
end
|
|
@@ -12,7 +12,7 @@ describe "AccountModelGenerator" do
|
|
|
12
12
|
|
|
13
13
|
describe 'activerecord' do
|
|
14
14
|
before do
|
|
15
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=activerecord') }
|
|
15
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=activerecord') }
|
|
16
16
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
17
17
|
@model = "#{@apptmp}/sample_project/models/account.rb"
|
|
18
18
|
end
|
|
@@ -24,7 +24,7 @@ describe "AccountModelGenerator" do
|
|
|
24
24
|
|
|
25
25
|
describe 'minirecord' do
|
|
26
26
|
before do
|
|
27
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=minirecord') }
|
|
27
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=minirecord') }
|
|
28
28
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
29
29
|
@model = "#{@apptmp}/sample_project/models/account.rb"
|
|
30
30
|
end
|
|
@@ -36,7 +36,7 @@ describe "AccountModelGenerator" do
|
|
|
36
36
|
|
|
37
37
|
describe 'datamapper' do
|
|
38
38
|
before do
|
|
39
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=datamapper') }
|
|
39
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=datamapper') }
|
|
40
40
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
41
41
|
@model = "#{@apptmp}/sample_project/models/account.rb"
|
|
42
42
|
end
|
|
@@ -48,7 +48,7 @@ describe "AccountModelGenerator" do
|
|
|
48
48
|
|
|
49
49
|
describe 'mongoid' do
|
|
50
50
|
before do
|
|
51
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=mongoid') }
|
|
51
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=mongoid') }
|
|
52
52
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
53
53
|
@model = "#{@apptmp}/sample_project/models/account.rb"
|
|
54
54
|
end
|
|
@@ -60,7 +60,7 @@ describe "AccountModelGenerator" do
|
|
|
60
60
|
|
|
61
61
|
describe 'mongomapper' do
|
|
62
62
|
before do
|
|
63
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=mongomapper') }
|
|
63
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=mongomapper') }
|
|
64
64
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
65
65
|
@model = "#{@apptmp}/sample_project/models/account.rb"
|
|
66
66
|
end
|
|
@@ -72,7 +72,7 @@ describe "AccountModelGenerator" do
|
|
|
72
72
|
|
|
73
73
|
describe 'ohm' do
|
|
74
74
|
before do
|
|
75
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=ohm') }
|
|
75
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=ohm') }
|
|
76
76
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
77
77
|
@model = "#{@apptmp}/sample_project/models/account.rb"
|
|
78
78
|
end
|
|
@@ -84,7 +84,7 @@ describe "AccountModelGenerator" do
|
|
|
84
84
|
|
|
85
85
|
describe 'sequel' do
|
|
86
86
|
before do
|
|
87
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=sequel') }
|
|
87
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=sequel') }
|
|
88
88
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
89
89
|
@model = "#{@apptmp}/sample_project/models/account.rb"
|
|
90
90
|
end
|
|
@@ -96,7 +96,7 @@ describe "AccountModelGenerator" do
|
|
|
96
96
|
|
|
97
97
|
describe 'couchrest' do
|
|
98
98
|
before do
|
|
99
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=couchrest') }
|
|
99
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=couchrest') }
|
|
100
100
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
101
101
|
@model = "#{@apptmp}/sample_project/models/account.rb"
|
|
102
102
|
end
|
|
@@ -24,28 +24,28 @@ describe "AdminAppGenerator" do
|
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
it "should fail if we don't specify an orm on the project" do
|
|
27
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-e=haml') }
|
|
27
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-e=haml') }
|
|
28
28
|
assert_raises(SystemExit) { @out, @err = capture_io { generate(:admin_app, "-r=#{@apptmp}/sample_project") } }
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
it "should store and apply session_secret" do
|
|
32
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=datamapper','-e=haml') }
|
|
32
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=datamapper','-e=haml') }
|
|
33
33
|
assert_match_in_file(/set :session_secret, '[0-9A-z]*'/, "#{@apptmp}/sample_project/config/apps.rb")
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
it "should generate the admin app" do
|
|
37
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=activerecord') }
|
|
37
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=activerecord') }
|
|
38
38
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
assert_dir_exists("#{@apptmp}/sample_project")
|
|
40
|
+
assert_dir_exists("#{@apptmp}/sample_project/admin")
|
|
41
41
|
assert_file_exists("#{@apptmp}/sample_project/admin/app.rb")
|
|
42
|
-
|
|
42
|
+
assert_dir_exists("#{@apptmp}/sample_project/admin/controllers")
|
|
43
43
|
assert_file_exists("#{@apptmp}/sample_project/admin/controllers/accounts.rb")
|
|
44
44
|
assert_file_exists("#{@apptmp}/sample_project/admin/controllers/base.rb")
|
|
45
45
|
assert_file_exists("#{@apptmp}/sample_project/admin/controllers/sessions.rb")
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
assert_dir_exists("#{@apptmp}/sample_project/admin/views")
|
|
47
|
+
assert_dir_exists("#{@apptmp}/sample_project/public/admin")
|
|
48
|
+
assert_dir_exists("#{@apptmp}/sample_project/public/admin/stylesheets")
|
|
49
49
|
assert_file_exists("#{@apptmp}/sample_project/public/admin/stylesheets/application.css")
|
|
50
50
|
assert_file_exists("#{@apptmp}/sample_project/public/admin/stylesheets/bootstrap.css")
|
|
51
51
|
assert_file_exists("#{@apptmp}/sample_project/public/admin/javascripts/application.js")
|
|
@@ -60,14 +60,14 @@ describe "AdminAppGenerator" do
|
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
it "should generate the master app" do
|
|
63
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=activerecord') }
|
|
63
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=activerecord') }
|
|
64
64
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project", '--admin-name=master') }
|
|
65
65
|
assert_file_exists("#{@apptmp}/sample_project/master/app.rb")
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
# users can override certain templates from a generators/templates folder in the destination_root
|
|
69
69
|
it "should use custom generator templates from the project root, if they exist" do
|
|
70
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=activerecord') }
|
|
70
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=activerecord') }
|
|
71
71
|
custom_template_path = "#{@apptmp}/sample_project/generators/templates/slim/app/layouts/"
|
|
72
72
|
`mkdir -p #{custom_template_path} && echo "h1 = 'Hello, custom generator' " > #{custom_template_path}application.slim.tt`
|
|
73
73
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
@@ -81,9 +81,9 @@ describe "AdminAppGenerator" do
|
|
|
81
81
|
|
|
82
82
|
describe "renderers" do
|
|
83
83
|
it 'should correctly generate a new padrino admin application with haml renderer (default)' do
|
|
84
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=activerecord', '-e=haml') }
|
|
84
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=activerecord', '-e=haml') }
|
|
85
85
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
86
|
-
|
|
86
|
+
assert_dir_exists("#{@apptmp}/sample_project/admin/views")
|
|
87
87
|
assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/_form.haml")
|
|
88
88
|
assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/edit.haml")
|
|
89
89
|
assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/index.haml")
|
|
@@ -96,9 +96,9 @@ describe "AdminAppGenerator" do
|
|
|
96
96
|
end
|
|
97
97
|
|
|
98
98
|
it 'should correctly generate a new padrino admin application with erb renderer' do
|
|
99
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=activerecord', '-e=erb') }
|
|
99
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=activerecord', '-e=erb') }
|
|
100
100
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
101
|
-
|
|
101
|
+
assert_dir_exists("#{@apptmp}/sample_project/admin/views")
|
|
102
102
|
assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/_form.erb")
|
|
103
103
|
assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/edit.erb")
|
|
104
104
|
assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/index.erb")
|
|
@@ -111,9 +111,9 @@ describe "AdminAppGenerator" do
|
|
|
111
111
|
end
|
|
112
112
|
|
|
113
113
|
it 'should correctly generate a new padrino admin application with slim renderer' do
|
|
114
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=activerecord', '-e=slim') }
|
|
114
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=activerecord', '-e=slim') }
|
|
115
115
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
116
|
-
|
|
116
|
+
assert_dir_exists("#{@apptmp}/sample_project/admin/views")
|
|
117
117
|
assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/_form.slim")
|
|
118
118
|
assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/edit.slim")
|
|
119
119
|
assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/index.slim")
|
|
@@ -127,7 +127,7 @@ describe "AdminAppGenerator" do
|
|
|
127
127
|
end
|
|
128
128
|
|
|
129
129
|
it 'should correctly generate a new padrino admin application with a custom model' do
|
|
130
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=activerecord', '-e=slim') }
|
|
130
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=activerecord', '-e=slim') }
|
|
131
131
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project", '-m=User') }
|
|
132
132
|
assert_no_match_in_file(/[^_]account/i, "#{@apptmp}/sample_project/admin/controllers/users.rb")
|
|
133
133
|
assert_match_in_file(/[^_]user/i, "#{@apptmp}/sample_project/admin/controllers/users.rb")
|
|
@@ -151,16 +151,16 @@ describe "AdminAppGenerator" do
|
|
|
151
151
|
# Remember that --root/-r in the admin_app generator refers to the project's location, not the admin's location
|
|
152
152
|
# inside it. See https://github.com/padrino/padrino-framework/issues/854#issuecomment-14749356
|
|
153
153
|
skip
|
|
154
|
-
# capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=activerecord', '-e=haml') }
|
|
154
|
+
# capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=activerecord', '-e=haml') }
|
|
155
155
|
# capture_io { generate(:admin_app,"-a=/admin", "--root=#{@apptmp}/sample_project") }
|
|
156
|
-
#
|
|
157
|
-
#
|
|
156
|
+
# assert_dir_exists("#{@apptmp}/sample_project")
|
|
157
|
+
# assert_dir_exists("#{@apptmp}/sample_project/admin")
|
|
158
158
|
# assert_file_exists("#{@apptmp}/sample_project/admin/app.rb")
|
|
159
159
|
# assert_file_exists("#{@apptmp}/sample_project/admin/controllers")
|
|
160
160
|
# assert_file_exists("#{@apptmp}/sample_project/admin/controllers/accounts.rb")
|
|
161
161
|
# assert_file_exists("#{@apptmp}/sample_project/admin/controllers/base.rb")
|
|
162
162
|
# assert_file_exists("#{@apptmp}/sample_project/admin/controllers/sessions.rb")
|
|
163
|
-
#
|
|
163
|
+
# assert_dir_exists("#{@apptmp}/sample_project/admin/views")
|
|
164
164
|
# assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/_form.haml")
|
|
165
165
|
# assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/edit.haml")
|
|
166
166
|
# assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/index.haml")
|
|
@@ -170,8 +170,8 @@ describe "AdminAppGenerator" do
|
|
|
170
170
|
# assert_file_exists("#{@apptmp}/sample_project/admin/views/base/index.haml")
|
|
171
171
|
# assert_file_exists("#{@apptmp}/sample_project/admin/views/layouts/application.haml")
|
|
172
172
|
# assert_file_exists("#{@apptmp}/sample_project/admin/views/sessions/new.haml")
|
|
173
|
-
#
|
|
174
|
-
#
|
|
173
|
+
# assert_dir_exists("#{@apptmp}/sample_project/public/admin")
|
|
174
|
+
# assert_dir_exists("#{@apptmp}/sample_project/public/admin/stylesheets")
|
|
175
175
|
# assert_file_exists("#{@apptmp}/sample_project/models/account.rb")
|
|
176
176
|
# assert_no_file_exists("#{@apptmp}/sample_project/models/account.rb")
|
|
177
177
|
# assert_file_exists("#{@apptmp}/sample_project/db/seeds.rb")
|
|
@@ -181,26 +181,40 @@ describe "AdminAppGenerator" do
|
|
|
181
181
|
|
|
182
182
|
describe "activerecord middleware" do
|
|
183
183
|
it 'should add it for #activerecord' do
|
|
184
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=activerecord', '-e=haml') }
|
|
184
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=activerecord', '-e=haml') }
|
|
185
185
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
186
|
-
assert_match_in_file(/ use
|
|
186
|
+
assert_match_in_file(/ use ConnectionPoolManagement/m, "#{@apptmp}/sample_project/admin/app.rb")
|
|
187
187
|
end
|
|
188
188
|
|
|
189
189
|
it 'should add it #minirecord' do
|
|
190
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=minirecord', '-e=haml') }
|
|
190
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=minirecord', '-e=haml') }
|
|
191
191
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
192
|
-
assert_match_in_file(/ use
|
|
192
|
+
assert_match_in_file(/ use ConnectionPoolManagement/m, "#{@apptmp}/sample_project/admin/app.rb")
|
|
193
193
|
end
|
|
194
194
|
|
|
195
195
|
it 'should not add it for #datamapper' do
|
|
196
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=datamapper', '-e=haml') }
|
|
196
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=datamapper', '-e=haml') }
|
|
197
197
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
198
|
-
assert_no_match_in_file(/ use
|
|
198
|
+
assert_no_match_in_file(/ use ConnectionPoolManagement/m, "#{@apptmp}/sample_project/admin/app.rb")
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
describe "datamapper middleware" do
|
|
203
|
+
it 'should add it for #datamapper' do
|
|
204
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=datamapper', '-e=haml') }
|
|
205
|
+
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
206
|
+
assert_match_in_file(/ use IdentityMap/m, "#{@apptmp}/sample_project/admin/app.rb")
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
it 'should not add it for #activerecord' do
|
|
210
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=activerecord', '-e=haml') }
|
|
211
|
+
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
212
|
+
assert_no_match_in_file(/ use IdentityMap/m, "#{@apptmp}/sample_project/admin/app.rb")
|
|
199
213
|
end
|
|
200
214
|
end
|
|
201
215
|
|
|
202
216
|
it 'should not conflict with existing seeds file' do
|
|
203
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=activerecord', '-e=erb') }
|
|
217
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=activerecord', '-e=erb') }
|
|
204
218
|
|
|
205
219
|
# Add seeds file
|
|
206
220
|
FileUtils.mkdir_p @apptmp + '/sample_project/db' unless File.exist?(@apptmp + '/sample_project/db')
|
|
@@ -212,7 +226,7 @@ describe "AdminAppGenerator" do
|
|
|
212
226
|
refute_match /Overwrite\s.*?\/db\/seeds.rb/, out
|
|
213
227
|
|
|
214
228
|
assert_file_exists "#{@apptmp}/sample_project/db/seeds.old"
|
|
215
|
-
assert_match_in_file 'Account.
|
|
229
|
+
assert_match_in_file 'Account.new(', "#{@apptmp}/sample_project/db/seeds.rb"
|
|
216
230
|
end
|
|
217
231
|
end
|
|
218
232
|
end
|
|
@@ -1,16 +1,5 @@
|
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../helper')
|
|
2
|
-
|
|
3
|
-
class Person
|
|
4
|
-
def self.properties
|
|
5
|
-
[:id, :name, :age, :email].map { |c| OpenStruct.new(:name => c) }
|
|
6
|
-
end
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
class Page
|
|
10
|
-
def self.properties
|
|
11
|
-
[:id, :name, :body].map { |c| OpenStruct.new(:name => c) }
|
|
12
|
-
end
|
|
13
|
-
end
|
|
2
|
+
require File.join(File.dirname(__FILE__), '../fixtures/sequel')
|
|
14
3
|
|
|
15
4
|
describe "AdminPageGenerator" do
|
|
16
5
|
before do
|
|
@@ -30,100 +19,100 @@ describe "AdminPageGenerator" do
|
|
|
30
19
|
end
|
|
31
20
|
|
|
32
21
|
it 'should fail without an existent model' do
|
|
33
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=activerecord') }
|
|
22
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=activerecord') }
|
|
34
23
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
35
24
|
assert_raises(Padrino::Admin::Generators::OrmError) { generate(:admin_page, 'foo', "-r=#{@apptmp}/sample_project") }
|
|
36
25
|
end
|
|
37
26
|
|
|
38
27
|
it 'should correctly generate a new page' do
|
|
39
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=
|
|
28
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=sequel','-e=haml') }
|
|
40
29
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
41
|
-
capture_io { generate(:model, '
|
|
42
|
-
capture_io { generate(:admin_page, '
|
|
43
|
-
assert_file_exists "#{@apptmp}/sample_project/admin/controllers/
|
|
44
|
-
assert_match_in_file "SampleProject::Admin.controllers :
|
|
45
|
-
assert_match_in_file "role.project_module :
|
|
30
|
+
capture_io { generate(:model, 'friend', "name:string", "age:integer", "email:string", "--root=#{@apptmp}/sample_project") }
|
|
31
|
+
capture_io { generate(:admin_page, 'friend', "--root=#{@apptmp}/sample_project") }
|
|
32
|
+
assert_file_exists "#{@apptmp}/sample_project/admin/controllers/friends.rb"
|
|
33
|
+
assert_match_in_file "SampleProject::Admin.controllers :friends do", "#{@apptmp}/sample_project/admin/controllers/friends.rb"
|
|
34
|
+
assert_match_in_file "role.project_module :friends, '/friends'", "#{@apptmp}/sample_project/admin/app.rb"
|
|
46
35
|
assert_match_in_file "elsif Padrino.env == :development && params[:bypass]", "#{@apptmp}/sample_project/admin/controllers/sessions.rb"
|
|
47
36
|
end
|
|
48
37
|
|
|
49
38
|
# users can override certain templates from a generators/templates folder in the destination_root
|
|
50
39
|
it "should use custom generator templates from the project root, if they exist" do
|
|
51
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=
|
|
40
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=sequel','-e=haml') }
|
|
52
41
|
custom_template_path = "#{@apptmp}/sample_project/generators/templates/haml/page/"
|
|
53
42
|
`mkdir -p #{custom_template_path} && echo "%h1= 'Hello, custom generator' " > #{custom_template_path}index.haml.tt`
|
|
54
43
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
55
|
-
capture_io { generate(:model, '
|
|
56
|
-
capture_io { generate(:admin_page, '
|
|
57
|
-
assert_match_in_file(/Hello, custom generator/, "#{@apptmp}/sample_project/admin/views/
|
|
44
|
+
capture_io { generate(:model, 'friend', "name:string", "age:integer", "email:string", "--root=#{@apptmp}/sample_project") }
|
|
45
|
+
capture_io { generate(:admin_page, 'friend', "--root=#{@apptmp}/sample_project") }
|
|
46
|
+
assert_match_in_file(/Hello, custom generator/, "#{@apptmp}/sample_project/admin/views/friends/index.haml")
|
|
58
47
|
end
|
|
59
48
|
|
|
60
49
|
describe "renderers" do
|
|
61
50
|
it 'should correctly generate a new page with haml' do
|
|
62
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=
|
|
51
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=sequel','-e=haml') }
|
|
63
52
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
64
|
-
capture_io { generate(:model, '
|
|
65
|
-
capture_io { generate(:admin_page, '
|
|
66
|
-
assert_file_exists "#{@apptmp}/sample_project/admin/views/
|
|
67
|
-
assert_file_exists "#{@apptmp}/sample_project/admin/views/
|
|
68
|
-
assert_file_exists "#{@apptmp}/sample_project/admin/views/
|
|
69
|
-
assert_file_exists "#{@apptmp}/sample_project/admin/views/
|
|
53
|
+
capture_io { generate(:model, 'friend', "name:string", "age:integer", "email:string", "--root=#{@apptmp}/sample_project") }
|
|
54
|
+
capture_io { generate(:admin_page, 'friend', "--root=#{@apptmp}/sample_project") }
|
|
55
|
+
assert_file_exists "#{@apptmp}/sample_project/admin/views/friends/_form.haml"
|
|
56
|
+
assert_file_exists "#{@apptmp}/sample_project/admin/views/friends/edit.haml"
|
|
57
|
+
assert_file_exists "#{@apptmp}/sample_project/admin/views/friends/index.haml"
|
|
58
|
+
assert_file_exists "#{@apptmp}/sample_project/admin/views/friends/new.haml"
|
|
70
59
|
%w(name age email).each do |field|
|
|
71
|
-
assert_match_in_file "label :#{field}", "#{@apptmp}/sample_project/admin/views/
|
|
72
|
-
assert_match_in_file "text_field :#{field}", "#{@apptmp}/sample_project/admin/views/
|
|
60
|
+
assert_match_in_file "label :#{field}", "#{@apptmp}/sample_project/admin/views/friends/_form.haml"
|
|
61
|
+
assert_match_in_file "text_field :#{field}", "#{@apptmp}/sample_project/admin/views/friends/_form.haml"
|
|
73
62
|
end
|
|
74
63
|
assert_match_in_file "check_box_tag :bypass", "#{@apptmp}/sample_project/admin/views/sessions/new.haml"
|
|
75
64
|
end
|
|
76
65
|
|
|
77
66
|
it 'should correctly generate a new page with erb' do
|
|
78
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=
|
|
67
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=sequel','-e=erb') }
|
|
79
68
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
80
|
-
capture_io { generate(:model, '
|
|
81
|
-
capture_io { generate(:admin_page, '
|
|
82
|
-
assert_file_exists "#{@apptmp}/sample_project/admin/views/
|
|
83
|
-
assert_file_exists "#{@apptmp}/sample_project/admin/views/
|
|
84
|
-
assert_file_exists "#{@apptmp}/sample_project/admin/views/
|
|
85
|
-
assert_file_exists "#{@apptmp}/sample_project/admin/views/
|
|
69
|
+
capture_io { generate(:model, 'friend', "name:string", "age:integer", "email:string", "--root=#{@apptmp}/sample_project") }
|
|
70
|
+
capture_io { generate(:admin_page, 'friend', "--root=#{@apptmp}/sample_project") }
|
|
71
|
+
assert_file_exists "#{@apptmp}/sample_project/admin/views/friends/_form.erb"
|
|
72
|
+
assert_file_exists "#{@apptmp}/sample_project/admin/views/friends/edit.erb"
|
|
73
|
+
assert_file_exists "#{@apptmp}/sample_project/admin/views/friends/index.erb"
|
|
74
|
+
assert_file_exists "#{@apptmp}/sample_project/admin/views/friends/new.erb"
|
|
86
75
|
%w(name age email).each do |field|
|
|
87
|
-
assert_match_in_file "label :#{field}", "#{@apptmp}/sample_project/admin/views/
|
|
88
|
-
assert_match_in_file "text_field :#{field}", "#{@apptmp}/sample_project/admin/views/
|
|
76
|
+
assert_match_in_file "label :#{field}", "#{@apptmp}/sample_project/admin/views/friends/_form.erb"
|
|
77
|
+
assert_match_in_file "text_field :#{field}", "#{@apptmp}/sample_project/admin/views/friends/_form.erb"
|
|
89
78
|
end
|
|
90
79
|
assert_match_in_file "check_box_tag :bypass", "#{@apptmp}/sample_project/admin/views/sessions/new.erb"
|
|
91
80
|
end
|
|
92
81
|
|
|
93
82
|
it 'should correctly generate a new page with slim' do
|
|
94
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=
|
|
83
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=sequel','-e=slim') }
|
|
95
84
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
96
|
-
capture_io { generate(:model, '
|
|
97
|
-
capture_io { generate(:admin_page, '
|
|
98
|
-
assert_file_exists "#{@apptmp}/sample_project/admin/views/
|
|
99
|
-
assert_file_exists "#{@apptmp}/sample_project/admin/views/
|
|
100
|
-
assert_file_exists "#{@apptmp}/sample_project/admin/views/
|
|
101
|
-
assert_file_exists "#{@apptmp}/sample_project/admin/views/
|
|
85
|
+
capture_io { generate(:model, 'friend', "name:string", "age:integer", "email:string", "--root=#{@apptmp}/sample_project") }
|
|
86
|
+
capture_io { generate(:admin_page, 'friend', "--root=#{@apptmp}/sample_project") }
|
|
87
|
+
assert_file_exists "#{@apptmp}/sample_project/admin/views/friends/_form.slim"
|
|
88
|
+
assert_file_exists "#{@apptmp}/sample_project/admin/views/friends/edit.slim"
|
|
89
|
+
assert_file_exists "#{@apptmp}/sample_project/admin/views/friends/index.slim"
|
|
90
|
+
assert_file_exists "#{@apptmp}/sample_project/admin/views/friends/new.slim"
|
|
102
91
|
%w(name age email).each do |field|
|
|
103
|
-
assert_match_in_file "label :#{field}", "#{@apptmp}/sample_project/admin/views/
|
|
104
|
-
assert_match_in_file "text_field :#{field}", "#{@apptmp}/sample_project/admin/views/
|
|
92
|
+
assert_match_in_file "label :#{field}", "#{@apptmp}/sample_project/admin/views/friends/_form.slim"
|
|
93
|
+
assert_match_in_file "text_field :#{field}", "#{@apptmp}/sample_project/admin/views/friends/_form.slim"
|
|
105
94
|
end
|
|
106
95
|
assert_match_in_file "check_box_tag :bypass", "#{@apptmp}/sample_project/admin/views/sessions/new.slim"
|
|
107
96
|
end
|
|
108
97
|
end
|
|
109
98
|
|
|
110
99
|
it 'should correctly generate a new padrino admin application with multiple models at the same time' do
|
|
111
|
-
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=
|
|
100
|
+
capture_io { generate(:project, 'sample_project', '-e=slim', "--root=#{@apptmp}", '-d=sequel','-e=haml') }
|
|
112
101
|
capture_io { generate(:admin_app, "--root=#{@apptmp}/sample_project") }
|
|
113
|
-
capture_io { generate(:model, '
|
|
102
|
+
capture_io { generate(:model, 'friend', "name:string", "age:integer", "email:string", "-root=#{@apptmp}/sample_project") }
|
|
114
103
|
capture_io { generate(:model, 'page', "name:string", "body:string", "-root=#{@apptmp}/sample_project") }
|
|
115
|
-
capture_io { generate(:admin_page, '
|
|
116
|
-
# For
|
|
117
|
-
assert_file_exists "#{@apptmp}/sample_project/admin/controllers/
|
|
118
|
-
assert_file_exists "#{@apptmp}/sample_project/admin/views/
|
|
119
|
-
assert_file_exists "#{@apptmp}/sample_project/admin/views/
|
|
120
|
-
assert_file_exists "#{@apptmp}/sample_project/admin/views/
|
|
121
|
-
assert_file_exists "#{@apptmp}/sample_project/admin/views/
|
|
104
|
+
capture_io { generate(:admin_page, 'friend', 'page', "--root=#{@apptmp}/sample_project") }
|
|
105
|
+
# For Friend
|
|
106
|
+
assert_file_exists "#{@apptmp}/sample_project/admin/controllers/friends.rb"
|
|
107
|
+
assert_file_exists "#{@apptmp}/sample_project/admin/views/friends/_form.haml"
|
|
108
|
+
assert_file_exists "#{@apptmp}/sample_project/admin/views/friends/edit.haml"
|
|
109
|
+
assert_file_exists "#{@apptmp}/sample_project/admin/views/friends/index.haml"
|
|
110
|
+
assert_file_exists "#{@apptmp}/sample_project/admin/views/friends/new.haml"
|
|
122
111
|
%w(name age email).each do |field|
|
|
123
|
-
assert_match_in_file "label :#{field}", "#{@apptmp}/sample_project/admin/views/
|
|
124
|
-
assert_match_in_file "text_field :#{field}", "#{@apptmp}/sample_project/admin/views/
|
|
112
|
+
assert_match_in_file "label :#{field}", "#{@apptmp}/sample_project/admin/views/friends/_form.haml"
|
|
113
|
+
assert_match_in_file "text_field :#{field}", "#{@apptmp}/sample_project/admin/views/friends/_form.haml"
|
|
125
114
|
end
|
|
126
|
-
assert_match_in_file "role.project_module :
|
|
115
|
+
assert_match_in_file "role.project_module :friends, '/friends'", "#{@apptmp}/sample_project/admin/app.rb"
|
|
127
116
|
# For Page
|
|
128
117
|
assert_file_exists "#{@apptmp}/sample_project/admin/controllers/pages.rb"
|
|
129
118
|
assert_file_exists "#{@apptmp}/sample_project/admin/views/pages/_form.haml"
|
data/test/helper.rb
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
ENV['RACK_ENV'] = 'test'
|
|
2
2
|
PADRINO_ROOT = File.dirname(__FILE__) unless defined? PADRINO_ROOT
|
|
3
3
|
|
|
4
|
-
require File.expand_path('../../../load_paths', __FILE__)
|
|
5
4
|
require 'minitest/autorun'
|
|
6
5
|
require 'minitest/pride'
|
|
7
6
|
require 'mocha/setup'
|
|
8
7
|
require 'rack/test'
|
|
9
|
-
require 'rack'
|
|
10
8
|
require 'thor/group'
|
|
9
|
+
require 'sequel/model'
|
|
11
10
|
require 'padrino-admin'
|
|
12
|
-
|
|
13
|
-
require '
|
|
14
|
-
require '
|
|
15
|
-
require 'dm-aggregates'
|
|
11
|
+
|
|
12
|
+
require 'ext/minitest-spec'
|
|
13
|
+
require 'ext/rack-test-methods'
|
|
16
14
|
|
|
17
15
|
Padrino::Generators.load_components!
|
|
18
16
|
|
|
@@ -32,8 +30,10 @@ class MiniTest::Spec
|
|
|
32
30
|
# given. Used in setup or individual spec methods to establish
|
|
33
31
|
# the application.
|
|
34
32
|
def mock_app(base=Padrino::Application, &block)
|
|
35
|
-
@app = Sinatra.new
|
|
36
|
-
|
|
33
|
+
@app = Sinatra.new base do
|
|
34
|
+
register Padrino::Helpers
|
|
35
|
+
instance_eval &block
|
|
36
|
+
end
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
def app
|
|
@@ -44,34 +44,4 @@ class MiniTest::Spec
|
|
|
44
44
|
def generate(name, *params)
|
|
45
45
|
"Padrino::Generators::#{name.to_s.camelize}".constantize.start(params)
|
|
46
46
|
end
|
|
47
|
-
|
|
48
|
-
# Assert_file_exists('/tmp/app')
|
|
49
|
-
def assert_file_exists(file_path)
|
|
50
|
-
assert File.exist?(file_path), "File at path '#{file_path}' does not exist!"
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# Assert_no_file_exists('/tmp/app')
|
|
54
|
-
def assert_no_file_exists(file_path)
|
|
55
|
-
assert !File.exist?(file_path), "File should not exist at path '#{file_path}' but was found!"
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# Asserts that a file matches the pattern
|
|
59
|
-
def assert_match_in_file(pattern, file)
|
|
60
|
-
File.exist?(file) ? assert_match(pattern, File.read(file)) : assert_file_exists(file)
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def assert_no_match_in_file(pattern, file)
|
|
64
|
-
File.exist?(file) ? refute_match(pattern, File.read(file)) : assert_file_exists(file)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
# Delegate other missing methods to response.
|
|
68
|
-
def method_missing(name, *args, &block)
|
|
69
|
-
if response && response.respond_to?(name)
|
|
70
|
-
response.send(name, *args, &block)
|
|
71
|
-
else
|
|
72
|
-
super(name, *args, &block)
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
alias :response :last_response
|
|
77
47
|
end
|
|
@@ -3,7 +3,7 @@ require File.expand_path(File.dirname(__FILE__) + '/helper')
|
|
|
3
3
|
describe "AdminApplication" do
|
|
4
4
|
|
|
5
5
|
def setup
|
|
6
|
-
load_fixture '
|
|
6
|
+
load_fixture 'sequel'
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
describe "session id setting" do
|
|
@@ -268,4 +268,21 @@ describe "AdminApplication" do
|
|
|
268
268
|
get "/modules"
|
|
269
269
|
assert_equal "admin => /admin", body
|
|
270
270
|
end
|
|
271
|
+
|
|
272
|
+
it 'should use different access control for different apps' do
|
|
273
|
+
app1 = Sinatra.new Padrino::Application do
|
|
274
|
+
register Padrino::Admin::AccessControl
|
|
275
|
+
access_control.roles_for :any do |role|
|
|
276
|
+
role.project_module :foo, "/foo"
|
|
277
|
+
end
|
|
278
|
+
end
|
|
279
|
+
app2 = Sinatra.new Padrino::Application do
|
|
280
|
+
register Padrino::Admin::AccessControl
|
|
281
|
+
access_control.roles_for :any do |role|
|
|
282
|
+
role.project_module :bar, "/bar"
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
assert_equal '/foo', app1.access_control.project_modules(:any).first.path
|
|
286
|
+
assert_equal '/bar', app2.access_control.project_modules(:any).first.path
|
|
287
|
+
end
|
|
271
288
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: padrino-admin
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.12.
|
|
4
|
+
version: 0.12.9
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Padrino Team
|
|
@@ -11,7 +11,7 @@ authors:
|
|
|
11
11
|
autorequire:
|
|
12
12
|
bindir: bin
|
|
13
13
|
cert_chain: []
|
|
14
|
-
date:
|
|
14
|
+
date: 2018-02-23 00:00:00.000000000 Z
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|
|
17
17
|
name: padrino-core
|
|
@@ -19,54 +19,54 @@ dependencies:
|
|
|
19
19
|
requirements:
|
|
20
20
|
- - '='
|
|
21
21
|
- !ruby/object:Gem::Version
|
|
22
|
-
version: 0.12.
|
|
22
|
+
version: 0.12.9
|
|
23
23
|
type: :runtime
|
|
24
24
|
prerelease: false
|
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
26
26
|
requirements:
|
|
27
27
|
- - '='
|
|
28
28
|
- !ruby/object:Gem::Version
|
|
29
|
-
version: 0.12.
|
|
29
|
+
version: 0.12.9
|
|
30
30
|
- !ruby/object:Gem::Dependency
|
|
31
31
|
name: padrino-helpers
|
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
|
33
33
|
requirements:
|
|
34
34
|
- - '='
|
|
35
35
|
- !ruby/object:Gem::Version
|
|
36
|
-
version: 0.12.
|
|
36
|
+
version: 0.12.9
|
|
37
37
|
type: :runtime
|
|
38
38
|
prerelease: false
|
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
|
40
40
|
requirements:
|
|
41
41
|
- - '='
|
|
42
42
|
- !ruby/object:Gem::Version
|
|
43
|
-
version: 0.12.
|
|
43
|
+
version: 0.12.9
|
|
44
44
|
- !ruby/object:Gem::Dependency
|
|
45
45
|
name: therubyracer
|
|
46
46
|
requirement: !ruby/object:Gem::Requirement
|
|
47
47
|
requirements:
|
|
48
|
-
- -
|
|
48
|
+
- - ~>
|
|
49
49
|
- !ruby/object:Gem::Version
|
|
50
50
|
version: 0.11.1
|
|
51
51
|
type: :development
|
|
52
52
|
prerelease: false
|
|
53
53
|
version_requirements: !ruby/object:Gem::Requirement
|
|
54
54
|
requirements:
|
|
55
|
-
- -
|
|
55
|
+
- - ~>
|
|
56
56
|
- !ruby/object:Gem::Version
|
|
57
57
|
version: 0.11.1
|
|
58
58
|
- !ruby/object:Gem::Dependency
|
|
59
59
|
name: less
|
|
60
60
|
requirement: !ruby/object:Gem::Requirement
|
|
61
61
|
requirements:
|
|
62
|
-
- -
|
|
62
|
+
- - ~>
|
|
63
63
|
- !ruby/object:Gem::Version
|
|
64
64
|
version: 2.2.2
|
|
65
65
|
type: :development
|
|
66
66
|
prerelease: false
|
|
67
67
|
version_requirements: !ruby/object:Gem::Requirement
|
|
68
68
|
requirements:
|
|
69
|
-
- -
|
|
69
|
+
- - ~>
|
|
70
70
|
- !ruby/object:Gem::Version
|
|
71
71
|
version: 2.2.2
|
|
72
72
|
description: Admin View for Padrino applications
|
|
@@ -76,9 +76,9 @@ extensions: []
|
|
|
76
76
|
extra_rdoc_files:
|
|
77
77
|
- README.rdoc
|
|
78
78
|
files:
|
|
79
|
-
-
|
|
80
|
-
-
|
|
81
|
-
-
|
|
79
|
+
- .document
|
|
80
|
+
- .gitignore
|
|
81
|
+
- .yardopts
|
|
82
82
|
- LICENSE.txt
|
|
83
83
|
- README.rdoc
|
|
84
84
|
- Rakefile
|
|
@@ -263,7 +263,7 @@ files:
|
|
|
263
263
|
- lib/padrino-admin/locale/orm/zh_cn.yml
|
|
264
264
|
- lib/padrino-admin/locale/orm/zh_tw.yml
|
|
265
265
|
- padrino-admin.gemspec
|
|
266
|
-
- test/fixtures/
|
|
266
|
+
- test/fixtures/sequel.rb
|
|
267
267
|
- test/generators/test_account_model_generator.rb
|
|
268
268
|
- test/generators/test_admin_app_generator.rb
|
|
269
269
|
- test/generators/test_admin_page_generator.rb
|
|
@@ -276,22 +276,22 @@ licenses:
|
|
|
276
276
|
metadata: {}
|
|
277
277
|
post_install_message:
|
|
278
278
|
rdoc_options:
|
|
279
|
-
-
|
|
279
|
+
- --charset=UTF-8
|
|
280
280
|
require_paths:
|
|
281
281
|
- lib
|
|
282
282
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
283
283
|
requirements:
|
|
284
|
-
- -
|
|
284
|
+
- - ! '>='
|
|
285
285
|
- !ruby/object:Gem::Version
|
|
286
286
|
version: '0'
|
|
287
287
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
288
288
|
requirements:
|
|
289
|
-
- -
|
|
289
|
+
- - ! '>='
|
|
290
290
|
- !ruby/object:Gem::Version
|
|
291
291
|
version: 1.3.6
|
|
292
292
|
requirements: []
|
|
293
293
|
rubyforge_project: padrino-admin
|
|
294
|
-
rubygems_version: 2.
|
|
294
|
+
rubygems_version: 2.6.14
|
|
295
295
|
signing_key:
|
|
296
296
|
specification_version: 4
|
|
297
297
|
summary: Admin Dashboard for Padrino
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
require 'jdbc/sqlite3' if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
|
|
2
|
-
require 'digest/sha1'
|
|
3
|
-
|
|
4
|
-
DataMapper.setup(:default, 'sqlite3::memory:')
|
|
5
|
-
|
|
6
|
-
# Fake Category Model
|
|
7
|
-
class Category
|
|
8
|
-
include DataMapper::Resource
|
|
9
|
-
property :id, Serial
|
|
10
|
-
property :name, String
|
|
11
|
-
belongs_to :account
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
# Fake Account Model
|
|
15
|
-
class Account
|
|
16
|
-
include DataMapper::Resource
|
|
17
|
-
include DataMapper::Validate
|
|
18
|
-
attr_accessor :password, :password_confirmation
|
|
19
|
-
|
|
20
|
-
# Properties
|
|
21
|
-
property :id, Serial
|
|
22
|
-
property :name, String
|
|
23
|
-
property :surname, String
|
|
24
|
-
property :email, String
|
|
25
|
-
property :crypted_password, String
|
|
26
|
-
property :salt, String
|
|
27
|
-
property :role, String
|
|
28
|
-
|
|
29
|
-
has n, :categories
|
|
30
|
-
def self.admin; first(:role => "admin"); end
|
|
31
|
-
def self.editor; first(:role => "editor"); end
|
|
32
|
-
|
|
33
|
-
##
|
|
34
|
-
# This method is used from AuthenticationHelper
|
|
35
|
-
#
|
|
36
|
-
def self.find_by_id(id)
|
|
37
|
-
get(id)
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
DataMapper.auto_migrate!
|
|
42
|
-
|
|
43
|
-
# We build some fake accounts
|
|
44
|
-
admin = Account.create(:name => "DAddYE", :role => "admin", :email => "d.dagostino@lipsiasoft.com",
|
|
45
|
-
:password => "some", :password_confirmation => "some")
|
|
46
|
-
editor = Account.create(:name => "Dexter", :role => "editor", :email => "editor@lipsiasoft.com",
|
|
47
|
-
:password => "some", :password_confirmation => "some")
|
|
48
|
-
|
|
49
|
-
%w(News Press HowTo).each do |c|
|
|
50
|
-
admin.categories.create(:name => c)
|
|
51
|
-
editor.categories.create(:name => c)
|
|
52
|
-
end
|