ghart-nifty-generators 0.3.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 (153) hide show
  1. data/CHANGELOG +105 -0
  2. data/LICENSE +20 -0
  3. data/README.rdoc +107 -0
  4. data/Rakefile +15 -0
  5. data/TODO +7 -0
  6. data/lib/nifty_generators.rb +3 -0
  7. data/nifty-generators.gemspec +31 -0
  8. data/rails_generators/nifty_admin_scaffold/USAGE +51 -0
  9. data/rails_generators/nifty_admin_scaffold/lib/insert_commands.rb +31 -0
  10. data/rails_generators/nifty_admin_scaffold/nifty_admin_scaffold_generator.rb +238 -0
  11. data/rails_generators/nifty_admin_scaffold/templates/actions/create.rb +8 -0
  12. data/rails_generators/nifty_admin_scaffold/templates/actions/destroy.rb +5 -0
  13. data/rails_generators/nifty_admin_scaffold/templates/actions/edit.rb +3 -0
  14. data/rails_generators/nifty_admin_scaffold/templates/actions/index.rb +3 -0
  15. data/rails_generators/nifty_admin_scaffold/templates/actions/new.rb +3 -0
  16. data/rails_generators/nifty_admin_scaffold/templates/actions/show.rb +3 -0
  17. data/rails_generators/nifty_admin_scaffold/templates/actions/update.rb +8 -0
  18. data/rails_generators/nifty_admin_scaffold/templates/controller.rb +5 -0
  19. data/rails_generators/nifty_admin_scaffold/templates/fixtures.yml +9 -0
  20. data/rails_generators/nifty_admin_scaffold/templates/helper.rb +2 -0
  21. data/rails_generators/nifty_admin_scaffold/templates/migration.rb +16 -0
  22. data/rails_generators/nifty_admin_scaffold/templates/model.rb +3 -0
  23. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/actions/create.rb +11 -0
  24. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/actions/destroy.rb +6 -0
  25. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/actions/edit.rb +4 -0
  26. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/actions/index.rb +4 -0
  27. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/actions/new.rb +4 -0
  28. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/actions/show.rb +4 -0
  29. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/actions/update.rb +11 -0
  30. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/controller.rb +8 -0
  31. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/model.rb +7 -0
  32. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/actions/create.rb +13 -0
  33. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/actions/destroy.rb +8 -0
  34. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/actions/edit.rb +6 -0
  35. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/actions/index.rb +6 -0
  36. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/actions/new.rb +6 -0
  37. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/actions/show.rb +6 -0
  38. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/actions/update.rb +13 -0
  39. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/controller.rb +5 -0
  40. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/model.rb +7 -0
  41. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/actions/create.rb +11 -0
  42. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/actions/destroy.rb +6 -0
  43. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/actions/edit.rb +4 -0
  44. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/actions/index.rb +4 -0
  45. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/actions/new.rb +4 -0
  46. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/actions/show.rb +4 -0
  47. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/actions/update.rb +11 -0
  48. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/controller.rb +5 -0
  49. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/model.rb +7 -0
  50. data/rails_generators/nifty_admin_scaffold/templates/views/erb/_form.html.erb +10 -0
  51. data/rails_generators/nifty_admin_scaffold/templates/views/erb/edit.html.erb +3 -0
  52. data/rails_generators/nifty_admin_scaffold/templates/views/erb/index.html.erb +29 -0
  53. data/rails_generators/nifty_admin_scaffold/templates/views/erb/new.html.erb +3 -0
  54. data/rails_generators/nifty_admin_scaffold/templates/views/erb/show.html.erb +14 -0
  55. data/rails_generators/nifty_admin_scaffold/templates/views/haml/_form.html.haml +10 -0
  56. data/rails_generators/nifty_admin_scaffold/templates/views/haml/edit.html.haml +14 -0
  57. data/rails_generators/nifty_admin_scaffold/templates/views/haml/index.html.haml +26 -0
  58. data/rails_generators/nifty_admin_scaffold/templates/views/haml/new.html.haml +7 -0
  59. data/rails_generators/nifty_admin_scaffold/templates/views/haml/show.html.haml +12 -0
  60. data/rails_generators/nifty_authentication/USAGE +50 -0
  61. data/rails_generators/nifty_authentication/lib/insert_commands.rb +74 -0
  62. data/rails_generators/nifty_authentication/nifty_authentication_generator.rb +128 -0
  63. data/rails_generators/nifty_authentication/templates/authentication.rb +61 -0
  64. data/rails_generators/nifty_authentication/templates/authlogic_session.rb +2 -0
  65. data/rails_generators/nifty_authentication/templates/fixtures.yml +24 -0
  66. data/rails_generators/nifty_authentication/templates/migration.rb +20 -0
  67. data/rails_generators/nifty_authentication/templates/sessions_controller.rb +45 -0
  68. data/rails_generators/nifty_authentication/templates/sessions_helper.rb +2 -0
  69. data/rails_generators/nifty_authentication/templates/tests/rspec/sessions_controller.rb +39 -0
  70. data/rails_generators/nifty_authentication/templates/tests/rspec/user.rb +83 -0
  71. data/rails_generators/nifty_authentication/templates/tests/rspec/users_controller.rb +26 -0
  72. data/rails_generators/nifty_authentication/templates/tests/shoulda/sessions_controller.rb +40 -0
  73. data/rails_generators/nifty_authentication/templates/tests/shoulda/user.rb +85 -0
  74. data/rails_generators/nifty_authentication/templates/tests/shoulda/users_controller.rb +27 -0
  75. data/rails_generators/nifty_authentication/templates/tests/testunit/sessions_controller.rb +36 -0
  76. data/rails_generators/nifty_authentication/templates/tests/testunit/user.rb +88 -0
  77. data/rails_generators/nifty_authentication/templates/tests/testunit/users_controller.rb +23 -0
  78. data/rails_generators/nifty_authentication/templates/user.rb +42 -0
  79. data/rails_generators/nifty_authentication/templates/users_controller.rb +18 -0
  80. data/rails_generators/nifty_authentication/templates/users_helper.rb +2 -0
  81. data/rails_generators/nifty_authentication/templates/views/erb/login.html.erb +30 -0
  82. data/rails_generators/nifty_authentication/templates/views/erb/signup.html.erb +24 -0
  83. data/rails_generators/nifty_authentication/templates/views/haml/login.html.haml +30 -0
  84. data/rails_generators/nifty_authentication/templates/views/haml/signup.html.haml +24 -0
  85. data/rails_generators/nifty_config/USAGE +23 -0
  86. data/rails_generators/nifty_config/nifty_config_generator.rb +32 -0
  87. data/rails_generators/nifty_config/templates/config.yml +8 -0
  88. data/rails_generators/nifty_config/templates/load_config.rb +2 -0
  89. data/rails_generators/nifty_layout/USAGE +25 -0
  90. data/rails_generators/nifty_layout/lib/insert_commands.rb +43 -0
  91. data/rails_generators/nifty_layout/nifty_layout_generator.rb +55 -0
  92. data/rails_generators/nifty_layout/templates/helper.rb +22 -0
  93. data/rails_generators/nifty_layout/templates/layout.html.haml +26 -0
  94. data/rails_generators/nifty_layout/templates/stylesheet.sass +67 -0
  95. data/rails_generators/nifty_scaffold/USAGE +51 -0
  96. data/rails_generators/nifty_scaffold/nifty_scaffold_generator.rb +237 -0
  97. data/rails_generators/nifty_scaffold/templates/actions/create.rb +9 -0
  98. data/rails_generators/nifty_scaffold/templates/actions/destroy.rb +6 -0
  99. data/rails_generators/nifty_scaffold/templates/actions/edit.rb +3 -0
  100. data/rails_generators/nifty_scaffold/templates/actions/index.rb +3 -0
  101. data/rails_generators/nifty_scaffold/templates/actions/new.rb +3 -0
  102. data/rails_generators/nifty_scaffold/templates/actions/show.rb +3 -0
  103. data/rails_generators/nifty_scaffold/templates/actions/update.rb +9 -0
  104. data/rails_generators/nifty_scaffold/templates/controller.rb +3 -0
  105. data/rails_generators/nifty_scaffold/templates/fixtures.yml +9 -0
  106. data/rails_generators/nifty_scaffold/templates/helper.rb +2 -0
  107. data/rails_generators/nifty_scaffold/templates/migration.rb +16 -0
  108. data/rails_generators/nifty_scaffold/templates/model.rb +3 -0
  109. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/create.rb +11 -0
  110. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/destroy.rb +6 -0
  111. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/edit.rb +4 -0
  112. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/index.rb +4 -0
  113. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/new.rb +4 -0
  114. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/show.rb +4 -0
  115. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/update.rb +11 -0
  116. data/rails_generators/nifty_scaffold/templates/tests/rspec/controller.rb +8 -0
  117. data/rails_generators/nifty_scaffold/templates/tests/rspec/model.rb +7 -0
  118. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/create.rb +13 -0
  119. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/destroy.rb +8 -0
  120. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/edit.rb +6 -0
  121. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/index.rb +6 -0
  122. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/new.rb +6 -0
  123. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/show.rb +6 -0
  124. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/update.rb +13 -0
  125. data/rails_generators/nifty_scaffold/templates/tests/shoulda/controller.rb +5 -0
  126. data/rails_generators/nifty_scaffold/templates/tests/shoulda/model.rb +7 -0
  127. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/create.rb +11 -0
  128. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/destroy.rb +6 -0
  129. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/edit.rb +4 -0
  130. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/index.rb +4 -0
  131. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/new.rb +4 -0
  132. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/show.rb +4 -0
  133. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/update.rb +11 -0
  134. data/rails_generators/nifty_scaffold/templates/tests/testunit/controller.rb +5 -0
  135. data/rails_generators/nifty_scaffold/templates/tests/testunit/model.rb +7 -0
  136. data/rails_generators/nifty_scaffold/templates/views/erb/_form.html.erb +10 -0
  137. data/rails_generators/nifty_scaffold/templates/views/erb/edit.html.erb +14 -0
  138. data/rails_generators/nifty_scaffold/templates/views/erb/index.html.erb +29 -0
  139. data/rails_generators/nifty_scaffold/templates/views/erb/new.html.erb +7 -0
  140. data/rails_generators/nifty_scaffold/templates/views/erb/show.html.erb +20 -0
  141. data/rails_generators/nifty_scaffold/templates/views/haml/_form.html.haml +10 -0
  142. data/rails_generators/nifty_scaffold/templates/views/haml/edit.html.haml +14 -0
  143. data/rails_generators/nifty_scaffold/templates/views/haml/index.html.haml +25 -0
  144. data/rails_generators/nifty_scaffold/templates/views/haml/new.html.haml +7 -0
  145. data/rails_generators/nifty_scaffold/templates/views/haml/show.html.haml +20 -0
  146. data/tasks/deployment.rake +2 -0
  147. data/test/test_helper.rb +117 -0
  148. data/test/test_nifty_admin_scaffold_generator.rb +538 -0
  149. data/test/test_nifty_authentication_generator.rb +236 -0
  150. data/test/test_nifty_config_generator.rb +37 -0
  151. data/test/test_nifty_layout_generator.rb +47 -0
  152. data/test/test_nifty_scaffold_generator.rb +538 -0
  153. metadata +222 -0
@@ -0,0 +1,51 @@
1
+ Description:
2
+ Scaffolds an entire resource, from model and migration to controller and
3
+ views. The resource is ready to use as a starting point for your restful,
4
+ resource-oriented application. Tests or specs are also generated depending
5
+ on if you have a "spec" directory or not.
6
+
7
+ IMPORTANT: This generator uses the "title" helper method which is generated
8
+ by the nifty_layout generator. You may want to run that generator first.
9
+
10
+ Usage:
11
+ Pass the name of the model, either CamelCased or under_scored, as the first
12
+ argument, and an optional list of attribute pairs and controller actions.
13
+
14
+ If no controller actions are specified, they will default to index, show,
15
+ new, create, edit, update, and destroy.
16
+
17
+ IMPORTANT: If no attribute pairs are specified, no model will be generated.
18
+ It will try to determine the attributes from an existing model.
19
+
20
+ Attribute pairs are column_name:sql_type arguments specifying the
21
+ model's attributes. Timestamps are added by default, so you don't have to
22
+ specify them by hand as 'created_at:datetime updated_at:datetime'.
23
+
24
+ For example, `nifty_scaffold post name:string content:text hidden:boolean`
25
+ gives you a model with those three attributes, a controller that handles
26
+ the create/show/update/destroy, forms to create and edit your posts, and
27
+ an index that lists them all, as well as a map.resources :posts
28
+ declaration in config/routes.rb.
29
+
30
+ Adding an "!" in the mix of arguments will invert the passed controller
31
+ actions. This will include all 7 controller actitons except the ones
32
+ mentioned. This option doesn't effect model attributes.
33
+
34
+ Examples:
35
+ script/generate nifty_scaffold post
36
+
37
+ Will create a controller called "posts" it will contain all seven
38
+ CRUD actions along with the views. A model will NOT be created,
39
+ instead it will look for an existing model and use those attributes.
40
+
41
+ script/generate nifty_scaffold post name:string content:text index new edit
42
+
43
+ Will create a Post model and migration file with the name and content
44
+ attributes. It will also create a controller with index, new, create,
45
+ edit, and update actions. Notice the create and update actions are
46
+ added automatically with new and edit.
47
+
48
+ script/generate nifty_scaffold post ! show new
49
+
50
+ Creates a posts controller (no model) with index, edit, update, and
51
+ destroy actions.
@@ -0,0 +1,237 @@
1
+ class NiftyScaffoldGenerator < Rails::Generator::Base
2
+ attr_accessor :name, :attributes, :controller_actions
3
+
4
+ def initialize(runtime_args, runtime_options = {})
5
+ super
6
+ usage if @args.empty?
7
+
8
+ @name = @args.first
9
+ @controller_actions = []
10
+ @attributes = []
11
+
12
+ @args[1..-1].each do |arg|
13
+ if arg == '!'
14
+ options[:invert] = true
15
+ elsif arg.include? ':'
16
+ @attributes << Rails::Generator::GeneratedAttribute.new(*arg.split(":"))
17
+ else
18
+ @controller_actions << arg
19
+ @controller_actions << 'create' if arg == 'new'
20
+ @controller_actions << 'update' if arg == 'edit'
21
+ end
22
+ end
23
+
24
+ @controller_actions.uniq!
25
+ @attributes.uniq!
26
+
27
+ if options[:invert] || @controller_actions.empty?
28
+ @controller_actions = all_actions - @controller_actions
29
+ end
30
+
31
+ if @attributes.empty?
32
+ options[:skip_model] = true # default to skipping model if no attributes passed
33
+ if model_exists?
34
+ model_columns_for_attributes.each do |column|
35
+ @attributes << Rails::Generator::GeneratedAttribute.new(column.name.to_s, column.type.to_s)
36
+ end
37
+ else
38
+ @attributes << Rails::Generator::GeneratedAttribute.new('name', 'string')
39
+ end
40
+ end
41
+ end
42
+
43
+ def manifest
44
+ record do |m|
45
+ unless options[:skip_model]
46
+ m.directory "app/models"
47
+ m.template "model.rb", "app/models/#{singular_name}.rb"
48
+ unless options[:skip_migration]
49
+ m.migration_template "migration.rb", "db/migrate", :migration_file_name => "create_#{plural_name}"
50
+ end
51
+
52
+ if rspec?
53
+ m.directory "spec/models"
54
+ m.template "tests/#{test_framework}/model.rb", "spec/models/#{singular_name}_spec.rb"
55
+ if options[:make_fixture]
56
+ m.directory "spec/fixtures"
57
+ m.template "fixtures.yml", "spec/fixtures/#{plural_name}.yml"
58
+ end
59
+ else
60
+ m.directory "test/unit"
61
+ m.template "tests/#{test_framework}/model.rb", "test/unit/#{singular_name}_test.rb"
62
+ if options[:make_fixture]
63
+ m.directory "test/fixtures"
64
+ m.template "fixtures.yml", "test/fixtures/#{plural_name}.yml"
65
+ end
66
+ end
67
+ end
68
+
69
+ unless options[:skip_controller]
70
+ m.directory "app/controllers"
71
+ m.template "controller.rb", "app/controllers/#{plural_name}_controller.rb"
72
+
73
+ m.directory "app/helpers"
74
+ m.template "helper.rb", "app/helpers/#{plural_name}_helper.rb"
75
+
76
+ m.directory "app/views/#{plural_name}"
77
+ controller_actions.each do |action|
78
+ if File.exist? source_path("views/#{view_language}/#{action}.html.#{view_language}")
79
+ m.template "views/#{view_language}/#{action}.html.#{view_language}", "app/views/#{plural_name}/#{action}.html.#{view_language}"
80
+ end
81
+ end
82
+
83
+ if form_partial?
84
+ m.template "views/#{view_language}/_form.html.#{view_language}", "app/views/#{plural_name}/_form.html.#{view_language}"
85
+ end
86
+
87
+ m.route_resources plural_name
88
+
89
+ if rspec?
90
+ m.directory "spec/controllers"
91
+ m.template "tests/#{test_framework}/controller.rb", "spec/controllers/#{plural_name}_controller_spec.rb"
92
+ else
93
+ m.directory "test/functional"
94
+ m.template "tests/#{test_framework}/controller.rb", "test/functional/#{plural_name}_controller_test.rb"
95
+ end
96
+ end
97
+ end
98
+ end
99
+
100
+ def form_partial?
101
+ actions? :new, :edit
102
+ end
103
+
104
+ def all_actions
105
+ %w[index show new create edit update destroy]
106
+ end
107
+
108
+ def action?(name)
109
+ controller_actions.include? name.to_s
110
+ end
111
+
112
+ def actions?(*names)
113
+ names.all? { |n| action? n.to_s }
114
+ end
115
+
116
+ def singular_name
117
+ name.underscore
118
+ end
119
+
120
+ def plural_name
121
+ name.underscore.pluralize
122
+ end
123
+
124
+ def class_name
125
+ name.camelize
126
+ end
127
+
128
+ def plural_class_name
129
+ plural_name.camelize
130
+ end
131
+
132
+ def controller_methods(dir_name)
133
+ controller_actions.map do |action|
134
+ read_template("#{dir_name}/#{action}.rb")
135
+ end.join(" \n").strip
136
+ end
137
+
138
+ def render_form
139
+ if form_partial?
140
+ if options[:haml]
141
+ "= render :partial => 'form'"
142
+ else
143
+ "<%= render :partial => 'form' %>"
144
+ end
145
+ else
146
+ read_template("views/#{view_language}/_form.html.#{view_language}")
147
+ end
148
+ end
149
+
150
+ def items_path(suffix = 'path')
151
+ if action? :index
152
+ "#{plural_name}_#{suffix}"
153
+ else
154
+ "root_#{suffix}"
155
+ end
156
+ end
157
+
158
+ def item_path(suffix = 'path')
159
+ if action? :show
160
+ "@#{singular_name}"
161
+ else
162
+ items_path(suffix)
163
+ end
164
+ end
165
+
166
+ def item_path_for_spec(suffix = 'path')
167
+ if action? :show
168
+ "#{singular_name}_#{suffix}(assigns[:#{singular_name}])"
169
+ else
170
+ items_path(suffix)
171
+ end
172
+ end
173
+
174
+ def item_path_for_test(suffix = 'path')
175
+ if action? :show
176
+ "#{singular_name}_#{suffix}(assigns(:#{singular_name}))"
177
+ else
178
+ items_path(suffix)
179
+ end
180
+ end
181
+
182
+ def model_columns_for_attributes
183
+ class_name.constantize.columns.reject do |column|
184
+ column.name.to_s =~ /^(id|created_at|updated_at)$/
185
+ end
186
+ end
187
+
188
+ def rspec?
189
+ test_framework == :rspec
190
+ end
191
+
192
+ protected
193
+
194
+ def view_language
195
+ options[:haml] ? 'haml' : 'erb'
196
+ end
197
+
198
+ def test_framework
199
+ options[:test_framework] ||= default_test_framework
200
+ end
201
+
202
+ def default_test_framework
203
+ File.exist?(destination_path("spec")) ? :rspec : :testunit
204
+ end
205
+
206
+ def add_options!(opt)
207
+ opt.separator ''
208
+ opt.separator 'Options:'
209
+ opt.on("--skip-model", "Don't generate a model or migration file.") { |v| options[:skip_model] = v }
210
+ opt.on("--skip-migration", "Don't generate migration file for model.") { |v| options[:skip_migration] = v }
211
+ opt.on("--skip-timestamps", "Don't add timestamps to migration file.") { |v| options[:skip_timestamps] = v }
212
+ opt.on("--skip-controller", "Don't generate controller, helper, or views.") { |v| options[:skip_controller] = v }
213
+ opt.on("--make-fixture", "Only generate fixture file for model if requested.") { |v| options[:make_fixture] = v }
214
+ opt.on("--invert", "Generate all controller actions except these mentioned.") { |v| options[:invert] = v }
215
+ opt.on("--haml", "Generate HAML views instead of ERB.") { |v| options[:haml] = v }
216
+ opt.on("--testunit", "Use test/unit for test files.") { options[:test_framework] = :testunit }
217
+ opt.on("--rspec", "Use RSpec for test files.") { options[:test_framework] = :rspec }
218
+ opt.on("--shoulda", "Use Shoulda for test files.") { options[:test_framework] = :shoulda }
219
+ end
220
+
221
+ # is there a better way to do this? Perhaps with const_defined?
222
+ def model_exists?
223
+ File.exist? destination_path("app/models/#{singular_name}.rb")
224
+ end
225
+
226
+ def read_template(relative_path)
227
+ ERB.new(File.read(source_path(relative_path)), nil, '-').result(binding)
228
+ end
229
+
230
+ def banner
231
+ <<-EOS
232
+ Creates a controller and optional model given the name, actions, and attributes.
233
+
234
+ USAGE: #{$0} #{spec.name} ModelName [controller_actions and model:attributes] [options]
235
+ EOS
236
+ end
237
+ end
@@ -0,0 +1,9 @@
1
+ def create
2
+ @<%= singular_name %> = <%= class_name %>.new(params[:<%= singular_name %>])
3
+ if @<%= singular_name %>.save
4
+ flash[:notice] = "Successfully created <%= name.underscore.humanize.downcase %>."
5
+ redirect_to <%= item_path('url') %>
6
+ else
7
+ render :action => 'new'
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ def destroy
2
+ @<%= singular_name %> = <%= class_name %>.find(params[:id])
3
+ @<%= singular_name %>.destroy
4
+ flash[:notice] = "Successfully destroyed <%= name.underscore.humanize.downcase %>."
5
+ redirect_to <%= items_path('url') %>
6
+ end
@@ -0,0 +1,3 @@
1
+ def edit
2
+ @<%= singular_name %> = <%= class_name %>.find(params[:id])
3
+ end
@@ -0,0 +1,3 @@
1
+ def index
2
+ @<%= plural_name %> = <%= class_name %>.all
3
+ end
@@ -0,0 +1,3 @@
1
+ def new
2
+ @<%= singular_name %> = <%= class_name %>.new
3
+ end
@@ -0,0 +1,3 @@
1
+ def show
2
+ @<%= singular_name %> = <%= class_name %>.find(params[:id])
3
+ end
@@ -0,0 +1,9 @@
1
+ def update
2
+ @<%= singular_name %> = <%= class_name %>.find(params[:id])
3
+ if @<%= singular_name %>.update_attributes(params[:<%= singular_name %>])
4
+ flash[:notice] = "Successfully updated <%= name.underscore.humanize.downcase %>."
5
+ redirect_to <%= item_path('url') %>
6
+ else
7
+ render :action => 'edit'
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ class <%= plural_class_name %>Controller < ApplicationController
2
+ <%= controller_methods :actions %>
3
+ end
@@ -0,0 +1,9 @@
1
+ one:
2
+ <%- for attribute in attributes -%>
3
+ <%= attribute.name %>: <%= attribute.default %>
4
+ <%- end -%>
5
+
6
+ two:
7
+ <%- for attribute in attributes -%>
8
+ <%= attribute.name %>: <%= attribute.default %>
9
+ <%- end -%>
@@ -0,0 +1,2 @@
1
+ module <%= plural_class_name %>Helper
2
+ end
@@ -0,0 +1,16 @@
1
+ class Create<%= plural_class_name %> < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :<%= plural_name %> do |t|
4
+ <%- for attribute in attributes -%>
5
+ t.<%= attribute.type %> :<%= attribute.name %>
6
+ <%- end -%>
7
+ <%- unless options[:skip_timestamps] -%>
8
+ t.timestamps
9
+ <%- end -%>
10
+ end
11
+ end
12
+
13
+ def self.down
14
+ drop_table :<%= plural_name %>
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ class <%= class_name %> < ActiveRecord::Base
2
+ attr_accessible <%= attributes.map { |a| ":#{a.name}" }.join(", ") %>
3
+ end
@@ -0,0 +1,11 @@
1
+ it "create action should render new template when model is invalid" do
2
+ <%= class_name %>.any_instance.stubs(:valid?).returns(false)
3
+ post :create
4
+ response.should render_template(:new)
5
+ end
6
+
7
+ it "create action should redirect when model is valid" do
8
+ <%= class_name %>.any_instance.stubs(:valid?).returns(true)
9
+ post :create
10
+ response.should redirect_to(<%= item_path_for_spec('url') %>)
11
+ end
@@ -0,0 +1,6 @@
1
+ it "destroy action should destroy model and redirect to index action" do
2
+ <%= singular_name %> = <%= class_name %>.first
3
+ delete :destroy, :id => <%= singular_name %>
4
+ response.should redirect_to(<%= items_path('url') %>)
5
+ <%= class_name %>.exists?(<%= singular_name %>.id).should be_false
6
+ end
@@ -0,0 +1,4 @@
1
+ it "edit action should render edit template" do
2
+ get :edit, :id => <%= class_name %>.first
3
+ response.should render_template(:edit)
4
+ end
@@ -0,0 +1,4 @@
1
+ it "index action should render index template" do
2
+ get :index
3
+ response.should render_template(:index)
4
+ end
@@ -0,0 +1,4 @@
1
+ it "new action should render new template" do
2
+ get :new
3
+ response.should render_template(:new)
4
+ end
@@ -0,0 +1,4 @@
1
+ it "show action should render show template" do
2
+ get :show, :id => <%= class_name %>.first
3
+ response.should render_template(:show)
4
+ end
@@ -0,0 +1,11 @@
1
+ it "update action should render edit template when model is invalid" do
2
+ <%= class_name %>.any_instance.stubs(:valid?).returns(false)
3
+ put :update, :id => <%= class_name %>.first
4
+ response.should render_template(:edit)
5
+ end
6
+
7
+ it "update action should redirect when model is valid" do
8
+ <%= class_name %>.any_instance.stubs(:valid?).returns(true)
9
+ put :update, :id => <%= class_name %>.first
10
+ response.should redirect_to(<%= item_path_for_spec('url') %>)
11
+ end
@@ -0,0 +1,8 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe <%= plural_class_name %>Controller do
4
+ fixtures :all
5
+ integrate_views
6
+
7
+ <%= controller_methods 'tests/rspec/actions' %>
8
+ end