parlement 0.10 → 0.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. data/CHANGES +11 -0
  2. data/MEMORY +9 -1
  3. data/README +5 -4
  4. data/app/controllers/account_controller.rb +10 -13
  5. data/app/controllers/application.rb +4 -5
  6. data/app/controllers/elt_controller.rb +9 -7
  7. data/app/controllers/person_controller.rb +1 -3
  8. data/app/controllers/subscriber_controller.rb +10 -10
  9. data/app/helpers/elt_helper.rb +2 -0
  10. data/app/models/elt.rb +28 -19
  11. data/app/models/mail.rb +26 -14
  12. data/app/models/mail_notify.rb +5 -4
  13. data/app/models/person.rb +11 -2
  14. data/app/views/account/_login.rhtml +3 -3
  15. data/app/views/account/_show.rhtml +12 -14
  16. data/app/views/elt/_choice.rhtml +3 -3
  17. data/app/views/elt/_elt.rhtml +4 -4
  18. data/app/views/elt/_list.rhtml +2 -2
  19. data/app/views/elt/_listByDate.rhtml +1 -1
  20. data/app/views/elt/_listByVote.rhtml +1 -1
  21. data/app/views/elt/new.rhtml +3 -3
  22. data/app/views/elt/show.rhtml +2 -2
  23. data/app/views/layouts/top.rhtml +6 -0
  24. data/app/views/mail_notify/publish.text.html.rhtml +1 -1
  25. data/app/views/person/_listElts.rhtml +5 -3
  26. data/app/views/person/show.rhtml +1 -2
  27. data/config/boot.rb +5 -4
  28. data/config/environment.rb +6 -4
  29. data/config/routes.rb +3 -2
  30. data/db/development_structure.sql +15 -4
  31. data/db/migrate/006_last_activity.rb +10 -0
  32. data/db/schema.rb +67 -49
  33. data/public/dispatch.fcgi +1 -0
  34. data/public/javascripts/controls.js +41 -23
  35. data/public/javascripts/dragdrop.js +317 -99
  36. data/public/javascripts/effects.js +301 -166
  37. data/public/javascripts/prototype.js +932 -402
  38. data/public/stylesheets/default.css +3 -2
  39. data/test/unit/elt_test.rb +13 -0
  40. data/test/unit/mail_test.rb +3 -1
  41. data/vendor/plugins/engines/CHANGELOG +203 -99
  42. data/vendor/plugins/engines/MIT-LICENSE +1 -1
  43. data/vendor/plugins/engines/README +32 -384
  44. data/vendor/plugins/engines/Rakefile +14 -0
  45. data/vendor/plugins/engines/UPGRADING +93 -0
  46. data/vendor/plugins/engines/about.yml +7 -0
  47. data/vendor/plugins/engines/generators/plugin_migration/USAGE +45 -0
  48. data/vendor/plugins/engines/generators/plugin_migration/plugin_migration_generator.rb +79 -0
  49. data/vendor/plugins/engines/generators/plugin_migration/templates/plugin_migration.erb +13 -0
  50. data/vendor/plugins/engines/init.rb +34 -47
  51. data/vendor/plugins/engines/install.rb +32 -0
  52. data/vendor/plugins/engines/lib/engines/{ruby_extensions.rb → deprecated_config_support.rb} +135 -113
  53. data/vendor/plugins/engines/lib/engines/plugin.rb +214 -0
  54. data/vendor/plugins/engines/lib/engines/plugin_list.rb +31 -0
  55. data/vendor/plugins/engines/lib/engines/plugin_migrator.rb +60 -0
  56. data/vendor/plugins/engines/lib/engines/rails_extensions/active_record.rb +19 -0
  57. data/vendor/plugins/engines/lib/engines/rails_extensions/dependencies.rb +143 -0
  58. data/vendor/plugins/engines/lib/engines/rails_extensions/migrations.rb +155 -0
  59. data/vendor/plugins/engines/lib/engines/rails_extensions/public_asset_helpers.rb +116 -0
  60. data/vendor/plugins/engines/lib/engines/rails_extensions/rails.rb +20 -0
  61. data/vendor/plugins/engines/lib/engines/rails_extensions/rails_initializer.rb +86 -0
  62. data/vendor/plugins/engines/lib/engines/rails_extensions/routing.rb +77 -0
  63. data/vendor/plugins/engines/lib/engines/rails_extensions/templates.rb +140 -0
  64. data/vendor/plugins/engines/lib/engines/rails_extensions.rb +6 -0
  65. data/vendor/plugins/engines/lib/engines/testing.rb +88 -0
  66. data/vendor/plugins/engines/lib/engines.rb +281 -425
  67. data/vendor/plugins/engines/tasks/engines.rake +108 -137
  68. metadata +218 -250
  69. data/db/ROOT/perso.txt +0 -214
  70. data/public/images/indicator.gif +0 -0
  71. data/public/images/orange_by_darren_Hester_350o.jpg +0 -0
  72. data/public/images/smile.png +0 -0
  73. data/vendor/plugins/engines/generators/engine/USAGE +0 -26
  74. data/vendor/plugins/engines/generators/engine/engine_generator.rb +0 -199
  75. data/vendor/plugins/engines/generators/engine/templates/README +0 -85
  76. data/vendor/plugins/engines/generators/engine/templates/init_engine.erb +0 -15
  77. data/vendor/plugins/engines/generators/engine/templates/install.erb +0 -4
  78. data/vendor/plugins/engines/generators/engine/templates/lib/engine.erb +0 -6
  79. data/vendor/plugins/engines/generators/engine/templates/licenses/GPL +0 -18
  80. data/vendor/plugins/engines/generators/engine/templates/licenses/LGPL +0 -19
  81. data/vendor/plugins/engines/generators/engine/templates/licenses/MIT +0 -22
  82. data/vendor/plugins/engines/generators/engine/templates/licenses/None +0 -1
  83. data/vendor/plugins/engines/generators/engine/templates/public/javascripts/engine.js +0 -0
  84. data/vendor/plugins/engines/generators/engine/templates/public/stylesheets/engine.css +0 -0
  85. data/vendor/plugins/engines/generators/engine/templates/tasks/engine.rake +0 -0
  86. data/vendor/plugins/engines/generators/engine/templates/test/test_helper.erb +0 -17
  87. data/vendor/plugins/engines/lib/bundles/require_resource.rb +0 -124
  88. data/vendor/plugins/engines/lib/bundles.rb +0 -77
  89. data/vendor/plugins/engines/lib/engines/action_mailer_extensions.rb +0 -140
  90. data/vendor/plugins/engines/lib/engines/action_view_extensions.rb +0 -141
  91. data/vendor/plugins/engines/lib/engines/active_record_extensions.rb +0 -21
  92. data/vendor/plugins/engines/lib/engines/dependencies_extensions.rb +0 -129
  93. data/vendor/plugins/engines/lib/engines/migration_extensions.rb +0 -53
  94. data/vendor/plugins/engines/lib/engines/routing_extensions.rb +0 -28
  95. data/vendor/plugins/engines/lib/engines/testing_extensions.rb +0 -327
  96. data/vendor/plugins/engines/tasks/deprecated_engines.rake +0 -7
  97. data/vendor/plugins/engines/test/action_view_extensions_test.rb +0 -9
  98. data/vendor/plugins/engines/test/ruby_extensions_test.rb +0 -115
  99. data/vendor/plugins/guid/README.TXT +0 -29
  100. data/vendor/plugins/guid/init.rb +0 -30
  101. data/vendor/plugins/guid/lib/usesguid.rb +0 -37
  102. data/vendor/plugins/guid/lib/uuid22.rb +0 -43
  103. data/vendor/plugins/guid/lib/uuidtools.rb +0 -572
  104. data/vendor/plugins/responds_to_parent/MIT-LICENSE +0 -20
  105. data/vendor/plugins/responds_to_parent/README +0 -42
  106. data/vendor/plugins/responds_to_parent/Rakefile +0 -22
  107. data/vendor/plugins/responds_to_parent/init.rb +0 -1
  108. data/vendor/plugins/responds_to_parent/lib/responds_to_parent.rb +0 -46
  109. data/vendor/plugins/responds_to_parent/test/responds_to_parent_test.rb +0 -115
@@ -1,124 +0,0 @@
1
- # RequireResource v.1.4 by Duane Johnson
2
- #
3
- # Makes inclusion of javascript and stylesheet resources easier via automatic or explicit
4
- # calls. e.g. require_javascript 'popup' is an explicit call.
5
- #
6
- # The simplest way to make use of this functionality is to add
7
- # <%= resource_tags %>
8
- # to your layout (usually in the <head></head> section). This will automatically add
9
- # bundle support to your application, as well as enable simple javascript and stylesheet
10
- # dependencies for your views.
11
- #
12
- # Note that this can easily be turned in to a helper on its own.
13
- module RequireResource
14
- mattr_accessor :path_prefix
15
-
16
- # Write out all javascripts & stylesheets, including default javascripts (unless :defaults => false)
17
- def resource_tags(options = {})
18
- options = {:auto => true, :defaults => true}.update(options)
19
- require_defaults if options[:defaults]
20
- stylesheet_auto_link_tags(:auto => options[:auto]) +
21
- javascript_auto_include_tags(:auto => options[:auto])
22
- end
23
-
24
- # Write out the <link> tags themselves based on the array of stylesheets to be included
25
- def stylesheet_auto_link_tags(options = {})
26
- options = {:auto => true}.update(options)
27
- ensure_resource_is_initialized(:stylesheet)
28
- autorequire(:stylesheet) if options[:auto]
29
- @stylesheets.uniq.inject("") do |buffer, css|
30
- buffer << stylesheet_link_tag(css) + "\n "
31
- end
32
- end
33
-
34
- # Write out the <script> tags themselves based on the array of javascripts to be included
35
- def javascript_auto_include_tags(options = {})
36
- options = {:auto => true}.update(options)
37
- ensure_resource_is_initialized(:javascript)
38
- autorequire(:javascript) if options[:auto]
39
- @javascripts.uniq.inject("") do |buffer, js|
40
- buffer << javascript_include_tag(js) + "\n "
41
- end
42
- end
43
-
44
- # Bundle the defaults together for easy inclusion
45
- def require_defaults
46
- require_javascript(:prototype)
47
- require_javascript(:controls)
48
- require_javascript(:effects)
49
- require_javascript(:dragdrop)
50
- end
51
-
52
- # Adds a javascript to the array of javascripts that will be included in the layout by
53
- # either your call to 'javascript_auto_include_tags' or 'resource_tags'.
54
- def require_javascript(*scripts)
55
- scripts.each do |script|
56
- require_resource(:javascript, RequireResource.path_prefix.to_s + script.to_s)
57
- end
58
- end
59
-
60
- # Adds a stylesheet to the array of stylesheets that will be included in the layout by
61
- # either your call to 'stylesheet_auto_link_tags' or 'resource_tags'.
62
- def require_stylesheet(*sheets)
63
- sheets.each do |sheet|
64
- require_resource(:stylesheet, RequireResource.path_prefix.to_s + sheet.to_s)
65
- end
66
- end
67
-
68
- # Changes the RequireResource.path_prefix within the scope of a block. This is
69
- # particularly useful when requiring several resources within a directory. For example,
70
- # bundles can take advantage of this by calling
71
- # require_relative_to Engines.current.public_dir do
72
- # require_javascript '...'
73
- # require_stylesheet '...'
74
- # # ...
75
- # end
76
- def require_relative_to(path)
77
- former_prefix = RequireResource.path_prefix
78
- RequireResource.path_prefix = path
79
- yield
80
- RequireResource.path_prefix = former_prefix
81
- end
82
-
83
- protected
84
- # Adds resources such as stylesheet or javascript files to the corresponding array of
85
- # resources that will be 'required' by the layout. The +resource_type+ is either
86
- # :javascript or :stylesheet. The +extension+ is optional, and should normally correspond
87
- # with the resource type, e.g. 'css' for :stylesheet and 'js' for :javascript.
88
- def autorequire(resource_type, extension = nil)
89
- extensions = {:stylesheet => 'css', :javascript => 'js'}
90
- extension ||= extensions[resource_type]
91
- candidates = []
92
- class_iterator = controller.class
93
- resource_path = "#{RAILS_ROOT}/public/#{resource_type.to_s.pluralize}/"
94
-
95
- while ![ActionController::Base].include? class_iterator
96
- controller_path = class_iterator.to_s.underscore.sub('controllers/', '').sub('_controller', '')
97
- candidates |= [ "#{controller_path}", "#{controller_path}/#{controller.action_name}" ]
98
- class_iterator = class_iterator.superclass
99
- end
100
-
101
- for candidate in candidates
102
- if FileTest.exist?("#{resource_path}/#{candidate}.#{extension}")
103
- require_resource(resource_type, candidate)
104
- end
105
- end
106
- end
107
-
108
- # Adds a resource (e.g. a javascript) to the appropriate array (e.g. @javascripts)
109
- # ONLY if the resource is not already included.
110
- def require_resource(type, name)
111
- variable = type.to_s.pluralize
112
- new_resource_array = (instance_variable_get("@#{variable}") || []) | [name.to_s]
113
- instance_variable_set("@#{variable}", new_resource_array)
114
- end
115
-
116
- # Ensures that a resource array (e.g. @javascripts) is not nil--uses [] if so
117
- def ensure_resource_is_initialized(type)
118
- variable = type.to_s.pluralize
119
- new_resource_array = (instance_variable_get("@#{variable}") || [])
120
- instance_variable_set("@#{variable}", new_resource_array)
121
- end
122
- end
123
-
124
- ActionView::Base.send(:include, RequireResource)
@@ -1,77 +0,0 @@
1
- require 'bundles/require_resource'
2
-
3
- # The 'require_bundle' method is used in views to declare that certain stylesheets and javascripts should
4
- # be included by the 'resource_tags' (used in the layout) for the view to function properly.
5
- module Bundles
6
- def require_bundle(name, *args)
7
- method = "bundle_#{name}"
8
- send(method, *args)
9
- end
10
-
11
- def require_bundles(*names)
12
- names.each { |name| require_bundle(name) }
13
- end
14
- end
15
-
16
- ActionView::Base.send(:include, Bundles)
17
-
18
- # Registers a module within the Bundles module by renaming the module's 'bundle' method (so it doesn't
19
- # clash with other methods named 'bundle') and by including any Controller or Helper modules within
20
- # their respective Rails base classes.
21
- #
22
- # For example, if you have a module such as
23
- # module Bundles::Calendar; end
24
- #
25
- # then within that Calendar module there *must* be a method named "bundle" which groups the
26
- # bundle's resources together. Example:
27
- # module Bundles::Calendar
28
- # def bundle
29
- # require_relative_to Engines.current.public_dir do
30
- # require_stylesheet "/stylesheets/calendar.css"
31
- # require_javascript "/javascripts/calendar.js"
32
- # end
33
- # end
34
- # end
35
- #
36
- # You may optionally define a Controller or Helper sub-module if you need any methods available to
37
- # the applications controllers or views. Example:
38
- #
39
- # module Bundles::Calendar
40
- # module Helper
41
- # def calendar_date_select(*args
42
- # # ... output some HTML
43
- # end
44
- # end
45
- # end
46
- #
47
- # The calendar_date_select method will now be available within the scope of the app's views because the
48
- # register_bundle method will inject the Helper module's methods in to ActionView::Base for you.
49
- #
50
- # Similarly, you can make methods available to controllers by adding a Controller module.
51
- def register_bundle(name)
52
- require "bundles/#{name}"
53
-
54
- # Rename the generic 'bundle' method in to something that doesn't conflict with
55
- # the other module method names.
56
- bundle_module = Bundles.const_get(name.to_s.camelize)
57
- bundle_module.module_eval "alias bundle_#{name} bundle"
58
- bundle_module.send :undef_method, :bundle
59
-
60
- # Then include the bundle module in to the base module, so that the methods will
61
- # be available inside ActionView::Base
62
- ActionView::Base.send(:include, bundle_module)
63
-
64
- # Check for optional Controller module
65
- if bundle_module.const_defined? 'Controller'
66
- controller_addon = bundle_module.const_get('Controller')
67
- RAILS_DEFAULT_LOGGER.debug "Including #{name} bundle's Controller module"
68
- ActionController::Base.send(:include, controller_addon)
69
- end
70
-
71
- # Check for optional Helper module
72
- if bundle_module.const_defined? 'Helper'
73
- helper_addon = bundle_module.const_get('Helper')
74
- RAILS_DEFAULT_LOGGER.debug "Including #{name} bundle's Helper module"
75
- ActionView::Base.send(:include, helper_addon)
76
- end
77
- end
@@ -1,140 +0,0 @@
1
- # Overriding ActionMailer to teach it about Engines...
2
- module ActionMailer
3
- class Base
4
-
5
- # Initialize the mailer via the given +method_name+. The body will be
6
- # rendered and a new TMail::Mail object created.
7
- def old_create!(method_name, *parameters) #:nodoc:
8
- initialize_defaults(method_name)
9
- send(method_name, *parameters)
10
-
11
-
12
- # If an explicit, textual body has not been set, we check assumptions.
13
- unless String === @body
14
- # First, we look to see if there are any likely templates that match,
15
- # which include the content-type in their file name (i.e.,
16
- # "the_template_file.text.html.rhtml", etc.). Only do this if parts
17
- # have not already been specified manually.
18
-
19
- templates = get_all_templates_for_action(@template)
20
-
21
- #RAILS_DEFAULT_LOGGER.debug "template: #{@template}; templates: #{templates.inspect}"
22
-
23
- if @parts.empty?
24
-
25
- # /app/views/<mailer object name> / <action>.something.rhtml
26
-
27
- #templates = Dir.glob("#{template_path}/#{@template}.*")
28
-
29
- # this loop expects an array of paths to actual template files which match
30
- # the given action name
31
- templates.each do |path|
32
- # TODO: don't hardcode rhtml|rxml
33
- basename = File.basename(path)
34
- next unless md = /^([^\.]+)\.([^\.]+\.[^\+]+)\.(rhtml|rxml)$/.match(basename)
35
-
36
- template_name = basename
37
- content_type = md.captures[1].gsub('.', '/')
38
-
39
- @parts << Part.new(:content_type => content_type,
40
- :disposition => "inline", :charset => charset,
41
- :body => render_message(template_name, @body))
42
- end
43
- unless @parts.empty?
44
- @content_type = "multipart/alternative"
45
- @parts = sort_parts(@parts, @implicit_parts_order)
46
- end
47
- end
48
-
49
- # Then, if there were such templates, we check to see if we ought to
50
- # also render a "normal" template (without the content type). If a
51
- # normal template exists (or if there were no implicit parts) we render
52
- # it.
53
- template_exists = @parts.empty?
54
- # template_exists ||= Dir.glob("#{template_path}/#{@template}.*").any? { |i| i.split(".").length == 2 }
55
- template_exists ||= templates.any? do |i|
56
- arr = File.basename(i).split(".")
57
- (arr.length == 2) && (arr[0] == @template)
58
- end
59
- @body = render_message(@template, @body) if template_exists
60
-
61
- # Finally, if there are other message parts and a textual body exists,
62
- # we shift it onto the front of the parts and set the body to nil (so
63
- # that create_mail doesn't try to render it in addition to the parts).
64
- if !@parts.empty? && String === @body
65
- @parts.unshift Part.new(:charset => charset, :body => @body)
66
- @body = nil
67
- end
68
- end
69
-
70
- # If this is a multipart e-mail add the mime_version if it is not
71
- # already set.
72
- @mime_version ||= "1.0" if !@parts.empty?
73
-
74
- # build the mail object itself
75
- @mail = create_mail
76
- end
77
-
78
- private
79
-
80
-
81
- # JGA - Modified to pass the method name to initialize_template_class
82
- def render(opts)
83
- body = opts.delete(:body)
84
- initialize_template_class(body, opts[:file]).render(opts)
85
- end
86
-
87
-
88
- # Return all ActionView template paths from the app and all Engines
89
- def template_paths
90
- paths = [template_path]
91
- Engines.each { |engine|
92
- # add a path for every engine if one exists.
93
- engine_template_path = File.join(engine.root, "app", "views", mailer_name)
94
- paths << engine_template_path if File.exists?(engine_template_path)
95
- }
96
- paths
97
- end
98
-
99
- # Returns a list of all template paths in the app and Engines
100
- # which contain templates that might be used for the given action
101
- def get_all_templates_for_action(action)
102
- # can we trust uniq! to do this? i'm not sure...
103
- templates = []
104
- seen_names = []
105
- template_paths.each { |path|
106
- all_templates_for_path = Dir.glob(File.join(path, "#{action}*"))
107
- all_templates_for_path.each { |template|
108
- name = File.basename(template)
109
- if !seen_names.include?(name)
110
- seen_names << name
111
- templates << template
112
- end
113
- }
114
- }
115
- templates
116
- end
117
-
118
- # Returns the first path to the given template in our
119
- # app/Engine 'chain'.
120
- def find_template_root_for(template)
121
- all_paths = get_all_templates_for_action(template)
122
- if all_paths.empty?
123
- return template_path
124
- else
125
- return File.dirname(all_paths[0])
126
- end
127
- end
128
-
129
- # JGA - changed here to include the method name that we
130
- # are interested in, so that we can re-locate the proper
131
- # template root
132
- def initialize_template_class(assigns, method_name)
133
- engine_template = find_template_root_for(method_name)
134
- action_view_class = Class.new(ActionView::Base).send(:include, master_helper_module)
135
- action_view_class.new(engine_template, assigns, self)
136
- end
137
-
138
-
139
- end
140
- end
@@ -1,141 +0,0 @@
1
- require 'fileutils'
2
-
3
- module ::ActionView
4
- class Base
5
-
6
- private
7
- def full_template_path(template_path, extension)
8
-
9
- unless Engines.disable_app_views_loading
10
- # If the template exists in the normal application directory,
11
- # return that path
12
- default_template = "#{@base_path}/#{template_path}.#{extension}"
13
- return default_template if File.exist?(default_template)
14
- end
15
-
16
- # Otherwise, check in the engines to see if the template can be found there.
17
- # Load this in order so that more recently started Engines will take priority.
18
- Engines.each(:precidence_order) do |engine|
19
- site_specific_path = File.join(engine.root, 'app', 'views',
20
- template_path.to_s + '.' + extension.to_s)
21
- return site_specific_path if File.exist?(site_specific_path)
22
- end
23
-
24
- # If it cannot be found anywhere, return the default path, where the
25
- # user *should* have put it.
26
- return "#{@base_path}/#{template_path}.#{extension}"
27
- end
28
- end
29
-
30
-
31
- # add methods to handle including javascripts and stylesheets
32
- module Helpers
33
- module AssetTagHelper
34
- # Returns a stylesheet link tag to the named stylesheet(s) for the given
35
- # engine. A stylesheet with the same name as the engine is included automatically.
36
- # If other names are supplied, those stylesheets from within the same engine
37
- # will be linked too.
38
- #
39
- # engine_stylesheet "my_engine" =>
40
- # <link href="/engine_files/my_engine/stylesheets/my_engine.css" media="screen" rel="Stylesheet" type="text/css" />
41
- #
42
- # engine_stylesheet "my_engine", "another_file", "one_more" =>
43
- # <link href="/engine_files/my_engine/stylesheets/my_engine.css" media="screen" rel="Stylesheet" type="text/css" />
44
- # <link href="/engine_files/my_engine/stylesheets/another_file.css" media="screen" rel="Stylesheet" type="text/css" />
45
- # <link href="/engine_files/my_engine/stylesheets/one_more.css" media="screen" rel="Stylesheet" type="text/css" />
46
- #
47
- # Any options supplied as a Hash as the last argument will be processed as in
48
- # stylesheet_link_tag.
49
- #
50
- def engine_stylesheet(engine_name, *sources)
51
- stylesheet_link_tag(*convert_public_sources(engine_name, :stylesheet, sources))
52
- end
53
-
54
- # Returns a javascript link tag to the named stylesheet(s) for the given
55
- # engine. A javascript file with the same name as the engine is included automatically.
56
- # If other names are supplied, those javascript from within the same engine
57
- # will be linked too.
58
- #
59
- # engine_javascript "my_engine" =>
60
- # <script type="text/javascript" src="/engine_files/my_engine/javascripts/my_engine.js"></script>
61
- #
62
- # engine_javascript "my_engine", "another_file", "one_more" =>
63
- # <script type="text/javascript" src="/engine_files/my_engine/javascripts/my_engine.js"></script>
64
- # <script type="text/javascript" src="/engine_files/my_engine/javascripts/another_file.js"></script>
65
- # <script type="text/javascript" src="/engine_files/my_engine/javascripts/one_more.js"></script>
66
- #
67
- # Any options supplied as a Hash as the last argument will be processed as in
68
- # javascript_include_tag.
69
- #
70
- def engine_javascript(engine_name, *sources)
71
- javascript_include_tag(*convert_public_sources(engine_name, :javascript, sources))
72
- end
73
-
74
- # Returns a image tag based on the parameters passed to it
75
- # Required option is option[:engine] in order to correctly idenfity the correct engine location
76
- #
77
- # engine_image 'rails-engines.png', :engine => 'my_engine', :alt => 'My Engine' =>
78
- # <img src="/engine_files/my_engine/images/rails-engines.png" alt="My Engine />
79
- #
80
- # Any options supplied as a Hash as the last argument will be processed as in
81
- # image_tag.
82
- #
83
- def engine_image(src, options = {})
84
- return if !src
85
-
86
- image_src = engine_image_src(src, options)
87
-
88
- options.delete(:engine)
89
-
90
- image_tag(image_src, options)
91
- end
92
-
93
- # Alias for engine_image
94
- def engine_image_tag(src, options = {})
95
- engine_image(src, options)
96
- end
97
-
98
- # Returns a path to the image stored within the engine_files
99
- # Required option is option[:engine] in order to correctly idenfity the correct engine location
100
- #
101
- # engine_image_src 'rails-engines.png', :engine => 'my_engine' =>
102
- # "/engine_files/my_engine/images/rails-engines.png"
103
- #
104
- def engine_image_src(src, options = {})
105
- File.join(Engines.get(options[:engine].to_sym).public_dir, 'images', src)
106
- end
107
-
108
- private
109
- # convert the engine public file sources into actual public paths
110
- # type:
111
- # :stylesheet
112
- # :javascript
113
- def convert_public_sources(engine_name, type, sources)
114
- options = sources.last.is_a?(Hash) ? sources.pop.stringify_keys : { }
115
- new_sources = []
116
-
117
- case type
118
- when :javascript
119
- type_dir = "javascripts"
120
- ext = "js"
121
- when :stylesheet
122
- type_dir = "stylesheets"
123
- ext = "css"
124
- end
125
-
126
- engine = Engines.get(engine_name)
127
-
128
- default = "#{engine.public_dir}/#{type_dir}/#{engine_name}"
129
- if defined?(RAILS_ROOT) && File.exists?(File.join(RAILS_ROOT, "public", "#{default}.#{ext}"))
130
- new_sources << default
131
- end
132
-
133
- sources.each { |name|
134
- new_sources << "#{engine.public_dir}/#{type_dir}/#{name}"
135
- }
136
-
137
- new_sources << options
138
- end
139
- end
140
- end
141
- end
@@ -1,21 +0,0 @@
1
- module ::ActiveRecord
2
- class Base
3
- class << self
4
-
5
- # NOTE: Currently the Migrations system will ALWAYS wrap given table names
6
- # in the prefix/suffix, so any table name set via config(:table_name), for instnace
7
- # will always get wrapped in the process of migration. For this reason, whatever
8
- # value you give to the config will be wrapped when set_table_name is used in the
9
- # model.
10
-
11
- def wrapped_table_name(name)
12
- table_name_prefix + name + table_name_suffix
13
- end
14
- end
15
- end
16
- end
17
-
18
- # Set ActiveRecord to ignore the engine_schema_info table by default
19
- unless Rails::VERSION::STRING =~ /^1\.0\./
20
- ::ActiveRecord::SchemaDumper.ignore_tables << 'engine_schema_info'
21
- end
@@ -1,129 +0,0 @@
1
- module ::Dependencies
2
-
3
- # we're going to intercept the require_or_load method; lets
4
- # make an alias for the current method so we can use it as the basis
5
- # for loading from engines.
6
- alias :rails_pre_engines_require_or_load :require_or_load
7
-
8
- def require_or_load(file_name)
9
- if Engines.config(:edge)
10
- rails_edge_require_or_load(file_name)
11
-
12
- elsif Rails::VERSION::STRING =~ /^1.1/
13
- # otherwise, assume we're on trunk (1.1 at the moment)
14
- rails_1_1_require_or_load(file_name)
15
-
16
- elsif Rails::VERSION::STRING =~ /^1.0/
17
- # use the old dependency load method
18
- rails_1_0_require_or_load(file_name)
19
- end
20
- end
21
-
22
- def rails_edge_require_or_load(file_name)
23
- rails_1_1_require_or_load(file_name)
24
- end
25
-
26
- def rails_1_1_require_or_load(file_name)
27
- Engines.log.debug("Engines 1.1 require_or_load: #{file_name}")
28
-
29
- found = false
30
-
31
- # try and load the engine code first
32
- # can't use model, as there's nothing in the name to indicate that the file is a 'model' file
33
- # rather than a library or anything else.
34
- ['controller', 'helper'].each do |type|
35
- # if we recognise this type
36
- # (this regexp splits out the module/filename from any instances of app/#{type}, so that
37
- # modules are still respected.)
38
- if file_name =~ /^(.*app\/#{type}s\/)?(.*_#{type})(\.rb)?$/
39
-
40
- # ... go through the active engines from first started to last, so that
41
- # code with a high precidence (started later) will override lower precidence
42
- # implementations
43
- Engines.each(:load_order) do |engine|
44
-
45
- engine_file_name = File.expand_path(File.join(engine.root, 'app', "#{type}s", $2))
46
- #engine_file_name = $1 if engine_file_name =~ /^(.*)\.rb$/
47
- Engines.log.debug("checking engine '#{engine.name}' for '#{engine_file_name}'")
48
- if File.exist?("#{engine_file_name}.rb")
49
- Engines.log.debug("==> loading from engine '#{engine.name}'")
50
- rails_pre_engines_require_or_load(engine_file_name)
51
- found = true
52
- end
53
- end
54
- end
55
- end
56
-
57
- # finally, load any application-specific controller classes using the 'proper'
58
- # rails load mechanism, EXCEPT when we're testing engines and could load this file
59
- # from an engine
60
- rails_pre_engines_require_or_load(file_name) unless Engines.disable_app_code_mixing && found
61
- end
62
-
63
- def rails_1_0_require_or_load(file_name)
64
- file_name = $1 if file_name =~ /^(.*)\.rb$/
65
-
66
- Engines.log.debug "Engines 1.0.0 require_or_load '#{file_name}'"
67
-
68
- # if the file_name ends in "_controller" or "_controller.rb", strip all
69
- # path information out of it except for module context, and load it. Ditto
70
- # for helpers.
71
- found = if file_name =~ /_controller(.rb)?$/
72
- require_engine_files(file_name, 'controller')
73
- elsif file_name =~ /_helper(.rb)?$/ # any other files we can do this with?
74
- require_engine_files(file_name, 'helper')
75
- end
76
-
77
- # finally, load any application-specific controller classes using the 'proper'
78
- # rails load mechanism, EXCEPT when we're testing engines and could load this file
79
- # from an engine
80
- Engines.log.debug("--> loading from application: '#{file_name}'")
81
- rails_pre_engines_require_or_load(file_name) unless Engines.disable_app_code_mixing && found
82
- Engines.log.debug("--> Done loading.")
83
- end
84
-
85
- # Load the given file (which should be a path to be matched from the root of each
86
- # engine) from all active engines which have that file.
87
- # NOTE! this method automagically strips file_name up to and including the first
88
- # instance of '/app/controller'. This should correspond to the app/controller folder
89
- # under RAILS_ROOT. However, if you have your Rails application residing under a
90
- # path which includes /app/controller anyway, such as:
91
- #
92
- # /home/username/app/controller/my_web_application # == RAILS_ROOT
93
- #
94
- # then you might have trouble. Sorry, just please don't have your web application
95
- # running under a path like that.
96
- def require_engine_files(file_name, type='')
97
- found = false
98
- Engines.log.debug "requiring #{type} file '#{file_name}'"
99
- processed_file_name = file_name.gsub(/[\w\W\/\.]*app\/#{type}s\//, '')
100
- Engines.log.debug "--> rewrote to '#{processed_file_name}'"
101
- Engines.each(:load_order) do |engine|
102
- engine_file_name = File.join(engine.root, 'app', "#{type}s", processed_file_name)
103
- engine_file_name += '.rb' unless ! load? || engine_file_name[-3..-1] == '.rb'
104
- Engines.log.debug "--> checking '#{engine.name}' for #{engine_file_name}"
105
- if File.exist?(engine_file_name) ||
106
- (engine_file_name[-3..-1] != '.rb' && File.exist?(engine_file_name + '.rb'))
107
- Engines.log.debug "--> found, loading from engine '#{engine.name}'"
108
- rails_pre_engines_require_or_load(engine_file_name)
109
- found = true
110
- end
111
- end
112
- found
113
- end
114
- end
115
-
116
-
117
- # We only need to deal with LoadingModules in Rails 1.0.0
118
- if Rails::VERSION::STRING =~ /^1.0/ && !Engines.config(:edge)
119
- module ::Dependencies
120
- class RootLoadingModule < LoadingModule
121
- # hack to allow adding to the load paths within the Rails Dependencies mechanism.
122
- # this allows Engine classes to be unloaded and loaded along with standard
123
- # Rails application classes.
124
- def add_path(path)
125
- @load_paths << (path.kind_of?(ConstantLoadPath) ? path : ConstantLoadPath.new(path))
126
- end
127
- end
128
- end
129
- end
@@ -1,53 +0,0 @@
1
- #require 'active_record/connection_adapters/abstract/schema_statements'
2
-
3
- module ::ActiveRecord::ConnectionAdapters::SchemaStatements
4
- alias :old_initialize_schema_information :initialize_schema_information
5
- def initialize_schema_information
6
- # create the normal schema stuff
7
- old_initialize_schema_information
8
-
9
- # create the engines schema stuff.
10
- begin
11
- execute "CREATE TABLE #{engine_schema_info_table_name} (engine_name #{type_to_sql(:string)}, version #{type_to_sql(:integer)})"
12
- rescue ActiveRecord::StatementInvalid
13
- # Schema has been initialized
14
- end
15
- end
16
-
17
- def engine_schema_info_table_name
18
- ActiveRecord::Base.wrapped_table_name "engine_schema_info"
19
- end
20
- end
21
-
22
-
23
- require 'breakpoint'
24
- module ::Engines
25
- class EngineMigrator < ActiveRecord::Migrator
26
-
27
- # We need to be able to set the 'current' engine being migrated.
28
- cattr_accessor :current_engine
29
-
30
- class << self
31
-
32
- def schema_info_table_name
33
- ActiveRecord::Base.wrapped_table_name "engine_schema_info"
34
- end
35
-
36
- def current_version
37
- result = ActiveRecord::Base.connection.select_one("SELECT version FROM #{schema_info_table_name} WHERE engine_name = '#{current_engine.name}'")
38
- if result
39
- result["version"].to_i
40
- else
41
- # There probably isn't an entry for this engine in the migration info table.
42
- # We need to create that entry, and set the version to 0
43
- ActiveRecord::Base.connection.execute("INSERT INTO #{schema_info_table_name} (version, engine_name) VALUES (0,'#{current_engine.name}')")
44
- 0
45
- end
46
- end
47
- end
48
-
49
- def set_schema_version(version)
50
- ActiveRecord::Base.connection.update("UPDATE #{self.class.schema_info_table_name} SET version = #{down? ? version.to_i - 1 : version.to_i} WHERE engine_name = '#{self.current_engine.name}'")
51
- end
52
- end
53
- end