rubycs-nifty-generators-compass 0.0.1

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 (100) hide show
  1. data/CHANGELOG +79 -0
  2. data/LICENSE +20 -0
  3. data/README.rdoc +5 -0
  4. data/Rakefile +15 -0
  5. data/TODO +7 -0
  6. data/lib/nifty_generators.rb +3 -0
  7. data/nifty-generators-compass.gemspec +32 -0
  8. data/rails_generators/nifty_authentication/USAGE +46 -0
  9. data/rails_generators/nifty_authentication/lib/insert_commands.rb +74 -0
  10. data/rails_generators/nifty_authentication/nifty_authentication_generator.rb +118 -0
  11. data/rails_generators/nifty_authentication/templates/authentication.rb +49 -0
  12. data/rails_generators/nifty_authentication/templates/fixtures.yml +12 -0
  13. data/rails_generators/nifty_authentication/templates/migration.rb +15 -0
  14. data/rails_generators/nifty_authentication/templates/sessions_controller.rb +22 -0
  15. data/rails_generators/nifty_authentication/templates/sessions_helper.rb +2 -0
  16. data/rails_generators/nifty_authentication/templates/tests/rspec/sessions_controller.rb +25 -0
  17. data/rails_generators/nifty_authentication/templates/tests/rspec/user.rb +81 -0
  18. data/rails_generators/nifty_authentication/templates/tests/rspec/users_controller.rb +24 -0
  19. data/rails_generators/nifty_authentication/templates/tests/shoulda/sessions_controller.rb +26 -0
  20. data/rails_generators/nifty_authentication/templates/tests/shoulda/user.rb +83 -0
  21. data/rails_generators/nifty_authentication/templates/tests/shoulda/users_controller.rb +25 -0
  22. data/rails_generators/nifty_authentication/templates/tests/testunit/sessions_controller.rb +22 -0
  23. data/rails_generators/nifty_authentication/templates/tests/testunit/user.rb +86 -0
  24. data/rails_generators/nifty_authentication/templates/tests/testunit/users_controller.rb +21 -0
  25. data/rails_generators/nifty_authentication/templates/user.rb +38 -0
  26. data/rails_generators/nifty_authentication/templates/users_controller.rb +16 -0
  27. data/rails_generators/nifty_authentication/templates/users_helper.rb +2 -0
  28. data/rails_generators/nifty_authentication/templates/views/erb/login.html.erb +15 -0
  29. data/rails_generators/nifty_authentication/templates/views/erb/signup.html.erb +24 -0
  30. data/rails_generators/nifty_authentication/templates/views/haml/login.html.haml +15 -0
  31. data/rails_generators/nifty_authentication/templates/views/haml/signup.html.haml +24 -0
  32. data/rails_generators/nifty_config/USAGE +23 -0
  33. data/rails_generators/nifty_config/nifty_config_generator.rb +32 -0
  34. data/rails_generators/nifty_config/templates/config.yml +8 -0
  35. data/rails_generators/nifty_config/templates/load_config.rb +2 -0
  36. data/rails_generators/nifty_layout/USAGE +25 -0
  37. data/rails_generators/nifty_layout/nifty_layout_generator.rb +44 -0
  38. data/rails_generators/nifty_layout/templates/helper.rb +23 -0
  39. data/rails_generators/nifty_layout/templates/layout.html.erb +22 -0
  40. data/rails_generators/nifty_layout/templates/layout.html.haml +19 -0
  41. data/rails_generators/nifty_layout/templates/stylesheet.css +81 -0
  42. data/rails_generators/nifty_layout/templates/stylesheet.sass +67 -0
  43. data/rails_generators/nifty_scaffold/USAGE +51 -0
  44. data/rails_generators/nifty_scaffold/nifty_scaffold_generator.rb +232 -0
  45. data/rails_generators/nifty_scaffold/templates/actions/create.rb +9 -0
  46. data/rails_generators/nifty_scaffold/templates/actions/destroy.rb +6 -0
  47. data/rails_generators/nifty_scaffold/templates/actions/edit.rb +3 -0
  48. data/rails_generators/nifty_scaffold/templates/actions/index.rb +3 -0
  49. data/rails_generators/nifty_scaffold/templates/actions/new.rb +3 -0
  50. data/rails_generators/nifty_scaffold/templates/actions/show.rb +3 -0
  51. data/rails_generators/nifty_scaffold/templates/actions/update.rb +9 -0
  52. data/rails_generators/nifty_scaffold/templates/controller.rb +3 -0
  53. data/rails_generators/nifty_scaffold/templates/fixtures.yml +9 -0
  54. data/rails_generators/nifty_scaffold/templates/helper.rb +2 -0
  55. data/rails_generators/nifty_scaffold/templates/migration.rb +16 -0
  56. data/rails_generators/nifty_scaffold/templates/model.rb +2 -0
  57. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/create.rb +11 -0
  58. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/destroy.rb +6 -0
  59. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/edit.rb +4 -0
  60. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/index.rb +4 -0
  61. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/new.rb +4 -0
  62. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/show.rb +4 -0
  63. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/update.rb +11 -0
  64. data/rails_generators/nifty_scaffold/templates/tests/rspec/controller.rb +8 -0
  65. data/rails_generators/nifty_scaffold/templates/tests/rspec/model.rb +7 -0
  66. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/create.rb +13 -0
  67. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/destroy.rb +8 -0
  68. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/edit.rb +6 -0
  69. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/index.rb +6 -0
  70. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/new.rb +6 -0
  71. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/show.rb +6 -0
  72. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/update.rb +13 -0
  73. data/rails_generators/nifty_scaffold/templates/tests/shoulda/controller.rb +5 -0
  74. data/rails_generators/nifty_scaffold/templates/tests/shoulda/model.rb +7 -0
  75. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/create.rb +11 -0
  76. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/destroy.rb +6 -0
  77. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/edit.rb +4 -0
  78. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/index.rb +4 -0
  79. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/new.rb +4 -0
  80. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/show.rb +4 -0
  81. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/update.rb +11 -0
  82. data/rails_generators/nifty_scaffold/templates/tests/testunit/controller.rb +5 -0
  83. data/rails_generators/nifty_scaffold/templates/tests/testunit/model.rb +7 -0
  84. data/rails_generators/nifty_scaffold/templates/views/erb/_form.html.erb +10 -0
  85. data/rails_generators/nifty_scaffold/templates/views/erb/edit.html.erb +14 -0
  86. data/rails_generators/nifty_scaffold/templates/views/erb/index.html.erb +29 -0
  87. data/rails_generators/nifty_scaffold/templates/views/erb/new.html.erb +7 -0
  88. data/rails_generators/nifty_scaffold/templates/views/erb/show.html.erb +20 -0
  89. data/rails_generators/nifty_scaffold/templates/views/haml/_form.html.haml +10 -0
  90. data/rails_generators/nifty_scaffold/templates/views/haml/edit.html.haml +14 -0
  91. data/rails_generators/nifty_scaffold/templates/views/haml/index.html.haml +25 -0
  92. data/rails_generators/nifty_scaffold/templates/views/haml/new.html.haml +7 -0
  93. data/rails_generators/nifty_scaffold/templates/views/haml/show.html.haml +20 -0
  94. data/tasks/deployment.rake +2 -0
  95. data/test/test_helper.rb +117 -0
  96. data/test/test_nifty_authentication_generator.rb +160 -0
  97. data/test/test_nifty_config_generator.rb +37 -0
  98. data/test/test_nifty_layout_generator.rb +42 -0
  99. data/test/test_nifty_scaffold_generator.rb +533 -0
  100. metadata +165 -0
@@ -0,0 +1,160 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
2
+
3
+ class TestNiftyAuthenticationGenerator < Test::Unit::TestCase
4
+ include NiftyGenerators::TestHelper
5
+
6
+ # Some generator-related assertions:
7
+ # assert_generated_file(name, &block) # block passed the file contents
8
+ # assert_directory_exists(name)
9
+ # assert_generated_class(name, &block)
10
+ # assert_generated_module(name, &block)
11
+ # assert_generated_test_for(name, &block)
12
+ # The assert_generated_(class|module|test_for) &block is passed the body of the class/module within the file
13
+ # assert_has_method(body, *methods) # check that the body has a list of methods (methods with parentheses not supported yet)
14
+ #
15
+ # Other helper methods are:
16
+ # app_root_files - put this in teardown to show files generated by the test method (e.g. p app_root_files)
17
+ # bare_setup - place this in setup method to create the APP_ROOT folder for each test
18
+ # bare_teardown - place this in teardown method to destroy the TMP_ROOT or APP_ROOT folder after each test
19
+ context "" do # empty context so we can use setup block
20
+ setup do
21
+ Rails.stubs(:version).returns("2.0.2")
22
+ Dir.mkdir("#{RAILS_ROOT}/config") unless File.exists?("#{RAILS_ROOT}/config")
23
+ File.open("#{RAILS_ROOT}/config/routes.rb", 'w') do |f|
24
+ f.puts "ActionController::Routing::Routes.draw do |map|\n\nend"
25
+ end
26
+ Dir.mkdir("#{RAILS_ROOT}/app") unless File.exists?("#{RAILS_ROOT}/app")
27
+ Dir.mkdir("#{RAILS_ROOT}/app/controllers") unless File.exists?("#{RAILS_ROOT}/app/controllers")
28
+ File.open("#{RAILS_ROOT}/app/controllers/application.rb", 'w') do |f|
29
+ f.puts "class Application < ActionController::Base\n\nend"
30
+ end
31
+ end
32
+
33
+ teardown do
34
+ FileUtils.rm_rf "#{RAILS_ROOT}/config"
35
+ FileUtils.rm_rf "#{RAILS_ROOT}/app"
36
+ end
37
+
38
+ context "generator without arguments" do
39
+ rails_generator :nifty_authentication
40
+ should_generate_file 'app/models/user.rb'
41
+ should_generate_file 'app/controllers/users_controller.rb'
42
+ should_generate_file 'app/helpers/users_helper.rb'
43
+ should_generate_file 'app/views/users/new.html.erb'
44
+ should_generate_file 'app/controllers/sessions_controller.rb'
45
+ should_generate_file 'app/helpers/sessions_helper.rb'
46
+ should_generate_file 'app/views/sessions/new.html.erb'
47
+ should_generate_file 'lib/authentication.rb'
48
+ should_generate_file 'test/fixtures/users.yml'
49
+ should_generate_file 'test/unit/user_test.rb'
50
+ should_generate_file 'test/functional/users_controller_test.rb'
51
+ should_generate_file 'test/functional/sessions_controller_test.rb'
52
+
53
+ should "generate migration file" do
54
+ assert !Dir.glob("#{RAILS_ROOT}/db/migrate/*.rb").empty?
55
+ end
56
+
57
+ should "generate routes" do
58
+ assert_generated_file "config/routes.rb" do |body|
59
+ assert_match "map.resources :sessions", body
60
+ assert_match "map.resources :users", body
61
+ assert_match "map.login 'login', :controller => 'sessions', :action => 'new'", body
62
+ assert_match "map.logout 'logout', :controller => 'sessions', :action => 'destroy'", body
63
+ assert_match "map.signup 'signup', :controller => 'users', :action => 'new'", body
64
+ end
65
+ end
66
+
67
+ should "include Authentication" do
68
+ application_controller_name = Rails.version >= '2.3.0' ? 'application_controller' : 'application'
69
+ assert_generated_file "app/controllers/#{application_controller_name}.rb" do |body|
70
+ assert_match "include Authentication", body
71
+ end
72
+ end
73
+ end
74
+
75
+ context "generator with user and session names" do
76
+ rails_generator :nifty_authentication, "Account", "CurrentSessions"
77
+ should_generate_file 'app/models/account.rb'
78
+ should_generate_file 'app/controllers/accounts_controller.rb'
79
+ should_generate_file 'app/helpers/accounts_helper.rb'
80
+ should_generate_file 'app/views/accounts/new.html.erb'
81
+ should_generate_file 'app/controllers/current_sessions_controller.rb'
82
+ should_generate_file 'app/helpers/current_sessions_helper.rb'
83
+ should_generate_file 'app/views/current_sessions/new.html.erb'
84
+ should_generate_file 'test/fixtures/accounts.yml'
85
+ should_generate_file 'test/unit/account_test.rb'
86
+ should_generate_file 'test/functional/accounts_controller_test.rb'
87
+ should_generate_file 'test/functional/current_sessions_controller_test.rb'
88
+
89
+ should "generate routes" do
90
+ assert_generated_file "config/routes.rb" do |body|
91
+ assert_match "map.resources :current_sessions", body
92
+ assert_match "map.resources :accounts", body
93
+ assert_match "map.login 'login', :controller => 'current_sessions', :action => 'new'", body
94
+ assert_match "map.logout 'logout', :controller => 'current_sessions', :action => 'destroy'", body
95
+ assert_match "map.signup 'signup', :controller => 'accounts', :action => 'new'", body
96
+ end
97
+ end
98
+ end
99
+
100
+ context "generator with shoulda option" do
101
+ rails_generator :nifty_authentication, :test_framework => :shoulda
102
+
103
+ should "have controller and model tests using shoulda syntax" do
104
+ assert_generated_file "test/functional/users_controller_test.rb" do |body|
105
+ assert_match " should ", body
106
+ end
107
+ assert_generated_file "test/functional/sessions_controller_test.rb" do |body|
108
+ assert_match " should ", body
109
+ end
110
+
111
+ assert_generated_file "test/unit/user_test.rb" do |body|
112
+ assert_match " should ", body
113
+ end
114
+ end
115
+ end
116
+
117
+ context "generator with rspec option" do
118
+ rails_generator :nifty_authentication, :test_framework => :rspec
119
+ should_generate_file 'spec/fixtures/users.yml'
120
+ end
121
+
122
+ context "with spec dir" do
123
+ setup do
124
+ Dir.mkdir("#{RAILS_ROOT}/spec") unless File.exists?("#{RAILS_ROOT}/spec")
125
+ end
126
+
127
+ teardown do
128
+ FileUtils.rm_rf "#{RAILS_ROOT}/spec"
129
+ end
130
+
131
+ context "generator without arguments" do
132
+ rails_generator :nifty_authentication
133
+ should_generate_file 'spec/fixtures/users.yml'
134
+ should_generate_file 'spec/models/user_spec.rb'
135
+ should_generate_file 'spec/controllers/users_controller_spec.rb'
136
+ should_generate_file 'spec/controllers/sessions_controller_spec.rb'
137
+ end
138
+
139
+ context "generator with user and session names" do
140
+ rails_generator :nifty_authentication, "Account", "CurrentSessions"
141
+ should_generate_file 'spec/fixtures/accounts.yml'
142
+ should_generate_file 'spec/models/account_spec.rb'
143
+ should_generate_file 'spec/controllers/accounts_controller_spec.rb'
144
+ should_generate_file 'spec/controllers/current_sessions_controller_spec.rb'
145
+ end
146
+
147
+ context "generator with testunit option" do
148
+ rails_generator :nifty_authentication, :test_framework => :testunit
149
+ should_generate_file 'test/fixtures/users.yml'
150
+ end
151
+ end
152
+
153
+ context "generator with haml option" do
154
+ rails_generator :nifty_authentication, :haml => true
155
+
156
+ should_generate_file "app/views/users/new.html.haml"
157
+ should_generate_file "app/views/sessions/new.html.haml"
158
+ end
159
+ end
160
+ end
@@ -0,0 +1,37 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
2
+
3
+ class TestNiftyConfigGenerator < Test::Unit::TestCase
4
+ include NiftyGenerators::TestHelper
5
+
6
+ # Some generator-related assertions:
7
+ # assert_generated_file(name, &block) # block passed the file contents
8
+ # assert_directory_exists(name)
9
+ # assert_generated_class(name, &block)
10
+ # assert_generated_module(name, &block)
11
+ # assert_generated_test_for(name, &block)
12
+ # The assert_generated_(class|module|test_for) &block is passed the body of the class/module within the file
13
+ # assert_has_method(body, *methods) # check that the body has a list of methods (methods with parentheses not supported yet)
14
+ #
15
+ # Other helper methods are:
16
+ # app_root_files - put this in teardown to show files generated by the test method (e.g. p app_root_files)
17
+ # bare_setup - place this in setup method to create the APP_ROOT folder for each test
18
+ # bare_teardown - place this in teardown method to destroy the TMP_ROOT or APP_ROOT folder after each test
19
+
20
+ context "generator without name" do
21
+ rails_generator :nifty_config
22
+ should_generate_file 'config/app_config.yml'
23
+ should_generate_file 'config/initializers/load_app_config.rb'
24
+ end
25
+
26
+ context "generator with name" do
27
+ rails_generator :nifty_config, "FooBar"
28
+ should_generate_file 'config/foo_bar_config.yml'
29
+
30
+ should "use the name as a constant in the initializer" do
31
+ assert_generated_file 'config/initializers/load_foo_bar_config.rb' do |body|
32
+ assert_match "config/foo_bar_config.yml", body
33
+ assert_match "FOO_BAR_CONFIG = ", body
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,42 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
2
+
3
+ class TestNiftyLayoutGenerator < Test::Unit::TestCase
4
+ include NiftyGenerators::TestHelper
5
+
6
+ # Some generator-related assertions:
7
+ # assert_generated_file(name, &block) # block passed the file contents
8
+ # assert_directory_exists(name)
9
+ # assert_generated_class(name, &block)
10
+ # assert_generated_module(name, &block)
11
+ # assert_generated_test_for(name, &block)
12
+ # The assert_generated_(class|module|test_for) &block is passed the body of the class/module within the file
13
+ # assert_has_method(body, *methods) # check that the body has a list of methods (methods with parentheses not supported yet)
14
+ #
15
+ # Other helper methods are:
16
+ # app_root_files - put this in teardown to show files generated by the test method (e.g. p app_root_files)
17
+ # bare_setup - place this in setup method to create the APP_ROOT folder for each test
18
+ # bare_teardown - place this in teardown method to destroy the TMP_ROOT or APP_ROOT folder after each test
19
+
20
+ context "generator without name" do
21
+ rails_generator :nifty_layout
22
+ should_generate_file 'app/views/layouts/application.html.erb'
23
+ end
24
+
25
+ context "generator with name" do
26
+ rails_generator :nifty_layout, "foobar"
27
+ should_generate_file 'app/views/layouts/foobar.html.erb'
28
+ should_generate_file 'public/stylesheets/foobar.css'
29
+ should_generate_file 'app/helpers/layout_helper.rb'
30
+ end
31
+
32
+ context "generator with CamelCase name" do
33
+ rails_generator :nifty_layout, "FooBar"
34
+ should_generate_file 'app/views/layouts/foo_bar.html.erb'
35
+ end
36
+
37
+ context "generator with haml option" do
38
+ rails_generator :nifty_layout, "foobar", :haml => true
39
+ should_generate_file 'app/views/layouts/foobar.html.haml'
40
+ should_generate_file 'public/stylesheets/sass/foobar.sass'
41
+ end
42
+ end
@@ -0,0 +1,533 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
2
+
3
+ class TestNiftyScaffoldGenerator < Test::Unit::TestCase
4
+ include NiftyGenerators::TestHelper
5
+
6
+ # Some generator-related assertions:
7
+ # assert_generated_file(name, &block) # block passed the file contents
8
+ # assert_directory_exists(name)
9
+ # assert_generated_class(name, &block)
10
+ # assert_generated_module(name, &block)
11
+ # assert_generated_test_for(name, &block)
12
+ # The assert_generated_(class|module|test_for) &block is passed the body of the class/module within the file
13
+ # assert_has_method(body, *methods) # check that the body has a list of methods (methods with parentheses not supported yet)
14
+ #
15
+ # Other helper methods are:
16
+ # app_root_files - put this in teardown to show files generated by the test method (e.g. p app_root_files)
17
+ # bare_setup - place this in setup method to create the APP_ROOT folder for each test
18
+ # bare_teardown - place this in teardown method to destroy the TMP_ROOT or APP_ROOT folder after each test
19
+
20
+ context "routed" do
21
+ setup do
22
+ Dir.mkdir("#{RAILS_ROOT}/config") unless File.exists?("#{RAILS_ROOT}/config")
23
+ File.open("#{RAILS_ROOT}/config/routes.rb", 'w') do |f|
24
+ f.puts "ActionController::Routing::Routes.draw do |map|\n\nend"
25
+ end
26
+ end
27
+
28
+ teardown do
29
+ FileUtils.rm_rf "#{RAILS_ROOT}/config"
30
+ end
31
+
32
+ context "generator without name" do
33
+ should "raise usage error" do
34
+ assert_raise Rails::Generator::UsageError do
35
+ run_rails_generator :nifty_scaffold
36
+ end
37
+ end
38
+ end
39
+
40
+ context "generator with no options and no existing model" do
41
+ rails_generator :nifty_scaffold, "LineItem"
42
+
43
+ should_generate_file "app/helpers/line_items_helper.rb"
44
+
45
+ should "generate controller with class as camelcase name pluralized and all actions" do
46
+ assert_generated_file "app/controllers/line_items_controller.rb" do |body|
47
+ assert_match "class LineItemsController < ApplicationController", body
48
+ %w[index show new create edit update destroy].each do |action|
49
+ assert_match "def #{action}", body
50
+ end
51
+ end
52
+ end
53
+
54
+ %w[index show new edit].each do |action|
55
+ should_generate_file "app/views/line_items/#{action}.html.erb"
56
+ end
57
+
58
+ should "have name attribute" do
59
+ assert_generated_file "app/views/line_items/_form.html.erb" do |body|
60
+ assert_match "<%= f.text_field :name %>", body
61
+ end
62
+ end
63
+
64
+ should "add map.resources line to routes" do
65
+ assert_generated_file "config/routes.rb" do |body|
66
+ assert_match "map.resources :line_items", body
67
+ end
68
+ end
69
+
70
+ should_not_generate_file "app/models/line_item.rb"
71
+ end
72
+
73
+ context "generator with some attributes" do
74
+ rails_generator :nifty_scaffold, "line_item", "name:string", "description:text"
75
+
76
+ should "generate migration with attribute columns" do
77
+ file = Dir.glob("#{RAILS_ROOT}/db/migrate/*.rb").first
78
+ assert file, "migration file doesn't exist"
79
+ assert_match(/[0-9]+_create_line_items.rb$/, file)
80
+ assert_generated_file "db/migrate/#{File.basename(file)}" do |body|
81
+ assert_match "class CreateLineItems", body
82
+ assert_match "t.string :name", body
83
+ assert_match "t.text :description", body
84
+ assert_match "t.timestamps", body
85
+ end
86
+ end
87
+
88
+ should "generate model with class as camelcase name" do
89
+ assert_generated_file "app/models/line_item.rb" do |body|
90
+ assert_match "class LineItem < ActiveRecord::Base", body
91
+ end
92
+ end
93
+ end
94
+
95
+ context "generator with index action" do
96
+ rails_generator :nifty_scaffold, "line_item", "index"
97
+
98
+ should_generate_file "app/views/line_items/index.html.erb"
99
+
100
+ should "generate controller with index action" do
101
+ assert_generated_file "app/controllers/line_items_controller.rb" do |body|
102
+ assert_match "def index", body
103
+ assert_match "@line_items = LineItem.all", body
104
+ assert_no_match(/ def index/, body)
105
+ end
106
+ end
107
+ end
108
+
109
+ context "generator with show action" do
110
+ rails_generator :nifty_scaffold, "line_item", "show"
111
+
112
+ should_generate_file "app/views/line_items/show.html.erb"
113
+
114
+ should "generate controller with show action" do
115
+ assert_generated_file "app/controllers/line_items_controller.rb" do |body|
116
+ assert_match "def show", body
117
+ assert_match "@line_item = LineItem.find(params[:id])", body
118
+ end
119
+ end
120
+ end
121
+
122
+ context "generator with new and create actions" do
123
+ rails_generator :nifty_scaffold, "line_item", "new", "create"
124
+
125
+ should_not_generate_file "app/views/line_items/create.html.erb"
126
+ should_not_generate_file "app/views/line_items/_form.html.erb"
127
+
128
+ should "render form in 'new' template" do
129
+ assert_generated_file "app/views/line_items/new.html.erb" do |body|
130
+ assert_match "<% form_for @line_item do |f| %>", body
131
+ end
132
+ end
133
+
134
+ should "generate controller with actions" do
135
+ assert_generated_file "app/controllers/line_items_controller.rb" do |body|
136
+ assert_match "def new", body
137
+ assert_match "@line_item = LineItem.new\n", body
138
+ assert_match "def create", body
139
+ assert_match "@line_item = LineItem.new(params[:line_item])", body
140
+ assert_match "if @line_item.save", body
141
+ assert_match "flash[:notice] = \"Successfully created line item.\"", body
142
+ assert_match "redirect_to root_url", body
143
+ assert_match "render :action => 'new'", body
144
+ end
145
+ end
146
+ end
147
+
148
+ context "generator with edit and update actions" do
149
+ rails_generator :nifty_scaffold, "line_item", "edit", "update"
150
+
151
+ should_not_generate_file "app/views/line_items/update.html.erb"
152
+ should_not_generate_file "app/views/line_items/_form.html.erb"
153
+
154
+ should "render form in 'edit' template" do
155
+ assert_generated_file "app/views/line_items/edit.html.erb" do |body|
156
+ assert_match "<% form_for @line_item do |f| %>", body
157
+ end
158
+ end
159
+
160
+ should "generate controller with actions" do
161
+ assert_generated_file "app/controllers/line_items_controller.rb" do |body|
162
+ assert_match "def edit", body
163
+ assert_match "@line_item = LineItem.find(params[:id])", body
164
+ assert_match "def update", body
165
+ assert_match "if @line_item.update_attributes(params[:line_item])", body
166
+ assert_match "flash[:notice] = \"Successfully updated line item.\"", body
167
+ assert_match "redirect_to root_url", body
168
+ assert_match "render :action => 'edit'", body
169
+ end
170
+ end
171
+ end
172
+
173
+ context "generator with edit and update actions" do
174
+ rails_generator :nifty_scaffold, "line_item", "destroy"
175
+
176
+ should_not_generate_file "app/views/line_items/destroy.html.erb"
177
+
178
+ should "generate controller with action" do
179
+ assert_generated_file "app/controllers/line_items_controller.rb" do |body|
180
+ assert_match "def destroy", body
181
+ assert_match "@line_item = LineItem.find(params[:id])", body
182
+ assert_match "@line_item.destroy", body
183
+ assert_match "flash[:notice] = \"Successfully destroyed line item.\"", body
184
+ assert_match "redirect_to root_url", body
185
+ end
186
+ end
187
+ end
188
+
189
+ context "generator with new and edit actions" do
190
+ rails_generator :nifty_scaffold, "line_item", "new", "edit"
191
+
192
+ should_generate_file "app/views/line_items/_form.html.erb"
193
+
194
+ should "render the form partial in views" do
195
+ %w[new edit].each do |action|
196
+ assert_generated_file "app/views/line_items/#{action}.html.erb" do |body|
197
+ assert_match "<%= render :partial => 'form' %>", body
198
+ end
199
+ end
200
+ end
201
+ end
202
+
203
+ context "generator with attributes and actions" do
204
+ rails_generator :nifty_scaffold, "line_item", "name:string", "new", "price:float", "index", "available:boolean"
205
+
206
+ should "render a form field for each attribute in 'new' template" do
207
+ assert_generated_file "app/views/line_items/new.html.erb" do |body|
208
+ assert_match "<%= f.text_field :name %>", body
209
+ assert_match "<%= f.text_field :price %>", body
210
+ assert_match "<%= f.check_box :available %>", body
211
+ end
212
+ end
213
+ end
214
+
215
+ context "generator with show, create, and update actions" do
216
+ rails_generator :nifty_scaffold, "line_item", "show", "create", "update"
217
+
218
+ should "redirect to line item show page, not index" do
219
+ assert_generated_file "app/controllers/line_items_controller.rb" do |body|
220
+ assert_match "redirect_to @line_item", body
221
+ assert_no_match(/redirect_to line_items_url/, body)
222
+ end
223
+ end
224
+ end
225
+
226
+ context "generator with attributes and skip model option" do
227
+ rails_generator :nifty_scaffold, "line_item", "foo:string", :skip_model => true
228
+
229
+ should "use passed attribute" do
230
+ assert_generated_file "app/views/line_items/_form.html.erb" do |body|
231
+ assert_match "<%= f.text_field :foo %>", body
232
+ end
233
+ end
234
+
235
+ should "not generate migration file" do
236
+ assert Dir.glob("#{RAILS_ROOT}/db/migrate/*.rb").empty?
237
+ end
238
+
239
+ should_not_generate_file "app/models/line_item.rb"
240
+ end
241
+
242
+ context "generator with no attributes" do
243
+ rails_generator :nifty_scaffold, "line_item"
244
+
245
+ should "not generate migration file" do
246
+ assert Dir.glob("#{RAILS_ROOT}/db/migrate/*.rb").empty?
247
+ end
248
+
249
+ should_not_generate_file "app/models/line_item.rb"
250
+ end
251
+
252
+ context "generator with only new and edit actions" do
253
+ rails_generator :nifty_scaffold, "line_item", "new", "edit"
254
+
255
+ should "included create and update actions in controller" do
256
+ assert_generated_file "app/controllers/line_items_controller.rb" do |body|
257
+ assert_match "def create", body
258
+ assert_match "def update", body
259
+ assert_match "root_url", body
260
+ end
261
+ end
262
+ end
263
+
264
+ context "generator with exclemation mark and show, new, and edit actions" do
265
+ rails_generator :nifty_scaffold, "line_item", "!", "show", "new", "edit"
266
+
267
+ should "only include index and destroy actions" do
268
+ assert_generated_file "app/controllers/line_items_controller.rb" do |body|
269
+ %w[index destroy].each { |a| assert_match "def #{a}", body }
270
+ %w[show new create edit update].each do |a|
271
+ assert_no_match(/def #{a}/, body)
272
+ end
273
+ end
274
+ end
275
+ end
276
+
277
+ context "generator with --skip-controller" do
278
+ rails_generator :nifty_scaffold, "line_item", :skip_controller => true
279
+ should_not_generate_file "app/controllers/line_items_controller.rb"
280
+ should_not_generate_file "app/helpers/line_items_helper.rb"
281
+ should_not_generate_file "app/views/line_items/index.html.erb"
282
+ end
283
+
284
+ context "generator with --skip-migration" do
285
+ rails_generator :nifty_scaffold, "line_item", "name:string", :skip_migration => true
286
+
287
+ should "not generate migration file" do
288
+ assert Dir.glob("#{RAILS_ROOT}/db/migrate/*.rb").empty?
289
+ end
290
+ end
291
+
292
+ context "generator with --skip-timestamps" do
293
+ rails_generator :nifty_scaffold, "line_item", "name:string", :skip_timestamps => true
294
+
295
+ should "generate migration with no timestamps" do
296
+ file = Dir.glob("#{RAILS_ROOT}/db/migrate/*.rb").first
297
+ assert file, "migration file doesn't exist"
298
+ assert_generated_file "db/migrate/#{File.basename(file)}" do |body|
299
+ assert_no_match(/t.timestamps/, body)
300
+ end
301
+ end
302
+ end
303
+
304
+ context "existing model" do
305
+ setup do
306
+ Dir.mkdir("#{RAILS_ROOT}/app") unless File.exists?("#{RAILS_ROOT}/app")
307
+ Dir.mkdir("#{RAILS_ROOT}/app/models") unless File.exists?("#{RAILS_ROOT}/app/models")
308
+ File.open("#{RAILS_ROOT}/app/models/recipe.rb", 'w') do |f|
309
+ f.puts "raise 'should not be loaded'"
310
+ end
311
+ end
312
+
313
+ teardown do
314
+ FileUtils.rm_rf "#{RAILS_ROOT}/app"
315
+ end
316
+
317
+ context "generator with skip model option" do
318
+ rails_generator :nifty_scaffold, "recipe", :skip_model => true
319
+
320
+ should "use model columns for attributes" do
321
+ assert_generated_file "app/views/recipes/_form.html.erb" do |body|
322
+ assert_match "<%= f.text_field :foo %>", body
323
+ assert_match "<%= f.text_field :bar %>", body
324
+ assert_match "<%= f.text_field :book_id %>", body
325
+ assert_no_match(/:id/, body)
326
+ assert_no_match(/:created_at/, body)
327
+ assert_no_match(/:updated_at/, body)
328
+ end
329
+ end
330
+
331
+ should "not generate migration file" do
332
+ assert Dir.glob("#{RAILS_ROOT}/db/migrate/*.rb").empty?
333
+ end
334
+ end
335
+
336
+ context "generator with attribute specified" do
337
+ rails_generator :nifty_scaffold, "recipe", "zippo:string"
338
+
339
+ should "use specified attribute" do
340
+ assert_generated_file "app/views/recipes/_form.html.erb" do |body|
341
+ assert_match "<%= f.text_field :zippo %>", body
342
+ end
343
+ end
344
+ end
345
+ end
346
+
347
+ context "with spec dir" do
348
+ setup do
349
+ Dir.mkdir("#{RAILS_ROOT}/spec") unless File.exists?("#{RAILS_ROOT}/spec")
350
+ end
351
+
352
+ teardown do
353
+ FileUtils.rm_rf "#{RAILS_ROOT}/spec"
354
+ end
355
+
356
+ context "generator with some attributes" do
357
+ rails_generator :nifty_scaffold, "line_item", "name:string", "description:text"
358
+
359
+ should_generate_file "spec/models/line_item_spec.rb"
360
+
361
+ should "have controller specs for each action" do
362
+ assert_generated_file "spec/controllers/line_items_controller_spec.rb" do |body|
363
+ assert_match "get :index", body
364
+ assert_match "get :show", body
365
+ assert_match "get :new", body
366
+ assert_match "get :edit", body
367
+ assert_match "post :create", body
368
+ assert_match "put :update", body
369
+ assert_match "delete :destroy", body
370
+ end
371
+ end
372
+
373
+ should "have fixture with attributes" do
374
+ assert_generated_file "spec/fixtures/line_items.yml" do |body|
375
+ assert_match "name: MyString", body
376
+ assert_match "description: MyText", body
377
+ end
378
+ end
379
+ end
380
+
381
+ context "generator with new and index actions" do
382
+ rails_generator :nifty_scaffold, "line_item", "new", "index"
383
+
384
+ should "have controller spec with only mentioned actions" do
385
+ assert_generated_file "spec/controllers/line_items_controller_spec.rb" do |body|
386
+ assert_match "get :index", body
387
+ assert_match "get :new", body
388
+ assert_match "post :create", body
389
+ assert_no_match(/get :show/, body)
390
+ assert_no_match(/get :edit/, body)
391
+ assert_no_match(/put :update/, body)
392
+ assert_no_match(/delete :destroy/, body)
393
+ end
394
+ end
395
+
396
+ should "redirect to index action on successful create" do
397
+ assert_generated_file "spec/controllers/line_items_controller_spec.rb" do |body|
398
+ assert_match "redirect_to(line_items_url)", body
399
+ end
400
+ end
401
+ end
402
+
403
+ context "generator with edit and index actions" do
404
+ rails_generator :nifty_scaffold, "line_item", "edit", "index"
405
+
406
+ should "redirect to index action on successful update" do
407
+ assert_generated_file "spec/controllers/line_items_controller_spec.rb" do |body|
408
+ assert_match "redirect_to(line_items_url)", body
409
+ end
410
+ end
411
+ end
412
+
413
+ context "generator with testunit specified" do
414
+ rails_generator :nifty_scaffold, "line_item", "name:string", :test_framework => :testunit
415
+
416
+ should_generate_file "test/unit/line_item_test.rb"
417
+ end
418
+ end
419
+
420
+ context "with test dir" do
421
+ setup do
422
+ Dir.mkdir("#{RAILS_ROOT}/test") unless File.exists?("#{RAILS_ROOT}/test")
423
+ end
424
+
425
+ teardown do
426
+ FileUtils.rm_rf "#{RAILS_ROOT}/test"
427
+ end
428
+
429
+ context "generator with some attributes" do
430
+ rails_generator :nifty_scaffold, "line_item", "name:string", "description:text"
431
+
432
+ should_generate_file "test/unit/line_item_test.rb"
433
+
434
+ should "have controller tests for each action" do
435
+ assert_generated_file "test/functional/line_items_controller_test.rb" do |body|
436
+ assert_match "get :index", body
437
+ assert_match "get :show", body
438
+ assert_match "get :new", body
439
+ assert_match "get :edit", body
440
+ assert_match "post :create", body
441
+ assert_match "put :update", body
442
+ assert_match "delete :destroy", body
443
+ end
444
+ end
445
+
446
+ should "have fixture with attributes" do
447
+ assert_generated_file "test/fixtures/line_items.yml" do |body|
448
+ assert_match "name: MyString", body
449
+ assert_match "description: MyText", body
450
+ end
451
+ end
452
+ end
453
+
454
+ context "generator with new and index actions" do
455
+ rails_generator :nifty_scaffold, "line_item", "new", "index"
456
+
457
+ should "have controller test with only mentioned actions" do
458
+ assert_generated_file "test/functional/line_items_controller_test.rb" do |body|
459
+ assert_match "get :index", body
460
+ assert_match "get :new", body
461
+ assert_match "post :create", body
462
+ assert_no_match(/get :show/, body)
463
+ assert_no_match(/get :edit/, body)
464
+ assert_no_match(/put :update/, body)
465
+ assert_no_match(/delete :destroy/, body)
466
+ end
467
+ end
468
+
469
+ should "redirect to index action on successful create" do
470
+ assert_generated_file "test/functional/line_items_controller_test.rb" do |body|
471
+ assert_match "assert_redirected_to line_items_url", body
472
+ end
473
+ end
474
+ end
475
+
476
+ context "generator with edit and index actions" do
477
+ rails_generator :nifty_scaffold, "line_item", "edit", "index"
478
+
479
+ should "redirect to index action on successful update" do
480
+ assert_generated_file "test/functional/line_items_controller_test.rb" do |body|
481
+ assert_match "assert_redirected_to line_items_url", body
482
+ end
483
+ end
484
+ end
485
+
486
+ context "generator with rspec specified" do
487
+ rails_generator :nifty_scaffold, "line_item", "name:string", :test_framework => :rspec
488
+
489
+ should_generate_file "spec/models/line_item_spec.rb"
490
+ end
491
+
492
+ context "generator with shoulda specified" do
493
+ rails_generator :nifty_scaffold, "line_item", "name:string", :test_framework => :shoulda
494
+
495
+ should "have controller and model tests using shoulda syntax" do
496
+ assert_generated_file "test/functional/line_items_controller_test.rb" do |body|
497
+ assert_match " should ", body
498
+ end
499
+
500
+ assert_generated_file "test/unit/line_item_test.rb" do |body|
501
+ assert_match " should ", body
502
+ end
503
+ end
504
+ end
505
+ end
506
+
507
+ context "generator with haml option" do
508
+ rails_generator :nifty_scaffold, "LineItem", :haml => true
509
+
510
+ %w[index show new edit _form].each do |action|
511
+ should_generate_file "app/views/line_items/#{action}.html.haml"
512
+ end
513
+
514
+ should "render the form partial in views" do
515
+ %w[new edit].each do |action|
516
+ assert_generated_file "app/views/line_items/#{action}.html.haml" do |body|
517
+ assert_match /^= render :partial => 'form'$/, body
518
+ end
519
+ end
520
+ end
521
+ end
522
+ end
523
+ end
524
+
525
+ # just an example model we can use
526
+ class Recipe < ActiveRecord::Base
527
+ add_column :id, :integer
528
+ add_column :foo, :string
529
+ add_column :bar, :string
530
+ add_column :book_id, :integer
531
+ add_column :created_at, :datetime
532
+ add_column :updated_at, :datetime
533
+ end