railties 3.0.0.beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +2201 -0
- data/README +286 -0
- data/bin/rails +11 -0
- data/builtin/rails_info/rails/info.rb +147 -0
- data/builtin/rails_info/rails/info_controller.rb +15 -0
- data/builtin/rails_info/rails/info_helper.rb +2 -0
- data/builtin/routes.rb +3 -0
- data/guides/files/javascripts/code_highlighter.js +188 -0
- data/guides/files/javascripts/guides.js +7 -0
- data/guides/files/javascripts/highlighters.js +90 -0
- data/guides/files/stylesheets/main.css +441 -0
- data/guides/files/stylesheets/print.css +52 -0
- data/guides/files/stylesheets/reset.css +43 -0
- data/guides/files/stylesheets/style.css +13 -0
- data/guides/files/stylesheets/syntax.css +31 -0
- data/guides/images/belongs_to.png +0 -0
- data/guides/images/book_icon.gif +0 -0
- data/guides/images/bullet.gif +0 -0
- data/guides/images/chapters_icon.gif +0 -0
- data/guides/images/check_bullet.gif +0 -0
- data/guides/images/credits_pic_blank.gif +0 -0
- data/guides/images/csrf.png +0 -0
- data/guides/images/customized_error_messages.png +0 -0
- data/guides/images/error_messages.png +0 -0
- data/guides/images/feature_tile.gif +0 -0
- data/guides/images/footer_tile.gif +0 -0
- data/guides/images/fxn.png +0 -0
- data/guides/images/grey_bullet.gif +0 -0
- data/guides/images/habtm.png +0 -0
- data/guides/images/has_many.png +0 -0
- data/guides/images/has_many_through.png +0 -0
- data/guides/images/has_one.png +0 -0
- data/guides/images/has_one_through.png +0 -0
- data/guides/images/header_backdrop.png +0 -0
- data/guides/images/header_tile.gif +0 -0
- data/guides/images/i18n/demo_localized_pirate.png +0 -0
- data/guides/images/i18n/demo_translated_en.png +0 -0
- data/guides/images/i18n/demo_translated_pirate.png +0 -0
- data/guides/images/i18n/demo_translation_missing.png +0 -0
- data/guides/images/i18n/demo_untranslated.png +0 -0
- data/guides/images/icons/README +5 -0
- data/guides/images/icons/callouts/1.png +0 -0
- data/guides/images/icons/callouts/10.png +0 -0
- data/guides/images/icons/callouts/11.png +0 -0
- data/guides/images/icons/callouts/12.png +0 -0
- data/guides/images/icons/callouts/13.png +0 -0
- data/guides/images/icons/callouts/14.png +0 -0
- data/guides/images/icons/callouts/15.png +0 -0
- data/guides/images/icons/callouts/2.png +0 -0
- data/guides/images/icons/callouts/3.png +0 -0
- data/guides/images/icons/callouts/4.png +0 -0
- data/guides/images/icons/callouts/5.png +0 -0
- data/guides/images/icons/callouts/6.png +0 -0
- data/guides/images/icons/callouts/7.png +0 -0
- data/guides/images/icons/callouts/8.png +0 -0
- data/guides/images/icons/callouts/9.png +0 -0
- data/guides/images/icons/caution.png +0 -0
- data/guides/images/icons/example.png +0 -0
- data/guides/images/icons/home.png +0 -0
- data/guides/images/icons/important.png +0 -0
- data/guides/images/icons/next.png +0 -0
- data/guides/images/icons/note.png +0 -0
- data/guides/images/icons/prev.png +0 -0
- data/guides/images/icons/tip.png +0 -0
- data/guides/images/icons/up.png +0 -0
- data/guides/images/icons/warning.png +0 -0
- data/guides/images/nav_arrow.gif +0 -0
- data/guides/images/polymorphic.png +0 -0
- data/guides/images/posts_index.png +0 -0
- data/guides/images/rails_guides_logo.gif +0 -0
- data/guides/images/rails_logo_remix.gif +0 -0
- data/guides/images/rails_welcome.png +0 -0
- data/guides/images/session_fixation.png +0 -0
- data/guides/images/tab_grey.gif +0 -0
- data/guides/images/tab_info.gif +0 -0
- data/guides/images/tab_note.gif +0 -0
- data/guides/images/tab_red.gif +0 -0
- data/guides/images/tab_yellow.gif +0 -0
- data/guides/images/tab_yellow.png +0 -0
- data/guides/images/validation_error_messages.png +0 -0
- data/guides/rails_guides.rb +44 -0
- data/guides/rails_guides/generator.rb +178 -0
- data/guides/rails_guides/helpers.rb +34 -0
- data/guides/rails_guides/indexer.rb +55 -0
- data/guides/rails_guides/levenshtein.rb +31 -0
- data/guides/rails_guides/textile_extensions.rb +41 -0
- data/guides/source/2_2_release_notes.textile +422 -0
- data/guides/source/2_3_release_notes.textile +610 -0
- data/guides/source/3_0_release_notes.textile +560 -0
- data/guides/source/action_controller_overview.textile +783 -0
- data/guides/source/action_mailer_basics.textile +437 -0
- data/guides/source/action_view_overview.textile +1481 -0
- data/guides/source/active_record_basics.textile +204 -0
- data/guides/source/active_record_querying.textile +961 -0
- data/guides/source/active_support_core_extensions.textile +1835 -0
- data/guides/source/activerecord_validations_callbacks.textile +1127 -0
- data/guides/source/ajax_on_rails.textile +342 -0
- data/guides/source/association_basics.textile +1816 -0
- data/guides/source/caching_with_rails.textile +390 -0
- data/guides/source/command_line.textile +589 -0
- data/guides/source/configuring.textile +290 -0
- data/guides/source/contribute.textile +71 -0
- data/guides/source/contributing_to_rails.textile +272 -0
- data/guides/source/credits.textile.erb +52 -0
- data/guides/source/debugging_rails_applications.textile +709 -0
- data/guides/source/form_helpers.textile +768 -0
- data/guides/source/generators.textile +378 -0
- data/guides/source/getting_started.textile +1310 -0
- data/guides/source/i18n.textile +879 -0
- data/guides/source/index.textile.erb +124 -0
- data/guides/source/layout.html.erb +103 -0
- data/guides/source/layouts_and_rendering.textile +979 -0
- data/guides/source/migrations.textile +591 -0
- data/guides/source/nested_model_forms.textile +222 -0
- data/guides/source/performance_testing.textile +531 -0
- data/guides/source/plugins.textile +1512 -0
- data/guides/source/rails_application_templates.textile +238 -0
- data/guides/source/rails_on_rack.textile +306 -0
- data/guides/source/routing.textile +903 -0
- data/guides/source/security.textile +984 -0
- data/guides/source/testing.textile +946 -0
- data/lib/generators/erb.rb +8 -0
- data/lib/generators/erb/controller/controller_generator.rb +21 -0
- data/lib/generators/erb/controller/templates/view.html.erb +2 -0
- data/lib/generators/erb/mailer/mailer_generator.rb +20 -0
- data/lib/generators/erb/mailer/templates/view.text.erb +3 -0
- data/lib/generators/erb/scaffold/scaffold_generator.rb +53 -0
- data/lib/generators/erb/scaffold/templates/_form.html.erb +13 -0
- data/lib/generators/erb/scaffold/templates/edit.html.erb +6 -0
- data/lib/generators/erb/scaffold/templates/index.html.erb +27 -0
- data/lib/generators/erb/scaffold/templates/layout.html.erb +16 -0
- data/lib/generators/erb/scaffold/templates/new.html.erb +5 -0
- data/lib/generators/erb/scaffold/templates/show.html.erb +10 -0
- data/lib/generators/rails/app/USAGE +9 -0
- data/lib/generators/rails/app/app_generator.rb +262 -0
- data/lib/generators/rails/app/templates/Gemfile +34 -0
- data/lib/generators/rails/app/templates/README +243 -0
- data/lib/generators/rails/app/templates/Rakefile +10 -0
- data/lib/generators/rails/app/templates/app/controllers/application_controller.rb +3 -0
- data/lib/generators/rails/app/templates/app/helpers/application_helper.rb +2 -0
- data/lib/generators/rails/app/templates/app/models/.empty_directory +0 -0
- data/lib/generators/rails/app/templates/app/views/layouts/.empty_directory +0 -0
- data/lib/generators/rails/app/templates/config.ru +4 -0
- data/lib/generators/rails/app/templates/config/application.rb +51 -0
- data/lib/generators/rails/app/templates/config/boot.rb +17 -0
- data/lib/generators/rails/app/templates/config/databases/frontbase.yml +28 -0
- data/lib/generators/rails/app/templates/config/databases/ibm_db.yml +71 -0
- data/lib/generators/rails/app/templates/config/databases/mysql.yml +60 -0
- data/lib/generators/rails/app/templates/config/databases/oracle.yml +39 -0
- data/lib/generators/rails/app/templates/config/databases/postgresql.yml +51 -0
- data/lib/generators/rails/app/templates/config/databases/sqlite3.yml +22 -0
- data/lib/generators/rails/app/templates/config/environment.rb +5 -0
- data/lib/generators/rails/app/templates/config/environments/development.rb.tt +19 -0
- data/lib/generators/rails/app/templates/config/environments/production.rb.tt +33 -0
- data/lib/generators/rails/app/templates/config/environments/test.rb.tt +29 -0
- data/lib/generators/rails/app/templates/config/initializers/backtrace_silencers.rb +7 -0
- data/lib/generators/rails/app/templates/config/initializers/cookie_verification_secret.rb.tt +7 -0
- data/lib/generators/rails/app/templates/config/initializers/inflections.rb +10 -0
- data/lib/generators/rails/app/templates/config/initializers/mime_types.rb +5 -0
- data/lib/generators/rails/app/templates/config/initializers/session_store.rb.tt +15 -0
- data/lib/generators/rails/app/templates/config/locales/en.yml +5 -0
- data/lib/generators/rails/app/templates/config/routes.rb +58 -0
- data/lib/generators/rails/app/templates/db/seeds.rb +7 -0
- data/lib/generators/rails/app/templates/doc/README_FOR_APP +2 -0
- data/lib/generators/rails/app/templates/gitignore +4 -0
- data/lib/generators/rails/app/templates/public/404.html +26 -0
- data/lib/generators/rails/app/templates/public/422.html +26 -0
- data/lib/generators/rails/app/templates/public/500.html +26 -0
- data/lib/generators/rails/app/templates/public/favicon.ico +0 -0
- data/lib/generators/rails/app/templates/public/images/rails.png +0 -0
- data/lib/generators/rails/app/templates/public/index.html +278 -0
- data/lib/generators/rails/app/templates/public/javascripts/application.js +2 -0
- data/lib/generators/rails/app/templates/public/javascripts/controls.js +963 -0
- data/lib/generators/rails/app/templates/public/javascripts/dragdrop.js +973 -0
- data/lib/generators/rails/app/templates/public/javascripts/effects.js +1128 -0
- data/lib/generators/rails/app/templates/public/javascripts/prototype.js +4320 -0
- data/lib/generators/rails/app/templates/public/javascripts/rails.js +110 -0
- data/lib/generators/rails/app/templates/public/robots.txt +5 -0
- data/lib/generators/rails/app/templates/public/stylesheets/.empty_directory +0 -0
- data/lib/generators/rails/app/templates/script/rails +9 -0
- data/lib/generators/rails/app/templates/test/fixtures/.empty_directory +0 -0
- data/lib/generators/rails/app/templates/test/functional/.empty_directory +0 -0
- data/lib/generators/rails/app/templates/test/integration/.empty_directory +0 -0
- data/lib/generators/rails/app/templates/test/performance/browsing_test.rb +9 -0
- data/lib/generators/rails/app/templates/test/test_helper.rb +13 -0
- data/lib/generators/rails/app/templates/test/unit/.empty_directory +0 -0
- data/lib/generators/rails/controller/USAGE +18 -0
- data/lib/generators/rails/controller/controller_generator.rb +14 -0
- data/lib/generators/rails/controller/templates/controller.rb +7 -0
- data/lib/generators/rails/generator/USAGE +11 -0
- data/lib/generators/rails/generator/generator_generator.rb +25 -0
- data/lib/generators/rails/generator/templates/%file_name%_generator.rb.tt +5 -0
- data/lib/generators/rails/generator/templates/USAGE.tt +8 -0
- data/lib/generators/rails/generator/templates/templates/.empty_directory +0 -0
- data/lib/generators/rails/helper/USAGE +17 -0
- data/lib/generators/rails/helper/helper_generator.rb +13 -0
- data/lib/generators/rails/helper/templates/helper.rb +2 -0
- data/lib/generators/rails/integration_test/USAGE +10 -0
- data/lib/generators/rails/integration_test/integration_test_generator.rb +7 -0
- data/lib/generators/rails/mailer/USAGE +15 -0
- data/lib/generators/rails/mailer/mailer_generator.rb +14 -0
- data/lib/generators/rails/mailer/templates/mailer.rb +16 -0
- data/lib/generators/rails/metal/USAGE +8 -0
- data/lib/generators/rails/metal/metal_generator.rb +11 -0
- data/lib/generators/rails/metal/templates/metal.rb +12 -0
- data/lib/generators/rails/migration/USAGE +29 -0
- data/lib/generators/rails/migration/migration_generator.rb +8 -0
- data/lib/generators/rails/model/USAGE +30 -0
- data/lib/generators/rails/model/model_generator.rb +8 -0
- data/lib/generators/rails/model_subclass/model_subclass_generator.rb +12 -0
- data/lib/generators/rails/observer/USAGE +12 -0
- data/lib/generators/rails/observer/observer_generator.rb +7 -0
- data/lib/generators/rails/performance_test/USAGE +10 -0
- data/lib/generators/rails/performance_test/performance_test_generator.rb +7 -0
- data/lib/generators/rails/plugin/USAGE +13 -0
- data/lib/generators/rails/plugin/plugin_generator.rb +47 -0
- data/lib/generators/rails/plugin/templates/MIT-LICENSE.tt +20 -0
- data/lib/generators/rails/plugin/templates/README.tt +13 -0
- data/lib/generators/rails/plugin/templates/Rakefile.tt +10 -0
- data/lib/generators/rails/plugin/templates/init.rb +1 -0
- data/lib/generators/rails/plugin/templates/install.rb +1 -0
- data/lib/generators/rails/plugin/templates/lib/%file_name%.rb.tt +1 -0
- data/lib/generators/rails/plugin/templates/lib/tasks/%file_name%_tasks.rake.tt +4 -0
- data/lib/generators/rails/plugin/templates/uninstall.rb +1 -0
- data/lib/generators/rails/resource/USAGE +23 -0
- data/lib/generators/rails/resource/resource_generator.rb +34 -0
- data/lib/generators/rails/scaffold/USAGE +29 -0
- data/lib/generators/rails/scaffold/scaffold_generator.rb +13 -0
- data/lib/generators/rails/scaffold_controller/USAGE +20 -0
- data/lib/generators/rails/scaffold_controller/scaffold_controller_generator.rb +27 -0
- data/lib/generators/rails/scaffold_controller/templates/controller.rb +85 -0
- data/lib/generators/rails/session_migration/USAGE +8 -0
- data/lib/generators/rails/session_migration/session_migration_generator.rb +8 -0
- data/lib/generators/rails/stylesheets/USAGE +5 -0
- data/lib/generators/rails/stylesheets/stylesheets_generator.rb +9 -0
- data/lib/generators/rails/stylesheets/templates/scaffold.css +61 -0
- data/lib/generators/test_unit.rb +8 -0
- data/lib/generators/test_unit/controller/controller_generator.rb +14 -0
- data/lib/generators/test_unit/controller/templates/functional_test.rb +8 -0
- data/lib/generators/test_unit/helper/helper_generator.rb +13 -0
- data/lib/generators/test_unit/helper/templates/helper_test.rb +4 -0
- data/lib/generators/test_unit/integration/integration_generator.rb +13 -0
- data/lib/generators/test_unit/integration/templates/integration_test.rb +10 -0
- data/lib/generators/test_unit/mailer/mailer_generator.rb +21 -0
- data/lib/generators/test_unit/mailer/templates/fixture +3 -0
- data/lib/generators/test_unit/mailer/templates/functional_test.rb +22 -0
- data/lib/generators/test_unit/model/model_generator.rb +24 -0
- data/lib/generators/test_unit/model/templates/fixtures.yml +23 -0
- data/lib/generators/test_unit/model/templates/unit_test.rb +8 -0
- data/lib/generators/test_unit/observer/observer_generator.rb +13 -0
- data/lib/generators/test_unit/observer/templates/unit_test.rb +8 -0
- data/lib/generators/test_unit/performance/performance_generator.rb +13 -0
- data/lib/generators/test_unit/performance/templates/performance_test.rb +9 -0
- data/lib/generators/test_unit/plugin/plugin_generator.rb +13 -0
- data/lib/generators/test_unit/plugin/templates/%file_name%_test.rb.tt +8 -0
- data/lib/generators/test_unit/plugin/templates/test_helper.rb +3 -0
- data/lib/generators/test_unit/scaffold/scaffold_generator.rb +18 -0
- data/lib/generators/test_unit/scaffold/templates/functional_test.rb +47 -0
- data/lib/rails.rb +95 -0
- data/lib/rails/all.rb +14 -0
- data/lib/rails/application.rb +125 -0
- data/lib/rails/application/bootstrap.rb +85 -0
- data/lib/rails/application/configurable.rb +19 -0
- data/lib/rails/application/configuration.rb +86 -0
- data/lib/rails/application/finisher.rb +49 -0
- data/lib/rails/application/metal_loader.rb +50 -0
- data/lib/rails/application/railties.rb +31 -0
- data/lib/rails/application/routes_reloader.rb +46 -0
- data/lib/rails/backtrace_cleaner.rb +54 -0
- data/lib/rails/code_statistics.rb +107 -0
- data/lib/rails/commands.rb +72 -0
- data/lib/rails/commands/application.rb +13 -0
- data/lib/rails/commands/console.rb +55 -0
- data/lib/rails/commands/dbconsole.rb +104 -0
- data/lib/rails/commands/destroy.rb +9 -0
- data/lib/rails/commands/generate.rb +9 -0
- data/lib/rails/commands/performance/benchmarker.rb +23 -0
- data/lib/rails/commands/performance/profiler.rb +46 -0
- data/lib/rails/commands/plugin.rb +542 -0
- data/lib/rails/commands/runner.rb +51 -0
- data/lib/rails/commands/server.rb +75 -0
- data/lib/rails/commands/update.rb +9 -0
- data/lib/rails/configuration.rb +191 -0
- data/lib/rails/console/app.rb +33 -0
- data/lib/rails/console/helpers.rb +5 -0
- data/lib/rails/console/sandbox.rb +6 -0
- data/lib/rails/deprecation.rb +62 -0
- data/lib/rails/dispatcher.rb +24 -0
- data/lib/rails/engine.rb +130 -0
- data/lib/rails/engine/configurable.rb +25 -0
- data/lib/rails/engine/configuration.rb +49 -0
- data/lib/rails/generators.rb +289 -0
- data/lib/rails/generators/actions.rb +309 -0
- data/lib/rails/generators/active_model.rb +78 -0
- data/lib/rails/generators/base.rb +362 -0
- data/lib/rails/generators/generated_attribute.rb +48 -0
- data/lib/rails/generators/migration.rb +64 -0
- data/lib/rails/generators/named_base.rb +95 -0
- data/lib/rails/generators/resource_helpers.rb +80 -0
- data/lib/rails/generators/test_case.rb +239 -0
- data/lib/rails/initializable.rb +97 -0
- data/lib/rails/paths.rb +144 -0
- data/lib/rails/performance_test_help.rb +3 -0
- data/lib/rails/plugin.rb +64 -0
- data/lib/rails/rack.rb +8 -0
- data/lib/rails/rack/debugger.rb +23 -0
- data/lib/rails/rack/log_tailer.rb +33 -0
- data/lib/rails/rack/logger.rb +34 -0
- data/lib/rails/rack/static.rb +5 -0
- data/lib/rails/railtie.rb +74 -0
- data/lib/rails/railtie/configurable.rb +23 -0
- data/lib/rails/railtie/configuration.rb +9 -0
- data/lib/rails/railties_path.rb +1 -0
- data/lib/rails/ruby_version_check.rb +10 -0
- data/lib/rails/rubyprof_ext.rb +35 -0
- data/lib/rails/source_annotation_extractor.rb +102 -0
- data/lib/rails/subscriber.rb +108 -0
- data/lib/rails/subscriber/test_helper.rb +98 -0
- data/lib/rails/tasks.rb +16 -0
- data/lib/rails/tasks/annotations.rake +20 -0
- data/lib/rails/tasks/documentation.rake +96 -0
- data/lib/rails/tasks/framework.rake +69 -0
- data/lib/rails/tasks/log.rake +9 -0
- data/lib/rails/tasks/middleware.rake +7 -0
- data/lib/rails/tasks/misc.rake +71 -0
- data/lib/rails/tasks/routes.rake +17 -0
- data/lib/rails/tasks/statistics.rake +16 -0
- data/lib/rails/tasks/tmp.rake +37 -0
- data/lib/rails/test_help.rb +30 -0
- data/lib/rails/test_unit/railtie.rb +17 -0
- data/lib/rails/test_unit/testing.rake +130 -0
- data/lib/rails/version.rb +9 -0
- data/lib/rails/webrick_server.rb +156 -0
- metadata +427 -0
data/lib/rails/engine.rb
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
require 'active_support/core_ext/module/delegation'
|
|
2
|
+
require 'rails/railtie'
|
|
3
|
+
|
|
4
|
+
module Rails
|
|
5
|
+
class Engine < Railtie
|
|
6
|
+
autoload :Configurable, "rails/engine/configurable"
|
|
7
|
+
autoload :Configuration, "rails/engine/configuration"
|
|
8
|
+
|
|
9
|
+
class << self
|
|
10
|
+
attr_accessor :called_from
|
|
11
|
+
|
|
12
|
+
alias :engine_name :railtie_name
|
|
13
|
+
alias :engine_names :railtie_names
|
|
14
|
+
|
|
15
|
+
def inherited(base)
|
|
16
|
+
unless abstract_railtie?(base)
|
|
17
|
+
base.called_from = begin
|
|
18
|
+
call_stack = caller.map { |p| p.split(':').first }
|
|
19
|
+
File.dirname(call_stack.detect { |p| p !~ %r[railties/lib/rails|rack/lib/rack] })
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
super
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def find_root_with_flag(flag, default=nil)
|
|
27
|
+
root_path = self.called_from
|
|
28
|
+
|
|
29
|
+
while root_path && File.directory?(root_path) && !File.exist?("#{root_path}/#{flag}")
|
|
30
|
+
parent = File.dirname(root_path)
|
|
31
|
+
root_path = parent != root_path && parent
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
root = File.exist?("#{root_path}/#{flag}") ? root_path : default
|
|
35
|
+
raise "Could not find root path for #{self}" unless root
|
|
36
|
+
|
|
37
|
+
RUBY_PLATFORM =~ /(:?mswin|mingw)/ ?
|
|
38
|
+
Pathname.new(root).expand_path : Pathname.new(root).realpath
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
delegate :middleware, :paths, :root, :to => :config
|
|
43
|
+
|
|
44
|
+
def load_tasks
|
|
45
|
+
super
|
|
46
|
+
config.paths.lib.tasks.to_a.sort.each { |ext| load(ext) }
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Add configured load paths to ruby load paths and remove duplicates.
|
|
50
|
+
initializer :set_load_path, :before => :bootstrap_load_path do
|
|
51
|
+
config.load_paths.reverse_each do |path|
|
|
52
|
+
$LOAD_PATH.unshift(path) if File.directory?(path)
|
|
53
|
+
end
|
|
54
|
+
$LOAD_PATH.uniq!
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Set the paths from which Rails will automatically load source files,
|
|
58
|
+
# and the load_once paths.
|
|
59
|
+
initializer :set_autoload_paths, :before => :bootstrap_load_path do |app|
|
|
60
|
+
ActiveSupport::Dependencies.load_paths.unshift(*config.load_paths)
|
|
61
|
+
|
|
62
|
+
if reloadable?(app)
|
|
63
|
+
ActiveSupport::Dependencies.load_once_paths.unshift(*config.load_once_paths)
|
|
64
|
+
else
|
|
65
|
+
ActiveSupport::Dependencies.load_once_paths.unshift(*config.load_paths)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Freeze so future modifications will fail rather than do nothing mysteriously
|
|
69
|
+
config.load_paths.freeze
|
|
70
|
+
config.load_once_paths.freeze
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
initializer :add_routing_paths do |app|
|
|
74
|
+
paths.config.routes.to_a.each do |route|
|
|
75
|
+
app.routes_reloader.paths.unshift(route) if File.exists?(route)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
initializer :add_routing_namespaces do |app|
|
|
80
|
+
paths.app.controllers.to_a.each do |load_path|
|
|
81
|
+
load_path = File.expand_path(load_path)
|
|
82
|
+
Dir["#{load_path}/*/*_controller.rb"].collect do |path|
|
|
83
|
+
namespace = File.dirname(path).sub(/#{load_path}\/?/, '')
|
|
84
|
+
app.routes.controller_namespaces << namespace unless namespace.empty?
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# I18n load paths are a special case since the ones added
|
|
90
|
+
# later have higher priority.
|
|
91
|
+
initializer :add_locales do
|
|
92
|
+
config.i18n.engines_load_path.concat(paths.config.locales.to_a)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
initializer :add_view_paths do
|
|
96
|
+
views = paths.app.views.to_a
|
|
97
|
+
ActionController::Base.view_paths.unshift(*views) if defined?(ActionController)
|
|
98
|
+
ActionMailer::Base.view_paths.unshift(*views) if defined?(ActionMailer)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
initializer :add_metals do |app|
|
|
102
|
+
app.metal_loader.paths.unshift(*paths.app.metals.to_a)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
initializer :load_application_initializers do
|
|
106
|
+
paths.config.initializers.to_a.sort.each do |initializer|
|
|
107
|
+
load(initializer)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
initializer :load_application_classes do |app|
|
|
112
|
+
next if $rails_rake_task
|
|
113
|
+
|
|
114
|
+
if app.config.cache_classes
|
|
115
|
+
config.eager_load_paths.each do |load_path|
|
|
116
|
+
matcher = /\A#{Regexp.escape(load_path)}\/(.*)\.rb\Z/
|
|
117
|
+
Dir.glob("#{load_path}/**/*.rb").sort.each do |file|
|
|
118
|
+
require_dependency file.sub(matcher, '\1')
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
protected
|
|
125
|
+
|
|
126
|
+
def reloadable?(app)
|
|
127
|
+
app.config.reload_engines
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Rails
|
|
2
|
+
class Engine
|
|
3
|
+
module Configurable
|
|
4
|
+
def self.included(base)
|
|
5
|
+
base.extend ClassMethods
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
module ClassMethods
|
|
9
|
+
delegate :middleware, :root, :paths, :to => :config
|
|
10
|
+
|
|
11
|
+
def config
|
|
12
|
+
@config ||= Engine::Configuration.new(find_root_with_flag("lib"))
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def inherited(base)
|
|
16
|
+
raise "You cannot inherit from a Rails::Engine child"
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def config
|
|
21
|
+
self.class.config
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require 'rails/railtie/configuration'
|
|
2
|
+
|
|
3
|
+
module Rails
|
|
4
|
+
class Engine
|
|
5
|
+
class Configuration < ::Rails::Railtie::Configuration
|
|
6
|
+
attr_reader :root
|
|
7
|
+
attr_writer :eager_load_paths, :load_once_paths, :load_paths
|
|
8
|
+
|
|
9
|
+
def initialize(root=nil)
|
|
10
|
+
@root = root
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def paths
|
|
14
|
+
@paths ||= begin
|
|
15
|
+
paths = Rails::Paths::Root.new(@root)
|
|
16
|
+
paths.app "app", :eager_load => true, :glob => "*"
|
|
17
|
+
paths.app.controllers "app/controllers", :eager_load => true
|
|
18
|
+
paths.app.helpers "app/helpers", :eager_load => true
|
|
19
|
+
paths.app.models "app/models", :eager_load => true
|
|
20
|
+
paths.app.metals "app/metal"
|
|
21
|
+
paths.app.views "app/views"
|
|
22
|
+
paths.lib "lib", :load_path => true
|
|
23
|
+
paths.lib.tasks "lib/tasks", :glob => "**/*.rake"
|
|
24
|
+
paths.config "config"
|
|
25
|
+
paths.config.initializers "config/initializers", :glob => "**/*.rb"
|
|
26
|
+
paths.config.locales "config/locales", :glob => "*.{rb,yml}"
|
|
27
|
+
paths.config.routes "config/routes.rb"
|
|
28
|
+
paths
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def root=(value)
|
|
33
|
+
@root = paths.path = Pathname.new(value).expand_path
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def eager_load_paths
|
|
37
|
+
@eager_load_paths ||= paths.eager_load
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def load_once_paths
|
|
41
|
+
@eager_load_paths ||= paths.load_once
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def load_paths
|
|
45
|
+
@load_paths ||= paths.load_paths
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
activesupport_path = File.expand_path('../../../../activesupport/lib', __FILE__)
|
|
2
|
+
$:.unshift(activesupport_path) if File.directory?(activesupport_path) && !$:.include?(activesupport_path)
|
|
3
|
+
|
|
4
|
+
require 'active_support'
|
|
5
|
+
require 'active_support/core_ext/object/blank'
|
|
6
|
+
require 'active_support/core_ext/object/metaclass'
|
|
7
|
+
require 'active_support/core_ext/array/extract_options'
|
|
8
|
+
require 'active_support/core_ext/hash/deep_merge'
|
|
9
|
+
require 'active_support/core_ext/module/attribute_accessors'
|
|
10
|
+
require 'active_support/core_ext/string/inflections'
|
|
11
|
+
|
|
12
|
+
require 'rails/generators/base'
|
|
13
|
+
require 'rails/generators/named_base'
|
|
14
|
+
|
|
15
|
+
module Rails
|
|
16
|
+
module Generators
|
|
17
|
+
DEFAULT_ALIASES = {
|
|
18
|
+
:rails => {
|
|
19
|
+
:actions => '-a',
|
|
20
|
+
:orm => '-o',
|
|
21
|
+
:resource_controller => '-c',
|
|
22
|
+
:scaffold_controller => '-c',
|
|
23
|
+
:stylesheets => '-y',
|
|
24
|
+
:template_engine => '-e',
|
|
25
|
+
:test_framework => '-t'
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
:test_unit => {
|
|
29
|
+
:fixture_replacement => '-r',
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
:plugin => {
|
|
33
|
+
:generator => '-g',
|
|
34
|
+
:tasks => '-r'
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
DEFAULT_OPTIONS = {
|
|
39
|
+
:erb => {
|
|
40
|
+
:layout => true
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
:rails => {
|
|
44
|
+
:force_plural => false,
|
|
45
|
+
:helper => true,
|
|
46
|
+
:layout => true,
|
|
47
|
+
:orm => nil,
|
|
48
|
+
:integration_tool => nil,
|
|
49
|
+
:performance_tool => nil,
|
|
50
|
+
:resource_controller => :controller,
|
|
51
|
+
:scaffold_controller => :scaffold_controller,
|
|
52
|
+
:singleton => false,
|
|
53
|
+
:stylesheets => true,
|
|
54
|
+
:test_framework => nil,
|
|
55
|
+
:template_engine => :erb
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
:plugin => {
|
|
59
|
+
:generator => false,
|
|
60
|
+
:tasks => false
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
def self.configure!(config = Rails.application.config.generators) #:nodoc:
|
|
65
|
+
no_color! unless config.colorize_logging
|
|
66
|
+
aliases.deep_merge! config.aliases
|
|
67
|
+
options.deep_merge! config.options
|
|
68
|
+
fallbacks.merge! config.fallbacks
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def self.aliases #:nodoc:
|
|
72
|
+
@aliases ||= DEFAULT_ALIASES.dup
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def self.options #:nodoc:
|
|
76
|
+
@options ||= DEFAULT_OPTIONS.dup
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Hold configured generators fallbacks. If a plugin developer wants a
|
|
80
|
+
# generator group to fallback to another group in case of missing generators,
|
|
81
|
+
# they can add a fallback.
|
|
82
|
+
#
|
|
83
|
+
# For example, shoulda is considered a test_framework and is an extension
|
|
84
|
+
# of test_unit. However, most part of shoulda generators are similar to
|
|
85
|
+
# test_unit ones.
|
|
86
|
+
#
|
|
87
|
+
# Shoulda then can tell generators to search for test_unit generators when
|
|
88
|
+
# some of them are not available by adding a fallback:
|
|
89
|
+
#
|
|
90
|
+
# Rails::Generators.fallbacks[:shoulda] = :test_unit
|
|
91
|
+
#
|
|
92
|
+
def self.fallbacks
|
|
93
|
+
@fallbacks ||= {}
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Remove the color from output.
|
|
97
|
+
def self.no_color!
|
|
98
|
+
Thor::Base.shell = Thor::Shell::Basic
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Track all generators subclasses.
|
|
102
|
+
def self.subclasses
|
|
103
|
+
@subclasses ||= []
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Rails finds namespaces similar to thor, it only adds one rule:
|
|
107
|
+
#
|
|
108
|
+
# Generators names must end with "_generator.rb". This is required because Rails
|
|
109
|
+
# looks in load paths and loads the generator just before it's going to be used.
|
|
110
|
+
#
|
|
111
|
+
# ==== Examples
|
|
112
|
+
#
|
|
113
|
+
# find_by_namespace :webrat, :rails, :integration
|
|
114
|
+
#
|
|
115
|
+
# Will search for the following generators:
|
|
116
|
+
#
|
|
117
|
+
# "rails:webrat", "webrat:integration", "webrat"
|
|
118
|
+
#
|
|
119
|
+
# Notice that "rails:generators:webrat" could be loaded as well, what
|
|
120
|
+
# Rails looks for is the first and last parts of the namespace.
|
|
121
|
+
#
|
|
122
|
+
def self.find_by_namespace(name, base=nil, context=nil) #:nodoc:
|
|
123
|
+
lookups = []
|
|
124
|
+
lookups << "#{base}:#{name}" if base
|
|
125
|
+
lookups << "#{name}:#{context}" if context
|
|
126
|
+
|
|
127
|
+
unless base || context
|
|
128
|
+
unless name.to_s.include?(?:)
|
|
129
|
+
lookups << "#{name}:#{name}"
|
|
130
|
+
lookups << "rails:#{name}"
|
|
131
|
+
end
|
|
132
|
+
lookups << "#{name}"
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
lookup(lookups)
|
|
136
|
+
|
|
137
|
+
namespaces = subclasses.inject({}) do |hash, klass|
|
|
138
|
+
hash[klass.namespace] = klass
|
|
139
|
+
hash
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
lookups.each do |namespace|
|
|
143
|
+
klass = namespaces[namespace]
|
|
144
|
+
return klass if klass
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
invoke_fallbacks_for(name, base) || invoke_fallbacks_for(context, name)
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
# Receives a namespace, arguments and the behavior to invoke the generator.
|
|
151
|
+
# It's used as the default entry point for generate, destroy and update
|
|
152
|
+
# commands.
|
|
153
|
+
def self.invoke(namespace, args=ARGV, config={})
|
|
154
|
+
names = namespace.to_s.split(':')
|
|
155
|
+
if klass = find_by_namespace(names.pop, names.shift)
|
|
156
|
+
args << "--help" if args.empty? && klass.arguments.any? { |a| a.required? }
|
|
157
|
+
klass.start(args, config)
|
|
158
|
+
else
|
|
159
|
+
puts "Could not find generator #{namespace}."
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
# Show help message with available generators.
|
|
164
|
+
def self.help
|
|
165
|
+
lookup!
|
|
166
|
+
|
|
167
|
+
namespaces = subclasses.map{ |k| k.namespace }
|
|
168
|
+
namespaces.sort!
|
|
169
|
+
|
|
170
|
+
groups = Hash.new { |h,k| h[k] = [] }
|
|
171
|
+
namespaces.each do |namespace|
|
|
172
|
+
base = namespace.split(':').first
|
|
173
|
+
groups[base] << namespace
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
puts "Usage: rails generate GENERATOR [args] [options]"
|
|
177
|
+
puts
|
|
178
|
+
puts "General options:"
|
|
179
|
+
puts " -h, [--help] # Print generators options and usage"
|
|
180
|
+
puts " -p, [--pretend] # Run but do not make any changes"
|
|
181
|
+
puts " -f, [--force] # Overwrite files that already exist"
|
|
182
|
+
puts " -s, [--skip] # Skip files that already exist"
|
|
183
|
+
puts " -q, [--quiet] # Supress status output"
|
|
184
|
+
puts
|
|
185
|
+
puts "Please choose a generator below."
|
|
186
|
+
puts
|
|
187
|
+
|
|
188
|
+
# Print Rails defaults first.
|
|
189
|
+
rails = groups.delete("rails")
|
|
190
|
+
rails.map! { |n| n.sub(/^rails:/, '') }
|
|
191
|
+
rails.delete("app")
|
|
192
|
+
print_list("rails", rails)
|
|
193
|
+
|
|
194
|
+
groups.sort.each { |b, n| print_list(b, n) }
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
protected
|
|
198
|
+
|
|
199
|
+
# Prints a list of generators.
|
|
200
|
+
def self.print_list(base, namespaces) #:nodoc:
|
|
201
|
+
return if namespaces.empty?
|
|
202
|
+
puts "#{base.camelize}:"
|
|
203
|
+
namespaces.each { |namespace| puts(" #{namespace}") }
|
|
204
|
+
puts
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
# Try fallbacks for the given base.
|
|
208
|
+
def self.invoke_fallbacks_for(name, base) #:nodoc:
|
|
209
|
+
return nil unless base && fallbacks[base.to_sym]
|
|
210
|
+
invoked_fallbacks = []
|
|
211
|
+
|
|
212
|
+
Array(fallbacks[base.to_sym]).each do |fallback|
|
|
213
|
+
next if invoked_fallbacks.include?(fallback)
|
|
214
|
+
invoked_fallbacks << fallback
|
|
215
|
+
|
|
216
|
+
klass = find_by_namespace(name, fallback)
|
|
217
|
+
return klass if klass
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
nil
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
# Receives namespaces in an array and tries to find matching generators
|
|
224
|
+
# in the load path.
|
|
225
|
+
def self.lookup(namespaces) #:nodoc:
|
|
226
|
+
load_generators_from_railties!
|
|
227
|
+
paths = namespaces_to_paths(namespaces)
|
|
228
|
+
|
|
229
|
+
paths.each do |raw_path|
|
|
230
|
+
["rails_generators", "generators"].each do |base|
|
|
231
|
+
path = "#{base}/#{raw_path}_generator"
|
|
232
|
+
|
|
233
|
+
begin
|
|
234
|
+
require path
|
|
235
|
+
return
|
|
236
|
+
rescue LoadError => e
|
|
237
|
+
raise unless e.message =~ /#{Regexp.escape(path)}$/
|
|
238
|
+
rescue NameError => e
|
|
239
|
+
raise unless e.message =~ /Rails::Generator([\s(::)]|$)/
|
|
240
|
+
warn "[WARNING] Could not load generator #{path.inspect} because it's a Rails 2.x generator, which is not supported anymore. Error: #{e.message}.\n#{e.backtrace.join("\n")}"
|
|
241
|
+
rescue Exception => e
|
|
242
|
+
warn "[WARNING] Could not load generator #{path.inspect}. Error: #{e.message}.\n#{e.backtrace.join("\n")}"
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
# This will try to load any generator in the load path to show in help.
|
|
249
|
+
def self.lookup! #:nodoc:
|
|
250
|
+
load_generators_from_railties!
|
|
251
|
+
|
|
252
|
+
$LOAD_PATH.each do |base|
|
|
253
|
+
Dir[File.join(base, "{generators,rails_generators}", "**", "*_generator.rb")].each do |path|
|
|
254
|
+
begin
|
|
255
|
+
require path
|
|
256
|
+
rescue Exception => e
|
|
257
|
+
# No problem
|
|
258
|
+
end
|
|
259
|
+
end
|
|
260
|
+
end
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
# Allow generators to be loaded from custom paths.
|
|
264
|
+
def self.load_generators_from_railties! #:nodoc:
|
|
265
|
+
return if defined?(@generators_from_railties) || Rails.application.nil?
|
|
266
|
+
@generators_from_railties = true
|
|
267
|
+
Rails.application.load_generators
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
# Convert namespaces to paths by replacing ":" for "/" and adding
|
|
271
|
+
# an extra lookup. For example, "rails:model" should be searched
|
|
272
|
+
# in both: "rails/model/model_generator" and "rails/model_generator".
|
|
273
|
+
def self.namespaces_to_paths(namespaces) #:nodoc:
|
|
274
|
+
paths = []
|
|
275
|
+
namespaces.each do |namespace|
|
|
276
|
+
pieces = namespace.split(":")
|
|
277
|
+
paths << pieces.dup.push(pieces.last).join("/") unless pieces.uniq.size == 1
|
|
278
|
+
paths << pieces.join("/")
|
|
279
|
+
end
|
|
280
|
+
paths.uniq!
|
|
281
|
+
paths
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
end
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
# If the application was already defined, configure generators,
|
|
288
|
+
# otherwise you have to configure it by hand.
|
|
289
|
+
Rails::Generators.configure! if Rails.respond_to?(:application) && Rails.application
|