1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

remove generators section from command line guide in favor of the separate generator guide

This commit is contained in:
Vijay Dev 2011-06-08 15:01:19 +05:30
parent 5c53754f33
commit def4a538cc

View file

@ -504,97 +504,3 @@ $ rails server mongrel
=> Rails 3.1.0 application starting on http://0.0.0.0:3000 => Rails 3.1.0 application starting on http://0.0.0.0:3000
... ...
</shell> </shell>
h4. The Rails Generation: Generators
INFO: For a good rundown on generators, see "Understanding Generators":generators.html. A lot of its material is presented here.
Generators are code that generates code. Let's experiment by building one. Our generator will generate a text file.
The Rails generator by default looks in these places for available generators, where Rails.root is the root of your Rails application, like /home/foobar/commandsapp:
* Rails.root/lib/generators
* Rails.root/vendor/generators
* Inside any plugin with a directory like "generators" or "rails_generators"
* ~/.rails/generators
* Inside any Gem you have installed with a name ending in "_generator"
* Inside any Gem installed with a "rails_generators" path, and a file ending in "_generator.rb"
* Finally, the builtin Rails generators (controller, model, mailer, etc.)
Let's try the fourth option (in our home directory), which will be easy to clean up later:
<shell>
$ mkdir -p ~/.rails/generators/tutorial_test/templates
$ touch ~/.rails/generators/tutorial_test/templates/tutorial.erb
$ touch ~/.rails/generators/tutorial_test/tutorial_test_generator.rb
</shell>
We'll fill +tutorial_test_generator.rb+ out with:
<ruby>
class TutorialTestGenerator < Rails::Generator::Base
def initialize(*runtime_args)
super(*runtime_args)
@tut_args = runtime_args
end
def manifest
record do |m|
m.directory "public"
m.template "tutorial.erb", File.join("public", "tutorial.txt"),
:assigns => { :args => @tut_args }
end
end
end
</ruby>
We take whatever args are supplied, save them to an instance variable, and literally copying from the Rails source, implement a +manifest+ method, which calls +record+ with a block, and we:
* Check there's a *public* directory. You bet there is.
* Run the ERB template called "tutorial.erb".
* Save it into "Rails.root/public/tutorial.txt".
* Pass in the arguments we saved through the +:assigns+ parameter.
Next we'll build the template:
<shell>
$ cat ~/.rails/generators/tutorial_test/templates/tutorial.erb
I'm a template!
I got assigned some args:
<%= require 'pp'; PP.pp(args, "") %>
</shell>
Then we'll make sure it got included in the list of available generators:
<shell>
$ rails generate
...
...
Installed Generators
User: tutorial_test
</shell>
SWEET! Now let's generate some text, yeah!
<shell>
$ rails generate tutorial_test arg1 arg2 arg3
exists public
create public/tutorial.txt
</shell>
And the result:
<shell>
$ cat public/tutorial.txt
I'm a template!
I got assigned some args:
[["arg1", "arg2", "arg3"],
{:collision=>:ask,
:quiet=>false,
:generator=>"tutorial_test",
:command=>:create}]
</shell>
Tada!