parlement 0.14 → 0.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (205) hide show
  1. data/CHANGES +41 -1
  2. data/MEMORY +66 -5
  3. data/README +10 -5
  4. data/Rakefile +15 -23
  5. data/app/controllers/account_controller.rb +48 -43
  6. data/app/controllers/{application.rb → application_controller.rb} +15 -12
  7. data/app/controllers/elt_controller.rb +77 -32
  8. data/app/controllers/subscriber_controller.rb +11 -10
  9. data/app/helpers/application_helper.rb +14 -1
  10. data/app/helpers/elt_helper.rb +9 -7
  11. data/app/models/elt.rb +25 -24
  12. data/app/models/mail.rb +44 -47
  13. data/app/models/person_notify.rb +2 -2
  14. data/app/models/user.rb +128 -2
  15. data/app/models/user_notify.rb +15 -15
  16. data/app/views/account/_login.rhtml +39 -39
  17. data/app/views/account/_show.rhtml +22 -30
  18. data/app/views/account/signup.rhtml +2 -2
  19. data/app/views/elt/_choice.rhtml +6 -6
  20. data/app/views/elt/_elt.rhtml +27 -32
  21. data/app/views/elt/choices.rhtml +16 -18
  22. data/app/views/elt/list/_byDate.rhtml +14 -14
  23. data/app/views/elt/list/_byVote.rhtml +15 -15
  24. data/app/views/elt/list/_children.rhtml +48 -40
  25. data/app/views/elt/list/_subscribers.rhtml +1 -1
  26. data/app/views/elt/new.rhtml +22 -21
  27. data/app/views/elt/rss.rxml +4 -11
  28. data/app/views/elt/show.rhtml +65 -61
  29. data/app/views/elt/vote_rss.rxml +4 -11
  30. data/app/views/layouts/top.rhtml +39 -50
  31. data/app/views/person/_listElts.rhtml +1 -1
  32. data/app/views/person/show.rhtml +1 -1
  33. data/{vendor/plugins/login_engine/app → app}/views/user_notify/change_password.rhtml +0 -0
  34. data/{vendor/plugins/login_engine/app → app}/views/user_notify/delete.rhtml +0 -0
  35. data/{vendor/plugins/login_engine/app → app}/views/user_notify/forgot_password.rhtml +0 -0
  36. data/{vendor/plugins/login_engine/app → app}/views/user_notify/pending_delete.rhtml +0 -0
  37. data/{vendor/plugins/login_engine/app → app}/views/user_notify/signup.rhtml +0 -0
  38. data/config/boot.rb +97 -32
  39. data/config/environment.rb +37 -35
  40. data/config/environments/development.rb +2 -3
  41. data/config/environments/production.rb +3 -0
  42. data/config/initializers/string_ruby_1.8.rb +10 -0
  43. data/config/routes.rb +17 -22
  44. data/db/schema.rb +102 -74
  45. data/lib/tasks/rspec.rake +167 -0
  46. data/public/404.html +25 -7
  47. data/public/500.html +26 -7
  48. data/public/dispatch.cgi +0 -0
  49. data/public/dispatch.fcgi +0 -0
  50. data/public/dispatch.rb +0 -0
  51. data/public/images/live_tree_branch_collapsed_icon.gif +0 -0
  52. data/public/images/live_tree_branch_expanded_icon.gif +0 -0
  53. data/public/images/live_tree_leaf_icon.gif +0 -0
  54. data/public/javascripts/application.js +258 -0
  55. data/public/javascripts/controls.js +544 -414
  56. data/public/javascripts/dragdrop.js +229 -198
  57. data/public/javascripts/effects.js +499 -459
  58. data/public/javascripts/prototype.js +2926 -1121
  59. data/public/javascripts/shadedborder.js +68 -50
  60. data/public/stylesheets/default.css +34 -34
  61. data/public/stylesheets/live_tree.css +0 -0
  62. data/public/stylesheets/scaffold.css +6 -6
  63. data/script/about +0 -0
  64. data/script/autospec +6 -0
  65. data/script/benchmarker +0 -0
  66. data/script/breakpointer +0 -0
  67. data/script/console +0 -0
  68. data/script/dbconsole +3 -0
  69. data/script/destroy +0 -0
  70. data/script/generate +0 -0
  71. data/script/plugin +0 -0
  72. data/script/profiler +0 -0
  73. data/script/runner +0 -0
  74. data/script/server +0 -0
  75. data/script/spec +10 -0
  76. data/script/spec_server +9 -0
  77. data/test/unit/attachment_test.rb +4 -4
  78. data/test/unit/choice_test.rb +1 -1
  79. data/test/unit/elt_test.rb +9 -9
  80. data/test/unit/mail_notify_test.rb +2 -2
  81. data/test/unit/mail_test.rb +18 -11
  82. data/test/unit/person_notify_test.rb +1 -1
  83. data/test/unit/person_test.rb +1 -1
  84. data/test/unit/subscriber_test.rb +1 -1
  85. data/test/unit/user_test.rb +81 -0
  86. data/test/unit/visit_test.rb +6 -6
  87. data/vendor/plugins/activerecord_foreign_key_extensions/init.rb +2 -0
  88. data/vendor/plugins/activerecord_foreign_key_extensions/lib/active_record_extensions.rb +182 -0
  89. data/vendor/plugins/activerecord_text_id_extensions/init.rb +2 -0
  90. data/vendor/plugins/activerecord_text_id_extensions/lib/active_record_extensions.rb +24 -0
  91. data/vendor/plugins/acts_as_nested_set/README +15 -0
  92. data/vendor/plugins/acts_as_nested_set/init.rb +1 -0
  93. data/vendor/plugins/acts_as_nested_set/lib/active_record/acts/nested_set.rb +210 -0
  94. data/vendor/plugins/acts_as_nested_set/test/nested_set_test.rb +269 -0
  95. data/vendor/plugins/acts_as_tree/README +26 -0
  96. data/vendor/plugins/acts_as_tree/Rakefile +22 -0
  97. data/vendor/plugins/acts_as_tree/init.rb +1 -0
  98. data/vendor/plugins/acts_as_tree/lib/active_record/acts/tree.rb +96 -0
  99. data/vendor/plugins/{output_compression/CHANGELOG → acts_as_tree/test/abstract_unit.rb} +0 -0
  100. data/vendor/plugins/acts_as_tree/test/acts_as_tree_test.rb +219 -0
  101. data/vendor/plugins/acts_as_tree/test/database.yml +0 -0
  102. data/vendor/plugins/acts_as_tree/test/fixtures/mixin.rb +0 -0
  103. data/vendor/plugins/acts_as_tree/test/fixtures/mixins.yml +0 -0
  104. data/vendor/plugins/acts_as_tree/test/schema.rb +0 -0
  105. data/vendor/plugins/classic_pagination/CHANGELOG +152 -0
  106. data/vendor/plugins/classic_pagination/README +18 -0
  107. data/vendor/plugins/{output_compression/rakefile → classic_pagination/Rakefile} +22 -22
  108. data/vendor/plugins/classic_pagination/init.rb +33 -0
  109. data/vendor/plugins/classic_pagination/install.rb +1 -0
  110. data/vendor/plugins/classic_pagination/lib/pagination.rb +405 -0
  111. data/vendor/plugins/classic_pagination/lib/pagination_helper.rb +135 -0
  112. data/vendor/plugins/classic_pagination/test/fixtures/companies.yml +24 -0
  113. data/vendor/plugins/classic_pagination/test/fixtures/company.rb +9 -0
  114. data/vendor/plugins/classic_pagination/test/fixtures/developer.rb +7 -0
  115. data/vendor/plugins/classic_pagination/test/fixtures/developers.yml +21 -0
  116. data/vendor/plugins/classic_pagination/test/fixtures/developers_projects.yml +13 -0
  117. data/vendor/plugins/classic_pagination/test/fixtures/project.rb +3 -0
  118. data/vendor/plugins/classic_pagination/test/fixtures/projects.yml +7 -0
  119. data/vendor/plugins/classic_pagination/test/fixtures/replies.yml +13 -0
  120. data/vendor/plugins/classic_pagination/test/fixtures/reply.rb +5 -0
  121. data/vendor/plugins/classic_pagination/test/fixtures/schema.sql +42 -0
  122. data/vendor/plugins/classic_pagination/test/fixtures/topic.rb +3 -0
  123. data/vendor/plugins/classic_pagination/test/fixtures/topics.yml +22 -0
  124. data/vendor/plugins/classic_pagination/test/helper.rb +117 -0
  125. data/vendor/plugins/classic_pagination/test/pagination_helper_test.rb +38 -0
  126. data/vendor/plugins/classic_pagination/test/pagination_test.rb +177 -0
  127. data/vendor/plugins/file_column/lib/file_column.rb +1 -1
  128. data/vendor/plugins/file_column/test/file_column_test.rb +0 -0
  129. metadata +151 -197
  130. data/app/helpers/live_tree.rb +0 -238
  131. data/app/views/elt/_form.rhtml +0 -31
  132. data/app/views/elt/show_tree.rhtml +0 -8
  133. data/config/environments/user_environment.rb +0 -1
  134. data/db/ROOT/Titemagli.txt +0 -3
  135. data/db/ROOT/titemagli.txt +0 -9
  136. data/public/javascripts/behaviour.js +0 -254
  137. data/public/javascripts/ie7-load.htc +0 -1
  138. data/public/javascripts/ie7.js +0 -6
  139. data/public/javascripts/live_tree.js +0 -749
  140. data/public/javascripts/mybehaviour.js +0 -225
  141. data/public/javascripts/scriptaculous.js +0 -47
  142. data/public/javascripts/slider.js +0 -283
  143. data/public/stylesheets/blue.css +0 -471
  144. data/vendor/plugins/engines/CHANGELOG +0 -241
  145. data/vendor/plugins/engines/MIT-LICENSE +0 -21
  146. data/vendor/plugins/engines/README +0 -64
  147. data/vendor/plugins/engines/Rakefile +0 -32
  148. data/vendor/plugins/engines/UPGRADING +0 -93
  149. data/vendor/plugins/engines/about.yml +0 -7
  150. data/vendor/plugins/engines/generators/plugin_migration/USAGE +0 -45
  151. data/vendor/plugins/engines/generators/plugin_migration/plugin_migration_generator.rb +0 -79
  152. data/vendor/plugins/engines/generators/plugin_migration/templates/plugin_migration.erb +0 -13
  153. data/vendor/plugins/engines/init.rb +0 -40
  154. data/vendor/plugins/engines/install.rb +0 -32
  155. data/vendor/plugins/engines/lib/engines.rb +0 -323
  156. data/vendor/plugins/engines/lib/engines/deprecated_config_support.rb +0 -135
  157. data/vendor/plugins/engines/lib/engines/plugin.rb +0 -214
  158. data/vendor/plugins/engines/lib/engines/plugin_list.rb +0 -31
  159. data/vendor/plugins/engines/lib/engines/plugin_migrator.rb +0 -60
  160. data/vendor/plugins/engines/lib/engines/rails_extensions.rb +0 -6
  161. data/vendor/plugins/engines/lib/engines/rails_extensions/active_record.rb +0 -19
  162. data/vendor/plugins/engines/lib/engines/rails_extensions/dependencies.rb +0 -143
  163. data/vendor/plugins/engines/lib/engines/rails_extensions/migrations.rb +0 -155
  164. data/vendor/plugins/engines/lib/engines/rails_extensions/public_asset_helpers.rb +0 -116
  165. data/vendor/plugins/engines/lib/engines/rails_extensions/rails.rb +0 -20
  166. data/vendor/plugins/engines/lib/engines/rails_extensions/rails_initializer.rb +0 -86
  167. data/vendor/plugins/engines/lib/engines/rails_extensions/routing.rb +0 -77
  168. data/vendor/plugins/engines/lib/engines/rails_extensions/templates.rb +0 -140
  169. data/vendor/plugins/engines/lib/engines/testing.rb +0 -87
  170. data/vendor/plugins/engines/tasks/engines.rake +0 -149
  171. data/vendor/plugins/login_engine/CHANGELOG +0 -22
  172. data/vendor/plugins/login_engine/README +0 -344
  173. data/vendor/plugins/login_engine/app/controllers/user_controller.rb +0 -262
  174. data/vendor/plugins/login_engine/app/helpers/user_helper.rb +0 -88
  175. data/vendor/plugins/login_engine/app/models/user.rb +0 -7
  176. data/vendor/plugins/login_engine/app/models/user_notify.rb +0 -75
  177. data/vendor/plugins/login_engine/app/views/user/_edit.rhtml +0 -11
  178. data/vendor/plugins/login_engine/app/views/user/_password.rhtml +0 -9
  179. data/vendor/plugins/login_engine/app/views/user/change_password.rhtml +0 -17
  180. data/vendor/plugins/login_engine/app/views/user/edit.rhtml +0 -23
  181. data/vendor/plugins/login_engine/app/views/user/forgot_password.rhtml +0 -18
  182. data/vendor/plugins/login_engine/app/views/user/home.rhtml +0 -7
  183. data/vendor/plugins/login_engine/app/views/user/login.rhtml +0 -17
  184. data/vendor/plugins/login_engine/app/views/user/logout.rhtml +0 -8
  185. data/vendor/plugins/login_engine/app/views/user/signup.rhtml +0 -17
  186. data/vendor/plugins/login_engine/db/migrate/001_initial_schema.rb +0 -25
  187. data/vendor/plugins/login_engine/init_engine.rb +0 -11
  188. data/vendor/plugins/login_engine/install.rb +0 -4
  189. data/vendor/plugins/login_engine/lib/login_engine.rb +0 -62
  190. data/vendor/plugins/login_engine/lib/login_engine/authenticated_system.rb +0 -113
  191. data/vendor/plugins/login_engine/lib/login_engine/authenticated_user.rb +0 -155
  192. data/vendor/plugins/login_engine/public/stylesheets/login_engine.css +0 -81
  193. data/vendor/plugins/login_engine/test/fixtures/users.yml +0 -41
  194. data/vendor/plugins/login_engine/test/functional/user_controller_test.rb +0 -536
  195. data/vendor/plugins/login_engine/test/mocks/mail.rb +0 -14
  196. data/vendor/plugins/login_engine/test/mocks/time.rb +0 -19
  197. data/vendor/plugins/login_engine/test/test_helper.rb +0 -11
  198. data/vendor/plugins/login_engine/test/unit/user_test.rb +0 -114
  199. data/vendor/plugins/output_compression/MIT-LICENSE +0 -20
  200. data/vendor/plugins/output_compression/README +0 -4
  201. data/vendor/plugins/output_compression/init.rb +0 -1
  202. data/vendor/plugins/output_compression/lib/output_compression.rb +0 -84
  203. data/vendor/plugins/output_compression/test/output_test.rb +0 -11
  204. data/vendor/plugins/output_compression/test/test_controller.rb +0 -3
  205. data/vendor/plugins/output_compression/test/test_helper.rb +0 -14
@@ -1,7 +0,0 @@
1
- author: James Adam
2
- email: james.adam@gmail.com
3
- homepage: http://www.rails-engines.org
4
- summary: Enhances the plugin mechanism to perform more flexible sharing
5
- description: The Rails Engines plugin allows the sharing of almost any type of code or asset that you could use in a Rails application, including controllers, models, stylesheets, and views.
6
- license: MIT
7
- version: 1.2.0
@@ -1,45 +0,0 @@
1
- Description:
2
- The plugin migration generator assists in working with schema additions
3
- required by plugins. Instead of running migrations from plugins directly,
4
- the generator creates a regular Rails migration which will be responsible
5
- for migrating the plugins from their current version to the latest version
6
- installed.
7
-
8
- This is important because the set of application migrations remains an
9
- accurate record of the state of the database, even as plugins are installed
10
- and removed during the development process.
11
-
12
- Example:
13
- ./script/generate plugin_migration [<plugin_name> <another_plugin_name> ...]
14
-
15
- This will generate:
16
-
17
- RAILS_ROOT
18
- |- db
19
- |-migrate
20
- |- xxx_plugin_migrations.rb
21
-
22
- which contains the migrations for the given plugin(s).
23
-
24
-
25
- Advanced Usage:
26
-
27
- There may be situations where you need *complete* control over the migrations
28
- of plugins in your application, migrating a certainly plugin down to X, and
29
- another plugin up to Y, where neither X or Y are the latest migrations for those
30
- plugins.
31
-
32
- For those unfortunate few, I have two pieces of advice:
33
-
34
- 1. Why? This is a code smell [http://c2.com/xp/CodeSmell.html].
35
-
36
- 2. Well, OK. Don't panic. You can completely control plugin migrations by
37
- creating your own migrations. To manually migrate a plugin to a specific
38
- version, simply use
39
-
40
- Rails.plugins[:your_plugin_name].migrate(version)
41
-
42
- where version is the integer of the migration this plugin should end
43
- up at.
44
-
45
- With great power comes great responsibility. Use this wisely.
@@ -1,79 +0,0 @@
1
- # Generates a migration which migrates all plugins to their latest versions
2
- # within the database.
3
- class PluginMigrationGenerator < Rails::Generator::Base
4
-
5
- def initialize(runtime_args, runtime_options={})
6
- super
7
- @options = {:assigns => {}}
8
-
9
- ensure_plugin_schema_table_exists
10
- get_plugins_to_migrate(runtime_args)
11
-
12
- if @plugins_to_migrate.empty?
13
- puts "All plugins are migrated to their latest versions"
14
- exit(0)
15
- end
16
-
17
- @options[:migration_file_name] = build_migration_name
18
- @options[:assigns][:class_name] = build_migration_name.classify
19
- end
20
-
21
- def manifest
22
- record do |m|
23
- m.migration_template 'plugin_migration.erb', 'db/migrate', @options
24
- end
25
- end
26
-
27
- protected
28
-
29
- # Create the plugin schema table if it doesn't already exist. See
30
- # Engines::RailsExtensions::Migrations#initialize_schema_information_with_engine_additions
31
- def ensure_plugin_schema_table_exists
32
- ActiveRecord::Base.connection.initialize_schema_information
33
- end
34
-
35
- # Determine all the plugins which have migrations that aren't present
36
- # according to the plugin schema information from the database.
37
- def get_plugins_to_migrate(plugin_names)
38
-
39
- # First, grab all the plugins which exist and have migrations
40
- @plugins_to_migrate = if plugin_names.empty?
41
- Rails.plugins
42
- else
43
- plugin_names.map do |name|
44
- Rails.plugins[name] ? Rails.plugins[name] : raise("Cannot find the plugin '#{name}'")
45
- end
46
- end
47
-
48
- @plugins_to_migrate.reject! { |p| p.latest_migration.nil? }
49
-
50
- # Then find the current versions from the database
51
- @current_versions = {}
52
- @plugins_to_migrate.each do |plugin|
53
- @current_versions[plugin.name] = Engines::PluginMigrator.current_version(plugin)
54
- end
55
-
56
- # Then find the latest versions from their migration directories
57
- @new_versions = {}
58
- @plugins_to_migrate.each do |plugin|
59
- @new_versions[plugin.name] = plugin.latest_migration
60
- end
61
-
62
- # Remove any plugins that don't need migration
63
- @plugins_to_migrate.map { |p| p.name }.each do |name|
64
- @plugins_to_migrate.delete(Rails.plugins[name]) if @current_versions[name] == @new_versions[name]
65
- end
66
-
67
- @options[:assigns][:plugins] = @plugins_to_migrate
68
- @options[:assigns][:new_versions] = @new_versions
69
- @options[:assigns][:current_versions] = @current_versions
70
- end
71
-
72
- # Construct a unique migration name based on the plugins involved and the
73
- # versions they should reach after this migration is run.
74
- def build_migration_name
75
- @plugins_to_migrate.map do |plugin|
76
- "#{plugin.name}_to_version_#{@new_versions[plugin.name]}"
77
- end.join("_and_")
78
- end
79
- end
@@ -1,13 +0,0 @@
1
- class <%= class_name %> < ActiveRecord::Migration
2
- def self.up
3
- <%- plugins.each do |plugin| -%>
4
- Rails.plugins["<%= plugin.name %>"].migrate(<%= new_versions[plugin.name] %>)
5
- <%- end -%>
6
- end
7
-
8
- def self.down
9
- <%- plugins.each do |plugin| -%>
10
- Rails.plugins["<%= plugin.name %>"].migrate(<%= current_versions[plugin.name] %>)
11
- <%- end -%>
12
- end
13
- end
@@ -1,40 +0,0 @@
1
- begin
2
- silence_warnings { require 'rails/version' } # it may already be loaded
3
- unless Rails::VERSION::MAJOR >= 1 && Rails::VERSION::MINOR >= 2
4
- raise "This version of the engines plugin requires Rails 1.2 or later!"
5
- end
6
- end
7
-
8
- # First, require the engines module & core methods
9
- require "engines"
10
-
11
- # Load this before we get actually start engines
12
- require "engines/rails_extensions/rails_initializer"
13
-
14
- # Start the engines mechanism.
15
- Engines.init(config, self)
16
-
17
- # Now that we've defined the engines module, load up any extensions
18
- [:rails,
19
- :rails_initializer,
20
- :dependencies,
21
- :active_record,
22
- :migrations,
23
- :templates,
24
- :public_asset_helpers,
25
- :routing
26
- ].each do |f|
27
- require "engines/rails_extensions/#{f}"
28
- end
29
-
30
- # Load the testing extensions, if we are in the test environment.
31
- require "engines/testing" if RAILS_ENV == "test"
32
-
33
- # Load the Rails::Info module so that plugins can insert information into it.
34
- begin
35
- require 'rails/info'
36
- rescue Exception
37
- # If this file can't be loaded, it's probably because we're running in an
38
- # environment where Rails' builtins aren't yet in the load path.
39
- # For the moment, just ignore this. See Ticket #261
40
- end
@@ -1,32 +0,0 @@
1
- $LOAD_PATH.unshift File.join(File.dirname(__FILE__), "..", "..", "rails", "railties", "lib")
2
- silence_warnings { require 'rails/version' } # it may already be loaded.
3
-
4
- unless Rails::VERSION::MAJOR >= 1 && Rails::VERSION::MINOR >= 2
5
- puts <<-end_of_warning
6
-
7
- !!!=== IMPORTANT NOTE ===!!!
8
-
9
- Support for Rails < 1.2 has been dropped; if you are using
10
- Rails =< 1.1.6, please use Engines 1.1.6, available from:
11
-
12
- >> http://svn.rails-engines.org/engines/tags/rel_1.1.6
13
-
14
- For more details about changes in Engines 1.2, please see
15
- the changelog or the website:
16
-
17
- >> http://www.rails-engines.org
18
-
19
- end_of_warning
20
- else
21
- puts <<-end_of_message
22
-
23
- The engines plugin is now installed. Feels good, right? Yeah.
24
- You knew it would.
25
-
26
- Once the warm, fuzzy glow has subsided, be sure to read the contents
27
- of the README and UPGRADING files if you're migrating this application
28
- from Rails 1.1.x to 1.2.x.
29
-
30
- Have a great day!
31
- end_of_message
32
- end
@@ -1,323 +0,0 @@
1
- # This file contains the Engines module, which holds most of the logic regarding
2
- # the startup and management of plugins. See Engines for more details.
3
- #
4
- # The engines plugin adds to Rails' existing behaviour by producing the +Rails.plugins+
5
- # PluginList, a list of all loaded plugins in a form which can be easily queried
6
- # and manipulated. Each instance of Plugin has methods which are used to enhance
7
- # their behaviour, including mirroring public assets, add controllers, helpers
8
- # and views and even migration.
9
- #
10
- # = init.rb
11
- #
12
- # When the engines plugin loads, it first includes the
13
- # Engines::RailsExtensions::RailsInitializer module into Rails::Initializer,
14
- # overriding a number of the methods used to load plugins.
15
- #
16
- # Once this is loaded, Engines.init is called to prepare the application
17
- # and create the relevant new datastructures (including <tt>Rails.plugins</tt>).
18
- #
19
- # Finally, each of the extension modules from Engines::RailsExtensionsis
20
- # loaded and included into the relevant Rails classes and modules, enhancing
21
- # their behaviour to work better with files from plugins.
22
-
23
- require "engines/plugin_list"
24
- require "engines/plugin"
25
-
26
- # TODO: define a better logger.
27
- def logger
28
- RAILS_DEFAULT_LOGGER
29
- end
30
-
31
- # The Engines module contains most of the methods used during the enhanced
32
- # startup of Rails plugins.
33
- #
34
- # When the Engines plugin loads (its <tt>init.rb</tt> file is evaluated), the
35
- # Engines.init method is called. This kickstarts the plugins hooks into
36
- # the initialization process.
37
- #
38
- # == Parameters
39
- #
40
- # The Engines module has a number of public configuration parameters:
41
- #
42
- # [+public_directory+] The directory into which plugin assets should be
43
- # mirrored. Defaults to <tt>RAILS_ROOT/public/plugin_assets</tt>.
44
- # [+schema_info_table+] The table to use when storing plugin migration
45
- # version information. Defaults to +plugin_schema_info+.
46
- # [+rails_initializer+] A reference of the Rails initializer instance that
47
- # was used to startup Rails. This is often useful
48
- # when working with the startup process; see
49
- # Engines::RailsExtensions::RailsInitializer for more
50
- # information
51
- #
52
- # Additionally, there are a few flags which control the behaviour of
53
- # some of the features the engines plugin adds to Rails:
54
- #
55
- # [+disable_application_view_loading+] A boolean flag determining whether
56
- # or not views should be loaded from
57
- # the main <tt>app/views</tt> directory.
58
- # Defaults to false; probably only
59
- # useful when testing your plugin.
60
- # [+disable_application_code_loading+] A boolean flag determining whether
61
- # or not to load controllers/helpers
62
- # from the main +app+ directory,
63
- # if corresponding code exists within
64
- # a plugin. Defaults to false; again,
65
- # probably only useful when testing
66
- # your plugin.
67
- # [+disable_code_mixing+] A boolean flag indicating whether all plugin
68
- # copies of a particular controller/helper should
69
- # be loaded and allowed to override each other,
70
- # or if the first matching file should be loaded
71
- # instead. Defaults to false.
72
- #
73
- module Engines
74
- # The name of the public directory to mirror public engine assets into.
75
- # Defaults to <tt>RAILS_ROOT/public/plugin_assets</tt>.
76
- mattr_accessor :public_directory
77
- self.public_directory = File.join(RAILS_ROOT, 'public', 'plugin_assets')
78
-
79
- # The table in which to store plugin schema information. Defaults to
80
- # "plugin_schema_info".
81
- mattr_accessor :schema_info_table
82
- self.schema_info_table = "plugin_schema_info"
83
-
84
- # A reference to the current Rails::Initializer instance
85
- mattr_accessor :rails_initializer
86
-
87
-
88
- #--
89
- # These attributes control the behaviour of the engines extensions
90
- #++
91
-
92
- # Set this to true if views should *only* be loaded from plugins
93
- mattr_accessor :disable_application_view_loading
94
- self.disable_application_view_loading = false
95
-
96
- # Set this to true if controller/helper code shouldn't be loaded
97
- # from the application
98
- mattr_accessor :disable_application_code_loading
99
- self.disable_application_code_loading = false
100
-
101
- # Set this ti true if code should not be mixed (i.e. it will be loaded
102
- # from the first valid path on $LOAD_PATH)
103
- mattr_accessor :disable_code_mixing
104
- self.disable_code_mixing = false
105
-
106
-
107
- private
108
-
109
- # A memo of the bottom of Rails' default load path
110
- mattr_accessor :rails_final_load_path
111
- # A memo of the bottom of Rails Dependencies load path
112
- mattr_accessor :rails_final_dependency_load_path
113
-
114
- public
115
-
116
- # Initializes the engines plugin and prepares Rails to start loading
117
- # plugins using engines extensions. Within this method:
118
- #
119
- # 1. Copies of the Rails configuration and initializer are stored;
120
- # 2. The Rails.plugins PluginList instance is created;
121
- # 3. Any plugins which were loaded before the engines plugin are given
122
- # the engines treatment via #enhance_loaded_plugins.
123
- # 4. The base public directory (into which plugin assets are mirrored)
124
- # is created, if necessary - #initialize_base_public_directory
125
- # 5. <tt>config.plugins</tt> is checked to see if a wildcard was present -
126
- # #check_for_star_wildcard
127
- #
128
- def self.init(rails_configuration, rails_initializer)
129
- # First, determine if we're running in legacy mode
130
- @legacy_support = self.const_defined?(:LegacySupport) && LegacySupport
131
-
132
- # Store some information about the plugin subsystem
133
- Rails.configuration = rails_configuration
134
-
135
- # We need a hook into this so we can get freaky with the plugin loading itself
136
- self.rails_initializer = rails_initializer
137
-
138
- @load_all_plugins = false
139
-
140
- store_load_path_markers
141
-
142
- Rails.plugins ||= PluginList.new
143
- enhance_loaded_plugins # including this one, as it happens.
144
-
145
- initialize_base_public_directory
146
-
147
- check_for_star_wildcard
148
-
149
- logger.debug "engines has started."
150
- end
151
-
152
- # You can enable legacy support by defining the LegacySupport constant
153
- # in the Engines module before Rails loads, i.e. at the *top* of environment.rb,
154
- # add:
155
- #
156
- # module Engines
157
- # LegacySupport = true
158
- # end
159
- #
160
- # Legacy Support doesn't actually do anything at the moment. If necessary
161
- # we may support older-style 'engines' using this flag.
162
- def self.legacy_support?
163
- @legacy_support
164
- end
165
-
166
- # A reference to the currently-loading/loaded plugin. This is present to support
167
- # legacy engines; it's preferred to use Rails.plugins[name] in your plugin's
168
- # init.rb file in order to get your Plugin instance.
169
- def self.current
170
- Rails.plugins.last
171
- end
172
-
173
- # This is set to true if a "*" widlcard is present at the end of
174
- # the config.plugins array.
175
- def self.load_all_plugins?
176
- @load_all_plugins
177
- end
178
-
179
- # Stores a record of the last paths which Rails added to each of the load path
180
- # attributes ($LOAD_PATH, Dependencies.load_paths and
181
- # ActionController::Routing.controller_paths) that influence how code is loaded
182
- # We need this to ensure that we place our additions to the load path *after*
183
- # all Rails' defaults
184
- def self.store_load_path_markers
185
- self.rails_final_load_path = $LOAD_PATH.last
186
- logger.debug "Rails final load path: #{self.rails_final_load_path}"
187
- self.rails_final_dependency_load_path = ::Dependencies.load_paths.last
188
- logger.debug "Rails final dependency load path: #{self.rails_final_dependency_load_path}"
189
- end
190
-
191
- # Create Plugin instances for plugins loaded before the engines plugin was.
192
- # Once a Plugin instance is created, the Plugin#load method is then called
193
- # to fully load the plugin. See Plugin#load for more details about how a
194
- # plugin is started once engines is involved.
195
- def self.enhance_loaded_plugins
196
- Engines.rails_initializer.loaded_plugins.each do |name|
197
- plugin_path = File.join(self.find_plugin_path(name), name)
198
- unless Rails.plugins[name]
199
- plugin = Plugin.new(name, plugin_path)
200
- logger.debug "enginizing plugin: #{plugin.name} from #{plugin_path}"
201
- plugin.load # injects the extra directories into the load path, and mirrors public files
202
- Rails.plugins << plugin
203
- end
204
- end
205
- logger.debug "plugins is now: #{Rails.plugins.map { |p| p.name }.join(", ")}"
206
- end
207
-
208
- # Ensure that the plugin asset subdirectory of RAILS_ROOT/public exists, and
209
- # that we've added a little warning message to instruct developers not to mess with
210
- # the files inside, since they're automatically generated.
211
- def self.initialize_base_public_directory
212
- if !File.exist?(self.public_directory)
213
- # create the public/engines directory, with a warning message in it.
214
- logger.debug "Creating public engine files directory '#{self.public_directory}'"
215
- FileUtils.mkdir(self.public_directory)
216
- message = %{Files in this directory are automatically generated from your Rails Engines.
217
- They are copied from the 'public' directories of each engine into this directory
218
- each time Rails starts (server, console... any time 'start_engine' is called).
219
- Any edits you make will NOT persist across the next server restart; instead you
220
- should edit the files within the <plugin_name>/assets/ directory itself.}
221
- target = File.join(public_directory, "README")
222
- File.open(target, 'w') { |f| f.puts(message) } unless File.exist?(target)
223
- end
224
- end
225
-
226
- # Check for a "*" at the end of the plugins list; if one is found, note that
227
- # we should load all other plugins once Rails has finished initializing, and
228
- # remove the "*".
229
- def self.check_for_star_wildcard
230
- if Rails.configuration.plugins && Rails.configuration.plugins.last == "*"
231
- Rails.configuration.plugins.pop
232
- @load_all_plugins = true
233
- end
234
- end
235
-
236
-
237
- #-
238
- # The following code is called once all plugins are loaded, and Rails is almost
239
- # finished initialization
240
- #+
241
-
242
- # Once the Rails Initializer has finished, the engines plugin takes over
243
- # and performs any post-processing tasks it may have, including:
244
- #
245
- # * Loading any remaining plugins if config.plugins ended with a '*'.
246
- # * Updating Rails::Info with version information, if possible.
247
- #
248
- def self.after_initialize
249
- if self.load_all_plugins?
250
- logger.debug "loading remaining plugins from #{Rails.configuration.plugin_paths.inspect}"
251
- # this will actually try to load ALL plugins again, but any that have already
252
- # been loaded will be ignored.
253
- rails_initializer.load_all_plugins
254
- update_rails_info_with_loaded_plugins
255
- end
256
- end
257
-
258
- # Updates Rails::Info with the list of loaded plugins, and version information for
259
- # each plugin. This information is then available via script/about, or through
260
- # the builtin rails_info controller.
261
- def self.update_rails_info_with_loaded_plugins
262
- if defined?(Rails::Info) # since it may not be available by default in some environments...
263
- # don't do anything if it's not there.
264
- Rails::Info.property("Loaded plugins") { Rails.plugins.map { |p| p.name }.join(", ") }
265
- Rails.plugins.each do |plugin|
266
- Rails::Info.property("#{plugin.name} version") { plugin.version.blank? ? "(unknown)" : plugin.version }
267
- end
268
- end
269
- end
270
-
271
- #-
272
- # helper methods to find and deal with plugin paths and names
273
- #+
274
-
275
- # Returns the path within +Rails.configuration.plugin_paths+ which includes
276
- # a plugin with the given name.
277
- def self.find_plugin_path(name)
278
- Rails.configuration.plugin_paths.find do |path|
279
- File.exist?(File.join(path, name.to_s))
280
- end
281
- end
282
-
283
- # Returns the name for the plugin at the given path.
284
- # (Note this method also appears in Rails::Initializer extensions)
285
- def self.plugin_name(path)
286
- File.basename(path)
287
- end
288
-
289
- # A general purpose method to mirror a directory (+source+) into a destination
290
- # directory, including all files and subdirectories. Files will not be mirrored
291
- # if they are identical already (checked via FileUtils#identical?).
292
- def self.mirror_files_from(source, destination)
293
- return unless File.directory?(source)
294
-
295
- # TODO: use Rake::FileList#pathmap?
296
-
297
- source_files = Dir[source + "/**/*"]
298
- source_dirs = source_files.select { |d| File.directory?(d) }
299
- source_files -= source_dirs
300
-
301
- source_dirs.each do |dir|
302
- # strip down these paths so we have simple, relative paths we can
303
- # add to the destination
304
- target_dir = File.join(destination, dir.gsub(source, ''))
305
- begin
306
- FileUtils.mkdir_p(target_dir)
307
- rescue Exception => e
308
- raise "Could not create directory #{target_dir}: \n" + e
309
- end
310
- end
311
-
312
- source_files.each do |file|
313
- begin
314
- target = File.join(destination, file.gsub(source, ''))
315
- unless File.exist?(target) && FileUtils.identical?(file, target)
316
- FileUtils.cp(file, target)
317
- end
318
- rescue Exception => e
319
- raise "Could not copy #{file} to #{target}: \n" + e
320
- end
321
- end
322
- end
323
- end