parlement 0.14 → 0.17

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.
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,19 +0,0 @@
1
- # Here we add a single helpful method to ActiveRecord::Base. This method may be deprecated
2
- # in the future, since support for the Module#config mechanism which required it has
3
- # also been dropped.
4
- module Engines::RailsExtensions::ActiveRecord
5
- # NOTE: Currently the Migrations system will ALWAYS wrap given table names
6
- # in the prefix/suffix, so any table name set via ActiveRecord::Base#set_table_name,
7
- # for instance will always get wrapped in the process of migration. For this
8
- # reason, whatever value you give to the config will be wrapped when set_table_name
9
- # is used in the model.
10
- #
11
- # This method is useful for determining the actual name (including prefix and
12
- # suffix) that Rails will use for a model, given a particular set_table_name
13
- # parameter.
14
- def wrapped_table_name(name)
15
- table_name_prefix + name + table_name_suffix
16
- end
17
- end
18
-
19
- ::ActiveRecord::Base.extend(Engines::RailsExtensions::ActiveRecord)
@@ -1,143 +0,0 @@
1
- # One of the magic features that that engines plugin provides is the ability to
2
- # override selected methods in controllers and helpers from your application.
3
- # This is achieved by trapping requests to load those files, and then mixing in
4
- # code from plugins (in the order the plugins were loaded) before finally loading
5
- # any versions from the main +app+ directory.
6
- #
7
- # The behaviour of this extension is output to the log file for help when
8
- # debugging.
9
- #
10
- # == Example
11
- #
12
- # A plugin contains the following controller in <tt>plugin/app/controllers/my_controller.rb</tt>:
13
- #
14
- # class MyController < ApplicationController
15
- # def index
16
- # @name = "HAL 9000"
17
- # end
18
- # def list
19
- # @robots = Robot.find(:all)
20
- # end
21
- # end
22
- #
23
- # In one application that uses this plugin, we decide that the name used in the
24
- # index action should be "Robbie", not "HAL 9000". To override this single method,
25
- # we create the corresponding controller in our application
26
- # (<tt>RAILS_ROOT/app/controllers/my_controller.rb</tt>), and redefine the method:
27
- #
28
- # class MyController < ApplicationController
29
- # def index
30
- # @name = "Robbie"
31
- # end
32
- # end
33
- #
34
- # The list method remains as it was defined in the plugin controller.
35
- #
36
- # The same basic principle applies to helpers, and also views and partials (although
37
- # view overriding is performed in Engines::RailsExtensions::Templates; see that
38
- # module for more information).
39
- #
40
- # === What about models?
41
- #
42
- # Unfortunately, it's not possible to provide this kind of magic for models.
43
- # The only reason why it's possible for controllers and helpers is because
44
- # they can be recognised by their filenames ("whatever_controller", "jazz_helper"),
45
- # whereas models appear the same as any other typical Ruby library ("node",
46
- # "user", "image", etc.).
47
- #
48
- # If mixing were allowed in models, it would mean code mixing for *every*
49
- # file that was loaded via +require_or_load+, and this could result in
50
- # problems where, for example, a Node model might start to include
51
- # functionality from another file called "node" somewhere else in the
52
- # <tt>$LOAD_PATH</tt>.
53
- #
54
- # One way to overcome this is to provide model functionality as a module in
55
- # a plugin, which developers can then include into their own model
56
- # implementations.
57
- #
58
- # Another option is to provide an abstract model (see the ActiveRecord::Base
59
- # documentation) and have developers subclass this model in their own
60
- # application if they must.
61
- #
62
- # ---
63
- #
64
- # The Engines::RailsExtensions::Dependencies module includes a method to
65
- # override Dependencies.require_or_load, which is called to load code needed
66
- # by Rails as it encounters constants that aren't defined.
67
- #
68
- # This method is enhanced with the code-mixing features described above.
69
- #
70
- module Engines::RailsExtensions::Dependencies
71
- def self.included(base) #:nodoc:
72
- base.class_eval { alias_method_chain :require_or_load, :engine_additions }
73
- end
74
-
75
- # Attempt to load the given file from any plugins, as well as the application.
76
- # This performs the 'code mixing' magic, allowing application controllers and
77
- # helpers to override single methods from those in plugins.
78
- # If the file can be found in any plugins, it will be loaded first from those
79
- # locations. Finally, the application version is loaded, using Ruby's behaviour
80
- # to replace existing methods with their new definitions.
81
- #
82
- # If <tt>Engines.disable_code_mixing == true</tt>, the first controller/helper on the
83
- # <tt>$LOAD_PATH</tt> will be used (plugins' +app+ directories are always lower on the
84
- # <tt>$LOAD_PATH</tt> than the main +app+ directory).
85
- #
86
- # If <tt>Engines.disable_application_code_loading == true</tt>, controllers will
87
- # not be loaded from the main +app+ directory *if* they are present in any
88
- # plugins.
89
- #
90
- # Returns true if the file could be loaded (from anywhere); false otherwise -
91
- # mirroring the behaviour of +require_or_load+ from Rails (which mirrors
92
- # that of Ruby's own +require+, I believe).
93
- def require_or_load_with_engine_additions(file_name, const_path=nil)
94
- return require_or_load_without_engine_additions(file_name, const_path) if Engines.disable_code_mixing
95
-
96
- file_loaded = false
97
-
98
- # try and load the plugin code first
99
- # can't use model, as there's nothing in the name to indicate that the file is a 'model' file
100
- # rather than a library or anything else.
101
- ['controller', 'helper'].each do |file_type|
102
- # if we recognise this type
103
- # (this regexp splits out the module/filename from any instances of app/#{type}, so that
104
- # modules are still respected.)
105
- if file_name =~ /^(.*app\/#{file_type}s\/)?(.*_#{file_type})(\.rb)?$/
106
- base_name = $2
107
- # ... go through the plugins from first started to last, so that
108
- # code with a high precedence (started later) will override lower precedence
109
- # implementations
110
- Rails.plugins.each do |plugin|
111
- plugin_file_name = File.expand_path(File.join(plugin.root, 'app', "#{file_type}s", base_name))
112
- logger.debug("checking plugin '#{plugin.name}' for '#{base_name}'")
113
- if File.file?("#{plugin_file_name}.rb")
114
- logger.debug("==> loading from plugin '#{plugin.name}'")
115
- file_loaded = true if require_or_load_without_engine_additions(plugin_file_name, const_path)
116
- end
117
- end
118
-
119
- # finally, load any application-specific controller classes using the 'proper'
120
- # rails load mechanism, EXCEPT when we're testing engines and could load this file
121
- # from an engine
122
- if Engines.disable_application_code_loading
123
- logger.debug("loading from application disabled.")
124
- else
125
- # Ensure we are only loading from the /app directory at this point
126
- app_file_name = File.join(RAILS_ROOT, 'app', "#{file_type}s", "#{base_name}")
127
- if File.file?("#{app_file_name}.rb")
128
- logger.debug("loading from application: #{base_name}")
129
- file_loaded = true if require_or_load_without_engine_additions(app_file_name, const_path)
130
- else
131
- logger.debug("(file not found in application)")
132
- end
133
- end
134
- end
135
- end
136
-
137
- # if we managed to load a file, return true. If not, default to the original method.
138
- # Note that this relies on the RHS of a boolean || not to be evaluated if the LHS is true.
139
- file_loaded || require_or_load_without_engine_additions(file_name, const_path)
140
- end
141
- end
142
-
143
- ::Dependencies.send(:include, Engines::RailsExtensions::Dependencies)
@@ -1,155 +0,0 @@
1
- # Contains the enhancements to Rails' migrations system to support the
2
- # Engines::PluginMigrator. See Engines::RailsExtensions::Migrations for more
3
- # information.
4
-
5
- require "engines/plugin_migrator"
6
-
7
- # = Plugins and Migrations: Background
8
- #
9
- # Rails uses migrations to describe changes to the databases as your application
10
- # evolves. Each change to your application - adding and removing models, most
11
- # commonly - might require tweaks to your schema in the form of new tables, or new
12
- # columns on existing tables, or possibly the removal of tables or columns. Migrations
13
- # can even include arbitrary code to *transform* data as the underlying schema
14
- # changes.
15
- #
16
- # The point is that at any particular stage in your application's development,
17
- # migrations serve to transform the database into a state where it is compatible
18
- # and appropriate at that time.
19
- #
20
- # == What about plugins?
21
- #
22
- # If you want to share models using plugins, chances are that you might also
23
- # want to include the corresponding migrations to create tables for those models.
24
- # With the engines plugin installed, plugins can carry migration data easily:
25
- #
26
- # vendor/
27
- # |
28
- # plugins/
29
- # |
30
- # my_plugin/
31
- # |- init.rb
32
- # |- lib/
33
- # |- db/
34
- # |-migrate/
35
- # |- 001_do_something.rb
36
- # |- 002_and_something_else.rb
37
- # |- ...
38
- #
39
- # When you install a plugin which contains migrations, you are undertaking a
40
- # further step in the development of your application, the same as the addition
41
- # of any other code. With this in mind, you may want to 'roll back' the
42
- # installation of this plugin at some point, and the database should be able
43
- # to migrate back to the point without this plugin in it too.
44
- #
45
- # == An example
46
- #
47
- # For example, our current application is at version 14 (according to the
48
- # +schema_info+ table), when we decide that we want to add a tagging plugin. The
49
- # tagging plugin chosen includes migrations to create the tables it requires
50
- # (say, _tags_ and _taggings_, for instance), along with the models and helpers
51
- # one might expect.
52
- #
53
- # After installing this plugin, these tables should be created in our database.
54
- # Rather than running the migrations directly from the plugin, they should be
55
- # integrated into our main migration stream in order to accurately reflect the
56
- # state of our application's database *at this moment in time*.
57
- #
58
- # $ script/generate plugin_migration
59
- # exists db/migrate
60
- # create db/migrate/015_migrate_tagging_plugin_to_version_3.rb
61
- #
62
- # This migration will take our application to version 15, and contains the following,
63
- # typical migration code:
64
- #
65
- # class MigrateTaggingPluginToVersion3 < ActiveRecord::Migration
66
- # def self.up
67
- # Rails.plugins[:tagging].migrate(3)
68
- # end
69
- # def self.down
70
- # Rails.plugins[:tagging].migrate(0)
71
- # end
72
- # end
73
- #
74
- # When we migrate our application up, using <tt>rake db:migrate</tt> as normal,
75
- # the plugin will be migrated up to its latest version (3 in this example). If we
76
- # ever decide to migrate the application back to the state it was in at version 14,
77
- # the plugin migrations will be taken back down to version 0 (which, typically,
78
- # would remove all tables the plugin migrations define).
79
- #
80
- # == Upgrading plugins
81
- #
82
- # It might happen that later in an application's life, we update to a new version of
83
- # the tagging plugin which requires some changes to our database. The tagging plugin
84
- # provides these changes in the form of its own migrations.
85
- #
86
- # In this case, we just need to re-run the plugin_migration generator to create a
87
- # new migration from the current revision to the newest one:
88
- #
89
- # $ script/generate plugin_migration
90
- # exists db/migrate
91
- # create db/migrate/023_migrate_tagging_plugin_to_version_5.rb
92
- #
93
- # The contents of this migration are:
94
- #
95
- # class MigrateTaggingPluginToVersion3 < ActiveRecord::Migration
96
- # def self.up
97
- # Rails.plugins[:tagging].migrate(5)
98
- # end
99
- # def self.down
100
- # Rails.plugins[:tagging].migrate(3)
101
- # end
102
- # end
103
- #
104
- # Notice that if we were to migrate down to revision 22 or lower, the tagging plugin
105
- # will be migrated back down to version 3 - the version we were previously at.
106
- #
107
- #
108
- # = Creating migrations in plugins
109
- #
110
- # In order to use the plugin migration functionality that engines provides, a plugin
111
- # only needs to provide regular migrations in a <tt>db/migrate</tt> folder within it.
112
- #
113
- # = Explicitly migrating plugins
114
- #
115
- # It's possible to migrate plugins within your own migrations, or any other code.
116
- # Simply get the Plugin instance, and its Plugin#migrate method with the version
117
- # you wish to end up at:
118
- #
119
- # Rails.plugins[:whatever].migrate(version)
120
- #
121
- # ---
122
- #
123
- # The Engines::RailsExtensions::Migrations module defines extensions for Rails'
124
- # migration systems. Specifically:
125
- #
126
- # * Adding a hook to initialize_schema_information to create the plugin schema
127
- # info table.
128
- #
129
- module Engines::RailsExtensions::Migrations
130
- def self.included(base) # :nodoc:
131
- base.class_eval { alias_method_chain :initialize_schema_information, :engine_additions }
132
- end
133
-
134
- # Create the schema tables, and ensure that the plugin schema table
135
- # is also initialized. The plugin schema info table is defined by
136
- # Engines::PluginMigrator.schema_info_table_name.
137
- def initialize_schema_information_with_engine_additions
138
- initialize_schema_information_without_engine_additions
139
-
140
- # create the plugin schema stuff.
141
- begin
142
- execute <<-ESQL
143
- CREATE TABLE #{Engines::PluginMigrator.schema_info_table_name}
144
- (plugin_name #{type_to_sql(:string)}, version #{type_to_sql(:integer)})
145
- ESQL
146
- rescue ActiveRecord::StatementInvalid
147
- # Schema has been initialized
148
- end
149
- end
150
- end
151
-
152
- ::ActiveRecord::ConnectionAdapters::SchemaStatements.send(:include, Engines::RailsExtensions::Migrations)
153
-
154
- # Set ActiveRecord to ignore the plugin schema table by default
155
- ::ActiveRecord::SchemaDumper.ignore_tables << Engines.schema_info_table
@@ -1,116 +0,0 @@
1
- # The engines plugin makes it trivial to share public assets using plugins.
2
- # To do this, include an <tt>assets</tt> directory within your plugin, and put
3
- # your javascripts, stylesheets and images in subdirectories of that folder:
4
- #
5
- # my_plugin
6
- # |- init.rb
7
- # |- lib/
8
- # |- assets/
9
- # |- javascripts/
10
- # | |- my_functions.js
11
- # |
12
- # |- stylesheets/
13
- # | |- my_styles.css
14
- # |
15
- # |- images/
16
- # |- my_face.jpg
17
- #
18
- # Files within the <tt>asset</tt> structure are automatically mirrored into
19
- # a publicly-accessible folder each time your application starts (see
20
- # Plugin#mirror_public_assets).
21
- #
22
- #
23
- # == Using plugin assets in views
24
- #
25
- # It's also simple to use Rails' helpers in your views to use plugin assets.
26
- # The default helper methods have been enhanced by the engines plugin to accept
27
- # a <tt>:plugin</tt> option, indicating the plugin containing the desired asset.
28
- #
29
- # For example, it's easy to use plugin assets in your layouts:
30
- #
31
- # <%= stylesheet_link_tag "my_styles", :plugin => "my_plugin", :media => "screen" %>
32
- # <%= javascript_include_tag "my_functions", :plugin => "my_plugin" %>
33
- #
34
- # ... and similarly in views and partials, it's easy to use plugin images:
35
- #
36
- # <%= image_tag "my_face", :plugin => "my_plugin" %>
37
- # <!-- or -->
38
- # <%= image_path "my_face", :plugin => "my_plugin" %>
39
- #
40
- # Where the default helpers allow the specification of more than one file (i.e. the
41
- # javascript and stylesheet helpers), you can do similarly for multiple assets from
42
- # within a single plugin.
43
- #
44
- # ---
45
- #
46
- # This module enhances four of the methods from ActionView::Helpers::AssetTagHelper:
47
- #
48
- # * stylesheet_link_tag
49
- # * javascript_include_tag
50
- # * image_path
51
- # * image_tag
52
- #
53
- # Each one of these methods now accepts the key/value pair <tt>:plugin => "plugin_name"</tt>,
54
- # which can be used to specify the originating plugin for any assets.
55
- #
56
- module Engines::RailsExtensions::PublicAssetHelpers
57
- def self.included(base) #:nodoc:
58
- base.class_eval do
59
- [:stylesheet_link_tag, :javascript_include_tag, :image_path, :image_tag].each do |m|
60
- alias_method_chain m, :engine_additions
61
- end
62
- end
63
- end
64
-
65
- # Adds plugin functionality to Rails' default stylesheet_link_tag method.
66
- def stylesheet_link_tag_with_engine_additions(*sources)
67
- stylesheet_link_tag_without_engine_additions(*Engines::RailsExtensions::PublicAssetHelpers.pluginify_sources("stylesheets", *sources))
68
- end
69
-
70
- # Adds plugin functionality to Rails' default javascript_include_tag method.
71
- def javascript_include_tag_with_engine_additions(*sources)
72
- javascript_include_tag_without_engine_additions(*Engines::RailsExtensions::PublicAssetHelpers.pluginify_sources("javascripts", *sources))
73
- end
74
-
75
- #--
76
- # Our modified image_path now takes a 'plugin' option, though it doesn't require it
77
- #++
78
-
79
- # Adds plugin functionality to Rails' default image_path method.
80
- def image_path_with_engine_additions(source, options={})
81
- options.stringify_keys!
82
- source = Engines::RailsExtensions::PublicAssetHelpers.plugin_asset_path(options["plugin"], "images", source) if options["plugin"]
83
- image_path_without_engine_additions(source)
84
- end
85
-
86
- # Adds plugin functionality to Rails' default image_tag method.
87
- def image_tag_with_engine_additions(source, options={})
88
- options.stringify_keys!
89
- if options["plugin"]
90
- source = Engines::RailsExtensions::PublicAssetHelpers.plugin_asset_path(options["plugin"], "images", source)
91
- options.delete("plugin")
92
- end
93
- image_tag_without_engine_additions(source, options)
94
- end
95
-
96
- #--
97
- # The following are methods on this module directly because of the weird-freaky way
98
- # Rails creates the helper instance that views actually get
99
- #++
100
-
101
- # Convert sources to the paths for the given plugin, if any plugin option is given
102
- def self.pluginify_sources(type, *sources)
103
- options = sources.last.is_a?(Hash) ? sources.pop.stringify_keys : { }
104
- sources.map! { |s| plugin_asset_path(options["plugin"], type, s) } if options["plugin"]
105
- options.delete("plugin") # we don't want it appearing in the HTML
106
- sources << options # re-add options
107
- end
108
-
109
- # Returns the publicly-addressable relative URI for the given asset, type and plugin
110
- def self.plugin_asset_path(plugin_name, type, asset)
111
- raise "No plugin called '#{plugin_name}' - please use the full name of a loaded plugin." if Rails.plugins[plugin_name].nil?
112
- "/#{Rails.plugins[plugin_name].public_asset_directory}/#{type}/#{asset}"
113
- end
114
- end
115
-
116
- ::ActionView::Helpers::AssetTagHelper.send(:include, Engines::RailsExtensions::PublicAssetHelpers)
@@ -1,20 +0,0 @@
1
- # In order to give a richer infrastructure for dealing with plugins, the engines
2
- # plugin adds two new attributes to the Rails module:
3
- #
4
- # [+plugins+] A PluginList instance which holds the currently loaded plugins
5
- # [+configuration+] The current Rails::Configuration instance, so that we can
6
- # query any parameters that might be set *after* Rails has
7
- # loaded, as well as during plugin initialization
8
- #
9
- #--
10
- # Here we just re-open the Rails module and add our custom accessors; it
11
- # may be cleaner to seperate them into a module, but in this case that seems
12
- # like overkill.
13
- #++
14
- module Rails
15
- # The set of all loaded plugins
16
- mattr_accessor :plugins
17
-
18
- # The Rails::Initializer::Configuration object
19
- mattr_accessor :configuration
20
- end