1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
== Add a custom generator command ==
You may have noticed above that you can used one of the built-in rails migration commands `m.migration_template`. You can create your own commands for these, using the following steps:
1. Add the require and hook statements to init.rb.
2. Create the commands - creating 3 sets, Create, Destroy, List.
3. Add the method to your generator.
Working with the internals of generators is beyond the scope of this tutorial, but here is a basic example:
*vendor/plugins/yaffle/init.rb*
[source, ruby]
-----------------------------------------------------------
require "commands"
Rails::Generator::Commands::Create.send :include, Yaffle::Generator::Commands::Create
Rails::Generator::Commands::Destroy.send :include, Yaffle::Generator::Commands::Destroy
Rails::Generator::Commands::List.send :include, Yaffle::Generator::Commands::List
-----------------------------------------------------------
*vendor/plugins/yaffle/lib/commands.rb*
[source, ruby]
-----------------------------------------------------------
require 'rails_generator'
require 'rails_generator/commands'
module Yaffle #:nodoc:
module Generator #:nodoc:
module Commands #:nodoc:
module Create
def yaffle_definition
file("definition.txt", "definition.txt")
end
end
module Destroy
def yaffle_definition
file("definition.txt", "definition.txt")
end
end
module List
def yaffle_definition
file("definition.txt", "definition.txt")
end
end
end
end
end
-----------------------------------------------------------
*vendor/plugins/yaffle/generators/yaffle/templates/definition.txt*
-----------------------------------------------------------
Yaffle is a bird
-----------------------------------------------------------
*vendor/plugins/yaffle/generators/yaffle/yaffle_generator.rb*
[source, ruby]
-----------------------------------------------------------
class YaffleGenerator < Rails::Generator::NamedBase
def manifest
m.yaffle_definition
end
end
-----------------------------------------------------------
This example just uses the built-in "file" method, but you could do anything that Ruby allows.
|