splendeo-generators 0.1.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 (143) hide show
  1. data/CHANGELOG +119 -0
  2. data/LICENSE +20 -0
  3. data/README.rdoc +98 -0
  4. data/Rakefile +12 -0
  5. data/lib/nifty_generators.rb +3 -0
  6. data/rails_generators/splendeo_authentication/USAGE +50 -0
  7. data/rails_generators/splendeo_authentication/lib/insert_commands.rb +74 -0
  8. data/rails_generators/splendeo_authentication/splendeo_authentication_generator.rb +128 -0
  9. data/rails_generators/splendeo_authentication/templates/authentication.rb +61 -0
  10. data/rails_generators/splendeo_authentication/templates/authlogic_session.rb +2 -0
  11. data/rails_generators/splendeo_authentication/templates/fixtures.yml +24 -0
  12. data/rails_generators/splendeo_authentication/templates/migration.rb +20 -0
  13. data/rails_generators/splendeo_authentication/templates/sessions_controller.rb +45 -0
  14. data/rails_generators/splendeo_authentication/templates/sessions_helper.rb +2 -0
  15. data/rails_generators/splendeo_authentication/templates/tests/rspec/sessions_controller.rb +39 -0
  16. data/rails_generators/splendeo_authentication/templates/tests/rspec/user.rb +83 -0
  17. data/rails_generators/splendeo_authentication/templates/tests/rspec/users_controller.rb +26 -0
  18. data/rails_generators/splendeo_authentication/templates/tests/shoulda/sessions_controller.rb +40 -0
  19. data/rails_generators/splendeo_authentication/templates/tests/shoulda/user.rb +85 -0
  20. data/rails_generators/splendeo_authentication/templates/tests/shoulda/users_controller.rb +27 -0
  21. data/rails_generators/splendeo_authentication/templates/tests/testunit/sessions_controller.rb +36 -0
  22. data/rails_generators/splendeo_authentication/templates/tests/testunit/user.rb +88 -0
  23. data/rails_generators/splendeo_authentication/templates/tests/testunit/users_controller.rb +23 -0
  24. data/rails_generators/splendeo_authentication/templates/user.rb +42 -0
  25. data/rails_generators/splendeo_authentication/templates/users_controller.rb +18 -0
  26. data/rails_generators/splendeo_authentication/templates/users_helper.rb +2 -0
  27. data/rails_generators/splendeo_authentication/templates/views/erb/login.html.erb +30 -0
  28. data/rails_generators/splendeo_authentication/templates/views/erb/signup.html.erb +24 -0
  29. data/rails_generators/splendeo_authentication/templates/views/haml/login.html.haml +30 -0
  30. data/rails_generators/splendeo_authentication/templates/views/haml/signup.html.haml +24 -0
  31. data/rails_generators/splendeo_config/USAGE +23 -0
  32. data/rails_generators/splendeo_config/splendeo_config_generator.rb +32 -0
  33. data/rails_generators/splendeo_config/templates/config.yml +8 -0
  34. data/rails_generators/splendeo_config/templates/load_config.rb +2 -0
  35. data/rails_generators/splendeo_layout/USAGE +25 -0
  36. data/rails_generators/splendeo_layout/splendeo_layout_generator.rb +76 -0
  37. data/rails_generators/splendeo_layout/templates/blueprint-sass/ie.sass +103 -0
  38. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/buttons/icons/cross.png +0 -0
  39. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/buttons/icons/key.png +0 -0
  40. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/buttons/icons/tick.png +0 -0
  41. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/buttons/readme.txt +32 -0
  42. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/buttons/screen.sass +104 -0
  43. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/fancy-type/readme.txt +14 -0
  44. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/fancy-type/screen.sass +34 -0
  45. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/link-icons/icons/doc.png +0 -0
  46. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/link-icons/icons/email.png +0 -0
  47. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/link-icons/icons/external.png +0 -0
  48. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/link-icons/icons/feed.png +0 -0
  49. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/link-icons/icons/im.png +0 -0
  50. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/link-icons/icons/pdf.png +0 -0
  51. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/link-icons/icons/visited.png +0 -0
  52. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/link-icons/icons/xls.png +0 -0
  53. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/link-icons/readme.txt +18 -0
  54. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/link-icons/screen.sass +50 -0
  55. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/rtl/readme.txt +10 -0
  56. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/rtl/screen.sass +272 -0
  57. data/rails_generators/splendeo_layout/templates/blueprint-sass/print.sass +75 -0
  58. data/rails_generators/splendeo_layout/templates/blueprint-sass/screen.sass +1062 -0
  59. data/rails_generators/splendeo_layout/templates/blueprint/ie.css +35 -0
  60. data/rails_generators/splendeo_layout/templates/blueprint/plugins/buttons/icons/cross.png +0 -0
  61. data/rails_generators/splendeo_layout/templates/blueprint/plugins/buttons/icons/key.png +0 -0
  62. data/rails_generators/splendeo_layout/templates/blueprint/plugins/buttons/icons/tick.png +0 -0
  63. data/rails_generators/splendeo_layout/templates/blueprint/plugins/buttons/readme.txt +32 -0
  64. data/rails_generators/splendeo_layout/templates/blueprint/plugins/buttons/screen.css +97 -0
  65. data/rails_generators/splendeo_layout/templates/blueprint/plugins/fancy-type/readme.txt +14 -0
  66. data/rails_generators/splendeo_layout/templates/blueprint/plugins/fancy-type/screen.css +71 -0
  67. data/rails_generators/splendeo_layout/templates/blueprint/plugins/link-icons/icons/doc.png +0 -0
  68. data/rails_generators/splendeo_layout/templates/blueprint/plugins/link-icons/icons/email.png +0 -0
  69. data/rails_generators/splendeo_layout/templates/blueprint/plugins/link-icons/icons/external.png +0 -0
  70. data/rails_generators/splendeo_layout/templates/blueprint/plugins/link-icons/icons/feed.png +0 -0
  71. data/rails_generators/splendeo_layout/templates/blueprint/plugins/link-icons/icons/im.png +0 -0
  72. data/rails_generators/splendeo_layout/templates/blueprint/plugins/link-icons/icons/pdf.png +0 -0
  73. data/rails_generators/splendeo_layout/templates/blueprint/plugins/link-icons/icons/visited.png +0 -0
  74. data/rails_generators/splendeo_layout/templates/blueprint/plugins/link-icons/icons/xls.png +0 -0
  75. data/rails_generators/splendeo_layout/templates/blueprint/plugins/link-icons/readme.txt +18 -0
  76. data/rails_generators/splendeo_layout/templates/blueprint/plugins/link-icons/screen.css +40 -0
  77. data/rails_generators/splendeo_layout/templates/blueprint/plugins/rtl/readme.txt +10 -0
  78. data/rails_generators/splendeo_layout/templates/blueprint/plugins/rtl/screen.css +110 -0
  79. data/rails_generators/splendeo_layout/templates/blueprint/print.css +29 -0
  80. data/rails_generators/splendeo_layout/templates/blueprint/screen.css +258 -0
  81. data/rails_generators/splendeo_layout/templates/haml/init.rb +16 -0
  82. data/rails_generators/splendeo_layout/templates/helper.rb +22 -0
  83. data/rails_generators/splendeo_layout/templates/layout.html.erb +34 -0
  84. data/rails_generators/splendeo_layout/templates/layout.html.haml +31 -0
  85. data/rails_generators/splendeo_layout/templates/stylesheet.css +77 -0
  86. data/rails_generators/splendeo_layout/templates/stylesheet.sass +63 -0
  87. data/rails_generators/splendeo_scaffold/USAGE +51 -0
  88. data/rails_generators/splendeo_scaffold/splendeo_scaffold_generator.rb +232 -0
  89. data/rails_generators/splendeo_scaffold/templates/actions/create.rb +9 -0
  90. data/rails_generators/splendeo_scaffold/templates/actions/destroy.rb +6 -0
  91. data/rails_generators/splendeo_scaffold/templates/actions/edit.rb +3 -0
  92. data/rails_generators/splendeo_scaffold/templates/actions/index.rb +3 -0
  93. data/rails_generators/splendeo_scaffold/templates/actions/new.rb +3 -0
  94. data/rails_generators/splendeo_scaffold/templates/actions/show.rb +3 -0
  95. data/rails_generators/splendeo_scaffold/templates/actions/update.rb +9 -0
  96. data/rails_generators/splendeo_scaffold/templates/controller.rb +3 -0
  97. data/rails_generators/splendeo_scaffold/templates/fixtures.yml +9 -0
  98. data/rails_generators/splendeo_scaffold/templates/helper.rb +2 -0
  99. data/rails_generators/splendeo_scaffold/templates/migration.rb +16 -0
  100. data/rails_generators/splendeo_scaffold/templates/model.rb +3 -0
  101. data/rails_generators/splendeo_scaffold/templates/tests/rspec/actions/create.rb +11 -0
  102. data/rails_generators/splendeo_scaffold/templates/tests/rspec/actions/destroy.rb +6 -0
  103. data/rails_generators/splendeo_scaffold/templates/tests/rspec/actions/edit.rb +4 -0
  104. data/rails_generators/splendeo_scaffold/templates/tests/rspec/actions/index.rb +4 -0
  105. data/rails_generators/splendeo_scaffold/templates/tests/rspec/actions/new.rb +4 -0
  106. data/rails_generators/splendeo_scaffold/templates/tests/rspec/actions/show.rb +4 -0
  107. data/rails_generators/splendeo_scaffold/templates/tests/rspec/actions/update.rb +11 -0
  108. data/rails_generators/splendeo_scaffold/templates/tests/rspec/controller.rb +8 -0
  109. data/rails_generators/splendeo_scaffold/templates/tests/rspec/model.rb +7 -0
  110. data/rails_generators/splendeo_scaffold/templates/tests/shoulda/actions/create.rb +13 -0
  111. data/rails_generators/splendeo_scaffold/templates/tests/shoulda/actions/destroy.rb +8 -0
  112. data/rails_generators/splendeo_scaffold/templates/tests/shoulda/actions/edit.rb +6 -0
  113. data/rails_generators/splendeo_scaffold/templates/tests/shoulda/actions/index.rb +6 -0
  114. data/rails_generators/splendeo_scaffold/templates/tests/shoulda/actions/new.rb +6 -0
  115. data/rails_generators/splendeo_scaffold/templates/tests/shoulda/actions/show.rb +6 -0
  116. data/rails_generators/splendeo_scaffold/templates/tests/shoulda/actions/update.rb +13 -0
  117. data/rails_generators/splendeo_scaffold/templates/tests/shoulda/controller.rb +5 -0
  118. data/rails_generators/splendeo_scaffold/templates/tests/shoulda/model.rb +7 -0
  119. data/rails_generators/splendeo_scaffold/templates/tests/testunit/actions/create.rb +11 -0
  120. data/rails_generators/splendeo_scaffold/templates/tests/testunit/actions/destroy.rb +6 -0
  121. data/rails_generators/splendeo_scaffold/templates/tests/testunit/actions/edit.rb +4 -0
  122. data/rails_generators/splendeo_scaffold/templates/tests/testunit/actions/index.rb +4 -0
  123. data/rails_generators/splendeo_scaffold/templates/tests/testunit/actions/new.rb +4 -0
  124. data/rails_generators/splendeo_scaffold/templates/tests/testunit/actions/show.rb +4 -0
  125. data/rails_generators/splendeo_scaffold/templates/tests/testunit/actions/update.rb +11 -0
  126. data/rails_generators/splendeo_scaffold/templates/tests/testunit/controller.rb +5 -0
  127. data/rails_generators/splendeo_scaffold/templates/tests/testunit/model.rb +7 -0
  128. data/rails_generators/splendeo_scaffold/templates/views/erb/_form.html.erb +10 -0
  129. data/rails_generators/splendeo_scaffold/templates/views/erb/edit.html.erb +14 -0
  130. data/rails_generators/splendeo_scaffold/templates/views/erb/index.html.erb +29 -0
  131. data/rails_generators/splendeo_scaffold/templates/views/erb/new.html.erb +7 -0
  132. data/rails_generators/splendeo_scaffold/templates/views/erb/show.html.erb +20 -0
  133. data/rails_generators/splendeo_scaffold/templates/views/haml/_form.html.haml +10 -0
  134. data/rails_generators/splendeo_scaffold/templates/views/haml/edit.html.haml +14 -0
  135. data/rails_generators/splendeo_scaffold/templates/views/haml/index.html.haml +25 -0
  136. data/rails_generators/splendeo_scaffold/templates/views/haml/new.html.haml +7 -0
  137. data/rails_generators/splendeo_scaffold/templates/views/haml/show.html.haml +20 -0
  138. data/test/test_helper.rb +119 -0
  139. data/test/test_splendeo_authentication_generator.rb +274 -0
  140. data/test/test_splendeo_config_generator.rb +37 -0
  141. data/test/test_splendeo_layout_generator.rb +42 -0
  142. data/test/test_splendeo_scaffold_generator.rb +534 -0
  143. metadata +212 -0
@@ -0,0 +1,63 @@
1
+ !primary_color = #4B7399
2
+
3
+ body
4
+ :background-color = !primary_color
5
+
6
+ a
7
+ :color #0000FF
8
+ img
9
+ :border none
10
+
11
+ .clear
12
+ :clear both
13
+ :height 0
14
+ :overflow hidden
15
+
16
+ #container
17
+ :margin 0 auto
18
+ :background #fff
19
+ :padding 20px 40px
20
+ :border solid 1px black
21
+ :margin-top 20px
22
+
23
+ #flash_notice,
24
+ #flash_error
25
+ :padding 5px 8px
26
+ :margin 10px 0
27
+
28
+ #flash_notice
29
+ :background-color #CFC
30
+ :border solid 1px #6C6
31
+
32
+ #flash_error
33
+ :background-color #FCC
34
+ :border solid 1px #C66
35
+
36
+ .fieldWithErrors
37
+ :display inline
38
+
39
+ #errorExplanation
40
+ :width 400px
41
+ :border 2px solid #CF0000
42
+ :padding 0
43
+ :padding-bottom 12px
44
+ :margin-bottom 20px
45
+ :background-color #f0f0f0
46
+ h2
47
+ :text-align left
48
+ :padding 5px 5px 5px 15px
49
+ :margin 0
50
+ :font
51
+ :weight bold
52
+ :size 12px
53
+ :background-color #c00
54
+ :color #fff
55
+ p
56
+ :color #333
57
+ :margin-bottom 0
58
+ :padding 8px
59
+ ul
60
+ :margin 2px 24px
61
+ li
62
+ :font-size 12px
63
+ :list-style disc
@@ -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 splendeo_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 along with 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, `splendeo_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 affect model attributes.
33
+
34
+ Examples:
35
+ script/generate splendeo_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 splendeo_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 splendeo_scaffold post ! show new
49
+
50
+ Creates a posts controller (no model) with index, edit, update, and
51
+ destroy actions.
@@ -0,0 +1,232 @@
1
+ class SplendeoScaffoldGenerator < 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
+ m.directory "spec/fixtures"
56
+ m.template "fixtures.yml", "spec/fixtures/#{plural_name}.yml"
57
+ else
58
+ m.directory "test/unit"
59
+ m.template "tests/#{test_framework}/model.rb", "test/unit/#{singular_name}_test.rb"
60
+ m.directory "test/fixtures"
61
+ m.template "fixtures.yml", "test/fixtures/#{plural_name}.yml"
62
+ end
63
+ end
64
+
65
+ unless options[:skip_controller]
66
+ m.directory "app/controllers"
67
+ m.template "controller.rb", "app/controllers/#{plural_name}_controller.rb"
68
+
69
+ m.directory "app/helpers"
70
+ m.template "helper.rb", "app/helpers/#{plural_name}_helper.rb"
71
+
72
+ m.directory "app/views/#{plural_name}"
73
+ controller_actions.each do |action|
74
+ if File.exist? source_path("views/#{view_language}/#{action}.html.#{view_language}")
75
+ m.template "views/#{view_language}/#{action}.html.#{view_language}", "app/views/#{plural_name}/#{action}.html.#{view_language}"
76
+ end
77
+ end
78
+
79
+ if form_partial?
80
+ m.template "views/#{view_language}/_form.html.#{view_language}", "app/views/#{plural_name}/_form.html.#{view_language}"
81
+ end
82
+
83
+ m.route_resources plural_name
84
+
85
+ if rspec?
86
+ m.directory "spec/controllers"
87
+ m.template "tests/#{test_framework}/controller.rb", "spec/controllers/#{plural_name}_controller_spec.rb"
88
+ else
89
+ m.directory "test/functional"
90
+ m.template "tests/#{test_framework}/controller.rb", "test/functional/#{plural_name}_controller_test.rb"
91
+ end
92
+ end
93
+ end
94
+ end
95
+
96
+ def form_partial?
97
+ actions? :new, :edit
98
+ end
99
+
100
+ def all_actions
101
+ %w[index show new create edit update destroy]
102
+ end
103
+
104
+ def action?(name)
105
+ controller_actions.include? name.to_s
106
+ end
107
+
108
+ def actions?(*names)
109
+ names.all? { |n| action? n.to_s }
110
+ end
111
+
112
+ def singular_name
113
+ name.underscore
114
+ end
115
+
116
+ def plural_name
117
+ name.underscore.pluralize
118
+ end
119
+
120
+ def class_name
121
+ name.camelize
122
+ end
123
+
124
+ def plural_class_name
125
+ plural_name.camelize
126
+ end
127
+
128
+ def controller_methods(dir_name)
129
+ controller_actions.map do |action|
130
+ read_template("#{dir_name}/#{action}.rb")
131
+ end.join(" \n").strip
132
+ end
133
+
134
+ def render_form
135
+ if form_partial?
136
+ if options[:haml]
137
+ "= render :partial => 'form'"
138
+ else
139
+ "<%= render :partial => 'form' %>"
140
+ end
141
+ else
142
+ read_template("views/#{view_language}/_form.html.#{view_language}")
143
+ end
144
+ end
145
+
146
+ def items_path(suffix = 'path')
147
+ if action? :index
148
+ "#{plural_name}_#{suffix}"
149
+ else
150
+ "root_#{suffix}"
151
+ end
152
+ end
153
+
154
+ def item_path(suffix = 'path')
155
+ if action? :show
156
+ "@#{singular_name}"
157
+ else
158
+ items_path(suffix)
159
+ end
160
+ end
161
+
162
+ def item_path_for_spec(suffix = 'path')
163
+ if action? :show
164
+ "#{singular_name}_#{suffix}(assigns[:#{singular_name}])"
165
+ else
166
+ items_path(suffix)
167
+ end
168
+ end
169
+
170
+ def item_path_for_test(suffix = 'path')
171
+ if action? :show
172
+ "#{singular_name}_#{suffix}(assigns(:#{singular_name}))"
173
+ else
174
+ items_path(suffix)
175
+ end
176
+ end
177
+
178
+ def model_columns_for_attributes
179
+ class_name.constantize.columns.reject do |column|
180
+ column.name.to_s =~ /^(id|created_at|updated_at)$/
181
+ end
182
+ end
183
+
184
+ def rspec?
185
+ test_framework == :rspec
186
+ end
187
+
188
+ protected
189
+
190
+ def view_language
191
+ options[:haml] ? 'haml' : 'erb'
192
+ end
193
+
194
+ def test_framework
195
+ options[:test_framework] ||= default_test_framework
196
+ end
197
+
198
+ def default_test_framework
199
+ File.exist?(destination_path("spec")) ? :rspec : :testunit
200
+ end
201
+
202
+ def add_options!(opt)
203
+ opt.separator ''
204
+ opt.separator 'Options:'
205
+ opt.on("--skip-model", "Don't generate a model or migration file.") { |v| options[:skip_model] = v }
206
+ opt.on("--skip-migration", "Don't generate migration file for model.") { |v| options[:skip_migration] = v }
207
+ opt.on("--skip-timestamps", "Don't add timestamps to migration file.") { |v| options[:skip_timestamps] = v }
208
+ opt.on("--skip-controller", "Don't generate controller, helper, or views.") { |v| options[:skip_controller] = v }
209
+ opt.on("--invert", "Generate all controller actions except these mentioned.") { |v| options[:invert] = v }
210
+ opt.on("--haml", "Generate HAML views instead of ERB.") { |v| options[:haml] = v }
211
+ opt.on("--testunit", "Use test/unit for test files.") { options[:test_framework] = :testunit }
212
+ opt.on("--rspec", "Use RSpec for test files.") { options[:test_framework] = :rspec }
213
+ opt.on("--shoulda", "Use Shoulda for test files.") { options[:test_framework] = :shoulda }
214
+ end
215
+
216
+ # is there a better way to do this? Perhaps with const_defined?
217
+ def model_exists?
218
+ File.exist? destination_path("app/models/#{singular_name}.rb")
219
+ end
220
+
221
+ def read_template(relative_path)
222
+ ERB.new(File.read(source_path(relative_path)), nil, '-').result(binding)
223
+ end
224
+
225
+ def banner
226
+ <<-EOS
227
+ Creates a controller and optional model given the name, actions, and attributes.
228
+
229
+ USAGE: #{$0} #{spec.name} ModelName [controller_actions and model:attributes] [options]
230
+ EOS
231
+ end
232
+ 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