shattered_ruby 0.5.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. data/bin/console +4 -0
  2. data/bin/destroy +9 -0
  3. data/bin/generate +7 -0
  4. data/bin/runner +9 -0
  5. data/bin/shatter +22 -0
  6. data/lib/commands/console.rb +23 -0
  7. data/lib/game_loader.rb +118 -0
  8. data/lib/rails_generator/base.rb +203 -0
  9. data/lib/rails_generator/commands.rb +519 -0
  10. data/lib/rails_generator/generators/applications/shattered_app/USAGE +10 -0
  11. data/lib/rails_generator/generators/applications/shattered_app/shattered_app_generator.rb +103 -0
  12. data/lib/rails_generator/generators/components/actor/actor_generator.rb +22 -0
  13. data/lib/rails_generator/generators/components/actor/templates/actor.rb +0 -0
  14. data/lib/rails_generator/generators/components/model/USAGE +17 -0
  15. data/lib/rails_generator/generators/components/model/model_generator.rb +22 -0
  16. data/lib/rails_generator/generators/components/model/templates/fixtures.yml +5 -0
  17. data/lib/rails_generator/generators/components/model/templates/model.rb +2 -0
  18. data/lib/rails_generator/generators/components/model/templates/unit_test.rb +11 -0
  19. data/lib/rails_generator/generators/components/state/USAGE +30 -0
  20. data/lib/rails_generator/generators/components/state/state_generator.rb +19 -0
  21. data/lib/rails_generator/generators/components/state/templates/state.rb +31 -0
  22. data/lib/rails_generator/generators/components/view/USAGE +30 -0
  23. data/lib/rails_generator/generators/components/view/templates/material +4 -0
  24. data/lib/rails_generator/generators/components/view/templates/view.rb +9 -0
  25. data/lib/rails_generator/generators/components/view/view_generator.rb +28 -0
  26. data/lib/rails_generator/lookup.rb +209 -0
  27. data/lib/rails_generator/manifest.rb +53 -0
  28. data/lib/rails_generator/options.rb +143 -0
  29. data/lib/rails_generator/scripts/destroy.rb +7 -0
  30. data/lib/rails_generator/scripts/generate.rb +7 -0
  31. data/lib/rails_generator/scripts/update.rb +12 -0
  32. data/lib/rails_generator/scripts.rb +83 -0
  33. data/lib/rails_generator/simple_logger.rb +46 -0
  34. data/lib/rails_generator/spec.rb +44 -0
  35. data/lib/rails_generator.rb +43 -0
  36. data/lib/shatter.rb +7 -0
  37. data/lib/tasks/documentation.rake +46 -0
  38. data/lib/tasks/framework.rake +80 -0
  39. data/lib/tasks/log.rake +9 -0
  40. data/lib/tasks/misc.rake +4 -0
  41. data/lib/tasks/pre_namespace_aliases.rake +28 -0
  42. data/lib/tasks/shattered.rb +6 -0
  43. data/lib/tasks/statistics.rake +17 -0
  44. data/lib/tasks/testing.rake +102 -0
  45. data/lib/templates/MIT-LICENSE +20 -0
  46. data/lib/templates/README +35 -0
  47. data/lib/templates/Rakefile +11 -0
  48. data/lib/templates/configs/boot.rb +35 -0
  49. data/lib/templates/configs/empty.log +0 -0
  50. data/lib/templates/configs/ogre.cfg +4 -0
  51. data/lib/templates/configs/ogre_plugins.windows.cfg +14 -0
  52. data/lib/templates/configs/runner.rb +5 -0
  53. data/lib/templates/doc/README_FOR_APP +2 -0
  54. data/lib/templates/environments/environment.rb +10 -0
  55. data/lib/templates/media/basic.rmaterial +18 -0
  56. data/lib/templates/media/default.mesh +0 -0
  57. data/lib/templates/media/default.png +0 -0
  58. data/lib/templates/media/offset_map.rmaterial +117 -0
  59. data/lib/templates/test/test_helper.rb +5 -0
  60. metadata +153 -0
@@ -0,0 +1,22 @@
1
+ class ModelGenerator < Rails::Generator::NamedBase #:nodoc:
2
+ def manifest
3
+ record do |m|
4
+ self.class.check_collisions(m, class_path, class_name)
5
+ self.class.generate(m, class_path, file_name)
6
+ end
7
+ end
8
+
9
+ def self.check_collisions(m, class_path, class_name)
10
+ # Check for class naming collisions.
11
+ m.class_collisions class_path, class_name, "#{class_name}Test"
12
+ end
13
+ def self.generate(m, class_path, file_name)
14
+ # Model, test, and fixture directories.
15
+ m.directory File.join('app/models', class_path)
16
+ m.directory File.join('test/unit', class_path)
17
+
18
+ # Model class, unit test, and fixtures.
19
+ m.template '../../model/templates/model.rb', File.join('app/models', class_path, "#{file_name}.rb")
20
+ m.template '../../model/templates/unit_test.rb', File.join('test/unit', class_path, "#{file_name}_test.rb")
21
+ end
22
+ end
@@ -0,0 +1,5 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+ first_<%= singular_name %>:
3
+ id: 1
4
+ another_<%= singular_name %>:
5
+ id: 2
@@ -0,0 +1,2 @@
1
+ class <%= class_name %> < ShatteredModel::Base
2
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class <%= class_name %>Test < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ # Replace this with your real tests.
9
+ def test_truth
10
+ end
11
+ end
@@ -0,0 +1,30 @@
1
+ Description:
2
+ The controller generator creates stubs for a new controller and its views.
3
+
4
+ The generator takes a controller name and a list of views as arguments.
5
+ The controller name may be given in CamelCase or under_score and should
6
+ not be suffixed with 'Controller'. To create a controller within a
7
+ module, specify the controller name as 'module/controller'.
8
+
9
+ The generator creates a controller class in app/controllers with view
10
+ templates in app/views/controller_name, a helper class in app/helpers,
11
+ and a functional test suite in test/functional.
12
+
13
+ Example:
14
+ ./script/generate controller CreditCard open debit credit close
15
+
16
+ Credit card controller with URLs like /credit_card/debit.
17
+ Controller: app/controllers/credit_card_controller.rb
18
+ Views: app/views/credit_card/debit.rhtml [...]
19
+ Helper: app/helpers/credit_card_helper.rb
20
+ Test: test/functional/credit_card_controller_test.rb
21
+
22
+ Modules Example:
23
+ ./script/generate controller 'admin/credit_card' suspend late_fee
24
+
25
+ Credit card admin controller with URLs /admin/credit_card/suspend.
26
+ Controller: app/controllers/admin/credit_card_controller.rb
27
+ Views: app/views/admin/credit_card/debit.rhtml [...]
28
+ Helper: app/helpers/admin/credit_card_helper.rb
29
+ Test: test/functional/admin/credit_card_controller_test.rb
30
+
@@ -0,0 +1,19 @@
1
+ class StateGenerator < Rails::Generator::NamedBase #:nodoc:
2
+ def manifest
3
+ record do |m|
4
+ # Check for class naming collisions.
5
+ m.class_collisions class_path, "#{class_name}State"
6
+
7
+ # Controller, helper, views, and test directories.
8
+ m.directory File.join('app/states', class_path)
9
+
10
+ # Controller class, functional test, and helper class.
11
+ m.template 'state.rb',
12
+ File.join('app/states',
13
+ class_path,
14
+ "#{file_name}_state.rb")
15
+
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,31 @@
1
+ class <%= class_name %>State < ShatteredState::Base
2
+ key :pressed => :escape, :action => :quit
3
+
4
+ def initialize
5
+ # The different types of scene managers provided by Ogre are:
6
+ # :general, :terrain, :nature, :paging, :indoor
7
+ @scene_manager = create_scene_manager :general
8
+
9
+ setup_camera
10
+ setup_viewport
11
+ end
12
+
13
+ # Cameras are the renderers of the world.
14
+ # Scene managers can have many cameras - for example, in a first person racing game you could have
15
+ # a camera facing forward, and a camera facing backwards, rendering to the rear view window.
16
+ def setup_camera
17
+ @camera = scene_manager.create_camera("camera")
18
+ @camera.set_near_clip_distance 1
19
+ @camera.set_far_clip_distance 10000
20
+ @camera.position = v(0,0,-10)
21
+ @camera.look_at v(0,0,0)
22
+ end
23
+
24
+ # Viewports are your windows into the world.
25
+ # Cameras can have many viewports, but usually the relationship is 1-1.
26
+ def setup_viewport
27
+ @viewport = create_viewport(@camera)
28
+ @viewport.set_background_colour Ogre::ColourValue.new(0.2, 0.2, 0.2)
29
+ end
30
+
31
+ end
@@ -0,0 +1,30 @@
1
+ Description:
2
+ The controller generator creates stubs for a new controller and its views.
3
+
4
+ The generator takes a controller name and a list of views as arguments.
5
+ The controller name may be given in CamelCase or under_score and should
6
+ not be suffixed with 'Controller'. To create a controller within a
7
+ module, specify the controller name as 'module/controller'.
8
+
9
+ The generator creates a controller class in app/controllers with view
10
+ templates in app/views/controller_name, a helper class in app/helpers,
11
+ and a functional test suite in test/functional.
12
+
13
+ Example:
14
+ ./script/generate controller CreditCard open debit credit close
15
+
16
+ Credit card controller with URLs like /credit_card/debit.
17
+ Controller: app/controllers/credit_card_controller.rb
18
+ Views: app/views/credit_card/debit.rhtml [...]
19
+ Helper: app/helpers/credit_card_helper.rb
20
+ Test: test/functional/credit_card_controller_test.rb
21
+
22
+ Modules Example:
23
+ ./script/generate controller 'admin/credit_card' suspend late_fee
24
+
25
+ Credit card admin controller with URLs /admin/credit_card/suspend.
26
+ Controller: app/controllers/admin/credit_card_controller.rb
27
+ Views: app/views/admin/credit_card/debit.rhtml [...]
28
+ Helper: app/helpers/admin/credit_card_helper.rb
29
+ Test: test/functional/admin/credit_card_controller_test.rb
30
+
@@ -0,0 +1,4 @@
1
+ <%=class_name%>Material
2
+ {
3
+
4
+ }
@@ -0,0 +1,9 @@
1
+ class <%= class_name %>View < ShatteredView::Base
2
+ material "<%= file_name %>_material", :template => "basic", :texture => "<%= file_name %>.png"
3
+ mesh "<%= file_name %>", :material => :<%= file_name %>_material
4
+
5
+ # View works by executing after any model event
6
+ # This initialize will work after the model's initialize
7
+ def initialize
8
+ end
9
+ end
@@ -0,0 +1,28 @@
1
+ class ViewGenerator < Rails::Generator::NamedBase #:nodoc:
2
+ def manifest
3
+ record do |m|
4
+ self.class.check_collisions(m, class_path, class_name)
5
+ self.class.generate(m, class_path, file_name)
6
+ end
7
+ end
8
+
9
+ def self.check_collisions(m, class_path, class_name)
10
+ # Check for class naming collisions.
11
+ m.class_collisions class_path, "#{class_name}View"
12
+ end
13
+ def self.generate(m, class_path, file_name)
14
+ # Controller, helper, views, and test directories.
15
+ m.directory File.join('app/views', class_path)
16
+ m.directory File.join('app/media', class_path, file_name)
17
+
18
+ # Controller class, functional test, and helper class.
19
+ m.template '../../view/templates/view.rb',
20
+ File.join('app/views',
21
+ class_path,
22
+ "#{file_name}_view.rb")
23
+ m.file "../../../../../templates/media/default.mesh",
24
+ File.join( 'app/media', class_path, file_name, "#{file_name}.mesh")
25
+ m.file "../../../../../templates/media/default.png",
26
+ File.join( 'app/media', class_path, file_name, "#{file_name}.png")
27
+ end
28
+ end
@@ -0,0 +1,209 @@
1
+ require File.dirname(__FILE__) + '/spec'
2
+
3
+ class Object
4
+ class << self
5
+ # Lookup missing generators using const_missing. This allows any
6
+ # generator to reference another without having to know its location:
7
+ # RubyGems, ~/.rails/generators, and SHATTERED_ROOT/generators.
8
+ def lookup_missing_generator(class_id)
9
+ if md = /(.+)Generator$/.match(class_id.to_s)
10
+ name = md.captures.first.demodulize.underscore
11
+ Rails::Generator::Base.lookup(name).klass
12
+ else
13
+ const_missing_before_generators(class_id)
14
+ end
15
+ end
16
+
17
+ unless respond_to?(:const_missing_before_generators)
18
+ alias_method :const_missing_before_generators, :const_missing
19
+ alias_method :const_missing, :lookup_missing_generator
20
+ end
21
+ end
22
+ end
23
+
24
+ # User home directory lookup adapted from RubyGems.
25
+ def Dir.user_home
26
+ if ENV['HOME']
27
+ ENV['HOME']
28
+ elsif ENV['USERPROFILE']
29
+ ENV['USERPROFILE']
30
+ elsif ENV['HOMEDRIVE'] and ENV['HOMEPATH']
31
+ "#{ENV['HOMEDRIVE']}:#{ENV['HOMEPATH']}"
32
+ else
33
+ File.expand_path '~'
34
+ end
35
+ end
36
+
37
+
38
+ module Rails
39
+ module Generator
40
+
41
+ # Generator lookup is managed by a list of sources which return specs
42
+ # describing where to find and how to create generators. This module
43
+ # provides class methods for manipulating the source list and looking up
44
+ # generator specs, and an #instance wrapper for quickly instantiating
45
+ # generators by name.
46
+ #
47
+ # A spec is not a generator: it's a description of where to find
48
+ # the generator and how to create it. A source is anything that
49
+ # yields generators from #each. PathSource and GemSource are provided.
50
+ module Lookup
51
+ def self.included(base)
52
+ base.extend(ClassMethods)
53
+ base.use_component_sources!
54
+ end
55
+
56
+ # Convenience method to instantiate another generator.
57
+ def instance(generator_name, args, runtime_options = {})
58
+ self.class.instance(generator_name, args, runtime_options)
59
+ end
60
+
61
+ module ClassMethods
62
+ # The list of sources where we look, in order, for generators.
63
+ def sources
64
+ read_inheritable_attribute(:sources) or use_component_sources!
65
+ end
66
+
67
+ # Add a source to the end of the list.
68
+ def append_sources(*args)
69
+ sources.concat(args.flatten)
70
+ invalidate_cache!
71
+ end
72
+
73
+ # Add a source to the beginning of the list.
74
+ def prepend_sources(*args)
75
+ write_inheritable_array(:sources, args.flatten + sources)
76
+ invalidate_cache!
77
+ end
78
+
79
+ # Reset the source list.
80
+ def reset_sources
81
+ write_inheritable_attribute(:sources, [])
82
+ invalidate_cache!
83
+ end
84
+
85
+ # Use application generators (app, ?).
86
+ def use_application_sources!
87
+ reset_sources
88
+ sources << PathSource.new(:builtin, "#{File.dirname(__FILE__)}/generators/applications")
89
+ end
90
+
91
+ # Use component generators (model, controller, etc).
92
+ # 1. Rails application. If SHATTERED_ROOT is defined we know we're
93
+ # generating in the context of a Rails application, so search
94
+ # SHATTERED_ROOT/generators.
95
+ # 2. User home directory. Search ~/.rails/generators.
96
+ # 3. RubyGems. Search for gems named *_generator.
97
+ # 4. Builtins. Model, controller, mailer, scaffold.
98
+ def use_component_sources!
99
+ reset_sources
100
+ if defined? ::SHATTERED_ROOT
101
+ sources << PathSource.new(:lib, "#{::SHATTERED_ROOT}/lib/generators")
102
+ sources << PathSource.new(:vendor, "#{::SHATTERED_ROOT}/vendor/generators")
103
+ sources << PathSource.new(:plugins, "#{::SHATTERED_ROOT}/vendor/plugins/**/generators")
104
+ end
105
+ sources << PathSource.new(:user, "#{Dir.user_home}/.rails/generators")
106
+ sources << GemSource.new if Object.const_defined?(:Gem)
107
+ sources << PathSource.new(:builtin, "#{File.dirname(__FILE__)}/generators/components")
108
+ end
109
+
110
+ # Lookup knows how to find generators' Specs from a list of Sources.
111
+ # Searches the sources, in order, for the first matching name.
112
+ def lookup(generator_name)
113
+ @found ||= {}
114
+ generator_name = generator_name.to_s.downcase
115
+ @found[generator_name] ||= cache.find { |spec| spec.name == generator_name }
116
+ unless @found[generator_name]
117
+ chars = generator_name.scan(/./).map{|c|"#{c}.*?"}
118
+ rx = /^#{chars}$/
119
+ gns = cache.select{|spec| spec.name =~ rx }
120
+ @found[generator_name] ||= gns.first if gns.length == 1
121
+ raise GeneratorError, "Pattern '#{generator_name}' matches more than one generator: #{gns.map{|sp|sp.name}.join(', ')}" if gns.length > 1
122
+ end
123
+ @found[generator_name] or raise GeneratorError, "Couldn't find '#{generator_name}' generator"
124
+ end
125
+
126
+ # Convenience method to lookup and instantiate a generator.
127
+ def instance(generator_name, args = [], runtime_options = {})
128
+ lookup(generator_name).klass.new(args, full_options(runtime_options))
129
+ end
130
+
131
+ private
132
+ # Lookup and cache every generator from the source list.
133
+ def cache
134
+ @cache ||= sources.inject([]) { |cache, source| cache + source.map }
135
+ end
136
+
137
+ # Clear the cache whenever the source list changes.
138
+ def invalidate_cache!
139
+ @cache = nil
140
+ end
141
+ end
142
+ end
143
+
144
+ # Sources enumerate (yield from #each) generator specs which describe
145
+ # where to find and how to create generators. Enumerable is mixed in so,
146
+ # for example, source.collect will retrieve every generator.
147
+ # Sources may be assigned a label to distinguish them.
148
+ class Source
149
+ include Enumerable
150
+
151
+ attr_reader :label
152
+ def initialize(label)
153
+ @label = label
154
+ end
155
+
156
+ # The each method must be implemented in subclasses.
157
+ # The base implementation raises an error.
158
+ def each
159
+ raise NotImplementedError
160
+ end
161
+
162
+ # Return a convenient sorted list of all generator names.
163
+ def names
164
+ map { |spec| spec.name }.sort
165
+ end
166
+ end
167
+
168
+
169
+ # PathSource looks for generators in a filesystem directory.
170
+ class PathSource < Source
171
+ attr_reader :path
172
+
173
+ def initialize(label, path)
174
+ super label
175
+ @path = path
176
+ end
177
+
178
+ # Yield each eligible subdirectory.
179
+ def each
180
+ Dir["#{path}/[a-z]*"].each do |dir|
181
+ if File.directory?(dir)
182
+ yield Spec.new(File.basename(dir), dir, label)
183
+ end
184
+ end
185
+ end
186
+ end
187
+
188
+
189
+ # GemSource hits the mines to quarry for generators. The latest versions
190
+ # of gems named *_generator are selected.
191
+ class GemSource < Source
192
+ def initialize
193
+ super :RubyGems
194
+ end
195
+
196
+ # Yield latest versions of generator gems.
197
+ def each
198
+ Gem::cache.search(/_generator$/).inject({}) { |latest, gem|
199
+ hem = latest[gem.name]
200
+ latest[gem.name] = gem if hem.nil? or gem.version > hem.version
201
+ latest
202
+ }.values.each { |gem|
203
+ yield Spec.new(gem.name.sub(/_generator$/, ''), gem.full_gem_path, label)
204
+ }
205
+ end
206
+ end
207
+
208
+ end
209
+ end
@@ -0,0 +1,53 @@
1
+ module Rails
2
+ module Generator
3
+
4
+ # Manifest captures the actions a generator performs. Instantiate
5
+ # a manifest with an optional target object, hammer it with actions,
6
+ # then replay or rewind on the object of your choice.
7
+ #
8
+ # Example:
9
+ # manifest = Manifest.new { |m|
10
+ # m.make_directory '/foo'
11
+ # m.create_file '/foo/bar.txt'
12
+ # }
13
+ # manifest.replay(creator)
14
+ # manifest.rewind(destroyer)
15
+ class Manifest
16
+ attr_reader :target
17
+
18
+ # Take a default action target. Yield self if block given.
19
+ def initialize(target = nil)
20
+ @target, @actions = target, []
21
+ yield self if block_given?
22
+ end
23
+
24
+ # Record an action.
25
+ def method_missing(action, *args, &block)
26
+ @actions << [action, args, block]
27
+ end
28
+
29
+ # Replay recorded actions.
30
+ def replay(target = nil)
31
+ send_actions(target || @target, @actions)
32
+ end
33
+
34
+ # Rewind recorded actions.
35
+ def rewind(target = nil)
36
+ send_actions(target || @target, @actions.reverse)
37
+ end
38
+
39
+ # Erase recorded actions.
40
+ def erase
41
+ @actions = []
42
+ end
43
+
44
+ private
45
+ def send_actions(target, actions)
46
+ actions.each do |method, args, block|
47
+ target.send(method, *args, &block)
48
+ end
49
+ end
50
+ end
51
+
52
+ end
53
+ end
@@ -0,0 +1,143 @@
1
+ require 'optparse'
2
+
3
+ module Rails
4
+ module Generator
5
+ module Options
6
+ def self.included(base)
7
+ base.extend(ClassMethods)
8
+ class << base
9
+ if respond_to?(:inherited)
10
+ alias_method :inherited_without_options, :inherited
11
+ end
12
+ alias_method :inherited, :inherited_with_options
13
+ end
14
+ end
15
+
16
+ module ClassMethods
17
+ def inherited_with_options(sub)
18
+ inherited_without_options(sub) if respond_to?(:inherited_without_options)
19
+ sub.extend(Rails::Generator::Options::ClassMethods)
20
+ end
21
+
22
+ def mandatory_options(options = nil)
23
+ if options
24
+ write_inheritable_attribute(:mandatory_options, options)
25
+ else
26
+ read_inheritable_attribute(:mandatory_options) or write_inheritable_attribute(:mandatory_options, {})
27
+ end
28
+ end
29
+
30
+ def default_options(options = nil)
31
+ if options
32
+ write_inheritable_attribute(:default_options, options)
33
+ else
34
+ read_inheritable_attribute(:default_options) or write_inheritable_attribute(:default_options, {})
35
+ end
36
+ end
37
+
38
+ # Merge together our class options. In increasing precedence:
39
+ # default_options (class default options)
40
+ # runtime_options (provided as argument)
41
+ # mandatory_options (class mandatory options)
42
+ def full_options(runtime_options = {})
43
+ default_options.merge(runtime_options).merge(mandatory_options)
44
+ end
45
+
46
+ end
47
+
48
+ # Each instance has an options hash that's populated by #parse.
49
+ def options
50
+ @options ||= {}
51
+ end
52
+ attr_writer :options
53
+
54
+ protected
55
+ # Convenient access to class mandatory options.
56
+ def mandatory_options
57
+ self.class.mandatory_options
58
+ end
59
+
60
+ # Convenient access to class default options.
61
+ def default_options
62
+ self.class.default_options
63
+ end
64
+
65
+ # Merge together our instance options. In increasing precedence:
66
+ # default_options (class default options)
67
+ # options (instance options)
68
+ # runtime_options (provided as argument)
69
+ # mandatory_options (class mandatory options)
70
+ def full_options(runtime_options = {})
71
+ self.class.full_options(options.merge(runtime_options))
72
+ end
73
+
74
+ # Parse arguments into the options hash. Classes may customize
75
+ # parsing behavior by overriding these methods:
76
+ # #banner Usage: ./script/generate [options]
77
+ # #add_options! Options:
78
+ # some options..
79
+ # #add_general_options! General Options:
80
+ # general options..
81
+ def parse!(args, runtime_options = {})
82
+ self.options = {}
83
+
84
+ @option_parser = OptionParser.new do |opt|
85
+ opt.banner = banner
86
+ add_options!(opt)
87
+ add_general_options!(opt)
88
+ opt.parse!(args)
89
+ end
90
+
91
+ return args
92
+ ensure
93
+ self.options = full_options(runtime_options)
94
+ end
95
+
96
+ # Raise a usage error. Override usage_message to provide a blurb
97
+ # after the option parser summary.
98
+ def usage(message = usage_message)
99
+ raise UsageError, "#{@option_parser}\n#{message}"
100
+ end
101
+
102
+ def usage_message
103
+ ''
104
+ end
105
+
106
+ # Override with your own usage banner.
107
+ def banner
108
+ "Usage: #{$0} [options]"
109
+ end
110
+
111
+ # Override to add your options to the parser:
112
+ # def add_options!(opt)
113
+ # opt.on('-v', '--verbose') { |value| options[:verbose] = value }
114
+ # end
115
+ def add_options!(opt)
116
+ end
117
+
118
+ # Adds general options like -h and --quiet. Usually don't override.
119
+ def add_general_options!(opt)
120
+ opt.separator ''
121
+ opt.separator 'Rails Info:'
122
+ opt.on('-v', '--version', 'Show the Rails version number and quit.')
123
+ opt.on('-h', '--help', 'Show this help message and quit.') { |v| options[:help] = v }
124
+
125
+ opt.separator ''
126
+ opt.separator 'General Options:'
127
+
128
+ opt.on('-p', '--pretend', 'Run but do not make any changes.') { |v| options[:pretend] = v }
129
+ opt.on('-f', '--force', 'Overwrite files that already exist.') { options[:collision] = :force }
130
+ opt.on('-s', '--skip', 'Skip files that already exist.') { options[:collision] = :skip }
131
+ opt.on('-q', '--quiet', 'Suppress normal output.') { |v| options[:quiet] = v }
132
+ opt.on('-t', '--backtrace', 'Debugging: show backtrace on errors.') { |v| options[:backtrace] = v }
133
+ opt.on('-c', '--svn', 'Modify files with subversion. (Note: svn must be in path)') do
134
+ options[:svn] = `svn status`.inject({}) do |opt, e|
135
+ opt[e.chomp[7..-1]] = true
136
+ opt
137
+ end
138
+ end
139
+ end
140
+
141
+ end
142
+ end
143
+ end
@@ -0,0 +1,7 @@
1
+ require File.dirname(__FILE__) + '/../scripts'
2
+
3
+ module Rails::Generator::Scripts #:nodoc:all
4
+ class Destroy < Base
5
+ mandatory_options :command => :destroy
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require File.dirname(__FILE__) + '/../scripts'
2
+
3
+ module Rails::Generator::Scripts #:nodoc:all
4
+ class Generate < Base
5
+ mandatory_options :command => :create
6
+ end
7
+ end
@@ -0,0 +1,12 @@
1
+ require File.dirname(__FILE__) + '/../scripts'
2
+
3
+ module Rails::Generator::Scripts #:nodoc:all
4
+ class Update < Base
5
+ mandatory_options :command => :update
6
+
7
+ protected
8
+ def banner
9
+ "Usage: #{$0} [options] scaffold"
10
+ end
11
+ end
12
+ end