summaryrefslogtreecommitdiff
path: root/lib/generators/nifty/scaffold
diff options
context:
space:
mode:
Diffstat (limited to 'lib/generators/nifty/scaffold')
-rw-r--r--lib/generators/nifty/scaffold/USAGE51
-rw-r--r--lib/generators/nifty/scaffold/scaffold_generator.rb344
-rw-r--r--lib/generators/nifty/scaffold/templates/actions/create.rb8
-rw-r--r--lib/generators/nifty/scaffold/templates/actions/destroy.rb5
-rw-r--r--lib/generators/nifty/scaffold/templates/actions/edit.rb3
-rw-r--r--lib/generators/nifty/scaffold/templates/actions/index.rb3
-rw-r--r--lib/generators/nifty/scaffold/templates/actions/new.rb3
-rw-r--r--lib/generators/nifty/scaffold/templates/actions/show.rb3
-rw-r--r--lib/generators/nifty/scaffold/templates/actions/update.rb8
-rw-r--r--lib/generators/nifty/scaffold/templates/controller.rb3
-rw-r--r--lib/generators/nifty/scaffold/templates/fixtures.yml9
-rw-r--r--lib/generators/nifty/scaffold/templates/helper.rb2
-rw-r--r--lib/generators/nifty/scaffold/templates/locale.yml46
-rw-r--r--lib/generators/nifty/scaffold/templates/locale_de.yml46
-rw-r--r--lib/generators/nifty/scaffold/templates/migration.rb16
-rw-r--r--lib/generators/nifty/scaffold/templates/model.rb4
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/rspec/actions/create.rb11
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/rspec/actions/destroy.rb6
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/rspec/actions/edit.rb4
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/rspec/actions/index.rb4
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/rspec/actions/new.rb4
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/rspec/actions/show.rb4
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/rspec/actions/update.rb11
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/rspec/controller.rb8
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/rspec/model.rb7
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/shoulda/actions/create.rb13
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/shoulda/actions/destroy.rb8
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/shoulda/actions/edit.rb6
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/shoulda/actions/index.rb6
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/shoulda/actions/new.rb6
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/shoulda/actions/show.rb6
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/shoulda/actions/update.rb13
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/shoulda/controller.rb5
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/shoulda/model.rb7
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/testunit/actions/create.rb11
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/testunit/actions/destroy.rb6
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/testunit/actions/edit.rb4
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/testunit/actions/index.rb4
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/testunit/actions/new.rb4
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/testunit/actions/show.rb4
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/testunit/actions/update.rb11
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/testunit/controller.rb49
-rw-r--r--lib/generators/nifty/scaffold/templates/tests/testunit/model.rb7
-rw-r--r--lib/generators/nifty/scaffold/templates/views/haml/_form.html.haml7
-rw-r--r--lib/generators/nifty/scaffold/templates/views/haml/_form_core.html.haml4
-rw-r--r--lib/generators/nifty/scaffold/templates/views/haml/_index_core.html.haml13
-rw-r--r--lib/generators/nifty/scaffold/templates/views/haml/edit.html.haml3
-rw-r--r--lib/generators/nifty/scaffold/templates/views/haml/index.html.haml6
-rw-r--r--lib/generators/nifty/scaffold/templates/views/haml/new.html.haml3
-rw-r--r--lib/generators/nifty/scaffold/templates/views/haml/show.html.haml9
50 files changed, 828 insertions, 0 deletions
diff --git a/lib/generators/nifty/scaffold/USAGE b/lib/generators/nifty/scaffold/USAGE
new file mode 100644
index 0000000..363fd26
--- /dev/null
+++ b/lib/generators/nifty/scaffold/USAGE
@@ -0,0 +1,51 @@
+Description:
+ Scaffolds an entire resource, from model and migration to controller and
+ views. The resource is ready to use as a starting point for your restful,
+ resource-oriented application. Tests or specs are also generated depending
+ on if you have a "spec" directory or not.
+
+ IMPORTANT: This generator uses the "title" helper method which is generated
+ by the nifty_layout generator. You may want to run that generator first.
+
+Usage:
+ Pass the name of the model, either CamelCased or under_scored, as the first
+ argument along with an optional list of attribute pairs and controller actions.
+
+ If no controller actions are specified, they will default to index, show,
+ new, create, edit, update, and destroy.
+
+ IMPORTANT: If no attribute pairs are specified, no model will be generated.
+ It will try to determine the attributes from an existing model.
+
+ Attribute pairs are column_name:sql_type arguments specifying the
+ model's attributes. Timestamps are added by default, so you don't have to
+ specify them by hand as 'created_at:datetime updated_at:datetime'.
+
+ For example, `nifty:scaffold post name:string content:text hidden:boolean`
+ gives you a model with those three attributes, a controller that handles
+ the create/show/update/destroy, forms to create and edit your posts, and
+ an index that lists them all, as well as a map.resources :posts
+ declaration in config/routes.rb.
+
+ Adding an "!" in the mix of arguments will invert the passed controller
+ actions. This will include all 7 controller actitons except the ones
+ mentioned. This option doesn't affect model attributes.
+
+Examples:
+ rails generate nifty:scaffold post
+
+ Will create a controller called "posts" it will contain all seven
+ CRUD actions along with the views. A model will NOT be created,
+ instead it will look for an existing model and use those attributes.
+
+ rails generate nifty:scaffold post name:string content:text index new edit
+
+ Will create a Post model and migration file with the name and content
+ attributes. It will also create a controller with index, new, create,
+ edit, and update actions. Notice the create and update actions are
+ added automatically with new and edit.
+
+ rails generate nifty:scaffold post ! show new
+
+ Creates a posts controller (no model) with index, edit, update, and
+ destroy actions.
diff --git a/lib/generators/nifty/scaffold/scaffold_generator.rb b/lib/generators/nifty/scaffold/scaffold_generator.rb
new file mode 100644
index 0000000..1283e17
--- /dev/null
+++ b/lib/generators/nifty/scaffold/scaffold_generator.rb
@@ -0,0 +1,344 @@
+require 'generators/nifty'
+require 'rails/generators/migration'
+require 'rails/generators/generated_attribute'
+
+module Nifty
+ module Generators
+ class ScaffoldGenerator < Base
+ include Rails::Generators::Migration
+ no_tasks { attr_accessor :scaffold_name, :model_attributes, :controller_actions }
+
+ argument :scaffold_name, :type => :string, :required => true, :banner => 'ModelName'
+ argument :args_for_c_m, :type => :array, :default => [], :banner => 'controller_actions and model:attributes'
+
+ class_option :skip_model, :desc => 'Don\'t generate a model or migration file.', :type => :boolean
+ class_option :skip_migration, :desc => 'Don\'t generate migration file for model.', :type => :boolean
+ class_option :skip_timestamps, :desc => 'Don\'t add timestamps to migration file.', :type => :boolean
+ class_option :skip_controller, :desc => 'Don\'t generate controller, helper, or views.', :type => :boolean
+ class_option :invert, :desc => 'Generate all controller actions except these mentioned.', :type => :boolean
+ class_option :namespace_model, :desc => 'If the resource is namespaced, include the model in the namespace.', :type => :boolean
+ class_option :haml, :desc => 'Generate HAML views instead of ERB.', :type => :boolean, :default => true
+
+ class_option :testunit, :desc => 'Use test/unit for test files.', :group => 'Test framework', :type => :boolean
+ class_option :rspec, :desc => 'Use RSpec for test files.', :group => 'Test framework', :type => :boolean
+ class_option :shoulda, :desc => 'Use shoulda for test files.', :group => 'Test framework', :type => :boolean
+
+ def initialize(*args, &block)
+ super
+
+ print_usage unless scaffold_name.underscore =~ /^[a-z][a-z0-9_\/]+$/
+
+ @controller_actions = []
+ @model_attributes = []
+ @skip_model = options.skip_model?
+ @namespace_model = options.namespace_model?
+ @invert_actions = options.invert?
+
+ args_for_c_m.each do |arg|
+ if arg == '!'
+ @invert_actions = true
+ elsif arg.include?(':')
+ @model_attributes << Rails::Generators::GeneratedAttribute.new(*arg.split(':'))
+ else
+ @controller_actions << arg
+ @controller_actions << 'create' if arg == 'new'
+ @controller_actions << 'update' if arg == 'edit'
+ end
+ end
+
+ @controller_actions.uniq!
+ @model_attributes.uniq!
+
+ if @invert_actions || @controller_actions.empty?
+ @controller_actions = all_actions - @controller_actions
+ end
+
+ if @model_attributes.empty?
+ @skip_model = true # skip model if no attributes
+ if model_exists?
+ model_columns_for_attributes.each do |column|
+ @model_attributes << Rails::Generators::GeneratedAttribute.new(column.name.to_s, column.type.to_s)
+ end
+ else
+ @model_attributes << Rails::Generators::GeneratedAttribute.new('name', 'string')
+ end
+ end
+ end
+
+ def add_gems
+ # add_gem "mocha", :group => :test
+ add_gem 'haml'
+ add_gem 'simple_form'
+ add_gem 'cancan'
+ end
+
+ def create_model
+ unless @skip_model
+ template 'model.rb', "app/models/#{model_path}.rb"
+ if test_framework == :rspec
+ template "tests/rspec/model.rb", "spec/models/#{model_path}_spec.rb"
+ # FUCK YOU FIXTURES, WE USE FACTORY GIRL.
+ # template 'fixtures.yml', "spec/fixtures/#{model_path.pluralize}.yml"
+ else
+ template "tests/#{test_framework}/model.rb", "test/unit/#{model_path}_test.rb"
+ template 'fixtures.yml', "test/fixtures/#{model_path.pluralize}.yml"
+ end
+ end
+ end
+
+ def create_migration
+ unless @skip_model || options.skip_migration?
+ migration_template 'migration.rb', "db/migrate/create_#{model_path.pluralize.gsub('/', '_')}.rb"
+ end
+ end
+
+ def create_controller
+ unless options.skip_controller?
+ template 'controller.rb', "app/controllers/#{plural_name}_controller.rb"
+
+ template 'helper.rb', "app/helpers/#{plural_name}_helper.rb"
+
+ controller_actions.each do |action|
+ if %w[index show new edit].include?(action) # Actions with templates
+ template "views/#{view_language}/#{action}.html.#{view_language}", "app/views/#{plural_name}/#{action}.html.#{view_language}"
+ end
+ end
+
+ # Move the index_core (can't do it on the top.)
+ template "views/#{view_language}/_index_core.html.#{view_language}", "app/views/#{plural_name}/_index_core.html.#{view_language}"
+
+
+ if form_partial?
+ template "views/#{view_language}/_form.html.#{view_language}", "app/views/#{plural_name}/_form.html.#{view_language}"
+ template "views/#{view_language}/_form_core.html.#{view_language}", "app/views/#{plural_name}/_form_core.html.#{view_language}"
+ end
+
+ namespaces = plural_name.split('/')
+ resource = namespaces.pop
+ route namespaces.reverse.inject("resources :#{resource}") { |acc, namespace|
+ "namespace(:#{namespace}){ #{acc} }"
+ }
+
+ if test_framework == :rspec
+ template "tests/#{test_framework}/controller.rb", "spec/controllers/#{plural_name}_controller_spec.rb"
+ else
+ template "tests/#{test_framework}/controller.rb", "test/functional/#{plural_name}_controller_test.rb"
+ end
+ end
+ end
+
+ def create_locales
+ template 'locale.yml', "config/locales/views/#{plural_name}/en.yml"
+ template 'locale_de.yml', "config/locales/views/#{plural_name}/de.yml"
+ # template 'locale.yml', "config/locales/views/#{plural_name}/es.yml"
+ # gsub_file("config/locales/views/#{plural_name}/es.yml", 'en:', 'es:')
+ # gsub_file("config/locales/views/#{plural_name}/de.yml", 'en:', 'de:')
+ end
+
+ def configuration
+ gsub_file('config/application.rb', "# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]",
+ "config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '*', '*', '*.{rb,yml}').to_s]")
+ end
+
+ private
+
+ def form_partial?
+ actions? :new, :edit
+ end
+
+ def all_actions
+ %w[index show new create edit update destroy]
+ end
+
+ def action?(name)
+ controller_actions.include? name.to_s
+ end
+
+ def actions?(*names)
+ names.all? { |name| action? name }
+ end
+
+ def singular_name
+ scaffold_name.underscore
+ end
+
+ def plural_name
+ scaffold_name.underscore.pluralize
+ end
+
+ def human_name
+ scaffold_name.humanize
+ end
+
+ def table_name
+ if scaffold_name.include?('::') && @namespace_model
+ plural_name.gsub('/', '_')
+ end
+ end
+
+ def class_name
+ if @namespace_model
+ scaffold_name.camelize
+ else
+ scaffold_name.split('::').last.camelize
+ end
+ end
+
+ def model_path
+ class_name.underscore
+ end
+
+ def plural_class_name
+ plural_name.camelize
+ end
+
+ def instance_name
+ if @namespace_model
+ singular_name.gsub('/','_')
+ else
+ singular_name.split('/').last
+ end
+ end
+
+ def instances_name
+ instance_name.pluralize
+ end
+
+ def controller_methods(dir_name)
+ controller_actions.map do |action|
+ read_template("#{dir_name}/#{action}.rb")
+ end.join("\n").strip
+ end
+
+ def render_form
+ if form_partial?
+ if options.haml?
+ "= render \"form\""
+ else
+ "<%= render \"form\" %>"
+ end
+ else
+ read_template("views/#{view_language}/_form.html.#{view_language}")
+ end
+ end
+
+ def item_resource
+ scaffold_name.underscore.gsub('/','_')
+ end
+
+ def items_path
+ if action? :index
+ "#{item_resource.pluralize}_path"
+ else
+ "root_path"
+ end
+ end
+
+ def item_path(options = {})
+ name = options[:instance_variable] ? "@#{instance_name}" : instance_name
+ suffix = options[:full_url] ? "url" : "path"
+ if options[:action].to_s == "new"
+ "new_#{item_resource}_#{suffix}"
+ elsif options[:action].to_s == "edit"
+ "edit_#{item_resource}_#{suffix}(#{name})"
+ else
+ if scaffold_name.include?('::') && !@namespace_model
+ namespace = singular_name.split('/')[0..-2]
+ "[:#{namespace.join(', :')}, #{name}]"
+ else
+ name
+ end
+ end
+ end
+
+ def item_url
+ if action? :show
+ item_path(:full_url => true, :instance_variable => true)
+ else
+ items_url
+ end
+ end
+
+ def items_url
+ if action? :index
+ item_resource.pluralize + '_url'
+ else
+ "root_url"
+ end
+ end
+
+ def item_path_for_spec(suffix = 'path')
+ if action? :show
+ "#{item_resource}_#{suffix}(assigns[:#{instance_name}])"
+ else
+ if suffix == 'path'
+ items_path
+ else
+ items_url
+ end
+ end
+ end
+
+ def item_path_for_test(suffix = 'path')
+ if action? :show
+ "#{item_resource}_#{suffix}(assigns(:#{instance_name}))"
+ else
+ if suffix == 'path'
+ items_path
+ else
+ items_url
+ end
+ end
+ end
+
+ def model_columns_for_attributes
+ class_name.constantize.columns.reject do |column|
+ column.name.to_s =~ /^(id|created_at|updated_at)$/
+ end
+ end
+
+ def view_language
+ options.haml? ? 'haml' : 'erb'
+ end
+
+ def test_framework
+ return @test_framework if defined?(@test_framework)
+ if options.testunit?
+ return @test_framework = :testunit
+ elsif options.rspec?
+ return @test_framework = :rspec
+ elsif options.shoulda?
+ return @test_framework = :shoulda
+ else
+ return @test_framework = default_test_framework
+ end
+ end
+
+ def default_test_framework
+ File.exist?(destination_path("spec")) ? :rspec : :testunit
+ end
+
+ def model_exists?
+ File.exist? destination_path("app/models/#{singular_name}.rb")
+ end
+
+ def read_template(relative_path)
+ ERB.new(File.read(find_in_source_paths(relative_path)), nil, '-').result(binding)
+ end
+
+ def destination_path(path)
+ File.join(destination_root, path)
+ end
+
+ # FIXME: Should be proxied to ActiveRecord::Generators::Base
+ # Implement the required interface for Rails::Generators::Migration.
+ def self.next_migration_number(dirname) #:nodoc:
+ if ActiveRecord::Base.timestamped_migrations
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
+ else
+ "%.3d" % (current_migration_number(dirname) + 1)
+ end
+ end
+ end
+ end
+end
diff --git a/lib/generators/nifty/scaffold/templates/actions/create.rb b/lib/generators/nifty/scaffold/templates/actions/create.rb
new file mode 100644
index 0000000..8365f0b
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/actions/create.rb
@@ -0,0 +1,8 @@
+ def create
+ @<%= instance_name %> = <%= class_name %>.new(params[:<%= instance_name %>])
+ if @<%= instance_name %>.save
+ redirect_to <%= item_url %>, :notice => t('<%= plural_name %>.controller.successfuly_created')
+ else
+ render :new
+ end
+ end
diff --git a/lib/generators/nifty/scaffold/templates/actions/destroy.rb b/lib/generators/nifty/scaffold/templates/actions/destroy.rb
new file mode 100644
index 0000000..8a236e0
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/actions/destroy.rb
@@ -0,0 +1,5 @@
+ def destroy
+ @<%= instance_name %> = <%= class_name %>.find(params[:id])
+ @<%= instance_name %>.destroy
+ redirect_to <%= items_url %>, :notice => t('<%= plural_name %>.controller.successfuly_destroyed')
+ end
diff --git a/lib/generators/nifty/scaffold/templates/actions/edit.rb b/lib/generators/nifty/scaffold/templates/actions/edit.rb
new file mode 100644
index 0000000..907e928
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/actions/edit.rb
@@ -0,0 +1,3 @@
+ def edit
+ @<%= instance_name %> = <%= class_name %>.find(params[:id])
+ end
diff --git a/lib/generators/nifty/scaffold/templates/actions/index.rb b/lib/generators/nifty/scaffold/templates/actions/index.rb
new file mode 100644
index 0000000..0a8420c
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/actions/index.rb
@@ -0,0 +1,3 @@
+ def index
+ @<%= instances_name %> = <%= class_name %>.all
+ end
diff --git a/lib/generators/nifty/scaffold/templates/actions/new.rb b/lib/generators/nifty/scaffold/templates/actions/new.rb
new file mode 100644
index 0000000..c0991bc
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/actions/new.rb
@@ -0,0 +1,3 @@
+ def new
+ @<%= instance_name %> = <%= class_name %>.new
+ end
diff --git a/lib/generators/nifty/scaffold/templates/actions/show.rb b/lib/generators/nifty/scaffold/templates/actions/show.rb
new file mode 100644
index 0000000..27a0467
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/actions/show.rb
@@ -0,0 +1,3 @@
+ def show
+ @<%= instance_name %> = <%= class_name %>.find(params[:id])
+ end
diff --git a/lib/generators/nifty/scaffold/templates/actions/update.rb b/lib/generators/nifty/scaffold/templates/actions/update.rb
new file mode 100644
index 0000000..a1473a6
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/actions/update.rb
@@ -0,0 +1,8 @@
+ def update
+ @<%= instance_name %> = <%= class_name %>.find(params[:id])
+ if @<%= instance_name %>.update_attributes(params[:<%= instance_name %>])
+ redirect_to <%= item_url %>, :notice => t('<%= plural_name %>.controller.successfuly_updated')
+ else
+ render :edit
+ end
+ end
diff --git a/lib/generators/nifty/scaffold/templates/controller.rb b/lib/generators/nifty/scaffold/templates/controller.rb
new file mode 100644
index 0000000..a54de70
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/controller.rb
@@ -0,0 +1,3 @@
+class <%= plural_class_name %>Controller < ApplicationController
+ <%= controller_methods :actions %>
+end
diff --git a/lib/generators/nifty/scaffold/templates/fixtures.yml b/lib/generators/nifty/scaffold/templates/fixtures.yml
new file mode 100644
index 0000000..447eaf9
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/fixtures.yml
@@ -0,0 +1,9 @@
+one:
+<%- for attribute in model_attributes -%>
+ <%= attribute.name %>: <%= attribute.default %>
+<%- end -%>
+
+two:
+<%- for attribute in model_attributes -%>
+ <%= attribute.name %>: <%= attribute.default %>
+<%- end -%>
diff --git a/lib/generators/nifty/scaffold/templates/helper.rb b/lib/generators/nifty/scaffold/templates/helper.rb
new file mode 100644
index 0000000..084b485
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/helper.rb
@@ -0,0 +1,2 @@
+module <%= plural_class_name %>Helper
+end
diff --git a/lib/generators/nifty/scaffold/templates/locale.yml b/lib/generators/nifty/scaffold/templates/locale.yml
new file mode 100644
index 0000000..46e4ce3
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/locale.yml
@@ -0,0 +1,46 @@
+en:
+ <%= plural_name %>:
+ name: '<%= human_name %>'
+ controller:
+ successfuly_created: 'Successfully created <%= human_name %>.'
+ successfuly_updated: 'Successfully updated <%= human_name %>.'
+ successfuly_destroyed: 'Successfully destroyed <%= human_name %>.'
+ index:
+ page_title: 'Listing <%= human_name %>'
+ <%- for attribute in model_attributes -%>
+ <%= attribute.name %>: '<%= attribute.human_name %>'
+ <%- end -%>
+ actions:
+ confirm: 'Are you sure you want to delete this <%= human_name %>?'
+ destroy: 'Delete'
+ edit: 'Edit'
+ show: 'View'
+ create: 'New'
+ create_for: 'New <%= human_name %> for %{resource}'
+ show:
+ page_title: 'Show <%= human_name %>'
+ <%- for attribute in model_attributes -%>
+ <%= attribute.name %>: '<%= attribute.human_name %>'
+ <%- end -%>
+ actions:
+ confirm: 'Are you sure you want to delete this element?'
+ destroy: 'Delete'
+ edit: 'Edit'
+ view_all: 'View All'
+ new:
+ page_title: 'New <%= human_name %>'
+ actions:
+ back_to_list: 'Back to Index'
+ edit:
+ page_title: 'Editing <%= human_name %>'
+ actions:
+ back_to_list: 'Back to Index'
+ edit: 'Edit'
+ view_all: 'View All'
+ form:
+ <%- for attribute in model_attributes -%>
+ <%= attribute.name %>:
+ label: '<%= attribute.human_name %>'
+ hint: ''
+ <%- end -%>
+ button: 'Submit' \ No newline at end of file
diff --git a/lib/generators/nifty/scaffold/templates/locale_de.yml b/lib/generators/nifty/scaffold/templates/locale_de.yml
new file mode 100644
index 0000000..027d36d
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/locale_de.yml
@@ -0,0 +1,46 @@
+de:
+ <%= plural_name %>:
+ name: '<%= human_name %>'
+ controller:
+ successfuly_created: '<%= human_name %> wurde angelegt.'
+ successfuly_updated: '<%= human_name %> wurde aktualisiert.'
+ successfuly_destroyed: '<%= human_name %> wurde gelöscht.'
+ index:
+ page_title: 'Übersicht von <%= human_name %>'
+ <%- for attribute in model_attributes -%>
+ <%= attribute.name %>: '<%= attribute.human_name %>'
+ <%- end -%>
+ actions:
+ confirm: 'Sind Sie sicher, dass Sie folgendes löschen möchten: <%= human_name %>'
+ destroy: 'Löschen'
+ edit: 'Bearbeiten'
+ show: 'Anzeigen'
+ create: 'Neu anlegen'
+ create_for: '<%= human_name %> neu anlegen für %{resource}'
+ show:
+ page_title: '<%= human_name %> bearbeiten'
+ <%- for attribute in model_attributes -%>
+ <%= attribute.name %>: '<%= attribute.human_name %>'
+ <%- end -%>
+ actions:
+ confirm: 'Sind Sie sicher, dass die dieses Element löschen möchten?'
+ destroy: 'Löschen'
+ edit: 'Bearbeiten'
+ view_all: 'Alle anzeigen'
+ new:
+ page_title: '<%= human_name %> neu anlegen'
+ actions:
+ back_to_list: 'Zurück zur Übersicht'
+ edit:
+ page_title: '<%= human_name %> bearbeiten'
+ actions:
+ back_to_list: 'Zurück zur Übersicht'
+ edit: 'Bearbeiten'
+ view_all: 'Alle anzeigen'
+ form:
+ <%- for attribute in model_attributes -%>
+ <%= attribute.name %>:
+ label: '<%= attribute.human_name %>'
+ hint: ''
+ <%- end -%>
+ button: 'Absenden' \ No newline at end of file
diff --git a/lib/generators/nifty/scaffold/templates/migration.rb b/lib/generators/nifty/scaffold/templates/migration.rb
new file mode 100644
index 0000000..02fd6bd
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/migration.rb
@@ -0,0 +1,16 @@
+class Create<%= class_name.pluralize.delete('::') %> < ActiveRecord::Migration
+ def self.up
+ create_table :<%= table_name || plural_name.split('/').last %> do |t|
+ <%- for attribute in model_attributes -%>
+ t.<%= attribute.type %> :<%= attribute.name %>
+ <%- end -%>
+ <%- unless options[:skip_timestamps] -%>
+ t.timestamps
+ <%- end -%>
+ end
+ end
+
+ def self.down
+ drop_table :<%= table_name || plural_name.split('/').last %>
+ end
+end
diff --git a/lib/generators/nifty/scaffold/templates/model.rb b/lib/generators/nifty/scaffold/templates/model.rb
new file mode 100644
index 0000000..fe5f980
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/model.rb
@@ -0,0 +1,4 @@
+class <%= class_name %> < ActiveRecord::Base
+<%= " set_table_name :#{table_name}\n" if table_name -%>
+ attr_accessible <%= model_attributes.map { |a| ":#{a.name}" }.join(", ") %>
+end
diff --git a/lib/generators/nifty/scaffold/templates/tests/rspec/actions/create.rb b/lib/generators/nifty/scaffold/templates/tests/rspec/actions/create.rb
new file mode 100644
index 0000000..ef5a906
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/rspec/actions/create.rb
@@ -0,0 +1,11 @@
+ it "create action should render new template when model is invalid" do
+ <%= class_name %>.any_instance.stubs(:valid?).returns(false)
+ post :create
+ response.should render_template(:new)
+ end
+
+ it "create action should redirect when model is valid" do
+ <%= class_name %>.any_instance.stubs(:valid?).returns(true)
+ post :create
+ response.should redirect_to(<%= item_path_for_spec('url') %>)
+ end
diff --git a/lib/generators/nifty/scaffold/templates/tests/rspec/actions/destroy.rb b/lib/generators/nifty/scaffold/templates/tests/rspec/actions/destroy.rb
new file mode 100644
index 0000000..8372953
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/rspec/actions/destroy.rb
@@ -0,0 +1,6 @@
+ it "destroy action should destroy model and redirect to index action" do
+ <%= instance_name %> = <%= class_name %>.first
+ delete :destroy, :id => <%= instance_name %>
+ response.should redirect_to(<%= items_url %>)
+ <%= class_name %>.exists?(<%= instance_name %>.id).should be_false
+ end
diff --git a/lib/generators/nifty/scaffold/templates/tests/rspec/actions/edit.rb b/lib/generators/nifty/scaffold/templates/tests/rspec/actions/edit.rb
new file mode 100644
index 0000000..e144904
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/rspec/actions/edit.rb
@@ -0,0 +1,4 @@
+ it "edit action should render edit template" do
+ get :edit, :id => <%= class_name %>.first
+ response.should render_template(:edit)
+ end
diff --git a/lib/generators/nifty/scaffold/templates/tests/rspec/actions/index.rb b/lib/generators/nifty/scaffold/templates/tests/rspec/actions/index.rb
new file mode 100644
index 0000000..a40ea16
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/rspec/actions/index.rb
@@ -0,0 +1,4 @@
+ it "index action should render index template" do
+ get :index
+ response.should render_template(:index)
+ end
diff --git a/lib/generators/nifty/scaffold/templates/tests/rspec/actions/new.rb b/lib/generators/nifty/scaffold/templates/tests/rspec/actions/new.rb
new file mode 100644
index 0000000..22e1b40
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/rspec/actions/new.rb
@@ -0,0 +1,4 @@
+ it "new action should render new template" do
+ get :new
+ response.should render_template(:new)
+ end
diff --git a/lib/generators/nifty/scaffold/templates/tests/rspec/actions/show.rb b/lib/generators/nifty/scaffold/templates/tests/rspec/actions/show.rb
new file mode 100644
index 0000000..eaa3d93
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/rspec/actions/show.rb
@@ -0,0 +1,4 @@
+ it "show action should render show template" do
+ get :show, :id => <%= class_name %>.first
+ response.should render_template(:show)
+ end
diff --git a/lib/generators/nifty/scaffold/templates/tests/rspec/actions/update.rb b/lib/generators/nifty/scaffold/templates/tests/rspec/actions/update.rb
new file mode 100644
index 0000000..c919962
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/rspec/actions/update.rb
@@ -0,0 +1,11 @@
+ it "update action should render edit template when model is invalid" do
+ <%= class_name %>.any_instance.stubs(:valid?).returns(false)
+ put :update, :id => <%= class_name %>.first
+ response.should render_template(:edit)
+ end
+
+ it "update action should redirect when model is valid" do
+ <%= class_name %>.any_instance.stubs(:valid?).returns(true)
+ put :update, :id => <%= class_name %>.first
+ response.should redirect_to(<%= item_path_for_spec('url') %>)
+ end
diff --git a/lib/generators/nifty/scaffold/templates/tests/rspec/controller.rb b/lib/generators/nifty/scaffold/templates/tests/rspec/controller.rb
new file mode 100644
index 0000000..5d97f63
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/rspec/controller.rb
@@ -0,0 +1,8 @@
+require File.dirname(__FILE__) + '/../spec_helper'
+
+describe <%= plural_class_name %>Controller do
+ fixtures :all
+ render_views
+
+ <%= controller_methods 'tests/rspec/actions' %>
+end
diff --git a/lib/generators/nifty/scaffold/templates/tests/rspec/model.rb b/lib/generators/nifty/scaffold/templates/tests/rspec/model.rb
new file mode 100644
index 0000000..25c3cc4
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/rspec/model.rb
@@ -0,0 +1,7 @@
+require File.dirname(__FILE__) + '/../spec_helper'
+
+describe <%= class_name %> do
+ it "should be valid" do
+ <%= class_name %>.new.should be_valid
+ end
+end
diff --git a/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/create.rb b/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/create.rb
new file mode 100644
index 0000000..f305367
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/create.rb
@@ -0,0 +1,13 @@
+ context "create action" do
+ should "render new template when model is invalid" do
+ <%= class_name %>.any_instance.stubs(:valid?).returns(false)
+ post :create
+ assert_template 'new'
+ end
+
+ should "redirect when model is valid" do
+ <%= class_name %>.any_instance.stubs(:valid?).returns(true)
+ post :create
+ assert_redirected_to <%= item_path_for_test('url') %>
+ end
+ end
diff --git a/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/destroy.rb b/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/destroy.rb
new file mode 100644
index 0000000..ea20133
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/destroy.rb
@@ -0,0 +1,8 @@
+ context "destroy action" do
+ should "destroy model and redirect to index action" do
+ <%= instance_name %> = <%= class_name %>.first
+ delete :destroy, :id => <%= instance_name %>
+ assert_redirected_to <%= items_url %>
+ assert !<%= class_name %>.exists?(<%= instance_name %>.id)
+ end
+ end
diff --git a/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/edit.rb b/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/edit.rb
new file mode 100644
index 0000000..47597d0
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/edit.rb
@@ -0,0 +1,6 @@
+ context "edit action" do
+ should "render edit template" do
+ get :edit, :id => <%= class_name %>.first
+ assert_template 'edit'
+ end
+ end
diff --git a/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/index.rb b/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/index.rb
new file mode 100644
index 0000000..44b056b
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/index.rb
@@ -0,0 +1,6 @@
+ context "index action" do
+ should "render index template" do
+ get :index
+ assert_template 'index'
+ end
+ end
diff --git a/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/new.rb b/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/new.rb
new file mode 100644
index 0000000..5857a55
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/new.rb
@@ -0,0 +1,6 @@
+ context "new action" do
+ should "render new template" do
+ get :new
+ assert_template 'new'
+ end
+ end
diff --git a/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/show.rb b/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/show.rb
new file mode 100644
index 0000000..75b37f6
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/show.rb
@@ -0,0 +1,6 @@
+ context "show action" do
+ should "render show template" do
+ get :show, :id => <%= class_name %>.first
+ assert_template 'show'
+ end
+ end
diff --git a/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/update.rb b/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/update.rb
new file mode 100644
index 0000000..fc46f72
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/update.rb
@@ -0,0 +1,13 @@
+ context "update action" do
+ should "render edit template when model is invalid" do
+ <%= class_name %>.any_instance.stubs(:valid?).returns(false)
+ put :update, :id => <%= class_name %>.first
+ assert_template 'edit'
+ end
+
+ should "redirect when model is valid" do
+ <%= class_name %>.any_instance.stubs(:valid?).returns(true)
+ put :update, :id => <%= class_name %>.first
+ assert_redirected_to <%= item_path_for_test('url') %>
+ end
+ end
diff --git a/lib/generators/nifty/scaffold/templates/tests/shoulda/controller.rb b/lib/generators/nifty/scaffold/templates/tests/shoulda/controller.rb
new file mode 100644
index 0000000..e9f9764
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/shoulda/controller.rb
@@ -0,0 +1,5 @@
+require 'test_helper'
+
+class <%= plural_class_name %>ControllerTest < ActionController::TestCase
+ <%= controller_methods 'tests/shoulda/actions' %>
+end
diff --git a/lib/generators/nifty/scaffold/templates/tests/shoulda/model.rb b/lib/generators/nifty/scaffold/templates/tests/shoulda/model.rb
new file mode 100644
index 0000000..9065963
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/shoulda/model.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class <%= class_name %>Test < ActiveSupport::TestCase
+ should "be valid" do
+ assert <%= class_name %>.new.valid?
+ end
+end
diff --git a/lib/generators/nifty/scaffold/templates/tests/testunit/actions/create.rb b/lib/generators/nifty/scaffold/templates/tests/testunit/actions/create.rb
new file mode 100644
index 0000000..5a6d2ac
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/testunit/actions/create.rb
@@ -0,0 +1,11 @@
+ def test_create_invalid
+ <%= class_name %>.any_instance.stubs(:valid?).returns(false)
+ post :create
+ assert_template 'new'
+ end
+
+ def test_create_valid
+ <%= class_name %>.any_instance.stubs(:valid?).returns(true)
+ post :create
+ assert_redirected_to <%= item_path_for_test('url') %>
+ end
diff --git a/lib/generators/nifty/scaffold/templates/tests/testunit/actions/destroy.rb b/lib/generators/nifty/scaffold/templates/tests/testunit/actions/destroy.rb
new file mode 100644
index 0000000..adedf91
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/testunit/actions/destroy.rb
@@ -0,0 +1,6 @@
+ def test_destroy
+ <%= instance_name %> = <%= class_name %>.first
+ delete :destroy, :id => <%= instance_name %>
+ assert_redirected_to <%= items_url %>
+ assert !<%= class_name %>.exists?(<%= instance_name %>.id)
+ end
diff --git a/lib/generators/nifty/scaffold/templates/tests/testunit/actions/edit.rb b/lib/generators/nifty/scaffold/templates/tests/testunit/actions/edit.rb
new file mode 100644
index 0000000..55ed24a
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/testunit/actions/edit.rb
@@ -0,0 +1,4 @@
+ def test_edit
+ get :edit, :id => <%= class_name %>.first
+ assert_template 'edit'
+ end
diff --git a/lib/generators/nifty/scaffold/templates/tests/testunit/actions/index.rb b/lib/generators/nifty/scaffold/templates/tests/testunit/actions/index.rb
new file mode 100644
index 0000000..22d3bad
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/testunit/actions/index.rb
@@ -0,0 +1,4 @@
+ def test_index
+ get :index
+ assert_template 'index'
+ end
diff --git a/lib/generators/nifty/scaffold/templates/tests/testunit/actions/new.rb b/lib/generators/nifty/scaffold/templates/tests/testunit/actions/new.rb
new file mode 100644
index 0000000..c551327
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/testunit/actions/new.rb
@@ -0,0 +1,4 @@
+ def test_new
+ get :new
+ assert_template 'new'
+ end
diff --git a/lib/generators/nifty/scaffold/templates/tests/testunit/actions/show.rb b/lib/generators/nifty/scaffold/templates/tests/testunit/actions/show.rb
new file mode 100644
index 0000000..b74f371
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/testunit/actions/show.rb
@@ -0,0 +1,4 @@
+ def test_show
+ get :show, :id => <%= class_name %>.first
+ assert_template 'show'
+ end
diff --git a/lib/generators/nifty/scaffold/templates/tests/testunit/actions/update.rb b/lib/generators/nifty/scaffold/templates/tests/testunit/actions/update.rb
new file mode 100644
index 0000000..b588bfc
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/testunit/actions/update.rb
@@ -0,0 +1,11 @@
+ def test_update_invalid
+ <%= class_name %>.any_instance.stubs(:valid?).returns(false)
+ put :update, :id => <%= class_name %>.first
+ assert_template 'edit'
+ end
+
+ def test_update_valid
+ <%= class_name %>.any_instance.stubs(:valid?).returns(true)
+ put :update, :id => <%= class_name %>.first
+ assert_redirected_to <%= item_path_for_test('url') %>
+ end
diff --git a/lib/generators/nifty/scaffold/templates/tests/testunit/controller.rb b/lib/generators/nifty/scaffold/templates/tests/testunit/controller.rb
new file mode 100644
index 0000000..8b99836
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/testunit/controller.rb
@@ -0,0 +1,49 @@
+require 'test_helper'
+
+class <%= plural_class_name %>ControllerTest < ActionController::TestCase
+ setup do
+ <%= item_path :instance_variable => true %> = <%= plural_name %>(:one)
+ end
+
+ test "should get index" do
+ get :index
+ assert_response :success
+ assert_not_nil assigns(:<%= plural_name %>)
+ end
+
+ test "should get new" do
+ get :new
+ assert_response :success
+ end
+
+ test "should create <%= item_path %>" do
+ assert_difference('<%= class_name %>.count') do
+ post :create, <%= item_path %>: @<%= item_path %>.attributes
+ end
+
+ assert_redirected_to <%= item_path %>_path(assigns(:<%= item_path %>))
+ end
+
+ test "should show <%= item_path %>" do
+ get :show, id: @<%= item_path %>.to_param
+ assert_response :success
+ end
+
+ test "should get edit" do
+ get :edit, id: @<%= item_path %>.to_param
+ assert_response :success
+ end
+
+ test "should update <%= item_path %>" do
+ put :update, id: @<%= item_path %>.to_param, <%= item_path %>: @<%= item_path %>.attributes
+ assert_redirected_to <%= item_path %>_path(assigns(:<%= item_path %>))
+ end
+
+ test "should destroy <%= item_path %>" do
+ assert_difference('<%= class_name %>.count', -1) do
+ delete :destroy, id: @<%= item_path %>.to_param
+ end
+
+ assert_redirected_to <%= plural_name %>_path
+ end
+end
diff --git a/lib/generators/nifty/scaffold/templates/tests/testunit/model.rb b/lib/generators/nifty/scaffold/templates/tests/testunit/model.rb
new file mode 100644
index 0000000..09b835c
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/tests/testunit/model.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class <%= class_name %>Test < ActiveSupport::TestCase
+ def test_should_be_valid
+ assert <%= class_name %>.new.valid?
+ end
+end
diff --git a/lib/generators/nifty/scaffold/templates/views/haml/_form.html.haml b/lib/generators/nifty/scaffold/templates/views/haml/_form.html.haml
new file mode 100644
index 0000000..57cb828
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/views/haml/_form.html.haml
@@ -0,0 +1,7 @@
+= simple_form_for(<%= item_path :instance_variable => true %>) do |f|
+ = f.error_notification
+
+ = render "form_core", :f => f
+
+ .actions
+ = f.button :submit, conditional_t('<%= plural_name %>.form.submit') \ No newline at end of file
diff --git a/lib/generators/nifty/scaffold/templates/views/haml/_form_core.html.haml b/lib/generators/nifty/scaffold/templates/views/haml/_form_core.html.haml
new file mode 100644
index 0000000..ca7f253
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/views/haml/_form_core.html.haml
@@ -0,0 +1,4 @@
+.inputs
+<%- model_attributes.each do |attribute| -%>
+ = f.<%= attribute.reference? ? :association : :input %> :<%= attribute.name %>, :label => t('<%= plural_name %>.form.<%= attribute.name %>.label'), :hint => conditional_hint('<%= plural_name %>.form.<%= attribute.name %>.hint')
+<%- end -%>
diff --git a/lib/generators/nifty/scaffold/templates/views/haml/_index_core.html.haml b/lib/generators/nifty/scaffold/templates/views/haml/_index_core.html.haml
new file mode 100644
index 0000000..9cbea63
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/views/haml/_index_core.html.haml
@@ -0,0 +1,13 @@
+%table
+ %tr
+ <%- for attribute in model_attributes -%>
+ %th= t('<%= plural_name %>.index.<%= attribute.name %>')
+ <%- end -%>
+
+ - reset_cycle
+ - for <%= instance_name %> in <%= instances_name %>
+ %tr{:class => cycle('odd', 'even')}
+ <%- for attribute in model_attributes -%>
+ %td= <%= instance_name %>.<%= attribute.name %>
+ <%- end -%>
+ =render :partial => 'shared/index_view_edit_destroy_part', :locals => {:child => <%= instance_name %>} \ No newline at end of file
diff --git a/lib/generators/nifty/scaffold/templates/views/haml/edit.html.haml b/lib/generators/nifty/scaffold/templates/views/haml/edit.html.haml
new file mode 100644
index 0000000..dc7de62
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/views/haml/edit.html.haml
@@ -0,0 +1,3 @@
+- title t("<%= plural_name %>.edit.page_title")
+
+<%= render_form %> \ No newline at end of file
diff --git a/lib/generators/nifty/scaffold/templates/views/haml/index.html.haml b/lib/generators/nifty/scaffold/templates/views/haml/index.html.haml
new file mode 100644
index 0000000..86c6b9e
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/views/haml/index.html.haml
@@ -0,0 +1,6 @@
+- title t("<%= plural_name %>.index.page_title")
+
+- if @<%= instances_name %> && @<%= instances_name %>.count > 0
+ = render "index_core", :<%= instances_name %> => @<%= instances_name %>
+
+= render :partial => 'shared/create_link', :locals => {:child_class => <%= instances_name.classify %>} \ No newline at end of file
diff --git a/lib/generators/nifty/scaffold/templates/views/haml/new.html.haml b/lib/generators/nifty/scaffold/templates/views/haml/new.html.haml
new file mode 100644
index 0000000..4e7f871
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/views/haml/new.html.haml
@@ -0,0 +1,3 @@
+- title t("<%= plural_name %>.new.page_title")
+
+<%= render_form %> \ No newline at end of file
diff --git a/lib/generators/nifty/scaffold/templates/views/haml/show.html.haml b/lib/generators/nifty/scaffold/templates/views/haml/show.html.haml
new file mode 100644
index 0000000..3d01340
--- /dev/null
+++ b/lib/generators/nifty/scaffold/templates/views/haml/show.html.haml
@@ -0,0 +1,9 @@
+- title t("<%= plural_name %>.show.page_title")
+
+<%- for attribute in model_attributes -%>
+%p
+ %strong= t('<%= plural_name %>.show.<%= attribute.name %>') + ":"
+ = @<%= instance_name %>.<%= attribute.name %>
+<%- end -%>
+
+= render :partial => 'shared/show_edit_destroy_part', :locals => { :child => @<%= instance_name %> } \ No newline at end of file