= Pizza Generators
A collection of useful Rails generator scripts.
*NOTE* This is a fork of Ryan Bates' Nifty Generators. It has been altered so it fits the plugins I use. Use at your own risk!
== Install
gem install iain-pizza-generators
== Why Pizza?
Here is what is Pizza compared to Nifty:
==== Done
===== Global
* Haml is default for pizza_scaffold, use --erb to switch back to erb
* usage of the pizza form builder (from http://github.com/iain/pizza-form_builder)
* Using Shoulda matchers in RSpec (http://dev.thoughtbot.com/shoulda/)
* Using RR as mocking framework (http://github.com/btakita/rr)
===== pizza_scaffold
* definition_list_for (from http://github.com/iain/model_based_html)
* table_for (from http://github.com/iain/model_based_html)
* Rails i18n and supposes Mr. T (from http://github.com/iain/mr.-t)
* WillPaginate (from http://github.com/mislav/will_paginate)
* Some validations for models automaticly entered and some belongs_to stuff too
===== pizza_layout
* reset.sass for layout will keep your view tidy
* A main menu was added in app/views/shared/_menu.html.haml
* Added WillPaginate.translate! to support i18n (see below)
===== pizza_authentication
* AuthLogic usage with pizza_authentication (from http://github.com/binarylogic/authlogic)
* Added gem dependencies to pizza-generators (my first try, so hopefully that works)
==== Todo
* Add an internet only stylesheet and iepngfix.htc to pizza_layout
* Add message_block gem (from http://github.com/railsgarden/message_block)
* Use a FactoryGirl instead of fixtures
* Cucumber stories for RESTful controller in scaffold
* Update ERB, Test::Unit and Shoulda all over the place (I hardly touched those)
* Do something with Rails shiny new feature: Templates
* Make the required plugins gems so they can be a gem dependency (not sure though)
=== No longer in it
* ResourceController (from http://github.com/giraffesoft/resource_controller)
* Provides a cancel_link helper
* A cancel link for every form
== Setting up
Before doing anything, add these lines to config/environment.rb
config.gem "haml"
config.gem "authlogic"
config.gem "mislav-will_paginate", :lib => "will_paginate", :source => "http://gems.github.com"
And in config/environments/test.rb
config.gem "rspec", :lib => false, :version => ">= 1.2.2"
config.gem "rspec-rails", :lib => false, :version => ">= 1.2.2"
config.gem "rr", :lib => false, :version => ">= 0.8.1"
config.gem "thoughtbot-factory_girl", :lib => "factory_girl", :version => ">= 1.2.0", :source => "http://gems.github.com"
config.gem "thoughtbot-shoulda", :lib => "shoulda", :version => ">= 2.10.1", :source => "http://gems.github.com"
Then run these commands:
sudo rake gems:install # this should have already been done via the gem dependencies
sudo rake gems:install RAILS_ENV=test
rake gems:unpack
./script/generate rspec
Install plugins:
./script/plugin install git://github.com/iain/fieldset_helper.git
./script/plugin install git://github.com/iain/mr.-t.git
./script/plugin install git://github.com/iain/model_based_html.git
./script/plugin install git://github.com/iain/i18n_label.git
Configure rspec to use rr, in spec/spec_helper.rb
config.mock_with :rr
Generate layout (required for all other generators):
./script/generate pizza_layout
Add the layout helper to be included every where, in app/controllers/application.rb
helper :layout
Enable the cancel_link helper by adding code described below.
Generate authentication (optional):
./script/generate pizza_authentication
Edit config/routes.rb to singularize the user_session resource:
map.resource :user_session
And add a root route:
map.root :login # for example
Edit spec/spec_helper.rb for authentication testing:
require 'authlogic/testing/test_unit_helpers'
Inspect the generated migration for creating the users table, to enable or disable any attributes that you do or don't want.
Run rake db:migrate
And see if the specs run: rake spec
== Usage
Once you install the gem, the generators will be available to all Rails
applications on your system. If you run script/generate without any
additional arguments you should see the available generators listed.
To run the generator, go to your rails project directory and call it
using the script/generate or script/destroy command.
script/generate pizza_scaffold Recipe name:string index new
== Included Generators
* pizza_layout: generates generic layout, stylesheet, and helper files.
* pizza_scaffold: generates a controller and optional model/migration.
* pizza_config: generates a config YAML file and loader.
* pizza_authentication: generates user model with sign up and log in.
Run the command with the --help option to learn more.
script/generate pizza_layout --help
== Troubleshooting
Namespaced controllers howto
Just scaffold a RescourceController. Move the controller and views to it's desired subfolders and add the namespace to the name of the class, e.g. Admin::PostsController. Configure your routes and you're done!
I get "undefined method 'title'" error.
Try running pizza_layout, that will generate this helper method. Or
you can just change the templates to whatever approach you prefer for
setting the title.
I get "undefined method 'root_url'" error.
Some generators default redirecting to the root_url. Set this in your
routes.rb file like this (substituting your controller name).
map.root :controller => 'foo'
I get a missing database error.
Run rake db:migrate.
Forms don't work.
Try restarting your development server. Sometimes it doesn't detect the
change in the routing.
I can't set new attributes in my User model.
Add the attribute to the attr_accessible line in the model.
The tests/specs don't work.
Make sure you have mocha installed and require it in your spec/test helper.
gem install mocha
# in spec_helper.rb
config.mock_with :mocha
# in test_helper.rb
require 'mocha'
Also, make sure you're using Rails 2.2.2 or greater.
How to use the cancel_link?
Add this code to your ApplicationController:
before_filter :remember_back
private
def remember_back
session[:back] = request.referrer if request.get?
end
Translating will_paginate
Pizza_layout adds an easy way to translate will_paginate. It will automatically be called when Rails loads.
Your translations should look something like this:
en:
pagination:
class: "pagination"
previous_label: "« Previous"
next_label: "Next »"
inner_window: 4 # links around the current_page
outer_window: 1 # links around beginning and end
separator: ' '
param_name: :page
params: ~
renderer: "WillPaginate::LinkRenderer"
page_links: true
container: true
The initializer will use the properties from the default_locale. Any other language just needs to define their own exceptions to this. So if :en is the default locale and you would switch to :nl, you'd only need to do:
nl:
pagination:
previous_label: "« Vorige"
next_label: "Volgende »"
When you support switching locales, you need to call WillPaginate.translate! everytime you switch locales. This can be done by adding to your ApplicationController:
before_filter :set_locale
private
def set_locale
I18n.locale = params[:locale]
WillPaginate.translate!
end
For more information, read mislav's code on github:
http://github.com/mislav/will_paginate/blob/master/lib/will_paginate/view_helpers.rb
== Development
This project can be found on github at the following URL.
http://github.com/iain/pizza-generators and http://github.com/ryanb/nifty-generators
If you wish the generators behaved differently, please consider
forking the project and modifying to your heart's content. (I did that! - Iain)