parlement 0.6 → 0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. data/CHANGES +13 -0
  2. data/README +51 -38
  3. data/app/controllers/account_controller.rb +65 -37
  4. data/app/controllers/application.rb +1 -1
  5. data/app/controllers/elt_controller.rb +1 -0
  6. data/app/models/elt.rb +25 -14
  7. data/app/models/mail.rb +36 -35
  8. data/app/models/mail_notify.rb +23 -0
  9. data/app/views/account/_login.rhtml +1 -1
  10. data/app/views/account/_show.rhtml +22 -5
  11. data/app/views/elt/_elt.rhtml +44 -47
  12. data/app/views/elt/_listByDate.rhtml +7 -7
  13. data/app/views/elt/show.rhtml +3 -3
  14. data/app/views/layouts/top.rhtml +1 -0
  15. data/app/views/person/show.rhtml +5 -0
  16. data/config/environment.rb +1 -1
  17. data/db/ROOT/parlement/Parlement_fr.txt +46 -0
  18. data/db/ROOT/parlement/news/Version_06.txt +25 -0
  19. data/db/ROOT/parlement/news/Version_07.txt +12 -0
  20. data/db/ROOT/parlement/test.txt +14 -5
  21. data/db/ROOT/parlement.txt +2 -0
  22. data/db/development_structure.sql +119 -44
  23. data/db/migrate/004_people_image.rb +9 -0
  24. data/lib/data_import.rb +9 -13
  25. data/public/javascripts/mybehaviour.js +41 -0
  26. data/test/fixtures/img.png +0 -0
  27. data/test/fixtures/mail/avatar +249 -0
  28. data/test/fixtures/people.yml +1 -1
  29. data/test/functional/account_controller_test.rb +108 -56
  30. data/test/functional/elt_controller_test.rb +6 -6
  31. data/test/unit/elt_test.rb +1 -1
  32. data/test/unit/mail_test.rb +17 -0
  33. data/vendor/plugins/engines/CHANGELOG +91 -53
  34. data/vendor/plugins/engines/README +1 -1
  35. data/vendor/plugins/engines/generators/engine/templates/init_engine.erb +6 -4
  36. data/vendor/plugins/engines/generators/engine/templates/test/test_helper.erb +5 -1
  37. data/vendor/plugins/engines/init.rb +8 -3
  38. data/vendor/plugins/engines/lib/engines/action_mailer_extensions.rb +6 -5
  39. data/vendor/plugins/engines/lib/engines/action_view_extensions.rb +10 -6
  40. data/vendor/plugins/engines/lib/engines/active_record_extensions.rb +3 -1
  41. data/vendor/plugins/engines/lib/engines/dependencies_extensions.rb +27 -16
  42. data/vendor/plugins/engines/lib/engines/routing_extensions.rb +28 -0
  43. data/vendor/plugins/engines/lib/engines/testing_extensions.rb +6 -2
  44. data/vendor/plugins/engines/lib/engines.rb +77 -12
  45. data/vendor/plugins/engines/tasks/deprecated_engines.rake +7 -0
  46. data/vendor/plugins/engines/tasks/engines.rake +25 -10
  47. data/vendor/plugins/login_engine/CHANGELOG +8 -0
  48. data/vendor/plugins/login_engine/README +2 -2
  49. data/vendor/plugins/login_engine/app/controllers/user_controller.rb +4 -1
  50. data/vendor/plugins/login_engine/app/views/user/forgot_password.rhtml +1 -1
  51. data/vendor/plugins/login_engine/init_engine.rb +6 -5
  52. data/vendor/plugins/login_engine/lib/login_engine/authenticated_user.rb +1 -1
  53. data/vendor/plugins/output_compression/CHANGELOG +0 -0
  54. data/vendor/plugins/output_compression/MIT-LICENSE +20 -0
  55. data/vendor/plugins/output_compression/README +4 -4
  56. data/vendor/plugins/output_compression/init.rb +1 -2
  57. data/vendor/plugins/output_compression/lib/output_compression.rb +84 -66
  58. data/vendor/plugins/output_compression/{Rakefile → rakefile} +22 -22
  59. data/vendor/plugins/output_compression/test/output_test.rb +11 -0
  60. data/vendor/plugins/output_compression/test/test_controller.rb +3 -0
  61. data/vendor/plugins/output_compression/test/test_helper.rb +14 -0
  62. data/vendor/plugins/responds_to_parent/MIT-LICENSE +20 -0
  63. data/vendor/plugins/responds_to_parent/README +42 -0
  64. data/vendor/plugins/responds_to_parent/Rakefile +22 -0
  65. data/vendor/plugins/responds_to_parent/init.rb +1 -0
  66. data/vendor/plugins/responds_to_parent/lib/responds_to_parent.rb +45 -0
  67. data/vendor/plugins/responds_to_parent/test/responds_to_parent_test.rb +115 -0
  68. metadata +33 -16
  69. data/vendor/plugins/login_engine/tasks/tasks.rake +0 -4
  70. data/vendor/plugins/output_compression/tasks/output_compression_tasks.rake +0 -4
  71. data/vendor/plugins/output_compression/test/output_compression_test.rb +0 -8
  72. /data/db/ROOT/parlement/news/{release0.1.txt → Version_01.txt} +0 -0
  73. /data/db/ROOT/parlement/news/{release0.2.txt → Version_02.txt} +0 -0
  74. /data/db/ROOT/parlement/news/{release0.3.txt → Version_03.txt} +0 -0
  75. /data/db/ROOT/parlement/news/{release0.4.txt → Version_04.txt} +0 -0
  76. /data/db/ROOT/parlement/news/{release0.5.txt → Version_05.txt} +0 -0
@@ -1,12 +1,45 @@
1
1
  require 'logger'
2
2
 
3
- # load this before doing ANYTHING freaky with the reloading.
4
- begin
5
- require 'rails_version' # Rails 1.0, 1.1.0
6
- rescue LoadError, Gem::Exception
7
- require 'rails/version' # renamed as of Rails 1.1.1
3
+ # We need to know the version of Rails that we are running before we
4
+ # can override any of the dependency stuff, since Rails' own behaviour
5
+ # has changed over the various releases. We need to explicily make sure
6
+ # that the Rails::VERSION constant is loaded, because such things could
7
+ # not automatically be achieved prior to 1.1, and the location of the
8
+ # file moved in 1.1.1!
9
+ def load_rails_version
10
+ # At this point, we can't even rely on RAILS_ROOT existing, so we have to figure
11
+ # the path to RAILS_ROOT/vendor/rails manually
12
+ rails_base = File.expand_path(
13
+ File.join(File.dirname(__FILE__), # RAILS_ROOT/vendor/plugins/engines/lib
14
+ '..', # RAILS_ROOT/vendor/plugins/engines
15
+ '..', # RAILS_ROOT/vendor/plugins
16
+ '..', # RAILS_ROOT/vendor
17
+ 'rails', 'railties', 'lib')) # RAILS_ROOT/vendor/rails/railties/lib
18
+ begin
19
+ load File.join(rails_base, 'rails', 'version.rb')
20
+ #puts 'loaded 1.1.1+ from vendor: ' + File.join(rails_base, 'rails', 'version.rb')
21
+ rescue MissingSourceFile # this means they DON'T have Rails 1.1.1 or later installed in vendor
22
+ begin
23
+ load File.join(rails_base, 'rails_version.rb')
24
+ #puts 'loaded 1.1.0- from vendor: ' + File.join(rails_base, 'rails_version.rb')
25
+ rescue MissingSourceFile # this means they DON'T have Rails 1.1.0 or previous installed in vendor
26
+ begin
27
+ # try and load version information for Rails 1.1.1 or later from the $LOAD_PATH
28
+ require 'rails/version'
29
+ #puts 'required 1.1.1+ from load path'
30
+ rescue LoadError
31
+ # try and load version information for Rails 1.1.0 or previous from the $LOAD_PATH
32
+ require 'rails_version'
33
+ #puts 'required 1.1.0- from load path'
34
+ end
35
+ end
36
+ end
8
37
  end
9
38
 
39
+ # Actually perform the load
40
+ load_rails_version
41
+ #puts "Detected Rails version: #{Rails::VERSION::STRING}"
42
+
10
43
  require 'engines/ruby_extensions'
11
44
  # ... further files are required at the bottom of this file
12
45
 
@@ -18,6 +51,15 @@ module Engines
18
51
  def version
19
52
  "#{Version::Major}.#{Version::Minor}.#{Version::Release}"
20
53
  end
54
+
55
+ # For holding the rails configuration object
56
+ attr_accessor :rails_config
57
+
58
+ # A flag to stop searching for views in the application
59
+ attr_accessor :disable_app_views_loading
60
+
61
+ # A flag to stop code being mixed in from the application
62
+ attr_accessor :disable_app_code_mixing
21
63
  end
22
64
 
23
65
  # The DummyLogger is a class which might pass through to a real Logger
@@ -108,7 +150,7 @@ module Engines
108
150
  Engines.log.debug "considering plugins: #{plugins.inspect}"
109
151
  plugins.each { |plugin|
110
152
  engine_name = File.basename(plugin)
111
- if File.exist?(File.join(plugin, "init_engine.rb")) || # if the directory contains an init_engine.rb file
153
+ if File.exist?(File.join(plugin, "init_engine.rb")) || # if the directory contains init_engine.rb
112
154
  (engine_name =~ /_engine$/) || # or it engines in '_engines'
113
155
  (engine_name =~ /_bundle$/) # or even ends in '_bundle'
114
156
 
@@ -118,6 +160,12 @@ module Engines
118
160
  }
119
161
  end
120
162
 
163
+ # Initialize the routing controller paths.
164
+ def initialize_routing
165
+ # See lib/engines/routing_extensions.rb for more information.
166
+ ActionController::Routing.controller_paths = Engines.rails_config.controller_paths
167
+ end
168
+
121
169
  def start_engine(engine_name, options={})
122
170
 
123
171
  # Create a new Engine and put this engine at the front of the ActiveEngines list
@@ -137,6 +185,9 @@ module Engines
137
185
  if Rails::VERSION::STRING =~ /^1.0/ && !Engines.config(:edge)
138
186
  Controllers.add_path(engine_controllers) if File.exist?(engine_controllers)
139
187
  Controllers.add_path(engine_components) if File.exist?(engine_components)
188
+ else
189
+ ActionController::Routing.controller_paths << engine_controllers
190
+ ActionController::Routing.controller_paths << engine_components
140
191
  end
141
192
 
142
193
  # copy the files unless indicated otherwise
@@ -169,12 +220,13 @@ module Engines
169
220
  end
170
221
 
171
222
  # Add ALL paths under the engine root to the load path
172
- app_dirs = Dir[engine.root + "/app/**/*"] # maybe only models?
173
- component_dir = Dir[engine.root + "/components"]
174
- lib_dirs = Dir[engine.root + "/lib/**/*"]
175
- load_paths = (app_dirs + component_dir + lib_dirs).select { |d|
176
- File.directory?(d)
223
+ app_dirs = %w(controllers helpers models).collect { |d|
224
+ File.join(engine.root, 'app', d)
225
+ }
226
+ other_dirs = %w(components lib).collect { |d|
227
+ File.join(engine.root, d)
177
228
  }
229
+ load_paths = (app_dirs + other_dirs).select { |d| File.directory?(d) }
178
230
 
179
231
  # Remove other engines from the $LOAD_PATH by matching against the engine.root values
180
232
  # in ActiveEngines. Store the removed engines in the order they came off.
@@ -244,6 +296,16 @@ EOS
244
296
  def active
245
297
  ActiveEngines
246
298
  end
299
+
300
+ # Pass a block to perform an operation on each engine. You may pass an argument
301
+ # to determine the order:
302
+ #
303
+ # * :load_order - in the order they were loaded (i.e. lower precidence engines first).
304
+ # * :precidence_order - highest precidence order (i.e. last loaded) first
305
+ def each(ordering=:precidence_order, &block)
306
+ engines = (ordering == :load_order) ? active.reverse : active
307
+ engines.each { |e| yield e }
308
+ end
247
309
  end
248
310
  end
249
311
 
@@ -395,8 +457,11 @@ end
395
457
 
396
458
  # These files must be required after the Engines module has been defined.
397
459
  require 'engines/dependencies_extensions'
460
+ require 'engines/routing_extensions'
398
461
  require 'engines/action_view_extensions'
399
462
  require 'engines/action_mailer_extensions'
400
- require 'engines/testing_extensions'
401
463
  require 'engines/migration_extensions'
402
464
  require 'engines/active_record_extensions'
465
+
466
+ # only load the testing extensions if we are in the test environment
467
+ require 'engines/testing_extensions' if %w(test).include?(RAILS_ENV)
@@ -0,0 +1,7 @@
1
+ # Old-style engines rake tasks.
2
+ # NOTE: THESE ARE DEPRICATED! PLEASE USE THE NEW STYLE!
3
+
4
+ task :engine_info => "engines:info"
5
+ task :engine_migrate => "db:migrate:engines"
6
+ task :enginedoc => "doc:engines"
7
+ task :load_plugin_fixtures => "db:fixtures:engines:load"
@@ -33,7 +33,7 @@ namespace :engines do
33
33
  puts "Details: #{e.info}"
34
34
  else
35
35
  puts "Engines plugin: #{Engines.version}"
36
- Engines.active.each do |e|
36
+ Engines.each do |e|
37
37
  puts "#{e.name}: #{e.version}"
38
38
  end
39
39
  end
@@ -147,15 +147,30 @@ namespace :test do
147
147
  # NOTE: we're using the Rails 1.0 non-namespaced task here, just to maintain
148
148
  # compatibility with Rails 1.0
149
149
  # TODO: make this work with Engines.config(:root)
150
- Rake::TestTask.new(:engines => :prepare_test_database) do |t|
150
+
151
+ namespace :engines do
152
+ Engines::RakeTasks.all_engines.each do |engine_name|
153
+ desc "Run the engine tests for '#{engine_name}'"
154
+ Rake::TestTask.new(engine_name => :prepare_test_database) do |t|
155
+ t.libs << 'test'
156
+ t.pattern = "vendor/plugins/#{engine_name}/test/**/*_test.rb"
157
+ t.verbose = true
158
+ end
159
+ end
160
+ end
161
+
162
+ Rake::TestTask.new(:engines => [:warn_about_multiple_engines_testing, :prepare_test_database]) do |t|
151
163
  t.libs << "test"
152
-
153
- if ENV['ENGINE']
154
- t.pattern = "vendor/plugins/#{ENV['ENGINE']}/test/**/*_test.rb"
155
- else
156
- t.pattern = 'vendor/plugins/**/test/**/*_test.rb'
157
- end
158
-
164
+ engines = ENV['ENGINE'] || '**'
165
+ t.pattern = "vendor/plugins/#{engines}/test/**/*_test.rb"
159
166
  t.verbose = true
160
- end
167
+ end
168
+
169
+ task :warn_about_multiple_engines_testing do
170
+ puts %{-~============== A Moste Polite Warninge ==================~-
171
+ You may experience issues testing multiple engines at once.
172
+ Please test engines individual for the moment.
173
+ -~===============( ... as you were ... )===================~-
174
+ }
175
+ end
161
176
  end
@@ -1,3 +1,11 @@
1
+ = v1.0.2
2
+ * Added version
3
+ * Removed errant requires no longer needed (murray.steele@gmail.com, Ticket #156, Ticket #157, Ticket #158)
4
+ # Removed documentation/rake tasks that refer the schema.rb (Ticket #155)
5
+ # Verified cannot be assigned via URL parameters. If more security is required, users should override the signup action itself (Ticket #169)
6
+ # Minor view/flash message cleanup
7
+ # Authentication by token now respects primary key prefixes (Ticket #140)
8
+
1
9
  = v1.0.1
2
10
  * Added CHANGELOG
3
11
  * Changed wording for when password forgotten to 'reset', rather than 'retrieve'. (snowblink@gmail.com)
@@ -99,7 +99,7 @@ You'll need to configure it properly so that email can be sent. One of the easie
99
99
 
100
100
  === Create the DB schema
101
101
 
102
- After you have done the modifications the the ApplicationController and its helper, you can import the user model into the database. An ActiveRecord schema.rb file is provided in login_engine/db/schema.rb, along with migration information in login_engine/db/migrate/.
102
+ After you have done the modifications the the ApplicationController and its helper, you can import the user model into the database. Migration information in login_engine/db/migrate/.
103
103
 
104
104
  You *MUST* check that these files aren't going to interfere with anything in your application.
105
105
 
@@ -114,7 +114,7 @@ You can change the table name used by adding
114
114
 
115
115
  ...to the LoginEngine configuration in <tt>environment.rb</tt>. Then run from the root of your project:
116
116
 
117
- rake engine_migrate ENGINE=login
117
+ rake db:migrate:engines ENGINE=login
118
118
 
119
119
  to import the schema into your database.
120
120
 
@@ -34,6 +34,7 @@ class UserController < ApplicationController
34
34
  def signup
35
35
  return if generate_blank
36
36
  params[:user].delete('form')
37
+ params[:user].delete('verified') # you CANNOT pass this as part of the request
37
38
  @user = User.new(params[:user])
38
39
  begin
39
40
  User.transaction(@user) do
@@ -44,10 +45,12 @@ class UserController < ApplicationController
44
45
  if @user.save
45
46
  key = @user.generate_security_token
46
47
  url = url_for(:action => 'home', :user_id => @user.id, :key => key)
47
- flash[:notice] = 'Signup successful! Please log in.'
48
+ flash[:notice] = 'Signup successful!'
48
49
  if LoginEngine.config(:use_email_notification) and LoginEngine.config(:confirm_account)
49
50
  UserNotify.deliver_signup(@user, params[:user][:password], url)
50
51
  flash[:notice] << ' Please check your registered email account to verify your account registration and continue with the login.'
52
+ else
53
+ flash[:notice] << ' Please log in.'
51
54
  end
52
55
  redirect_to :action => 'login'
53
56
  end
@@ -10,7 +10,7 @@
10
10
  <label>Email Address:</label> <%= text_field("user", "email", "size" => 30) %>
11
11
 
12
12
  <div class="button-bar">
13
- <%= submit_tag 'Submit request' %>
13
+ <%= submit_tag 'Reset Password' %>
14
14
  <%= link_to 'Cancel', :action => 'login' %>
15
15
  </div>
16
16
  <%= end_form_tag %>
@@ -2,9 +2,10 @@
2
2
 
3
3
  require 'login_engine'
4
4
 
5
- # TODO: why do I have to include these here, when including them in login_engine.rb should be sufficient?
6
- require 'authenticated_user'
7
- require 'authenticated_system'
5
+ module LoginEngine::Version
6
+ Major = 1
7
+ Minor = 0
8
+ Release = 2
9
+ end
8
10
 
9
- #ApplicationController.send(:include, LoginEngine)
10
- #ApplicationHelper.send(:include, LoginEngine)
11
+ Engines.current.version = LoginEngine::Version
@@ -46,7 +46,7 @@ module LoginEngine
46
46
  def authenticate_by_token(id, token)
47
47
  # Allow logins for deleted accounts, but only via this method (and
48
48
  # not the regular authenticate call)
49
- u = find(:first, :conditions => ["id = ? AND security_token = ?", id, token])
49
+ u = find(:first, :conditions => ["#{User.primary_key} = ? AND security_token = ?", id, token])
50
50
  return nil if u.nil? or u.token_expired?
51
51
  return nil if false == u.update_expiry
52
52
  u
File without changes
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2005-2006 Tom Fakes
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,4 +1,4 @@
1
- OutputCompression
2
- =================
3
-
4
- Description goes here
1
+ Contributors:
2
+ Tom Fakes - Initial simple implementation, plugin implementation
3
+ Dan Kubb - Handle multiple encodings, correct response headers
4
+ Sebastian - Handle component requests
@@ -1,2 +1 @@
1
- # Include hook code here
2
- require 'output_compression'
1
+ require 'output_compression'
@@ -1,66 +1,84 @@
1
- # OutputCompression
2
- # Rails output compression filters
3
- #
4
- # Adds two classmethods to ActionController that can be used as after-filters:
5
- # strip_whitespace and compress_output.
6
- # If you use page-caching, you MUST specify the compress_output filter AFTER
7
- # caches_page, otherwise the compressed data will be cached instead of the HTML
8
- #
9
- # class MyController < ApplicationController
10
- # after_filter :strip_whitespace
11
- # caches_page :index
12
- # after_filter :compress_output
13
- # end
14
-
15
- begin
16
- require 'zlib'
17
- require 'stringio'
18
- GZIP_SUPPORTED = true
19
- rescue
20
- GZIP_SUPPORTED = false
21
- end
22
-
23
- module CompressionSystem
24
- def compress_output
25
- return unless accepts_gzip?
26
- output = StringIO.new
27
- def output.close
28
- # Zlib does a close. Bad Zlib...
29
- rewind
30
- end
31
- gz = Zlib::GzipWriter.new(output)
32
- gz.write(response.body)
33
- gz.close
34
- if output.length < response.body.length
35
- @old_response_body = response.body
36
- response.body = output.string
37
- response.headers['Content-encoding'] = @compression_encoding
38
- end
39
- end
40
-
41
- def accepts_gzip?
42
- return false unless GZIP_SUPPORTED
43
- accepts = request.env['HTTP_ACCEPT_ENCODING']
44
- return false unless accepts && accepts =~ /(x-gzip|gzip)/
45
- @compression_encoding = $1
46
- true
47
- end
48
-
49
- def strip_whitespace
50
- response.body.gsub!(/()|(.*?<\/script>)|()|()|\s+/m) do |m|
51
- if m =~ /^()(.*?)<\/script>$/m
52
- $1 + $2.strip.gsub(/\s+/, ' ').gsub('',"\n-->") + ''
53
- elsif m =~ /^$/m
54
- ''
55
- elsif m =~ /^<(textarea|pre)/
56
- m
57
- else ' '
58
- end
59
- end
60
- response.body.gsub! /\s+\s+/, '>'
61
- end
62
- end
63
-
64
- class ActionController::Base
65
- include CompressionSystem
66
- end
1
+ #
2
+ # Contributors:
3
+ # Tom Fakes - Initial simple implementation, plugin implementation
4
+ # Dan Kubb - Handle multiple encodings, correct response headers
5
+ # Sebastian - Handle component requests
6
+ #
7
+ begin
8
+ require 'stringio'
9
+ require 'zlib'
10
+ COMPRESSION_DISABLED = false
11
+ rescue
12
+ COMPRESSION_DISABLED = true
13
+ RAILS_DEFAULT_LOGGER.info "Output Compression not available: " + $!
14
+ end
15
+
16
+ class OutputCompressionFilter
17
+
18
+ def self.filter(controller)
19
+ return if COMPRESSION_DISABLED ||
20
+ controller.response.headers['Content-Encoding'] ||
21
+ controller.request.env['HTTP_ACCEPT_ENCODING'].nil? ||
22
+ controller.request.is_component_request?
23
+ begin
24
+ controller.request.env['HTTP_ACCEPT_ENCODING'].split(/\s*,\s*/).each do |encoding|
25
+ # TODO: use "q" values to determine user agent encoding preferences
26
+ case encoding
27
+ when /\Agzip\b/
28
+ StringIO.open('', 'w') do |strio|
29
+ begin
30
+ gz = Zlib::GzipWriter.new(strio)
31
+ gz.write(controller.response.body)
32
+ controller.response.body = strio.string
33
+ ensure
34
+ gz.close if gz
35
+ end
36
+ end
37
+ when /\Adeflate\b/
38
+ controller.response.body = Zlib::Deflate.deflate(controller.response.body, Zlib::BEST_COMPRESSION)
39
+ when /\Aidentity\b/
40
+ # do nothing for identity
41
+ else
42
+ next # the encoding is not supported, try the next one
43
+ end
44
+ controller.logger.info "Response body was encoded with #{encoding}"
45
+ controller.response.headers['Content-Encoding'] = encoding
46
+ break # the encoding is supported, stop
47
+ end
48
+ end
49
+ controller.response.headers['Content-Length'] = controller.response.body.length
50
+ if controller.response.headers['Vary'] != '*'
51
+ controller.response.headers['Vary'] =
52
+ controller.response.headers['Vary'].to_s.split(',').push('Accept-Encoding').uniq.join(',')
53
+ end
54
+ end
55
+
56
+ end
57
+
58
+ # Handle component requests by not compressing the output from a component
59
+ module ActionController
60
+ # These methods are available in both the production and test Request objects.
61
+ class AbstractRequest
62
+ def is_component_request=(val) #:nodoc:
63
+ @is_component_request = val
64
+ end
65
+
66
+ # Returns true when the request corresponds to a render_component call
67
+ def is_component_request?
68
+ @is_component_request
69
+ end
70
+ end
71
+ end
72
+
73
+ # Mark the request as being a Component request
74
+ module ActionController
75
+ module Components
76
+ protected
77
+ def request_for_component(options)
78
+ request_for_component = original_request_for_component(options)
79
+ request_for_component.is_component_request = true
80
+ return request_for_component
81
+ end
82
+ alias :original_request_for_component :request_for_component
83
+ end
84
+ end
@@ -1,22 +1,22 @@
1
- require 'rake'
2
- require 'rake/testtask'
3
- require 'rake/rdoctask'
4
-
5
- desc 'Default: run unit tests.'
6
- task :default => :test
7
-
8
- desc 'Test the output_compression plugin.'
9
- Rake::TestTask.new(:test) do |t|
10
- t.libs << 'lib'
11
- t.pattern = 'test/**/*_test.rb'
12
- t.verbose = true
13
- end
14
-
15
- desc 'Generate documentation for the output_compression plugin.'
16
- Rake::RDocTask.new(:rdoc) do |rdoc|
17
- rdoc.rdoc_dir = 'rdoc'
18
- rdoc.title = 'OutputCompression'
19
- rdoc.options << '--line-numbers --inline-source'
20
- rdoc.rdoc_files.include('README')
21
- rdoc.rdoc_files.include('lib/**/*.rb')
22
- end
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
5
+ desc 'Default: run unit tests.'
6
+ task :default => :test
7
+
8
+ desc 'Test the Output Compression plugin.'
9
+ Rake::TestTask.new(:test) do |t|
10
+ t.libs << 'lib'
11
+ t.pattern = 'test/**/*_test.rb'
12
+ t.verbose = true
13
+ end
14
+
15
+ desc 'Generate documentation for the Output Compression plugin.'
16
+ Rake::RDocTask.new(:rdoc) do |rdoc|
17
+ rdoc.rdoc_dir = 'rdoc'
18
+ rdoc.title = 'Output Compression'
19
+ rdoc.options << '--line-numbers --inline-source'
20
+ rdoc.rdoc_files.include('README')
21
+ rdoc.rdoc_files.include('lib/**/*.rb')
22
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class ItemTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def test_nothing
9
+ true
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ class TestController < ActionController::Base
2
+
3
+ end
@@ -0,0 +1,14 @@
1
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
2
+
3
+ require 'rubygems'
4
+ require 'test/unit'
5
+ require 'action_controller'
6
+ require "#{File.dirname(__FILE__)}/../init"
7
+
8
+ ActionController::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log")
9
+ ActionController::Base.logger.level = Logger::DEBUG
10
+
11
+ require "#{File.dirname(__FILE__)}/test_controller"
12
+
13
+ class Test::Unit::TestCase #:nodoc:
14
+ end
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2006 Sean Treadway
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,42 @@
1
+ RespondsToParent
2
+ ================
3
+
4
+ Adds responds_to_parent to your controller to respond to the parent document of your page.
5
+ Make Ajaxy file uploads by posting the form to a hidden iframe, and respond with
6
+ RJS to the parent window.
7
+
8
+ Example
9
+ =======
10
+
11
+ Controller:
12
+
13
+ class Test < ActionController::Base
14
+ def main
15
+ end
16
+
17
+ def form_action
18
+ # Do stuff with params[:uploaded_file]
19
+
20
+ responds_to_parent do
21
+ render :update do |page|
22
+ page << "alert($('stuff').innerHTML)"
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ main.rhtml:
29
+
30
+ <html>
31
+ <body>
32
+ <div id="stuff">Here is some stuff</div>
33
+
34
+ <form target="frame" action="form_action">
35
+ <input type="file" name="uploaded_file"/>
36
+ <input type="submit"/>
37
+ </form>
38
+
39
+ <iframe id='frame' name="frame"></iframe>
40
+ </body>
41
+ </html>
42
+
@@ -0,0 +1,22 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
5
+ desc 'Default: run unit tests.'
6
+ task :default => :test
7
+
8
+ desc 'Test the responds_to_parent plugin.'
9
+ Rake::TestTask.new(:test) do |t|
10
+ t.libs << 'lib'
11
+ t.pattern = 'test/**/*_test.rb'
12
+ t.verbose = true
13
+ end
14
+
15
+ desc 'Generate documentation for the responds_to_parent plugin.'
16
+ Rake::RDocTask.new(:rdoc) do |rdoc|
17
+ rdoc.rdoc_dir = 'rdoc'
18
+ rdoc.title = 'RespondsToParent'
19
+ rdoc.options << '--line-numbers' << '--inline-source'
20
+ rdoc.rdoc_files.include('README')
21
+ rdoc.rdoc_files.include('lib/**/*.rb')
22
+ end
@@ -0,0 +1 @@
1
+ ActionController::Base.send :include, RespondsToParent