bootstrap-on 0.0.0

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.
Files changed (71) hide show
  1. data/.document +5 -0
  2. data/Gemfile +13 -0
  3. data/Gemfile.lock +90 -0
  4. data/LICENSE.txt +20 -0
  5. data/README.md +98 -0
  6. data/Rakefile +38 -0
  7. data/VERSION +1 -0
  8. data/bootstrap-on.gemspec +127 -0
  9. data/lib/bootstrap-on.rb +6 -0
  10. data/lib/bootstrap-on/bs_admin.rb +138 -0
  11. data/lib/bootstrap-on/bs_admin_page.rb +55 -0
  12. data/lib/bootstrap-on/templates/.DS_Store +0 -0
  13. data/lib/bootstrap-on/templates/account/.DS_Store +0 -0
  14. data/lib/bootstrap-on/templates/account/activerecord.rb.tt +38 -0
  15. data/lib/bootstrap-on/templates/account/couchrest.rb.tt +66 -0
  16. data/lib/bootstrap-on/templates/account/datamapper.rb.tt +55 -0
  17. data/lib/bootstrap-on/templates/account/mini_record.rb.tt +41 -0
  18. data/lib/bootstrap-on/templates/account/mongoid.rb.tt +53 -0
  19. data/lib/bootstrap-on/templates/account/mongomapper.rb.tt +46 -0
  20. data/lib/bootstrap-on/templates/account/seeds.rb.tt +28 -0
  21. data/lib/bootstrap-on/templates/account/sequel.rb.tt +52 -0
  22. data/lib/bootstrap-on/templates/app.rb.tt +36 -0
  23. data/lib/bootstrap-on/templates/app/controllers/base.rb +6 -0
  24. data/lib/bootstrap-on/templates/app/controllers/sessions.rb.tt +26 -0
  25. data/lib/bootstrap-on/templates/app/helpers/application_helper.rb +23 -0
  26. data/lib/bootstrap-on/templates/assets/.DS_Store +0 -0
  27. data/lib/bootstrap-on/templates/assets/css/bootstrap-responsive.css +815 -0
  28. data/lib/bootstrap-on/templates/assets/css/bootstrap-responsive.min.css +9 -0
  29. data/lib/bootstrap-on/templates/assets/css/bootstrap.css +4983 -0
  30. data/lib/bootstrap-on/templates/assets/css/bootstrap.min.css +9 -0
  31. data/lib/bootstrap-on/templates/assets/ico/apple-touch-icon-114-precomposed.png +0 -0
  32. data/lib/bootstrap-on/templates/assets/ico/apple-touch-icon-144-precomposed.png +0 -0
  33. data/lib/bootstrap-on/templates/assets/ico/apple-touch-icon-57-precomposed.png +0 -0
  34. data/lib/bootstrap-on/templates/assets/ico/apple-touch-icon-72-precomposed.png +0 -0
  35. data/lib/bootstrap-on/templates/assets/ico/favicon.ico +0 -0
  36. data/lib/bootstrap-on/templates/assets/img/glyphicons-halflings-white.png +0 -0
  37. data/lib/bootstrap-on/templates/assets/img/glyphicons-halflings.png +0 -0
  38. data/lib/bootstrap-on/templates/assets/js/.DS_Store +0 -0
  39. data/lib/bootstrap-on/templates/assets/js/bootstrap.js +1825 -0
  40. data/lib/bootstrap-on/templates/assets/js/bootstrap.min.js +6 -0
  41. data/lib/bootstrap-on/templates/assets/js/jquery-min.js +4 -0
  42. data/lib/bootstrap-on/templates/assets/js/jquery-ujs.js +92 -0
  43. data/lib/bootstrap-on/templates/assets/js/jquery.js +9404 -0
  44. data/lib/bootstrap-on/templates/erb/app/base/index.erb.tt +16 -0
  45. data/lib/bootstrap-on/templates/erb/app/layouts/application.erb.tt +79 -0
  46. data/lib/bootstrap-on/templates/erb/app/sessions/new.erb.tt +98 -0
  47. data/lib/bootstrap-on/templates/erb/page/_form.erb.tt +16 -0
  48. data/lib/bootstrap-on/templates/erb/page/edit.erb.tt +26 -0
  49. data/lib/bootstrap-on/templates/erb/page/index.erb.tt +41 -0
  50. data/lib/bootstrap-on/templates/erb/page/new.erb.tt +23 -0
  51. data/lib/bootstrap-on/templates/haml/app/base/index.haml.tt +23 -0
  52. data/lib/bootstrap-on/templates/haml/app/layouts/application.haml.tt +31 -0
  53. data/lib/bootstrap-on/templates/haml/app/sessions/new.haml.tt +30 -0
  54. data/lib/bootstrap-on/templates/haml/page/_form.haml.tt +12 -0
  55. data/lib/bootstrap-on/templates/haml/page/edit.haml.tt +15 -0
  56. data/lib/bootstrap-on/templates/haml/page/index.haml.tt +29 -0
  57. data/lib/bootstrap-on/templates/haml/page/new.haml.tt +14 -0
  58. data/lib/bootstrap-on/templates/page/controller.rb.tt +47 -0
  59. data/lib/bootstrap-on/templates/slim/app/base/index.slim.tt +23 -0
  60. data/lib/bootstrap-on/templates/slim/app/layouts/application.slim.tt +31 -0
  61. data/lib/bootstrap-on/templates/slim/app/sessions/new.slim.tt +31 -0
  62. data/lib/bootstrap-on/templates/slim/page/_form.slim.tt +14 -0
  63. data/lib/bootstrap-on/templates/slim/page/edit.slim.tt +16 -0
  64. data/lib/bootstrap-on/templates/slim/page/index.slim.tt +30 -0
  65. data/lib/bootstrap-on/templates/slim/page/new.slim.tt +15 -0
  66. data/test/bootstrap-on/test_bs_admin_generator.rb +332 -0
  67. data/test/bootstrap-on/test_bs_admin_page_generator.rb +132 -0
  68. data/test/helper.rb +98 -0
  69. data/test/load_paths.rb +6 -0
  70. data/test/test_bootstrap-on.rb +15 -0
  71. metadata +240 -0
@@ -0,0 +1,14 @@
1
+ .block
2
+ .secondary-navigation
3
+ %ul.wat-cf
4
+ %li.first=link_to pat(:list), url(:<%= @orm.name_plural %>, :index)
5
+ %li.active=link_to pat(:new), url(:<%= @orm.name_plural %>, :new)
6
+ .content
7
+ %h2.title
8
+ =pat(:new)
9
+ =mt(:<%= @orm.name_singular %>)
10
+ .inner
11
+ -form_for :<%= @orm.name_singular %>, url(:<%= @orm.name_plural %>, :create), :class => :form do |f|
12
+ =partial "<%= @orm.name_plural %>/form", :locals => { :f => f }
13
+
14
+ -content_for :sidebar, partial("base/sidebar")
@@ -0,0 +1,47 @@
1
+ Admin.controllers :<%= @orm.name_plural %> do
2
+
3
+ get :index do
4
+ @<%= @orm.name_plural %> = <%= @orm.all %>
5
+ render '<%= @orm.name_plural %>/index'
6
+ end
7
+
8
+ get :new do
9
+ @<%= @orm.name_singular %> = <%= @orm.build %>
10
+ render '<%= @orm.name_plural %>/new'
11
+ end
12
+
13
+ post :create do
14
+ @<%= @orm.name_singular %> = <%= @orm.build("params[:#{@orm.name_singular}]") %>
15
+ if <%= @orm.save %>
16
+ flash[:notice] = '<%= @orm.klass_name %> was successfully created.'
17
+ redirect url(:<%= @orm.name_plural %>, :edit, :id => @<%= @orm.name_singular%>.id)
18
+ else
19
+ render '<%= @orm.name_plural %>/new'
20
+ end
21
+ end
22
+
23
+ get :edit, :with => :id do
24
+ @<%= @orm.name_singular %> = <%= @orm.find("params[:id]") %>
25
+ render '<%= @orm.name_plural %>/edit'
26
+ end
27
+
28
+ put :update, :with => :id do
29
+ @<%= @orm.name_singular %> = <%= @orm.find("params[:id]") %>
30
+ if <%= @orm.update_attributes("params[:#{@orm.name_singular}]") %>
31
+ flash[:notice] = '<%= @orm.klass_name %> was successfully updated.'
32
+ redirect url(:<%= @orm.name_plural %>, :edit, :id => @<%= @orm.name_singular %>.id)
33
+ else
34
+ render '<%= @orm.name_plural %>/edit'
35
+ end
36
+ end
37
+
38
+ delete :destroy, :with => :id do
39
+ <%= @orm.name_singular %> = <%= @orm.find("params[:id]") %>
40
+ if <%= @orm.destroy %>
41
+ flash[:notice] = '<%= @orm.klass_name %> was successfully destroyed.'
42
+ else
43
+ flash[:error] = 'Unable to destroy <%= @orm.klass_name %>!'
44
+ end
45
+ redirect url(:<%= @orm.name_plural %>, :index)
46
+ end
47
+ end
@@ -0,0 +1,23 @@
1
+ #block-text.block
2
+ .content
3
+ h2.title Dashboard
4
+ .inner
5
+ p.first
6
+ ' Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
7
+ ' Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
8
+ ' Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
9
+ span.hightlight
10
+ | Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
11
+ p
12
+ span.small
13
+ | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore
14
+ p
15
+ span.gray
16
+ | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore
17
+ hr
18
+ p
19
+ ' Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
20
+ ' Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
21
+ ' Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
22
+ span.hightlight
23
+ | Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
@@ -0,0 +1,31 @@
1
+ doctype html
2
+ html lang='en' xmlns='http://www.w3.org/1999/xhtml'
3
+ head
4
+ meta content='text/html; charset=utf-8' http-equiv='Content-Type'
5
+ title Padrino Admin
6
+ == stylesheet_link_tag 'base', 'themes/<%= options[:theme] %>/style'
7
+
8
+ body
9
+ #container
10
+ #header
11
+ h1 == link_to 'Padrino Admin', url(:base_index)
12
+ #user-navigation
13
+ ul.wat-cf
14
+ li == link_to pat(:profile), url(:<%= @model_plural %>, :edit, :id => current_account.id)
15
+ li == button_to pat(:logout), url(:sessions, :destroy), :method => :delete, :class => :button_to
16
+ #main-navigation
17
+ ul.wat-cf
18
+ - project_modules.each do |project_module|
19
+ li class=(:active if request.path_info =~ /^#{project_module.path}/)
20
+ == link_to project_module.human_name, project_module.path('/admin')
21
+ #wrapper.wat-cf
22
+ .flash == [:error, :warning, :notice].map { |type| flash_tag(type, :class => "message #{type}") }.join
23
+ #main
24
+ == yield
25
+ #footer
26
+ .block
27
+ p
28
+ ' Copyright &copy; #{Time.now.year} Your Site - Powered by
29
+ == link_to "Padrino v.#{Padrino.version}", 'http://www.padrinorb.com', :target => :_blank
30
+ #sidebar
31
+ == yield_content :sidebar
@@ -0,0 +1,31 @@
1
+ doctype html
2
+ html lang='en' xmlns='http://www.w3.org/1999/xhtml'
3
+ head
4
+ meta content='text/html; charset=utf-8' http-equiv='Content-Type'
5
+ title Padrino Admin
6
+ == stylesheet_link_tag 'base', 'themes/<%= options[:theme] %>/style'
7
+
8
+ body
9
+ #container
10
+ #box
11
+ h1 Padrino Admin
12
+ #block-login.block
13
+ h2 Login Box
14
+ .content.login
15
+ .flash == [:error, :warning, :notice].map { |type| flash_tag(type, :class => "message #{type}") }.join
16
+ - form_tag url(:sessions, :create), :class => 'form login' do
17
+ .group.wat-cf
18
+ .left
19
+ label.label.right Login
20
+ .right == text_field_tag :email, :value => params[:email], :class => :text_field
21
+ .group.wat-cf
22
+ .left
23
+ label.label.right Password
24
+ .right == password_field_tag :password, :value => params[:password], :class => :text_field
25
+ - if Padrino.env == :development
26
+ .group.wat-cf
27
+ .left
28
+ label.label.right Bypass login?
29
+ .right == check_box_tag :bypass
30
+ .group.navform.wat-cf
31
+ .right == submit_tag 'Sign In', :class => :button
@@ -0,0 +1,14 @@
1
+ <%- @orm.column_fields.each do |column| -%>
2
+ .group
3
+ == f.label :<%= column[:name] %>
4
+ == f.error_message_on :<%= column[:name] %>
5
+ == f.<%= column[:field_type] %> :<%= column[:name] %>, :class => :<%= column[:field_type] %>
6
+ br
7
+ span.description Ex: a simple text
8
+
9
+ <%- end -%>
10
+
11
+ .group.navform.wat-cf
12
+ == f.submit pat(:save), :class => :button
13
+ == "&nbsp;"
14
+ == f.submit pat(:cancel), :onclick => "window.location='#{url(:<%= @orm.name_plural %>, :index)}';return false", :class => :button
@@ -0,0 +1,16 @@
1
+ .block
2
+ .secondary-navigation
3
+ ul.wat-cf
4
+ li.first == link_to pat(:list), url(:<%= @orm.name_plural %>, :index)
5
+ li == link_to pat(:new), url(:<%= @orm.name_plural %>, :new)
6
+ li.active == link_to pat(:edit), url(:<%= @orm.name_plural %>, :edit, :id => @<%= @orm.name_singular %>.id)
7
+ .content
8
+ h2.title
9
+ = pat(:edit)
10
+ == "&nbsp;"
11
+ = mt(:<%= @orm.name_singular %>)
12
+ .inner
13
+ == form_for :<%= @orm.name_singular %>, url(:<%= @orm.name_plural %>, :update, :id => @<%= @orm.name_singular %>.id), :method => :put, :class => :form do |f|
14
+ == partial '<%= @orm.name_plural %>/form', :locals => { :f => f }
15
+
16
+ - content_for :sidebar, partial("base/sidebar")
@@ -0,0 +1,30 @@
1
+ .block
2
+ .secondary-navigation
3
+ ul.wat-cf
4
+ li.first.active == link_to pat(:list), url(:<%= @orm.name_plural %>, :index)
5
+ li == link_to pat(:new), url(:<%= @orm.name_plural %>, :new)
6
+ .content
7
+ h2.title
8
+ == pat(:all)
9
+ == '&nbsp;'
10
+ == mt(:<%= @orm.name_plural %>)
11
+ .inner
12
+ table.table
13
+ tr
14
+ <%- @orm.columns.each_with_index do |column, i| -%>
15
+ th<%= ".first" if i==0 %>=mat(:<%= @orm.name_singular %>, :<%= column.name %>)
16
+ <%- end -%>
17
+ th.last == '&nbsp;'
18
+ - @<%= @orm.name_plural %>.each do |<%= @orm.name_singular %>|
19
+ tr
20
+ <%- @orm.columns.each_with_index do |column, i| -%>
21
+ td<%= ".first" if i==0 %>=<%= @orm.name_singular %>.<%= column.name %>
22
+ <%- end -%>
23
+ td.last
24
+ == button_to pat(:edit), url(:<%= @orm.name_plural %>, :edit, :id => <%= @orm.name_singular %>.id), :method => :get, :class => :button_to
25
+ == ' | '
26
+ == button_to pat(:delete), url(:<%= @orm.name_plural %>, :destroy, :id => <%= @orm.name_singular %>.id), :method => :delete, :class => :button_to, :onsubmit => "return confirm('#{pat(:confirm)}')"
27
+ .actions-bar.wat-cf
28
+ .actions == '&nbsp;'
29
+
30
+ -content_for :sidebar, partial("base/sidebar")
@@ -0,0 +1,15 @@
1
+ .block
2
+ .secondary-navigation
3
+ ul.wat-cf
4
+ li.first == link_to pat(:list), url(:<%= @orm.name_plural %>, :index)
5
+ li.active == link_to pat(:new), url(:<%= @orm.name_plural %>, :new)
6
+ .content
7
+ h2.title
8
+ = pat(:new)
9
+ == '&nbsp;'
10
+ = mt(:<%= @orm.name_singular %>)
11
+ .inner
12
+ - form_for :<%= @orm.name_singular %>, url(:<%= @orm.name_plural %>, :create), :class => :form do |f|
13
+ == partial "<%= @orm.name_plural %>/form", :locals => { :f => f }
14
+
15
+ - content_for :sidebar, partial("base/sidebar")
@@ -0,0 +1,332 @@
1
+ require 'helper'
2
+
3
+ describe "BsAdminGenerator" do
4
+
5
+ def setup
6
+ @apptmp = "#{Dir.tmpdir}/padrino-tests/#{UUID.new.generate}"
7
+ `mkdir -p #{@apptmp}`
8
+ end
9
+
10
+ def teardown
11
+ `rm -rf #{@apptmp}`
12
+ end
13
+
14
+ describe 'the admin app generator' do
15
+
16
+ it 'should fail outside app root' do
17
+ out, err = capture_io { generate(:bs_admin, "-r=#{@apptmp}") }
18
+ assert_match(/not at the root/, out)
19
+ assert_no_file_exists('/tmp/admin')
20
+ end
21
+
22
+ it "should fail if we don't specify an orm" do
23
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-e=haml') }
24
+ assert_raises(SystemExit) { @out, @err = capture_io { generate(:bs_admin, "-r=#{@apptmp}/sample_project") } }
25
+ end
26
+
27
+ it 'should correctly generate a new padrino admin application with default renderer' do
28
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=activerecord', '-e=haml') }
29
+ capture_io { generate(:bs_admin, "--root=#{@apptmp}/sample_project") }
30
+ assert_file_exists("#{@apptmp}/sample_project")
31
+ assert_file_exists("#{@apptmp}/sample_project/admin")
32
+ assert_file_exists("#{@apptmp}/sample_project/admin/app.rb")
33
+ assert_file_exists("#{@apptmp}/sample_project/admin/controllers")
34
+ assert_file_exists("#{@apptmp}/sample_project/admin/controllers/accounts.rb")
35
+ assert_file_exists("#{@apptmp}/sample_project/admin/controllers/base.rb")
36
+ assert_file_exists("#{@apptmp}/sample_project/admin/controllers/sessions.rb")
37
+ assert_file_exists("#{@apptmp}/sample_project/admin/views")
38
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/_form.haml")
39
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/edit.haml")
40
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/index.haml")
41
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/new.haml")
42
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/base/index.haml")
43
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/sessions/new.haml")
44
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/base/index.haml")
45
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/layouts/application.haml")
46
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/sessions/new.haml")
47
+ assert_file_exists("#{@apptmp}/sample_project/public/admin")
48
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css")
49
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css/bootstrap.css")
50
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css/bootstrap.min.css")
51
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css/bootstrap-responsive.css")
52
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css/bootstrap-responsive.min.css")
53
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico")
54
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/apple-touch-icon-114-precomposed.png")
55
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/apple-touch-icon-144-precomposed.png")
56
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/apple-touch-icon-57-precomposed.png")
57
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/apple-touch-icon-72-precomposed.png")
58
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/favicon.ico")
59
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/img")
60
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/img/glyphicons-halflings-white.png")
61
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/img/glyphicons-halflings.png")
62
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js")
63
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/bootstrap.js")
64
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/bootstrap.min.js")
65
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/jquery-min.js")
66
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/jquery-ujs.js")
67
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/jquery.js")
68
+ assert_file_exists("#{@apptmp}/sample_project/models/account.rb")
69
+ assert_file_exists("#{@apptmp}/sample_project/db/seeds.rb")
70
+ assert_file_exists("#{@apptmp}/sample_project/db/migrate/001_create_accounts.rb")
71
+ assert_match_in_file 'Padrino.mount("Admin").to("/admin")', "#{@apptmp}/sample_project/config/apps.rb"
72
+ assert_match_in_file 'class Admin < Padrino::Application', "#{@apptmp}/sample_project/admin/app.rb"
73
+ assert_match_in_file 'role.project_module :accounts, \'/accounts\'', "#{@apptmp}/sample_project/admin/app.rb"
74
+ assert_match_in_file 'button_to pat(:logout)', "#{@apptmp}/sample_project/admin/views/layouts/application.haml"
75
+ end
76
+
77
+ it 'should correctly generate a new padrino admin application with erb renderer' do
78
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=activerecord', '-e=erb') }
79
+ capture_io { generate(:bs_admin, "--root=#{@apptmp}/sample_project") }
80
+ assert_file_exists("#{@apptmp}/sample_project")
81
+ assert_file_exists("#{@apptmp}/sample_project/admin")
82
+ assert_file_exists("#{@apptmp}/sample_project/admin/app.rb")
83
+ assert_file_exists("#{@apptmp}/sample_project/admin/controllers")
84
+ assert_file_exists("#{@apptmp}/sample_project/admin/controllers/accounts.rb")
85
+ assert_file_exists("#{@apptmp}/sample_project/admin/controllers/base.rb")
86
+ assert_file_exists("#{@apptmp}/sample_project/admin/controllers/sessions.rb")
87
+ assert_file_exists("#{@apptmp}/sample_project/admin/views")
88
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/_form.erb")
89
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/edit.erb")
90
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/index.erb")
91
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/new.erb")
92
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/base/index.erb")
93
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/sessions/new.erb")
94
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/base/index.erb")
95
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/layouts/application.erb")
96
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/sessions/new.erb")
97
+ assert_file_exists("#{@apptmp}/sample_project/public/admin")
98
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css")
99
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css/bootstrap.css")
100
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css/bootstrap.min.css")
101
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css/bootstrap-responsive.css")
102
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css/bootstrap-responsive.min.css")
103
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico")
104
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/apple-touch-icon-114-precomposed.png")
105
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/apple-touch-icon-144-precomposed.png")
106
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/apple-touch-icon-57-precomposed.png")
107
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/apple-touch-icon-72-precomposed.png")
108
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/favicon.ico")
109
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/img")
110
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/img/glyphicons-halflings-white.png")
111
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/img/glyphicons-halflings.png")
112
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js")
113
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/bootstrap.js")
114
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/bootstrap.min.js")
115
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/jquery-min.js")
116
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/jquery-ujs.js")
117
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/jquery.js")
118
+ assert_file_exists("#{@apptmp}/sample_project/models/account.rb")
119
+ assert_file_exists("#{@apptmp}/sample_project/db/seeds.rb")
120
+ assert_file_exists("#{@apptmp}/sample_project/db/migrate/001_create_accounts.rb")
121
+ assert_match_in_file 'Padrino.mount("Admin").to("/admin")', "#{@apptmp}/sample_project/config/apps.rb"
122
+ assert_match_in_file 'class Admin < Padrino::Application', "#{@apptmp}/sample_project/admin/app.rb"
123
+ assert_match_in_file 'role.project_module :accounts, \'/accounts\'', "#{@apptmp}/sample_project/admin/app.rb"
124
+ assert_match_in_file 'link_to(\'Sign Out\', url(:sessions, :destroy)', "#{@apptmp}/sample_project/admin/views/layouts/application.erb"
125
+ end
126
+
127
+ it 'should correctly generate a new padrino admin application with slim renderer' do
128
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=activerecord', '-e=slim') }
129
+ capture_io { generate(:bs_admin, "--root=#{@apptmp}/sample_project") }
130
+ assert_file_exists("#{@apptmp}/sample_project")
131
+ assert_file_exists("#{@apptmp}/sample_project/admin")
132
+ assert_file_exists("#{@apptmp}/sample_project/admin/app.rb")
133
+ assert_file_exists("#{@apptmp}/sample_project/admin/controllers")
134
+ assert_file_exists("#{@apptmp}/sample_project/admin/controllers/accounts.rb")
135
+ assert_file_exists("#{@apptmp}/sample_project/admin/controllers/base.rb")
136
+ assert_file_exists("#{@apptmp}/sample_project/admin/controllers/sessions.rb")
137
+ assert_file_exists("#{@apptmp}/sample_project/admin/views")
138
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/_form.slim")
139
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/edit.slim")
140
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/index.slim")
141
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/new.slim")
142
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/base/index.slim")
143
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/sessions/new.slim")
144
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/base/index.slim")
145
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/layouts/application.slim")
146
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/sessions/new.slim")
147
+ assert_file_exists("#{@apptmp}/sample_project/public/admin")
148
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css")
149
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css/bootstrap.css")
150
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css/bootstrap.min.css")
151
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css/bootstrap-responsive.css")
152
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css/bootstrap-responsive.min.css")
153
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico")
154
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/apple-touch-icon-114-precomposed.png")
155
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/apple-touch-icon-144-precomposed.png")
156
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/apple-touch-icon-57-precomposed.png")
157
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/apple-touch-icon-72-precomposed.png")
158
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/favicon.ico")
159
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/img")
160
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/img/glyphicons-halflings-white.png")
161
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/img/glyphicons-halflings.png")
162
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js")
163
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/bootstrap.js")
164
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/bootstrap.min.js")
165
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/jquery-min.js")
166
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/jquery-ujs.js")
167
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/jquery.js")
168
+ assert_file_exists("#{@apptmp}/sample_project/models/account.rb")
169
+ assert_file_exists("#{@apptmp}/sample_project/db/seeds.rb")
170
+ assert_file_exists("#{@apptmp}/sample_project/db/migrate/001_create_accounts.rb")
171
+ assert_match_in_file 'Padrino.mount("Admin").to("/admin")', "#{@apptmp}/sample_project/config/apps.rb"
172
+ assert_match_in_file 'class Admin < Padrino::Application', "#{@apptmp}/sample_project/admin/app.rb"
173
+ assert_match_in_file 'role.project_module :accounts, \'/accounts\'', "#{@apptmp}/sample_project/admin/app.rb"
174
+ assert_match_in_file 'button_to pat(:logout)', "#{@apptmp}/sample_project/admin/views/layouts/application.slim"
175
+ end
176
+
177
+ it 'should correctly generate a new padrino admin application with a custom model' do
178
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=activerecord', '-e=slim') }
179
+ capture_io { generate(:bs_admin, "--root=#{@apptmp}/sample_project", '-m=User') }
180
+ assert_file_exists("#{@apptmp}/sample_project")
181
+ assert_file_exists("#{@apptmp}/sample_project/admin")
182
+ assert_file_exists("#{@apptmp}/sample_project/admin/app.rb")
183
+ assert_file_exists("#{@apptmp}/sample_project/admin/controllers")
184
+ assert_file_exists("#{@apptmp}/sample_project/admin/controllers/users.rb")
185
+ assert_no_match_in_file(/[^_]account/i, "#{@apptmp}/sample_project/admin/controllers/users.rb")
186
+ assert_file_exists("#{@apptmp}/sample_project/admin/controllers/base.rb")
187
+ assert_file_exists("#{@apptmp}/sample_project/admin/controllers/sessions.rb")
188
+ assert_file_exists("#{@apptmp}/sample_project/admin/views")
189
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/users/_form.slim")
190
+ assert_no_match_in_file(/[^_]account/i, "#{@apptmp}/sample_project/admin/views/users/_form.slim")
191
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/users/edit.slim")
192
+ assert_no_match_in_file(/[^_]account/i, "#{@apptmp}/sample_project/admin/views/users/edit.slim")
193
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/users/index.slim")
194
+ assert_no_match_in_file(/[^_]account/i, "#{@apptmp}/sample_project/admin/views/users/index.slim")
195
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/users/new.slim")
196
+ assert_no_match_in_file(/[^_]account/i, "#{@apptmp}/sample_project/admin/views/users/new.slim")
197
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/base/index.slim")
198
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/sessions/new.slim")
199
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/base/index.slim")
200
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/layouts/application.slim")
201
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/sessions/new.slim")
202
+ assert_file_exists("#{@apptmp}/sample_project/public/admin")
203
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css")
204
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css/bootstrap.css")
205
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css/bootstrap.min.css")
206
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css/bootstrap-responsive.css")
207
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css/bootstrap-responsive.min.css")
208
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico")
209
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/apple-touch-icon-114-precomposed.png")
210
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/apple-touch-icon-144-precomposed.png")
211
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/apple-touch-icon-57-precomposed.png")
212
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/apple-touch-icon-72-precomposed.png")
213
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/favicon.ico")
214
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/img")
215
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/img/glyphicons-halflings-white.png")
216
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/img/glyphicons-halflings.png")
217
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js")
218
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/bootstrap.js")
219
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/bootstrap.min.js")
220
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/jquery-min.js")
221
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/jquery-ujs.js")
222
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/jquery.js")
223
+ assert_file_exists("#{@apptmp}/sample_project/models/user.rb")
224
+ assert_no_match_in_file(/Account/, "#{@apptmp}/sample_project/models/user.rb")
225
+ assert_file_exists("#{@apptmp}/sample_project/db/seeds.rb")
226
+ assert_file_exists("#{@apptmp}/sample_project/db/migrate/001_create_users.rb")
227
+ assert_no_match_in_file(/[^_]account/i, "#{@apptmp}/sample_project/db/migrate/001_create_users.rb")
228
+ assert_match_in_file 'Padrino.mount("Admin").to("/admin")', "#{@apptmp}/sample_project/config/apps.rb"
229
+ assert_match_in_file 'class Admin < Padrino::Application', "#{@apptmp}/sample_project/admin/app.rb"
230
+ assert_match_in_file 'role.project_module :users, \'/users\'', "#{@apptmp}/sample_project/admin/app.rb"
231
+ assert_match_in_file 'button_to pat(:logout)', "#{@apptmp}/sample_project/admin/views/layouts/application.slim"
232
+ end
233
+
234
+ it 'should correctly generate a new padrino admin application with model in non-default application path' do
235
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=activerecord', '-e=haml') }
236
+ capture_io { generate(:bs_admin,"-a=/admin", "--root=#{@apptmp}/sample_project") }
237
+ assert_file_exists("#{@apptmp}/sample_project")
238
+ assert_file_exists("#{@apptmp}/sample_project/admin")
239
+ assert_file_exists("#{@apptmp}/sample_project/admin/app.rb")
240
+ assert_file_exists("#{@apptmp}/sample_project/admin/controllers")
241
+ assert_file_exists("#{@apptmp}/sample_project/admin/controllers/accounts.rb")
242
+ assert_file_exists("#{@apptmp}/sample_project/admin/controllers/base.rb")
243
+ assert_file_exists("#{@apptmp}/sample_project/admin/controllers/sessions.rb")
244
+ assert_file_exists("#{@apptmp}/sample_project/admin/views")
245
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/_form.haml")
246
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/edit.haml")
247
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/index.haml")
248
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/accounts/new.haml")
249
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/base/index.haml")
250
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/sessions/new.haml")
251
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/base/index.haml")
252
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/layouts/application.haml")
253
+ assert_file_exists("#{@apptmp}/sample_project/admin/views/sessions/new.haml")
254
+ assert_file_exists("#{@apptmp}/sample_project/public/admin")
255
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css")
256
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css/bootstrap.css")
257
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css/bootstrap.min.css")
258
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css/bootstrap-responsive.css")
259
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/css/bootstrap-responsive.min.css")
260
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico")
261
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/apple-touch-icon-114-precomposed.png")
262
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/apple-touch-icon-144-precomposed.png")
263
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/apple-touch-icon-57-precomposed.png")
264
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/apple-touch-icon-72-precomposed.png")
265
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/ico/favicon.ico")
266
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/img")
267
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/img/glyphicons-halflings-white.png")
268
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/img/glyphicons-halflings.png")
269
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js")
270
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/bootstrap.js")
271
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/bootstrap.min.js")
272
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/jquery-min.js")
273
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/jquery-ujs.js")
274
+ assert_file_exists("#{@apptmp}/sample_project/public/admin/js/jquery.js")
275
+ assert_file_exists("#{@apptmp}/sample_project/admin/models/account.rb")
276
+ assert_no_file_exists("#{@apptmp}/sample_project/models/account.rb")
277
+ assert_file_exists("#{@apptmp}/sample_project/db/seeds.rb")
278
+ assert_file_exists("#{@apptmp}/sample_project/db/migrate/001_create_accounts.rb")
279
+ assert_match_in_file 'Padrino.mount("Admin").to("/admin")', "#{@apptmp}/sample_project/config/apps.rb"
280
+ assert_match_in_file 'class Admin < Padrino::Application', "#{@apptmp}/sample_project/admin/app.rb"
281
+ assert_match_in_file 'role.project_module :accounts, \'/accounts\'', "#{@apptmp}/sample_project/admin/app.rb"
282
+ assert_match_in_file 'button_to pat(:logout)', "#{@apptmp}/sample_project/admin/views/layouts/application.haml"
283
+ end
284
+
285
+ it 'should not add activerecord middleware for #datamapper' do
286
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=datamapper', '-e=haml') }
287
+ capture_io { generate(:bs_admin,"-a=/admin", "--root=#{@apptmp}/sample_project") }
288
+ assert_no_match_in_file(/ use ActiveRecord::ConnectionAdapters::ConnectionManagemen/m, "#{@apptmp}/sample_project/admin/app.rb")
289
+ end
290
+
291
+ it 'should add activerecord middleware for #activerecord' do
292
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=activerecord', '-e=haml') }
293
+ capture_io { generate(:bs_admin,"-a=/admin", "--root=#{@apptmp}/sample_project") }
294
+ assert_match_in_file(/ use ActiveRecord::ConnectionAdapters::ConnectionManagemen/m, "#{@apptmp}/sample_project/admin/app.rb")
295
+ end
296
+
297
+ it 'should add activerecord middleware for #mini_record' do
298
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=mini_record', '-e=haml') }
299
+ capture_io { generate(:bs_admin,"-a=/admin", "--root=#{@apptmp}/sample_project") }
300
+ assert_match_in_file(/ use ActiveRecord::ConnectionAdapters::ConnectionManagemen/m, "#{@apptmp}/sample_project/admin/app.rb")
301
+ end
302
+
303
+ it 'should not conflict with existing seeds file' do
304
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=activerecord', '-e=erb') }
305
+
306
+ # Add seeds file
307
+ FileUtils.mkdir_p @apptmp + '/sample_project/db' unless File.exist?(@apptmp + '/sample_project/db')
308
+ File.open(@apptmp + '/sample_project/db/seeds.rb', 'w+') do |seeds_rb|
309
+ seeds_rb.puts "# Old Seeds Content"
310
+ end
311
+
312
+ capture_io do
313
+ # TODO: this doesn't work, so figure out why
314
+ # $stdout.expects(:print).with { |value| value =~ /Overwrite\s.*?\/db\/seeds.rb/ }.never
315
+ # $stdin.stubs(:gets).returns('y')
316
+ generate(:bs_admin, "--root=#{@apptmp}/sample_project")
317
+ end
318
+
319
+ assert_file_exists "#{@apptmp}/sample_project/db/seeds.old"
320
+ assert_match_in_file 'Account.create(', "#{@apptmp}/sample_project/db/seeds.rb"
321
+ end
322
+
323
+ it "should navigate completely inside an app with activerecord" do
324
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", "-d=activerecord", "-e=haml", "--dev") }
325
+ capture_io { generate(:bs_admin, "--root=#{@apptmp}/sample_project") }
326
+ skip "Check bundle install and rake"
327
+ bundle(:install, :gemfile => "#{@apptmp}/sample_project/Gemfile", :path => "#{@apptmp}/bundle")
328
+ cli(:rake, '-T', "-c=#{@apptmp}/sample_project")
329
+ end
330
+ end
331
+ end
332
+