rubigen 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. data/History.txt +3 -0
  2. data/License.txt +17 -0
  3. data/Manifest.txt +119 -0
  4. data/README.txt +204 -0
  5. data/Rakefile +142 -0
  6. data/bin/ruby_app +12 -0
  7. data/examples/rails_generators/applications/app/USAGE +16 -0
  8. data/examples/rails_generators/applications/app/app_generator.rb +177 -0
  9. data/examples/rails_generators/components/controller/USAGE +29 -0
  10. data/examples/rails_generators/components/controller/controller_generator.rb +37 -0
  11. data/examples/rails_generators/components/controller/templates/controller.rb +10 -0
  12. data/examples/rails_generators/components/controller/templates/functional_test.rb +18 -0
  13. data/examples/rails_generators/components/controller/templates/helper.rb +2 -0
  14. data/examples/rails_generators/components/controller/templates/view.html.erb +2 -0
  15. data/examples/rails_generators/components/integration_test/USAGE +8 -0
  16. data/examples/rails_generators/components/integration_test/integration_test_generator.rb +16 -0
  17. data/examples/rails_generators/components/integration_test/templates/integration_test.rb +10 -0
  18. data/examples/rails_generators/components/mailer/USAGE +16 -0
  19. data/examples/rails_generators/components/mailer/mailer_generator.rb +34 -0
  20. data/examples/rails_generators/components/mailer/templates/fixture.erb +3 -0
  21. data/examples/rails_generators/components/mailer/templates/fixture.rhtml +0 -0
  22. data/examples/rails_generators/components/mailer/templates/mailer.rb +13 -0
  23. data/examples/rails_generators/components/mailer/templates/unit_test.rb +37 -0
  24. data/examples/rails_generators/components/mailer/templates/view.erb +3 -0
  25. data/examples/rails_generators/components/mailer/templates/view.rhtml +0 -0
  26. data/examples/rails_generators/components/migration/USAGE +24 -0
  27. data/examples/rails_generators/components/migration/migration_generator.rb +20 -0
  28. data/examples/rails_generators/components/migration/templates/migration.rb +7 -0
  29. data/examples/rails_generators/components/model/USAGE +27 -0
  30. data/examples/rails_generators/components/model/model_generator.rb +38 -0
  31. data/examples/rails_generators/components/model/templates/fixtures.yml +15 -0
  32. data/examples/rails_generators/components/model/templates/migration.rb +14 -0
  33. data/examples/rails_generators/components/model/templates/model.rb +2 -0
  34. data/examples/rails_generators/components/model/templates/unit_test.rb +10 -0
  35. data/examples/rails_generators/components/observer/USAGE +13 -0
  36. data/examples/rails_generators/components/observer/observer_generator.rb +16 -0
  37. data/examples/rails_generators/components/observer/templates/observer.rb +2 -0
  38. data/examples/rails_generators/components/observer/templates/unit_test.rb +10 -0
  39. data/examples/rails_generators/components/plugin/USAGE +25 -0
  40. data/examples/rails_generators/components/plugin/plugin_generator.rb +39 -0
  41. data/examples/rails_generators/components/plugin/templates/MIT-LICENSE +20 -0
  42. data/examples/rails_generators/components/plugin/templates/README +13 -0
  43. data/examples/rails_generators/components/plugin/templates/Rakefile +22 -0
  44. data/examples/rails_generators/components/plugin/templates/USAGE +8 -0
  45. data/examples/rails_generators/components/plugin/templates/generator.rb +8 -0
  46. data/examples/rails_generators/components/plugin/templates/init.rb +1 -0
  47. data/examples/rails_generators/components/plugin/templates/install.rb +1 -0
  48. data/examples/rails_generators/components/plugin/templates/plugin.rb +1 -0
  49. data/examples/rails_generators/components/plugin/templates/tasks.rake +4 -0
  50. data/examples/rails_generators/components/plugin/templates/uninstall.rb +1 -0
  51. data/examples/rails_generators/components/plugin/templates/unit_test.rb +8 -0
  52. data/examples/rails_generators/components/resource/USAGE +23 -0
  53. data/examples/rails_generators/components/resource/resource_generator.rb +72 -0
  54. data/examples/rails_generators/components/resource/templates/USAGE +18 -0
  55. data/examples/rails_generators/components/resource/templates/controller.rb +2 -0
  56. data/examples/rails_generators/components/resource/templates/fixtures.yml +0 -0
  57. data/examples/rails_generators/components/resource/templates/functional_test.rb +20 -0
  58. data/examples/rails_generators/components/resource/templates/helper.rb +2 -0
  59. data/examples/rails_generators/components/scaffold/USAGE +25 -0
  60. data/examples/rails_generators/components/scaffold/scaffold_generator.rb +90 -0
  61. data/examples/rails_generators/components/scaffold/templates/controller.rb +85 -0
  62. data/examples/rails_generators/components/scaffold/templates/functional_test.rb +57 -0
  63. data/examples/rails_generators/components/scaffold/templates/helper.rb +2 -0
  64. data/examples/rails_generators/components/scaffold/templates/layout.html.erb +17 -0
  65. data/examples/rails_generators/components/scaffold/templates/style.css +74 -0
  66. data/examples/rails_generators/components/scaffold/templates/view_edit.html.erb +19 -0
  67. data/examples/rails_generators/components/scaffold/templates/view_index.html.erb +24 -0
  68. data/examples/rails_generators/components/scaffold/templates/view_new.html.erb +18 -0
  69. data/examples/rails_generators/components/scaffold/templates/view_show.html.erb +10 -0
  70. data/examples/rails_generators/components/session_migration/USAGE +10 -0
  71. data/examples/rails_generators/components/session_migration/session_migration_generator.rb +18 -0
  72. data/examples/rails_generators/components/session_migration/templates/migration.rb +16 -0
  73. data/examples/rails_generators/components/web_service/USAGE +24 -0
  74. data/examples/rails_generators/components/web_service/templates/api_definition.rb +5 -0
  75. data/examples/rails_generators/components/web_service/templates/controller.rb +8 -0
  76. data/examples/rails_generators/components/web_service/templates/functional_test.rb +19 -0
  77. data/examples/rails_generators/components/web_service/web_service_generator.rb +29 -0
  78. data/lib/rubigen/base.rb +168 -0
  79. data/lib/rubigen/commands.rb +632 -0
  80. data/lib/rubigen/generated_attribute.rb +40 -0
  81. data/lib/rubigen/generators/applications/ruby_app/USAGE +10 -0
  82. data/lib/rubigen/generators/applications/ruby_app/ruby_app_generator.rb +78 -0
  83. data/lib/rubigen/generators/applications/ruby_app/templates/README.txt +1 -0
  84. data/lib/rubigen/generators/applications/ruby_app/templates/configs/empty.log +0 -0
  85. data/lib/rubigen/generators/applications/ruby_app/templates/fresh_rakefile +10 -0
  86. data/lib/rubigen/generators/applications/ruby_app/templates/module.rb +5 -0
  87. data/lib/rubigen/generators/applications/ruby_app/templates/script/generate +13 -0
  88. data/lib/rubigen/generators/applications/ruby_app/templates/test_helper.rb +2 -0
  89. data/lib/rubigen/generators/components/test_unit/USAGE +14 -0
  90. data/lib/rubigen/generators/components/test_unit/templates/test +14 -0
  91. data/lib/rubigen/generators/components/test_unit/test_unit_generator.rb +26 -0
  92. data/lib/rubigen/helpers/generator_test_helper.rb +133 -0
  93. data/lib/rubigen/lookup.rb +296 -0
  94. data/lib/rubigen/manifest.rb +51 -0
  95. data/lib/rubigen/options.rb +136 -0
  96. data/lib/rubigen/scripts/destroy.rb +27 -0
  97. data/lib/rubigen/scripts/generate.rb +7 -0
  98. data/lib/rubigen/scripts/update.rb +12 -0
  99. data/lib/rubigen/scripts.rb +69 -0
  100. data/lib/rubigen/simple_logger.rb +44 -0
  101. data/lib/rubigen/spec.rb +42 -0
  102. data/lib/rubigen/version.rb +9 -0
  103. data/lib/rubigen.rb +44 -0
  104. data/script/destroy +9 -0
  105. data/script/generate +9 -0
  106. data/script/txt2html +65 -0
  107. data/setup.rb +1585 -0
  108. data/test/examples_from_rails/generator_test_helper.rb +195 -0
  109. data/test/examples_from_rails/test_rails_resource_generator.rb +106 -0
  110. data/test/examples_from_rails/test_rails_scaffold_generator.rb +185 -0
  111. data/test/test_generate_builtin_application.rb +24 -0
  112. data/test/test_generate_builtin_test_unit.rb +22 -0
  113. data/test/test_helper.rb +33 -0
  114. data/test/test_lookup.rb +103 -0
  115. data/website/index.html +352 -0
  116. data/website/index.txt +252 -0
  117. data/website/javascripts/rounded_corners_lite.inc.js +285 -0
  118. data/website/stylesheets/screen.css +138 -0
  119. data/website/template.rhtml +44 -0
  120. metadata +183 -0
@@ -0,0 +1,195 @@
1
+ module GeneratorTestHelper
2
+ # Instatiates the Generator
3
+ def build_generator(name,params)
4
+ RubiGen::Base.instance(name,params)
5
+ end
6
+
7
+ # Runs the create command (like the command line does)
8
+ def run_generator(name,params)
9
+ silence_generator do
10
+ build_generator(name,params).command(:create).invoke!
11
+ end
12
+ end
13
+
14
+ # Silences the logger temporarily and returns the output as a String
15
+ def silence_generator
16
+ logger_original=RubiGen::Base.logger
17
+ myout=StringIO.new
18
+ RubiGen::Base.logger=RubiGen::SimpleLogger.new(myout)
19
+ yield if block_given?
20
+ RubiGen::Base.logger=logger_original
21
+ myout.string
22
+ end
23
+
24
+ # asserts that the given controller was generated.
25
+ # It takes a name or symbol without the <tt>_controller</tt> part and an optional super class.
26
+ # The contents of the class source file is passed to a block.
27
+ def assert_generated_controller_for(name,parent="ApplicationController")
28
+ assert_generated_class "app/controllers/#{name.to_s.underscore}_controller",parent do |body|
29
+ yield body if block_given?
30
+ end
31
+ end
32
+
33
+ # asserts that the given model was generated.
34
+ # It takes a name or symbol and an optional super class.
35
+ # the contents of the class source file is passed to a block.
36
+ def assert_generated_model_for(name,parent="ActiveRecord::Base")
37
+ assert_generated_class "app/models/#{name.to_s.underscore}",parent do |body|
38
+ yield body if block_given?
39
+ end
40
+ end
41
+
42
+ # asserts that the given helper was generated.
43
+ # It takes a name or symbol without the <tt>_helper</tt> part
44
+ # the contents of the module source file is passed to a block.
45
+ def assert_generated_helper_for(name)
46
+ assert_generated_module "app/helpers/#{name.to_s.underscore}_helper" do |body|
47
+ yield body if block_given?
48
+ end
49
+ end
50
+
51
+ # asserts that the given functional test was generated.
52
+ # It takes a name or symbol without the <tt>_controller_test</tt> part and an optional super class.
53
+ # the contents of the class source file is passed to a block.
54
+ def assert_generated_functional_test_for(name,parent="Test::Unit::TestCase")
55
+ assert_generated_class "test/functional/#{name.to_s.underscore}_controller_test",parent do |body|
56
+ yield body if block_given?
57
+ end
58
+ end
59
+
60
+ # asserts that the given unit test was generated.
61
+ # It takes a name or symbol without the <tt>_test</tt> part and an optional super class.
62
+ # the contents of the class source file is passed to a block.
63
+ def assert_generated_unit_test_for(name,parent="Test::Unit::TestCase")
64
+ assert_generated_class "test/unit/#{name.to_s.underscore}_test",parent do |body|
65
+ yield body if block_given?
66
+ end
67
+ end
68
+
69
+ # asserts that the given file was generated.
70
+ # the contents of the file is passed to a block.
71
+ def assert_generated_file(path)
72
+ assert_file_exists(path)
73
+ File.open("#{RAILS_ROOT}/#{path}") do |f|
74
+ yield f.read if block_given?
75
+ end
76
+ end
77
+
78
+ # asserts that the given file exists
79
+ def assert_file_exists(path)
80
+ assert File.exists?("#{RAILS_ROOT}/#{path}"),"The file '#{path}' should exist"
81
+ end
82
+
83
+ # asserts that the given class source file was generated.
84
+ # It takes a path without the <tt>.rb</tt> part and an optional super class.
85
+ # the contents of the class source file is passed to a block.
86
+ def assert_generated_class(path,parent=nil)
87
+ path=~/\/?(\d+_)?(\w+)$/
88
+ class_name=$2.camelize
89
+ assert_generated_file("#{path}.rb") do |body|
90
+ assert body=~/class #{class_name}#{parent.nil? ? '':" < #{parent}"}/,"the file '#{path}.rb' should be a class"
91
+ yield body if block_given?
92
+ end
93
+ end
94
+
95
+ # asserts that the given module source file was generated.
96
+ # It takes a path without the <tt>.rb</tt> part.
97
+ # the contents of the class source file is passed to a block.
98
+ def assert_generated_module(path)
99
+ path=~/\/?(\w+)$/
100
+ module_name=$1.camelize
101
+ assert_generated_file("#{path}.rb") do |body|
102
+ assert body=~/module #{module_name}/,"the file '#{path}.rb' should be a module"
103
+ yield body if block_given?
104
+ end
105
+ end
106
+
107
+ # asserts that the given css stylesheet file was generated.
108
+ # It takes a path without the <tt>.css</tt> part.
109
+ # the contents of the stylesheet source file is passed to a block.
110
+ def assert_generated_stylesheet(path)
111
+ assert_generated_file("public/stylesheets/#{path}.css") do |body|
112
+ yield body if block_given?
113
+ end
114
+ end
115
+
116
+ # asserts that the given yaml file was generated.
117
+ # It takes a path without the <tt>.yml</tt> part.
118
+ # the parsed yaml tree is passed to a block.
119
+ def assert_generated_yaml(path)
120
+ assert_generated_file("#{path}.yml") do |body|
121
+ assert yaml=YAML.load(body)
122
+ yield yaml if block_given?
123
+ end
124
+ end
125
+
126
+ # asserts that the given fixtures yaml file was generated.
127
+ # It takes a fixture name without the <tt>.yml</tt> part.
128
+ # the parsed yaml tree is passed to a block.
129
+ def assert_generated_fixtures_for(name)
130
+ assert_generated_yaml "test/fixtures/#{name.to_s.underscore}" do |yaml|
131
+ assert_generated_timestamps(yaml)
132
+ yield yaml if block_given?
133
+ end
134
+ end
135
+
136
+ # asserts that the given views were generated.
137
+ # It takes a controller name and a list of views (including extensions).
138
+ # The body of each view is passed to a block
139
+ def assert_generated_views_for(name,*actions)
140
+ actions.each do |action|
141
+ assert_generated_file("app/views/#{name.to_s.underscore}/#{action.to_s}") do |body|
142
+ yield body if block_given?
143
+ end
144
+ end
145
+ end
146
+
147
+ # asserts that the given migration file was generated.
148
+ # It takes the name of the migration as a parameter.
149
+ # The migration body is passed to a block.
150
+ def assert_generated_migration(name,parent="ActiveRecord::Migration")
151
+ assert_generated_class "db/migrate/001_#{name.to_s.underscore}",parent do |body|
152
+ assert body=~/timestamps/, "should have timestamps defined"
153
+ yield body if block_given?
154
+ end
155
+ end
156
+
157
+ # Asserts that the given migration file was not generated.
158
+ # It takes the name of the migration as a parameter.
159
+ def assert_skipped_migration(name)
160
+ migration_file = "#{RAILS_ROOT}/db/migrate/001_#{name.to_s.underscore}.rb"
161
+ assert !File.exists?(migration_file), "should not create migration #{migration_file}"
162
+ end
163
+
164
+ # asserts that the given resource was added to the routes.
165
+ def assert_added_route_for(name)
166
+ assert_generated_file("config/routes.rb") do |body|
167
+ assert body=~/map.resources :#{name.to_s.underscore}/,"should add route for :#{name.to_s.underscore}"
168
+ end
169
+ end
170
+
171
+ # asserts that the given methods are defined in the body.
172
+ # This does assume standard rails code conventions with regards to the source code.
173
+ # The body of each individual method is passed to a block.
174
+ def assert_has_method(body,*methods)
175
+ methods.each do |name|
176
+ assert body=~/^ def #{name.to_s}\n((\n| .*\n)*) end/,"should have method #{name.to_s}"
177
+ yield( name, $1 ) if block_given?
178
+ end
179
+ end
180
+
181
+ # asserts that the given column is defined in the migration
182
+ def assert_generated_column(body,name,type)
183
+ assert body=~/t\.#{type.to_s} :#{name.to_s}/, "should have column #{name.to_s} defined"
184
+ end
185
+
186
+ private
187
+ # asserts that the default timestamps are created in the fixture
188
+ def assert_generated_timestamps(yaml)
189
+ yaml.values.each do |v|
190
+ ["created_at", "updated_at"].each do |field|
191
+ assert v.keys.include?(field), "should have #{field} field by default"
192
+ end
193
+ end
194
+ end
195
+ end
@@ -0,0 +1,106 @@
1
+ require 'test/unit'
2
+
3
+ # Optionally load RubyGems
4
+ begin
5
+ require 'rubygems'
6
+ rescue LoadError
7
+ end
8
+
9
+ # Mock out what we need from AR::Base
10
+ module ActiveRecord
11
+ class Base
12
+ class << self
13
+ attr_accessor :pluralize_table_names
14
+ end
15
+ self.pluralize_table_names = true
16
+ end
17
+
18
+ module ConnectionAdapters
19
+ class Column
20
+ attr_reader :name, :default, :type, :limit, :null, :sql_type, :precision, :scale
21
+ def initialize(name, default, sql_type=nil)
22
+ @namename
23
+ @default=default
24
+ @type=@sql_type=sql_type
25
+ end
26
+
27
+ def human_name
28
+ @name.humanize
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ # Mock up necessities from ActionView
35
+ module ActionView
36
+ module Helpers
37
+ module ActionRecordHelper; end
38
+ class InstanceTag; end
39
+ end
40
+ end
41
+
42
+ # Set RAILS_ROOT appropriately fixture generation
43
+ tmp_dir="#{File.dirname(__FILE__)}/../fixtures/tmp"
44
+ if defined?(RAILS_ROOT)
45
+ RAILS_ROOT.replace(tmp_dir)
46
+ else
47
+ RAILS_ROOT=tmp_dir
48
+ end
49
+ Dir.mkdir(RAILS_ROOT) unless File.exists?(RAILS_ROOT)
50
+
51
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib"
52
+ require 'rails_generator'
53
+ require "#{File.dirname(__FILE__)}/generator_test_helper"
54
+
55
+ class RailsResourceGeneratorTest < Test::Unit::TestCase
56
+ include GeneratorTestHelper
57
+
58
+ def setup
59
+ ActiveRecord::Base.pluralize_table_names = true
60
+ Dir.mkdir("#{RAILS_ROOT}/app") unless File.exists?("#{RAILS_ROOT}/app")
61
+ Dir.mkdir("#{RAILS_ROOT}/app/views") unless File.exists?("#{RAILS_ROOT}/app/views")
62
+ Dir.mkdir("#{RAILS_ROOT}/app/views/layouts") unless File.exists?("#{RAILS_ROOT}/app/views/layouts")
63
+ Dir.mkdir("#{RAILS_ROOT}/config") unless File.exists?("#{RAILS_ROOT}/config")
64
+ Dir.mkdir("#{RAILS_ROOT}/db") unless File.exists?("#{RAILS_ROOT}/db")
65
+ Dir.mkdir("#{RAILS_ROOT}/test") unless File.exists?("#{RAILS_ROOT}/test")
66
+ Dir.mkdir("#{RAILS_ROOT}/test/fixtures") unless File.exists?("#{RAILS_ROOT}/test/fixtures")
67
+ Dir.mkdir("#{RAILS_ROOT}/public") unless File.exists?("#{RAILS_ROOT}/public")
68
+ Dir.mkdir("#{RAILS_ROOT}/public/stylesheets") unless File.exists?("#{RAILS_ROOT}/public/stylesheets")
69
+ File.open("#{RAILS_ROOT}/config/routes.rb", 'w') do |f|
70
+ f<<"ActionController::Routing::Routes.draw do |map|\n\nend\n"
71
+ end
72
+ end
73
+
74
+ def teardown
75
+ FileUtils.rm_rf "#{RAILS_ROOT}/app"
76
+ FileUtils.rm_rf "#{RAILS_ROOT}/test"
77
+ FileUtils.rm_rf "#{RAILS_ROOT}/config"
78
+ FileUtils.rm_rf "#{RAILS_ROOT}/db"
79
+ FileUtils.rm_rf "#{RAILS_ROOT}/public"
80
+ end
81
+
82
+ def test_resource_generates_resources
83
+ run_generator('scaffold', %w(Product))
84
+
85
+ assert_generated_controller_for :products
86
+ assert_generated_model_for :product
87
+ assert_generated_fixtures_for :products
88
+ assert_generated_functional_test_for :products
89
+ assert_generated_helper_for :products
90
+ assert_generated_migration :create_products
91
+ assert_added_route_for :products
92
+ end
93
+
94
+ def test_resource_skip_migration_skips_migration
95
+ run_generator('resource', %w(Product --skip-migration))
96
+
97
+ assert_generated_controller_for :products
98
+ assert_generated_model_for :product
99
+ assert_generated_fixtures_for :products
100
+ assert_generated_functional_test_for :products
101
+ assert_generated_helper_for :products
102
+ assert_skipped_migration :create_products
103
+ assert_added_route_for :products
104
+ end
105
+
106
+ end
@@ -0,0 +1,185 @@
1
+ require 'test/unit'
2
+
3
+ # Optionally load RubyGems.
4
+ begin
5
+ require 'rubygems'
6
+ rescue LoadError
7
+ end
8
+
9
+ # Mock out what we need from AR::Base.
10
+ module ActiveRecord
11
+ class Base
12
+ class << self
13
+ attr_accessor :pluralize_table_names
14
+ end
15
+ self.pluralize_table_names = true
16
+ end
17
+
18
+ module ConnectionAdapters
19
+ class Column
20
+ attr_reader :name, :default, :type, :limit, :null, :sql_type, :precision, :scale
21
+
22
+ def initialize(name, default, sql_type = nil)
23
+ @name=name
24
+ @default=default
25
+ @type=@sql_type=sql_type
26
+ end
27
+
28
+ def human_name
29
+ @name.humanize
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ # And what we need from ActionView
36
+ module ActionView
37
+ module Helpers
38
+ module ActiveRecordHelper; end
39
+ class InstanceTag; end
40
+ end
41
+ end
42
+
43
+
44
+ # Must set before requiring generator libs.
45
+ tmp_dir="#{File.dirname(__FILE__)}/../fixtures/tmp"
46
+ if defined?(RAILS_ROOT)
47
+ RAILS_ROOT.replace(tmp_dir)
48
+ else
49
+ RAILS_ROOT=tmp_dir
50
+ end
51
+ Dir.mkdir(RAILS_ROOT) unless File.exists?(RAILS_ROOT)
52
+
53
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib"
54
+ require 'rails_generator'
55
+ require "#{File.dirname(__FILE__)}/generator_test_helper"
56
+
57
+ class RailsScaffoldGeneratorTest < Test::Unit::TestCase
58
+
59
+ include GeneratorTestHelper
60
+
61
+ def setup
62
+ ActiveRecord::Base.pluralize_table_names = true
63
+ Dir.mkdir("#{RAILS_ROOT}/app") unless File.exists?("#{RAILS_ROOT}/app")
64
+ Dir.mkdir("#{RAILS_ROOT}/app/views") unless File.exists?("#{RAILS_ROOT}/app/views")
65
+ Dir.mkdir("#{RAILS_ROOT}/app/views/layouts") unless File.exists?("#{RAILS_ROOT}/app/views/layouts")
66
+ Dir.mkdir("#{RAILS_ROOT}/config") unless File.exists?("#{RAILS_ROOT}/config")
67
+ Dir.mkdir("#{RAILS_ROOT}/db") unless File.exists?("#{RAILS_ROOT}/db")
68
+ Dir.mkdir("#{RAILS_ROOT}/test") unless File.exists?("#{RAILS_ROOT}/test")
69
+ Dir.mkdir("#{RAILS_ROOT}/test/fixtures") unless File.exists?("#{RAILS_ROOT}/test/fixtures")
70
+ Dir.mkdir("#{RAILS_ROOT}/public") unless File.exists?("#{RAILS_ROOT}/public")
71
+ Dir.mkdir("#{RAILS_ROOT}/public/stylesheets") unless File.exists?("#{RAILS_ROOT}/public/stylesheets")
72
+ File.open("#{RAILS_ROOT}/config/routes.rb", 'w') do |f|
73
+ f<<"ActionController::Routing::Routes.draw do |map|\n\nend\n"
74
+ end
75
+ end
76
+
77
+ def teardown
78
+ FileUtils.rm_rf "#{RAILS_ROOT}/app"
79
+ FileUtils.rm_rf "#{RAILS_ROOT}/test"
80
+ FileUtils.rm_rf "#{RAILS_ROOT}/config"
81
+ FileUtils.rm_rf "#{RAILS_ROOT}/db"
82
+ FileUtils.rm_rf "#{RAILS_ROOT}/public"
83
+ end
84
+
85
+ def test_scaffolded_names
86
+ g = RubiGen::Base.instance('scaffold', %w(ProductLine))
87
+ assert_equal "ProductLines", g.controller_name
88
+ assert_equal "ProductLines", g.controller_class_name
89
+ assert_equal "ProductLine", g.controller_singular_name
90
+ assert_equal "product_lines", g.controller_plural_name
91
+ assert_equal "product_lines", g.controller_file_name
92
+ assert_equal "product_lines", g.controller_table_name
93
+ end
94
+
95
+ def test_scaffold_generates_resources
96
+
97
+ run_generator('scaffold', %w(Product))
98
+
99
+ assert_generated_controller_for :products do |f|
100
+
101
+ assert_has_method f, :index do |name, m|
102
+ assert_match /@products = Product\.find\(:all\)/, m, "#{name} should query products table"
103
+ end
104
+
105
+ assert_has_method f, :show, :edit, :update, :destroy do |name, m|
106
+ assert_match /@product = Product\.find\(params\[:id\]\)/, m, "#{name.to_s} should query products table"
107
+ end
108
+
109
+ assert_has_method f, :new do |name, m|
110
+ assert_match /@product = Product\.new/, m, "#{name.to_s} should instantiate a product"
111
+ end
112
+
113
+ assert_has_method f, :create do |name, m|
114
+ assert_match /@product = Product\.new\(params\[:product\]\)/, m, "#{name.to_s} should instantiate a product"
115
+ assert_match /format.xml \{ render :xml => @product.errors, :status => :unprocessable_entity \}/, m, "#{name.to_s} should set status to :unprocessable_entity code for xml"
116
+ end
117
+
118
+ end
119
+
120
+ assert_generated_model_for :product
121
+ assert_generated_functional_test_for :products
122
+ assert_generated_unit_test_for :product
123
+ assert_generated_fixtures_for :products
124
+ assert_generated_helper_for :products
125
+ assert_generated_stylesheet :scaffold
126
+ assert_generated_views_for :products, "index.html.erb", "new.html.erb", "edit.html.erb", "show.html.erb"
127
+ assert_generated_migration :create_products
128
+ assert_added_route_for :products
129
+ end
130
+
131
+ def test_scaffold_skip_migration_skips_migration
132
+ run_generator('scaffold', %w(Product --skip-migration))
133
+
134
+ assert_generated_model_for :product
135
+ assert_generated_functional_test_for :products
136
+ assert_generated_unit_test_for :product
137
+ assert_generated_fixtures_for :products
138
+ assert_generated_helper_for :products
139
+ assert_generated_stylesheet :scaffold
140
+ assert_generated_views_for :products, "index.html.erb","new.html.erb","edit.html.erb","show.html.erb"
141
+ assert_skipped_migration :create_products
142
+ assert_added_route_for :products
143
+ end
144
+
145
+ def test_scaffold_generates_resources_with_attributes
146
+ run_generator('scaffold', %w(Product name:string supplier_id:integer created_at:timestamp))
147
+
148
+ assert_generated_controller_for :products do |f|
149
+
150
+ assert_has_method f, :index do |name, m|
151
+ assert_match /@products = Product\.find\(:all\)/, m, "#{name} should query products table"
152
+ end
153
+
154
+ assert_has_method f, :show, :edit, :update, :destroy do |name, m|
155
+ assert_match /@product = Product\.find\(params\[:id\]\)/, m, "#{name.to_s} should query products table"
156
+ end
157
+
158
+ assert_has_method f, :new do |name, m|
159
+ assert_match /@product = Product\.new/, m, "#{name.to_s} should instantiate a product"
160
+ end
161
+
162
+ assert_has_method f, :create do |name, m|
163
+ assert_match /@product = Product\.new\(params\[:product\]\)/, m, "#{name.to_s} should instantiate a product"
164
+ assert_match /format.xml \{ render :xml => @product.errors, :status => :unprocessable_entity \}/, m, "#{name.to_s} should set status to :unprocessable_entity code for xml"
165
+ end
166
+
167
+ end
168
+
169
+ assert_generated_model_for :product
170
+ assert_generated_functional_test_for :products
171
+ assert_generated_unit_test_for :product
172
+ assert_generated_fixtures_for :products
173
+ assert_generated_helper_for :products
174
+ assert_generated_stylesheet :scaffold
175
+ assert_generated_views_for :products, "index.html.erb", "new.html.erb", "edit.html.erb", "show.html.erb"
176
+ assert_generated_migration :create_products do |t|
177
+ assert_generated_column t, :name, :string
178
+ assert_generated_column t, :supplier_id, :integer
179
+ assert_generated_column t, :created_at, :timestamp
180
+ end
181
+
182
+ assert_added_route_for :products
183
+ end
184
+
185
+ end
@@ -0,0 +1,24 @@
1
+ require File.dirname(__FILE__) + "/test_helper"
2
+
3
+ class TestGenerateBuiltinApplication < Test::Unit::TestCase
4
+
5
+ def setup
6
+ bare_setup
7
+ end
8
+
9
+ def teardown
10
+ bare_teardown
11
+ end
12
+
13
+ def test_ruby_app
14
+ app_name = "myapp"
15
+ run_generator('ruby_app', ["#{APP_ROOT}/#{app_name}"], :app)
16
+ assert_generated_file("#{app_name}/Rakefile")
17
+ assert_generated_file("#{app_name}/README.txt")
18
+ assert_generated_file("#{app_name}/lib/#{app_name}.rb")
19
+ assert_generated_file("#{app_name}/test/test_helper.rb")
20
+ assert_generated_file("#{app_name}/script/generate")
21
+
22
+ assert_generated_module("#{app_name}/lib/#{app_name}")
23
+ end
24
+ end
@@ -0,0 +1,22 @@
1
+ require File.dirname(__FILE__) + "/test_helper"
2
+
3
+ class TestGenerateBuiltinTestUnit < Test::Unit::TestCase
4
+
5
+ def setup
6
+ rubygems_setup
7
+ end
8
+
9
+ def teardown
10
+ rubygems_teardown
11
+ end
12
+
13
+ def test_with_no_options
14
+ run_generator('test_unit', %w[AccountReceiver], :component)
15
+ assert_generated_file("test/test_account_receiver.rb")
16
+ assert_generated_class("test/test_account_receiver", "Test::Unit::TestCase") do
17
+ assert_has_method("setup")
18
+ assert_has_method("teardown")
19
+ assert_has_method("test_truth")
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,33 @@
1
+ require 'test/unit'
2
+
3
+ # Must set before requiring generator libs.
4
+ TMP_ROOT = File.dirname(__FILE__) + "/tmp" unless defined?(TMP_ROOT)
5
+ app_root = File.join(TMP_ROOT, "myproject")
6
+ if defined?(APP_ROOT)
7
+ APP_ROOT.replace(app_root)
8
+ else
9
+ APP_ROOT = app_root
10
+ end
11
+
12
+ require File.dirname(__FILE__) + '/../lib/rubigen'
13
+ require 'rubigen/helpers/generator_test_helper'
14
+ Test::Unit::TestCase.send(:include, RubiGen::GeneratorTestHelper)
15
+ include RubiGen
16
+
17
+ begin
18
+ gem 'mocha'
19
+ rescue LoadError
20
+ require 'rubygems'
21
+ begin
22
+ gem 'mocha'
23
+ rescue LoadError
24
+ puts <<-EOS
25
+ #{$!}
26
+
27
+ This RubyGem is required to run the tests.
28
+
29
+ Install: gem install mocha
30
+ EOS
31
+ end
32
+ end
33
+ require 'mocha'
@@ -0,0 +1,103 @@
1
+ require File.dirname(__FILE__) + "/test_helper"
2
+
3
+ class TestLookup < Test::Unit::TestCase
4
+ include RubiGen
5
+
6
+ def test_lookup_component
7
+ assert_nothing_raised(GeneratorError, "Could not find test_unit generator") { Base.lookup('test_unit') }
8
+ end
9
+
10
+ def test_lookup_unknown_component
11
+ assert_raise(GeneratorError, "Should not find generator") { Base.lookup('dummy') }
12
+ end
13
+
14
+ # There are 5 sources of generators
15
+ # * HOME/.rubigen/generators
16
+ # * APP_ROOT/generators
17
+ # * APP_ROOT/vendor/generators
18
+ # * APP_ROOT/vendor/plugins/.../
19
+ # * RubyGems internal /generators folder
20
+ #
21
+ # Note, this differs from Rails generator:
22
+ # * RubyGems whose name is suffixed with _generator are not loaded (e.g. ajax_scaffold_generator)
23
+ def test_sources
24
+ sources = Base.sources
25
+ assert(sources.find do |source|
26
+ source.path =~ /\.rubigen\/generators$/ if source.respond_to? :path
27
+ end, "One source should be HOME/.rubigen/generators")
28
+
29
+ assert(sources.find do |source|
30
+ source.path =~ /#{::APP_ROOT}\/generators$/ if source.respond_to? :path
31
+ end, "One source should be APP_ROOT/generators")
32
+
33
+ assert(sources.find do |source|
34
+ source.path =~ /#{::APP_ROOT}\/vendor\/generators$/ if source.respond_to? :path
35
+ end, "One source should be APP_ROOT/vendor/generators")
36
+
37
+ assert(sources.find do |source|
38
+ source.path =~ /#{::APP_ROOT}\/vendor\/plugins\/.*\/generators$/ if source.respond_to? :path
39
+ end, "One source should be APP_ROOT/vendor/plugins/.../generators")
40
+
41
+ assert(sources.find do |source|
42
+ source.is_a?(GemPathSource)
43
+ end, "One source should be RubyGems containing generators")
44
+
45
+ end
46
+
47
+ def test_unscoped_gem_path
48
+ source = GemPathSource.new
49
+ assert_equal("", source.send(:filter_str))
50
+ end
51
+
52
+ def test_scoped_gem_path
53
+ source = GemPathSource.new("rubygems")
54
+ assert_equal("{rubygems_}", source.send(:filter_str))
55
+ end
56
+
57
+ def test_alternate_scoped_gem_path
58
+ source = GemPathSource.new(:rubygems, :ruby)
59
+ assert_equal("{rubygems_,ruby_}", source.send(:filter_str))
60
+ end
61
+
62
+ def test_scoped_gem_path_using_array
63
+ source = GemPathSource.new([:rubygems, :ruby])
64
+ assert_equal("{rubygems_,ruby_}", source.send(:filter_str))
65
+ end
66
+
67
+ def test_use_component_sources_without_scope
68
+ Base.use_component_sources!
69
+ gem_path_source = Base.sources.find { |source| source.is_a?(GemPathSource) }
70
+ assert_not_nil(gem_path_source, "Where is the GemPathSource?")
71
+ assert_equal("", gem_path_source.send(:filter_str))
72
+ end
73
+
74
+ def test_use_component_sources_with_scope
75
+ Base.use_component_sources! :rubygems, :ruby
76
+ gem_path_source = Base.sources.find { |source| source.is_a?(GemPathSource) }
77
+ assert_not_nil(gem_path_source, "Where is the GemPathSource?")
78
+ assert_equal("{rubygems_,ruby_}", gem_path_source.send(:filter_str))
79
+ user_path_source = Base.sources.find { |source| source.is_a?(PathFilteredSource) }
80
+ assert_not_nil(user_path_source, "Where is the PathFilteredSource?")
81
+ assert_match(/\.rubigen\/\{rubygems_,ruby_\}generators/, user_path_source.path)
82
+ end
83
+
84
+ def test_use_application_sources
85
+ Base.use_application_sources!
86
+ expected_path = File.expand_path(File.join(File.dirname(__FILE__), %w[.. lib rubigen generators applications]))
87
+ builtin_source = Base.sources.find { |s| s.path == expected_path if s.respond_to?(:path) }
88
+ assert_not_nil(builtin_source, "Cannot find builtin generators")
89
+ assert_nothing_raised(GeneratorError) do
90
+ generator = Base.lookup('ruby_app')
91
+ end
92
+ end
93
+
94
+ def test_use_application_sources_with_scope
95
+ Base.use_application_sources! :rubygems, :newgem
96
+ gem_path_source = Base.sources.find { |source| source.is_a?(GemPathSource) }
97
+ assert_not_nil(gem_path_source, "Where is the GemPathSource?")
98
+ assert_equal("{app_,rubygems_,newgem_}", gem_path_source.send(:filter_str))
99
+ user_path_source = Base.sources.find { |source| source.is_a?(PathFilteredSource) }
100
+ assert_not_nil(user_path_source, "Where is the PathFilteredSource?")
101
+ assert_match(/\.rubigen\/\{app_,rubygems_,newgem_\}generators/, user_path_source.path)
102
+ end
103
+ end