rails_csi 2.3.5.p6
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +2172 -0
- data/MIT-LICENSE +20 -0
- data/README +243 -0
- data/Rakefile +368 -0
- data/bin/about +4 -0
- data/bin/console +3 -0
- data/bin/dbconsole +3 -0
- data/bin/destroy +3 -0
- data/bin/generate +3 -0
- data/bin/performance/benchmarker +3 -0
- data/bin/performance/profiler +3 -0
- data/bin/plugin +3 -0
- data/bin/rails +20 -0
- data/bin/runner +3 -0
- data/bin/server +3 -0
- data/builtin/rails_info/rails/info.rb +131 -0
- data/builtin/rails_info/rails/info_controller.rb +9 -0
- data/builtin/rails_info/rails/info_helper.rb +2 -0
- data/builtin/rails_info/rails_info_controller.rb +2 -0
- data/configs/databases/frontbase.yml +28 -0
- data/configs/databases/ibm_db.yml +62 -0
- data/configs/databases/mysql.yml +60 -0
- data/configs/databases/oracle.yml +39 -0
- data/configs/databases/postgresql.yml +51 -0
- data/configs/databases/sqlite2.yml +19 -0
- data/configs/databases/sqlite3.yml +22 -0
- data/configs/empty.log +0 -0
- data/configs/initializers/backtrace_silencers.rb +7 -0
- data/configs/initializers/inflections.rb +10 -0
- data/configs/initializers/mime_types.rb +5 -0
- data/configs/initializers/new_rails_defaults.rb +21 -0
- data/configs/initializers/session_store.rb +15 -0
- data/configs/locales/en.yml +5 -0
- data/configs/routes.rb +43 -0
- data/configs/seeds.rb +7 -0
- data/dispatches/config.ru +7 -0
- data/dispatches/dispatch.fcgi +24 -0
- data/dispatches/dispatch.rb +10 -0
- data/dispatches/gateway.cgi +97 -0
- data/doc/README_FOR_APP +2 -0
- data/environments/boot.rb +110 -0
- data/environments/development.rb +17 -0
- data/environments/environment.rb +41 -0
- data/environments/production.rb +28 -0
- data/environments/test.rb +28 -0
- data/fresh_rakefile +10 -0
- data/guides/files/javascripts/code_highlighter.js +188 -0
- data/guides/files/javascripts/guides.js +8 -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.jpg +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 +42 -0
- data/guides/rails_guides/generator.rb +138 -0
- data/guides/rails_guides/helpers.rb +34 -0
- data/guides/rails_guides/indexer.rb +55 -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/action_controller_overview.textile +776 -0
- data/guides/source/action_mailer_basics.textile +424 -0
- data/guides/source/active_record_basics.textile +135 -0
- data/guides/source/active_record_querying.textile +969 -0
- data/guides/source/activerecord_validations_callbacks.textile +1086 -0
- data/guides/source/association_basics.textile +1781 -0
- data/guides/source/caching_with_rails.textile +524 -0
- data/guides/source/command_line.textile +589 -0
- data/guides/source/configuring.textile +234 -0
- data/guides/source/contribute.textile +71 -0
- data/guides/source/contributing_to_rails.textile +239 -0
- data/guides/source/credits.erb.textile +52 -0
- data/guides/source/debugging_rails_applications.textile +709 -0
- data/guides/source/form_helpers.textile +766 -0
- data/guides/source/getting_started.textile +1297 -0
- data/guides/source/i18n.textile +912 -0
- data/guides/source/index.erb.textile +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_on_rack.textile +309 -0
- data/guides/source/routing.textile +903 -0
- data/guides/source/security.textile +986 -0
- data/guides/source/testing.textile +951 -0
- data/helpers/application_controller.rb +10 -0
- data/helpers/application_helper.rb +3 -0
- data/helpers/performance_test.rb +9 -0
- data/helpers/test_helper.rb +38 -0
- data/html/404.html +30 -0
- data/html/422.html +30 -0
- data/html/500.html +30 -0
- data/html/favicon.ico +0 -0
- data/html/images/rails.png +0 -0
- data/html/index.html +275 -0
- data/html/javascripts/application.js +2 -0
- data/html/javascripts/controls.js +963 -0
- data/html/javascripts/dragdrop.js +973 -0
- data/html/javascripts/effects.js +1128 -0
- data/html/javascripts/prototype.js +4320 -0
- data/html/robots.txt +5 -0
- data/lib/code_statistics.rb +107 -0
- data/lib/commands.rb +17 -0
- data/lib/commands/about.rb +3 -0
- data/lib/commands/console.rb +45 -0
- data/lib/commands/dbconsole.rb +87 -0
- data/lib/commands/destroy.rb +6 -0
- data/lib/commands/generate.rb +6 -0
- data/lib/commands/ncgi/listener +86 -0
- data/lib/commands/ncgi/tracker +69 -0
- data/lib/commands/performance/benchmarker.rb +24 -0
- data/lib/commands/performance/profiler.rb +50 -0
- data/lib/commands/plugin.rb +968 -0
- data/lib/commands/runner.rb +54 -0
- data/lib/commands/server.rb +114 -0
- data/lib/commands/update.rb +4 -0
- data/lib/console_app.rb +30 -0
- data/lib/console_sandbox.rb +6 -0
- data/lib/console_with_helpers.rb +5 -0
- data/lib/dispatcher.rb +24 -0
- data/lib/fcgi_handler.rb +239 -0
- data/lib/initializer.rb +1128 -0
- data/lib/performance_test_help.rb +5 -0
- data/lib/rails/backtrace_cleaner.rb +54 -0
- data/lib/rails/gem_builder.rb +21 -0
- data/lib/rails/gem_dependency.rb +311 -0
- data/lib/rails/plugin.rb +179 -0
- data/lib/rails/plugin/loader.rb +198 -0
- data/lib/rails/plugin/locator.rb +100 -0
- data/lib/rails/rack.rb +8 -0
- data/lib/rails/rack/debugger.rb +23 -0
- data/lib/rails/rack/log_tailer.rb +35 -0
- data/lib/rails/rack/metal.rb +51 -0
- data/lib/rails/rack/static.rb +46 -0
- data/lib/rails/vendor_gem_source_index.rb +140 -0
- data/lib/rails/version.rb +9 -0
- data/lib/rails_generator.rb +43 -0
- data/lib/rails_generator/base.rb +266 -0
- data/lib/rails_generator/commands.rb +621 -0
- data/lib/rails_generator/generated_attribute.rb +46 -0
- data/lib/rails_generator/generators/applications/app/USAGE +9 -0
- data/lib/rails_generator/generators/applications/app/app_generator.rb +263 -0
- data/lib/rails_generator/generators/applications/app/scm/git.rb +18 -0
- data/lib/rails_generator/generators/applications/app/scm/scm.rb +8 -0
- data/lib/rails_generator/generators/applications/app/scm/svn.rb +7 -0
- data/lib/rails_generator/generators/applications/app/template_runner.rb +401 -0
- data/lib/rails_generator/generators/components/controller/USAGE +30 -0
- data/lib/rails_generator/generators/components/controller/controller_generator.rb +43 -0
- data/lib/rails_generator/generators/components/controller/templates/controller.rb +7 -0
- data/lib/rails_generator/generators/components/controller/templates/functional_test.rb +8 -0
- data/lib/rails_generator/generators/components/controller/templates/helper.rb +2 -0
- data/lib/rails_generator/generators/components/controller/templates/helper_test.rb +4 -0
- data/lib/rails_generator/generators/components/controller/templates/view.html.erb +2 -0
- data/lib/rails_generator/generators/components/helper/USAGE +24 -0
- data/lib/rails_generator/generators/components/helper/helper_generator.rb +25 -0
- data/lib/rails_generator/generators/components/helper/templates/helper.rb +2 -0
- data/lib/rails_generator/generators/components/helper/templates/helper_test.rb +4 -0
- data/lib/rails_generator/generators/components/integration_test/USAGE +8 -0
- data/lib/rails_generator/generators/components/integration_test/integration_test_generator.rb +16 -0
- data/lib/rails_generator/generators/components/integration_test/templates/integration_test.rb +10 -0
- data/lib/rails_generator/generators/components/mailer/USAGE +16 -0
- data/lib/rails_generator/generators/components/mailer/mailer_generator.rb +30 -0
- data/lib/rails_generator/generators/components/mailer/templates/fixture.erb +3 -0
- data/lib/rails_generator/generators/components/mailer/templates/fixture.rhtml +0 -0
- data/lib/rails_generator/generators/components/mailer/templates/mailer.rb +15 -0
- data/lib/rails_generator/generators/components/mailer/templates/unit_test.rb +20 -0
- data/lib/rails_generator/generators/components/mailer/templates/view.erb +3 -0
- data/lib/rails_generator/generators/components/mailer/templates/view.rhtml +0 -0
- data/lib/rails_generator/generators/components/metal/USAGE +8 -0
- data/lib/rails_generator/generators/components/metal/metal_generator.rb +8 -0
- data/lib/rails_generator/generators/components/metal/templates/metal.rb +12 -0
- data/lib/rails_generator/generators/components/migration/USAGE +29 -0
- data/lib/rails_generator/generators/components/migration/migration_generator.rb +20 -0
- data/lib/rails_generator/generators/components/migration/templates/migration.rb +11 -0
- data/lib/rails_generator/generators/components/model/USAGE +27 -0
- data/lib/rails_generator/generators/components/model/model_generator.rb +52 -0
- data/lib/rails_generator/generators/components/model/templates/fixtures.yml +19 -0
- data/lib/rails_generator/generators/components/model/templates/migration.rb +16 -0
- data/lib/rails_generator/generators/components/model/templates/model.rb +5 -0
- data/lib/rails_generator/generators/components/model/templates/unit_test.rb +8 -0
- data/lib/rails_generator/generators/components/observer/USAGE +13 -0
- data/lib/rails_generator/generators/components/observer/observer_generator.rb +16 -0
- data/lib/rails_generator/generators/components/observer/templates/observer.rb +2 -0
- data/lib/rails_generator/generators/components/observer/templates/unit_test.rb +8 -0
- data/lib/rails_generator/generators/components/performance_test/USAGE +8 -0
- data/lib/rails_generator/generators/components/performance_test/performance_test_generator.rb +16 -0
- data/lib/rails_generator/generators/components/performance_test/templates/performance_test.rb +9 -0
- data/lib/rails_generator/generators/components/plugin/USAGE +25 -0
- data/lib/rails_generator/generators/components/plugin/plugin_generator.rb +39 -0
- data/lib/rails_generator/generators/components/plugin/templates/MIT-LICENSE +20 -0
- data/lib/rails_generator/generators/components/plugin/templates/README +13 -0
- data/lib/rails_generator/generators/components/plugin/templates/Rakefile +23 -0
- data/lib/rails_generator/generators/components/plugin/templates/USAGE +8 -0
- data/lib/rails_generator/generators/components/plugin/templates/generator.rb +8 -0
- data/lib/rails_generator/generators/components/plugin/templates/init.rb +1 -0
- data/lib/rails_generator/generators/components/plugin/templates/install.rb +1 -0
- data/lib/rails_generator/generators/components/plugin/templates/plugin.rb +1 -0
- data/lib/rails_generator/generators/components/plugin/templates/tasks.rake +4 -0
- data/lib/rails_generator/generators/components/plugin/templates/test_helper.rb +3 -0
- data/lib/rails_generator/generators/components/plugin/templates/uninstall.rb +1 -0
- data/lib/rails_generator/generators/components/plugin/templates/unit_test.rb +8 -0
- data/lib/rails_generator/generators/components/resource/USAGE +23 -0
- data/lib/rails_generator/generators/components/resource/resource_generator.rb +76 -0
- data/lib/rails_generator/generators/components/resource/templates/controller.rb +2 -0
- data/lib/rails_generator/generators/components/resource/templates/functional_test.rb +8 -0
- data/lib/rails_generator/generators/components/resource/templates/helper.rb +2 -0
- data/lib/rails_generator/generators/components/resource/templates/helper_test.rb +4 -0
- data/lib/rails_generator/generators/components/scaffold/USAGE +29 -0
- data/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb +103 -0
- data/lib/rails_generator/generators/components/scaffold/templates/controller.rb +85 -0
- data/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb +45 -0
- data/lib/rails_generator/generators/components/scaffold/templates/helper.rb +2 -0
- data/lib/rails_generator/generators/components/scaffold/templates/helper_test.rb +4 -0
- data/lib/rails_generator/generators/components/scaffold/templates/layout.html.erb +17 -0
- data/lib/rails_generator/generators/components/scaffold/templates/style.css +54 -0
- data/lib/rails_generator/generators/components/scaffold/templates/view_edit.html.erb +18 -0
- data/lib/rails_generator/generators/components/scaffold/templates/view_index.html.erb +24 -0
- data/lib/rails_generator/generators/components/scaffold/templates/view_new.html.erb +17 -0
- data/lib/rails_generator/generators/components/scaffold/templates/view_show.html.erb +10 -0
- data/lib/rails_generator/generators/components/session_migration/USAGE +10 -0
- data/lib/rails_generator/generators/components/session_migration/session_migration_generator.rb +18 -0
- data/lib/rails_generator/generators/components/session_migration/templates/migration.rb +16 -0
- data/lib/rails_generator/lookup.rb +249 -0
- data/lib/rails_generator/manifest.rb +53 -0
- data/lib/rails_generator/options.rb +150 -0
- data/lib/rails_generator/scripts.rb +89 -0
- data/lib/rails_generator/scripts/destroy.rb +29 -0
- data/lib/rails_generator/scripts/generate.rb +7 -0
- data/lib/rails_generator/scripts/update.rb +12 -0
- data/lib/rails_generator/secret_key_generator.rb +24 -0
- data/lib/rails_generator/simple_logger.rb +46 -0
- data/lib/rails_generator/spec.rb +44 -0
- data/lib/railties_path.rb +1 -0
- data/lib/ruby_version_check.rb +17 -0
- data/lib/rubyprof_ext.rb +35 -0
- data/lib/source_annotation_extractor.rb +102 -0
- data/lib/tasks/annotations.rake +20 -0
- data/lib/tasks/databases.rake +436 -0
- data/lib/tasks/documentation.rake +88 -0
- data/lib/tasks/framework.rake +143 -0
- data/lib/tasks/gems.rake +78 -0
- data/lib/tasks/log.rake +9 -0
- data/lib/tasks/middleware.rake +7 -0
- data/lib/tasks/misc.rake +63 -0
- data/lib/tasks/rails.rb +9 -0
- data/lib/tasks/routes.rake +18 -0
- data/lib/tasks/statistics.rake +17 -0
- data/lib/tasks/testing.rake +139 -0
- data/lib/tasks/tmp.rake +37 -0
- data/lib/test_help.rb +38 -0
- data/lib/webrick_server.rb +156 -0
- metadata +495 -0
@@ -0,0 +1,198 @@
|
|
1
|
+
require "rails/plugin"
|
2
|
+
|
3
|
+
module Rails
|
4
|
+
class Plugin
|
5
|
+
class Loader
|
6
|
+
attr_reader :initializer
|
7
|
+
|
8
|
+
# Creates a new Plugin::Loader instance, associated with the given
|
9
|
+
# Rails::Initializer. This default implementation automatically locates
|
10
|
+
# all plugins, and adds all plugin load paths, when it is created. The plugins
|
11
|
+
# are then fully loaded (init.rb is evaluated) when load_plugins is called.
|
12
|
+
#
|
13
|
+
# It is the loader's responsibility to ensure that only the plugins specified
|
14
|
+
# in the configuration are actually loaded, and that the order defined
|
15
|
+
# is respected.
|
16
|
+
def initialize(initializer)
|
17
|
+
@initializer = initializer
|
18
|
+
end
|
19
|
+
|
20
|
+
# Returns the plugins to be loaded, in the order they should be loaded.
|
21
|
+
def plugins
|
22
|
+
@plugins ||= all_plugins.select { |plugin| should_load?(plugin) }.sort { |p1, p2| order_plugins(p1, p2) }
|
23
|
+
end
|
24
|
+
|
25
|
+
# Returns the plugins that are in engine-form (have an app/ directory)
|
26
|
+
def engines
|
27
|
+
@engines ||= plugins.select(&:engine?)
|
28
|
+
end
|
29
|
+
|
30
|
+
# Returns all the plugins that could be found by the current locators.
|
31
|
+
def all_plugins
|
32
|
+
@all_plugins ||= locate_plugins
|
33
|
+
@all_plugins
|
34
|
+
end
|
35
|
+
|
36
|
+
def load_plugins
|
37
|
+
plugins.each do |plugin|
|
38
|
+
plugin.load(initializer)
|
39
|
+
register_plugin_as_loaded(plugin)
|
40
|
+
end
|
41
|
+
|
42
|
+
configure_engines
|
43
|
+
|
44
|
+
ensure_all_registered_plugins_are_loaded!
|
45
|
+
end
|
46
|
+
|
47
|
+
# Adds the load paths for every plugin into the $LOAD_PATH. Plugin load paths are
|
48
|
+
# added *after* the application's <tt>lib</tt> directory, to ensure that an application
|
49
|
+
# can always override code within a plugin.
|
50
|
+
#
|
51
|
+
# Plugin load paths are also added to Dependencies.load_paths, and Dependencies.load_once_paths.
|
52
|
+
def add_plugin_load_paths
|
53
|
+
plugins.each do |plugin|
|
54
|
+
plugin.load_paths.each do |path|
|
55
|
+
$LOAD_PATH.insert(application_lib_index + 1, path)
|
56
|
+
|
57
|
+
ActiveSupport::Dependencies.load_paths << path
|
58
|
+
|
59
|
+
unless configuration.reload_plugins?
|
60
|
+
ActiveSupport::Dependencies.load_once_paths << path
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
$LOAD_PATH.uniq!
|
66
|
+
end
|
67
|
+
|
68
|
+
def engine_metal_paths
|
69
|
+
engines.collect(&:metal_path)
|
70
|
+
end
|
71
|
+
|
72
|
+
protected
|
73
|
+
def configure_engines
|
74
|
+
if engines.any?
|
75
|
+
add_engine_routing_configurations
|
76
|
+
add_engine_locales
|
77
|
+
add_engine_controller_paths
|
78
|
+
add_engine_view_paths
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def add_engine_routing_configurations
|
83
|
+
engines.select(&:routed?).collect(&:routing_file).each do |routing_file|
|
84
|
+
ActionController::Routing::Routes.add_configuration_file(routing_file)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def add_engine_locales
|
89
|
+
# reverse it such that the last engine can overwrite translations from the first, like with routes
|
90
|
+
locale_files = engines.select(&:localized?).collect(&:locale_files).reverse.flatten
|
91
|
+
I18n.load_path += locale_files - I18n.load_path
|
92
|
+
end
|
93
|
+
|
94
|
+
def add_engine_controller_paths
|
95
|
+
ActionController::Routing.controller_paths += engines.collect(&:controller_path)
|
96
|
+
end
|
97
|
+
|
98
|
+
def add_engine_view_paths
|
99
|
+
# reverse it such that the last engine can overwrite view paths from the first, like with routes
|
100
|
+
paths = ActionView::PathSet.new(engines.collect(&:view_path).reverse)
|
101
|
+
ActionController::Base.view_paths.concat(paths)
|
102
|
+
ActionMailer::Base.view_paths.concat(paths) if configuration.frameworks.include?(:action_mailer)
|
103
|
+
end
|
104
|
+
|
105
|
+
# The locate_plugins method uses each class in config.plugin_locators to
|
106
|
+
# find the set of all plugins available to this Rails application.
|
107
|
+
def locate_plugins
|
108
|
+
configuration.plugin_locators.map do |locator|
|
109
|
+
locator.new(initializer).plugins
|
110
|
+
end.flatten
|
111
|
+
# TODO: sorting based on config.plugins
|
112
|
+
end
|
113
|
+
|
114
|
+
def register_plugin_as_loaded(plugin)
|
115
|
+
initializer.loaded_plugins << plugin
|
116
|
+
end
|
117
|
+
|
118
|
+
def configuration
|
119
|
+
initializer.configuration
|
120
|
+
end
|
121
|
+
|
122
|
+
def should_load?(plugin)
|
123
|
+
# uses Plugin#name and Plugin#valid?
|
124
|
+
enabled?(plugin) && plugin.valid?
|
125
|
+
end
|
126
|
+
|
127
|
+
def order_plugins(plugin_a, plugin_b)
|
128
|
+
if !explicit_plugin_loading_order?
|
129
|
+
plugin_a <=> plugin_b
|
130
|
+
else
|
131
|
+
if !explicitly_enabled?(plugin_a) && !explicitly_enabled?(plugin_b)
|
132
|
+
plugin_a <=> plugin_b
|
133
|
+
else
|
134
|
+
effective_order_of(plugin_a) <=> effective_order_of(plugin_b)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def effective_order_of(plugin)
|
140
|
+
if explicitly_enabled?(plugin)
|
141
|
+
registered_plugin_names.index(plugin.name)
|
142
|
+
else
|
143
|
+
registered_plugin_names.index('all')
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
def application_lib_index
|
148
|
+
$LOAD_PATH.index(File.join(RAILS_ROOT, 'lib')) || 0
|
149
|
+
end
|
150
|
+
|
151
|
+
def enabled?(plugin)
|
152
|
+
!explicit_plugin_loading_order? || registered?(plugin)
|
153
|
+
end
|
154
|
+
|
155
|
+
def explicit_plugin_loading_order?
|
156
|
+
!registered_plugin_names.nil?
|
157
|
+
end
|
158
|
+
|
159
|
+
def registered?(plugin)
|
160
|
+
explicit_plugin_loading_order? && registered_plugins_names_plugin?(plugin)
|
161
|
+
end
|
162
|
+
|
163
|
+
def explicitly_enabled?(plugin)
|
164
|
+
!explicit_plugin_loading_order? || explicitly_registered?(plugin)
|
165
|
+
end
|
166
|
+
|
167
|
+
def explicitly_registered?(plugin)
|
168
|
+
explicit_plugin_loading_order? && registered_plugin_names.include?(plugin.name)
|
169
|
+
end
|
170
|
+
|
171
|
+
def registered_plugins_names_plugin?(plugin)
|
172
|
+
registered_plugin_names.include?(plugin.name) || registered_plugin_names.include?('all')
|
173
|
+
end
|
174
|
+
|
175
|
+
# The plugins that have been explicitly listed with config.plugins. If this list is nil
|
176
|
+
# then it means the client does not care which plugins or in what order they are loaded,
|
177
|
+
# so we load all in alphabetical order. If it is an empty array, we load no plugins, if it is
|
178
|
+
# non empty, we load the named plugins in the order specified.
|
179
|
+
def registered_plugin_names
|
180
|
+
configuration.plugins ? configuration.plugins.map(&:to_s) : nil
|
181
|
+
end
|
182
|
+
|
183
|
+
def loaded?(plugin_name)
|
184
|
+
initializer.loaded_plugins.detect { |plugin| plugin.name == plugin_name.to_s }
|
185
|
+
end
|
186
|
+
|
187
|
+
def ensure_all_registered_plugins_are_loaded!
|
188
|
+
if explicit_plugin_loading_order?
|
189
|
+
if configuration.plugins.detect {|plugin| plugin != :all && !loaded?(plugin) }
|
190
|
+
missing_plugins = configuration.plugins - (plugins.map{|p| p.name.to_sym} + [:all])
|
191
|
+
raise LoadError, "Could not locate the following plugins: #{missing_plugins.to_sentence(:locale => :en)}"
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
module Rails
|
2
|
+
class Plugin
|
3
|
+
|
4
|
+
# The Plugin::Locator class should be subclasses to provide custom plugin-finding
|
5
|
+
# abilities to Rails (i.e. loading plugins from Gems, etc). Each subclass should implement
|
6
|
+
# the <tt>located_plugins</tt> method, which return an array of Plugin objects that have been found.
|
7
|
+
class Locator
|
8
|
+
include Enumerable
|
9
|
+
|
10
|
+
attr_reader :initializer
|
11
|
+
|
12
|
+
def initialize(initializer)
|
13
|
+
@initializer = initializer
|
14
|
+
end
|
15
|
+
|
16
|
+
# This method should return all the plugins which this Plugin::Locator can find
|
17
|
+
# These will then be used by the current Plugin::Loader, which is responsible for actually
|
18
|
+
# loading the plugins themselves
|
19
|
+
def plugins
|
20
|
+
raise "The `plugins' method must be defined by concrete subclasses of #{self.class}"
|
21
|
+
end
|
22
|
+
|
23
|
+
def each(&block)
|
24
|
+
plugins.each(&block)
|
25
|
+
end
|
26
|
+
|
27
|
+
def plugin_names
|
28
|
+
plugins.map(&:name)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# The Rails::Plugin::FileSystemLocator will try to locate plugins by examining the directories
|
33
|
+
# in the paths given in configuration.plugin_paths. Any plugins that can be found are returned
|
34
|
+
# in a list.
|
35
|
+
#
|
36
|
+
# The criteria for a valid plugin in this case is found in Rails::Plugin#valid?, although
|
37
|
+
# other subclasses of Rails::Plugin::Locator can of course use different conditions.
|
38
|
+
class FileSystemLocator < Locator
|
39
|
+
|
40
|
+
# Returns all the plugins which can be loaded in the filesystem, under the paths given
|
41
|
+
# by configuration.plugin_paths.
|
42
|
+
def plugins
|
43
|
+
initializer.configuration.plugin_paths.flatten.inject([]) do |plugins, path|
|
44
|
+
plugins.concat locate_plugins_under(path)
|
45
|
+
plugins
|
46
|
+
end.flatten
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
# Attempts to create a plugin from the given path. If the created plugin is valid?
|
52
|
+
# (see Rails::Plugin#valid?) then the plugin instance is returned; otherwise nil.
|
53
|
+
def create_plugin(path)
|
54
|
+
plugin = Rails::Plugin.new(path)
|
55
|
+
plugin.valid? ? plugin : nil
|
56
|
+
end
|
57
|
+
|
58
|
+
# This starts at the base path looking for valid plugins (see Rails::Plugin#valid?).
|
59
|
+
# Since plugins can be nested arbitrarily deep within an unspecified number of intermediary
|
60
|
+
# directories, this method runs recursively until it finds a plugin directory, e.g.
|
61
|
+
#
|
62
|
+
# locate_plugins_under('vendor/plugins/acts/acts_as_chunky_bacon')
|
63
|
+
# => <Rails::Plugin name: 'acts_as_chunky_bacon' ... >
|
64
|
+
#
|
65
|
+
def locate_plugins_under(base_path)
|
66
|
+
Dir.glob(File.join(base_path, '*')).sort.inject([]) do |plugins, path|
|
67
|
+
if plugin = create_plugin(path)
|
68
|
+
plugins << plugin
|
69
|
+
elsif File.directory?(path)
|
70
|
+
plugins.concat locate_plugins_under(path)
|
71
|
+
end
|
72
|
+
plugins
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# The GemLocator scans all the loaded RubyGems, looking for gems with
|
78
|
+
# a <tt>rails/init.rb</tt> file.
|
79
|
+
class GemLocator < Locator
|
80
|
+
def plugins
|
81
|
+
gem_index = initializer.configuration.gems.inject({}) { |memo, gem| memo.update gem.specification => gem }
|
82
|
+
specs = gem_index.keys
|
83
|
+
specs += Gem.loaded_specs.values.select do |spec|
|
84
|
+
spec.loaded_from && # prune stubs
|
85
|
+
File.exist?(File.join(spec.full_gem_path, "rails", "init.rb"))
|
86
|
+
end
|
87
|
+
specs.compact!
|
88
|
+
|
89
|
+
require "rubygems/dependency_list"
|
90
|
+
|
91
|
+
deps = Gem::DependencyList.new
|
92
|
+
deps.add(*specs) unless specs.empty?
|
93
|
+
|
94
|
+
deps.dependency_order.collect do |spec|
|
95
|
+
Rails::GemPlugin.new(spec, gem_index[spec])
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
data/lib/rails/rack.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
module Rails
|
2
|
+
module Rack
|
3
|
+
class Debugger
|
4
|
+
def initialize(app)
|
5
|
+
@app = app
|
6
|
+
|
7
|
+
ARGV.clear # clear ARGV so that script/server options aren't passed to IRB
|
8
|
+
|
9
|
+
require_library_or_gem 'ruby-debug'
|
10
|
+
::Debugger.start
|
11
|
+
::Debugger.settings[:autoeval] = true if ::Debugger.respond_to?(:settings)
|
12
|
+
puts "=> Debugger enabled"
|
13
|
+
rescue Exception
|
14
|
+
puts "You need to install ruby-debug to run the server in debugging mode. With gems, use 'gem install ruby-debug'"
|
15
|
+
exit
|
16
|
+
end
|
17
|
+
|
18
|
+
def call(env)
|
19
|
+
@app.call(env)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Rails
|
2
|
+
module Rack
|
3
|
+
class LogTailer
|
4
|
+
EnvironmentLog = "#{File.expand_path(Rails.root)}/log/#{Rails.env}.log"
|
5
|
+
|
6
|
+
def initialize(app, log = nil)
|
7
|
+
@app = app
|
8
|
+
|
9
|
+
path = Pathname.new(log || EnvironmentLog).cleanpath
|
10
|
+
@cursor = ::File.size(path)
|
11
|
+
@last_checked = Time.now.to_f
|
12
|
+
|
13
|
+
@file = ::File.open(path, 'r')
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(env)
|
17
|
+
response = @app.call(env)
|
18
|
+
tail_log
|
19
|
+
response
|
20
|
+
end
|
21
|
+
|
22
|
+
def tail_log
|
23
|
+
@file.seek @cursor
|
24
|
+
|
25
|
+
mod = @file.mtime.to_f
|
26
|
+
if mod > @last_checked
|
27
|
+
contents = @file.read
|
28
|
+
@last_checked = mod
|
29
|
+
@cursor += contents.size
|
30
|
+
$stdout.print contents
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'active_support/ordered_hash'
|
2
|
+
|
3
|
+
module Rails
|
4
|
+
module Rack
|
5
|
+
class Metal
|
6
|
+
NotFoundResponse = [404, {}, []].freeze
|
7
|
+
NotFound = lambda { NotFoundResponse }
|
8
|
+
|
9
|
+
cattr_accessor :metal_paths
|
10
|
+
self.metal_paths = ["#{Rails.root}/app/metal"]
|
11
|
+
cattr_accessor :requested_metals
|
12
|
+
|
13
|
+
def self.metals
|
14
|
+
matcher = /#{Regexp.escape('/app/metal/')}(.*)\.rb\Z/
|
15
|
+
metal_glob = metal_paths.map{ |base| "#{base}/**/*.rb" }
|
16
|
+
all_metals = {}
|
17
|
+
|
18
|
+
metal_glob.each do |glob|
|
19
|
+
Dir[glob].sort.map do |file|
|
20
|
+
file = file.match(matcher)[1]
|
21
|
+
all_metals[file.camelize] = file
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
load_list = requested_metals || all_metals.keys
|
26
|
+
|
27
|
+
load_list.map do |requested_metal|
|
28
|
+
if metal = all_metals[requested_metal]
|
29
|
+
require_dependency metal
|
30
|
+
requested_metal.constantize
|
31
|
+
end
|
32
|
+
end.compact
|
33
|
+
end
|
34
|
+
|
35
|
+
def initialize(app)
|
36
|
+
@app = app
|
37
|
+
@metals = ActiveSupport::OrderedHash.new
|
38
|
+
self.class.metals.each { |app| @metals[app] = true }
|
39
|
+
freeze
|
40
|
+
end
|
41
|
+
|
42
|
+
def call(env)
|
43
|
+
@metals.keys.each do |app|
|
44
|
+
result = app.call(env)
|
45
|
+
return result unless result[0].to_i == 404
|
46
|
+
end
|
47
|
+
@app.call(env)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'rack/utils'
|
2
|
+
|
3
|
+
module Rails
|
4
|
+
module Rack
|
5
|
+
class Static
|
6
|
+
FILE_METHODS = %w(GET HEAD).freeze
|
7
|
+
|
8
|
+
def initialize(app)
|
9
|
+
@app = app
|
10
|
+
@file_server = ::Rack::File.new(File.join(RAILS_ROOT, "public"))
|
11
|
+
end
|
12
|
+
|
13
|
+
def call(env)
|
14
|
+
path = env['PATH_INFO'].chomp('/')
|
15
|
+
method = env['REQUEST_METHOD']
|
16
|
+
|
17
|
+
if FILE_METHODS.include?(method)
|
18
|
+
if file_exist?(path)
|
19
|
+
return @file_server.call(env)
|
20
|
+
else
|
21
|
+
cached_path = directory_exist?(path) ? "#{path}/index" : path
|
22
|
+
cached_path += ::ActionController::Base.page_cache_extension
|
23
|
+
|
24
|
+
if file_exist?(cached_path)
|
25
|
+
env['PATH_INFO'] = cached_path
|
26
|
+
return @file_server.call(env)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
@app.call(env)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
def file_exist?(path)
|
36
|
+
full_path = File.join(@file_server.root, ::Rack::Utils.unescape(path))
|
37
|
+
File.file?(full_path) && File.readable?(full_path)
|
38
|
+
end
|
39
|
+
|
40
|
+
def directory_exist?(path)
|
41
|
+
full_path = File.join(@file_server.root, ::Rack::Utils.unescape(path))
|
42
|
+
File.directory?(full_path) && File.readable?(full_path)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|