actionpack 3.1.0.rc5 → 3.1.0.rc6

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of actionpack might be problematic. Click here for more details.

data/CHANGELOG CHANGED
@@ -1,5 +1,7 @@
1
1
  *Rails 3.1.0 (unreleased)*
2
2
 
3
+ * x_sendfile_header now defaults to nil and config/environments/production.rb doesn't set a particular value for it. This allows servers to set it through X-Sendfile-Type. [Santiago Pastorino]
4
+
3
5
  * The submit form helper does not generate an id "object_name_id" anymore. [fbrusatti]
4
6
 
5
7
  * Make sure respond_with with :js tries to render a template in all cases [José Valim]
@@ -2240,7 +2242,7 @@ superclass' view_paths. [Rick Olson]
2240
2242
 
2241
2243
  * Update documentation for erb trim syntax. #5651 [matt@mattmargolis.net]
2242
2244
 
2243
- * Pass :id => nil or :class => nil to error_messages_for to supress that html attribute. #3586 [olivier_ansaldi@yahoo.com, sebastien@goetzilla.info]
2245
+ * Pass :id => nil or :class => nil to error_messages_for to supress that html attribute. #3586 [olivier_ansaldi@yahoo.com]
2244
2246
 
2245
2247
  * Reset @html_document between requests so assert_tag works. #4810 [Jarkko Laine, easleydp@gmail.com]
2246
2248
 
@@ -2837,7 +2839,7 @@ superclass' view_paths. [Rick Olson]
2837
2839
 
2838
2840
  * Provide support for decimal columns to form helpers. Closes #5672. [Dave Thomas]
2839
2841
 
2840
- * Pass :id => nil or :class => nil to error_messages_for to supress that html attribute. #3586 [olivier_ansaldi@yahoo.com, sebastien@goetzilla.info]
2842
+ * Pass :id => nil or :class => nil to error_messages_for to supress that html attribute. #3586 [olivier_ansaldi@yahoo.com]
2841
2843
 
2842
2844
  * Reset @html_document between requests so assert_tag works. #4810 [Jarkko Laine, easleydp@gmail.com]
2843
2845
 
@@ -322,7 +322,7 @@ The latest version of Action Pack can be installed with Rubygems:
322
322
 
323
323
  Source code can be downloaded as part of the Rails project on GitHub
324
324
 
325
- * https://github.com/rails/rails/tree/master/actionpack/
325
+ * https://github.com/rails/rails/tree/master/actionpack
326
326
 
327
327
 
328
328
  == License
@@ -16,7 +16,7 @@ module ActionController #:nodoc:
16
16
  protected
17
17
  # Sends the file. This uses a server-appropriate method (such as X-Sendfile)
18
18
  # via the Rack::Sendfile middleware. The header to use is set via
19
- # config.action_dispatch.x_sendfile_header, and defaults to "X-Sendfile".
19
+ # config.action_dispatch.x_sendfile_header.
20
20
  # Your server can also configure this for you by setting the X-Sendfile-Type header.
21
21
  #
22
22
  # Be careful to sanitize the path parameter if it is coming from a web
@@ -4,6 +4,11 @@ module ActionController
4
4
 
5
5
  include RackDelegation
6
6
 
7
+ def recycle!
8
+ @_url_options = nil
9
+ end
10
+
11
+
7
12
  # TODO: Clean this up
8
13
  def process_with_new_base_test(request, response)
9
14
  @_request = request
@@ -447,6 +447,7 @@ module ActionController
447
447
  @controller.params.merge!(parameters)
448
448
  build_request_uri(action, parameters)
449
449
  @controller.class.class_eval { include Testing }
450
+ @controller.recycle!
450
451
  @controller.process_with_new_base_test(@request, @response)
451
452
  @assigns = @controller.respond_to?(:view_assigns) ? @controller.view_assigns : {}
452
453
  @request.session.delete('flash') if @request.session['flash'].blank?
@@ -156,7 +156,7 @@ module HTML #:nodoc:
156
156
  end
157
157
 
158
158
  closing = ( scanner.scan(/\//) ? :close : nil )
159
- return Text.new(parent, line, pos, content) unless name = scanner.scan(/[\w:-]+/)
159
+ return Text.new(parent, line, pos, content) unless name = scanner.scan(/[^\s!>\/]+/)
160
160
  name.downcase!
161
161
 
162
162
  unless closing
@@ -29,9 +29,9 @@ module ActionDispatch
29
29
 
30
30
  ENV_METHODS.each do |env|
31
31
  class_eval <<-METHOD, __FILE__, __LINE__ + 1
32
- def #{env.sub(/^HTTP_/n, '').downcase}
33
- @env["#{env}"]
34
- end
32
+ def #{env.sub(/^HTTP_/n, '').downcase} # def accept_charset
33
+ @env["#{env}"] # @env["HTTP_ACCEPT_CHARSET"]
34
+ end # end
35
35
  METHOD
36
36
  end
37
37
 
@@ -4,7 +4,7 @@ require "rails"
4
4
  module ActionDispatch
5
5
  class Railtie < Rails::Railtie
6
6
  config.action_dispatch = ActiveSupport::OrderedOptions.new
7
- config.action_dispatch.x_sendfile_header = ""
7
+ config.action_dispatch.x_sendfile_header = nil
8
8
  config.action_dispatch.ip_spoofing_check = true
9
9
  config.action_dispatch.show_exceptions = true
10
10
  config.action_dispatch.best_standards_support = true
@@ -877,9 +877,9 @@ module ActionDispatch
877
877
 
878
878
  def initialize(entities, options = {})
879
879
  @name = entities.to_s
880
- @path = (options.delete(:path) || @name).to_s
881
- @controller = (options.delete(:controller) || @name).to_s
882
- @as = options.delete(:as)
880
+ @path = (options[:path] || @name).to_s
881
+ @controller = (options[:controller] || @name).to_s
882
+ @as = options[:as]
883
883
  @options = options
884
884
  end
885
885
 
@@ -941,12 +941,11 @@ module ActionDispatch
941
941
  DEFAULT_ACTIONS = [:show, :create, :update, :destroy, :new, :edit]
942
942
 
943
943
  def initialize(entities, options)
944
+ super
945
+
944
946
  @as = nil
945
- @name = entities.to_s
946
- @path = (options.delete(:path) || @name).to_s
947
- @controller = (options.delete(:controller) || plural).to_s
948
- @as = options.delete(:as)
949
- @options = options
947
+ @controller = (options[:controller] || plural).to_s
948
+ @as = options[:as]
950
949
  end
951
950
 
952
951
  def plural
@@ -140,7 +140,7 @@ module ActionDispatch
140
140
  when String
141
141
  options
142
142
  when nil, Hash
143
- _routes.url_for((options || {}).reverse_merge!(url_options).symbolize_keys)
143
+ _routes.url_for((options || {}).reverse_merge(url_options).symbolize_keys)
144
144
  else
145
145
  polymorphic_url(options)
146
146
  end
@@ -3,7 +3,7 @@ module ActionPack
3
3
  MAJOR = 3
4
4
  MINOR = 1
5
5
  TINY = 0
6
- PRE = "rc5"
6
+ PRE = "rc6"
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
9
9
  end
@@ -365,7 +365,7 @@ module ActionView
365
365
  apply_form_for_options!(record, options)
366
366
  end
367
367
 
368
- options[:html][:remote] = options.delete(:remote)
368
+ options[:html][:remote] = options.delete(:remote) if options.has_key?(:remote)
369
369
  options[:html][:method] = options.delete(:method) if options.has_key?(:method)
370
370
  options[:html][:authenticity_token] = options.delete(:authenticity_token)
371
371
 
@@ -298,12 +298,12 @@ module ActionView
298
298
  return container if String === container
299
299
 
300
300
  selected, disabled = extract_selected_and_disabled(selected).map do | r |
301
- Array.wrap(r).map(&:to_s)
301
+ Array.wrap(r).map { |item| item.to_s }
302
302
  end
303
303
 
304
304
  container.map do |element|
305
305
  html_attributes = option_html_attributes(element)
306
- text, value = option_text_and_value(element).map(&:to_s)
306
+ text, value = option_text_and_value(element).map { |item| item.to_s }
307
307
  selected_attribute = ' selected="selected"' if option_value_selected?(value, selected)
308
308
  disabled_attribute = ' disabled="disabled"' if disabled && option_value_selected?(value, disabled)
309
309
  %(<option value="#{ERB::Util.html_escape(value)}"#{selected_attribute}#{disabled_attribute}#{html_attributes}>#{ERB::Util.html_escape(text)}</option>)
@@ -56,8 +56,8 @@ module ActionView
56
56
  # form_tag('http://far.away.com/form', :authenticity_token => "cf50faa3fe97702ca1ae")
57
57
  # # form with custom authenticity token
58
58
  #
59
- def form_tag(url_for_options = {}, options = {}, *parameters_for_url, &block)
60
- html_options = html_options_for_form(url_for_options, options, *parameters_for_url)
59
+ def form_tag(url_for_options = {}, options = {}, &block)
60
+ html_options = html_options_for_form(url_for_options, options)
61
61
  if block_given?
62
62
  form_tag_in_block(html_options, &block)
63
63
  else
@@ -598,12 +598,12 @@ module ActionView
598
598
  end
599
599
 
600
600
  private
601
- def html_options_for_form(url_for_options, options, *parameters_for_url)
601
+ def html_options_for_form(url_for_options, options)
602
602
  options.stringify_keys.tap do |html_options|
603
603
  html_options["enctype"] = "multipart/form-data" if html_options.delete("multipart")
604
604
  # The following URL is unescaped, this is just a hash of options, and it is the
605
605
  # responsibility of the caller to escape all the values.
606
- html_options["action"] = url_for(url_for_options, *parameters_for_url)
606
+ html_options["action"] = url_for(url_for_options)
607
607
  html_options["accept-charset"] = "UTF-8"
608
608
  html_options["data-remote"] = true if html_options.delete("remote")
609
609
  html_options["authenticity_token"] = html_options.delete("authenticity_token") if html_options.has_key?("authenticity_token")
@@ -58,7 +58,6 @@ module ActionView
58
58
  attr_reader :original_exception, :backtrace
59
59
 
60
60
  def initialize(template, assigns, original_exception)
61
- super(original_exception.message)
62
61
  @template, @assigns, @original_exception = template, assigns.dup, original_exception
63
62
  @sub_templates = nil
64
63
  @backtrace = original_exception.backtrace
@@ -68,6 +67,10 @@ module ActionView
68
67
  @template.identifier
69
68
  end
70
69
 
70
+ def message
71
+ original_exception.message
72
+ end
73
+
71
74
  def sub_template_message
72
75
  if @sub_templates
73
76
  "Trace of template inclusion: " +
@@ -149,8 +149,12 @@ module ActionView
149
149
  # Helper for building query glob string based on resolver's pattern.
150
150
  def build_query(path, details)
151
151
  query = @pattern.dup
152
- query.gsub!(/\:prefix(\/)?/, path.prefix.empty? ? "" : "#{path.prefix}\\1") # prefix can be empty...
153
- query.gsub!(/\:action/, path.partial? ? "_#{path.name}" : path.name)
152
+
153
+ prefix = path.prefix.empty? ? "" : "#{escape_entry(path.prefix)}\\1"
154
+ query.gsub!(/\:prefix(\/)?/, prefix)
155
+
156
+ partial = escape_entry(path.partial? ? "_#{path.name}" : path.name)
157
+ query.gsub!(/\:action/, partial)
154
158
 
155
159
  details.each do |ext, variants|
156
160
  query.gsub!(/\:#{ext}/, "{#{variants.compact.uniq.join(',')}}")
@@ -159,6 +163,10 @@ module ActionView
159
163
  File.expand_path(query, @path)
160
164
  end
161
165
 
166
+ def escape_entry(entry)
167
+ entry.gsub(/(\*|\[|\]|\{|\}|\?)/, "\\\\\\1")
168
+ end
169
+
162
170
  # Returns the file mtime from the filesystem.
163
171
  def mtime(p)
164
172
  File.stat(p).mtime
@@ -235,11 +243,11 @@ module ActionView
235
243
  class OptimizedFileSystemResolver < FileSystemResolver #:nodoc:
236
244
  def build_query(path, details)
237
245
  exts = EXTENSIONS.map { |ext| details[ext] }
238
- query = File.join(@path, path)
246
+ query = escape_entry(File.join(@path, path))
239
247
 
240
248
  exts.each do |ext|
241
249
  query << "{"
242
- ext.compact.each { |e| query << ".#{e}," }
250
+ ext.compact.uniq.each { |e| query << ".#{e}," }
243
251
  query << "}"
244
252
  end
245
253
 
@@ -1,21 +1,27 @@
1
1
  namespace :assets do
2
- # Ensures the RAILS_GROUPS environment variable is set
3
- task :ensure_env do
4
- ENV["RAILS_GROUPS"] ||= "assets"
5
- end
6
-
7
2
  desc "Compile all the assets named in config.assets.precompile"
8
- task :precompile => :ensure_env do
9
- Rake::Task["environment"].invoke
10
- Sprockets::Helpers::RailsHelper
3
+ task :precompile do
4
+ # We need to do this dance because RAILS_GROUPS is used
5
+ # too early in the boot process and changing here is already too late.
6
+ if ENV["RAILS_GROUPS"].to_s.empty? || ENV["RAILS_ENV"].to_s.empty?
7
+ ENV["RAILS_GROUPS"] ||= "assets"
8
+ ENV["RAILS_ENV"] ||= "production"
9
+ Kernel.exec $0, *ARGV
10
+ else
11
+ Rake::Task["environment"].invoke
12
+
13
+ # Ensure that action view is loaded and the appropriate sprockets hooks get executed
14
+ ActionView::Base
11
15
 
12
- assets = Rails.application.config.assets.precompile
13
- Rails.application.config.action_controller.perform_caching = true
14
- Rails.application.assets.precompile(*assets)
16
+ assets = Rails.application.config.assets.precompile
17
+ # Always perform caching so that asset_path appends the timestamps to file references.
18
+ Rails.application.config.action_controller.perform_caching = true
19
+ Rails.application.assets.precompile(*assets)
20
+ end
15
21
  end
16
22
 
17
23
  desc "Remove compiled assets"
18
- task :clean => :environment do
24
+ task :clean => [:environment, 'tmp:cache:clear'] do
19
25
  assets = Rails.application.config.assets
20
26
  public_asset_path = Rails.public_path + assets.prefix
21
27
  rm_rf public_asset_path, :secure => true
@@ -11,15 +11,21 @@ module Sprockets
11
11
  load "sprockets/assets.rake"
12
12
  end
13
13
 
14
- # We need to configure this after initialization to ensure we collect
15
- # paths from all engines. This hook is invoked exactly before routes
16
- # are compiled, and so that other Railties have an opportunity to
17
- # register compressors.
18
- config.after_initialize do |app|
19
- assets = app.config.assets
20
- next unless assets.enabled
14
+ initializer "sprockets.environment" do |app|
15
+ config = app.config
16
+ next unless config.assets.enabled
21
17
 
22
- app.assets = asset_environment(app)
18
+ require 'sprockets'
19
+
20
+ app.assets = Sprockets::Environment.new(app.root.to_s) do |env|
21
+ env.static_root = File.join(app.root.join('public'), config.assets.prefix)
22
+ env.logger = ::Rails.logger
23
+ env.version = ::Rails.env + "#{'-' + config.assets.version if config.assets.version.present?}"
24
+
25
+ if config.assets.cache_store != false
26
+ env.cache = ActiveSupport::Cache.lookup_store(config.assets.cache_store) || ::Rails.cache
27
+ end
28
+ end
23
29
 
24
30
  ActiveSupport.on_load(:action_view) do
25
31
  include ::Sprockets::Helpers::RailsHelper
@@ -28,53 +34,40 @@ module Sprockets
28
34
  include ::Sprockets::Helpers::RailsHelper
29
35
  end
30
36
  end
31
-
32
- app.routes.prepend do
33
- mount app.assets => assets.prefix
34
- end
35
-
36
- if config.action_controller.perform_caching
37
- app.assets = app.assets.index
38
- end
39
37
  end
40
38
 
41
- protected
42
- def asset_environment(app)
43
- require "sprockets"
44
-
45
- assets = app.config.assets
46
-
47
- env = Sprockets::Environment.new(app.root.to_s)
39
+ # We need to configure this after initialization to ensure we collect
40
+ # paths from all engines. This hook is invoked exactly before routes
41
+ # are compiled, and so that other Railties have an opportunity to
42
+ # register compressors.
43
+ config.after_initialize do |app|
44
+ next unless app.assets
45
+ config = app.config
48
46
 
49
- env.static_root = File.join(app.root.join("public"), assets.prefix)
47
+ config.assets.paths.each { |path| app.assets.append_path(path) }
50
48
 
51
- if env.respond_to?(:append_path)
52
- assets.paths.each { |path| env.append_path(path) }
53
- else
54
- env.paths.concat assets.paths
49
+ if config.assets.compress
50
+ # temporarily hardcode default JS compressor to uglify. Soon, it will work
51
+ # the same as SCSS, where a default plugin sets the default.
52
+ unless config.assets.js_compressor == false
53
+ app.assets.js_compressor = LazyCompressor.new { expand_js_compressor(config.assets.js_compressor || :uglifier) }
55
54
  end
56
55
 
57
- env.logger = ::Rails.logger
58
-
59
- if env.respond_to?(:cache) && assets.cache_store != false
60
- env.cache = ActiveSupport::Cache.lookup_store(assets.cache_store) || ::Rails.cache
56
+ unless config.assets.css_compressor == false
57
+ app.assets.css_compressor = LazyCompressor.new { expand_css_compressor(config.assets.css_compressor) }
61
58
  end
59
+ end
62
60
 
63
- if assets.compress
64
- # temporarily hardcode default JS compressor to uglify. Soon, it will work
65
- # the same as SCSS, where a default plugin sets the default.
66
- unless assets.js_compressor == false
67
- env.js_compressor = LazyCompressor.new { expand_js_compressor(assets.js_compressor || :uglifier) }
68
- end
69
-
70
- unless assets.css_compressor == false
71
- env.css_compressor = LazyCompressor.new { expand_css_compressor(assets.css_compressor) }
72
- end
73
- end
61
+ app.routes.prepend do
62
+ mount app.assets => config.assets.prefix
63
+ end
74
64
 
75
- env
65
+ if config.action_controller.perform_caching
66
+ app.assets = app.assets.index
76
67
  end
68
+ end
77
69
 
70
+ protected
78
71
  def expand_js_compressor(sym)
79
72
  case sym
80
73
  when :closure
metadata CHANGED
@@ -1,13 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: actionpack
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: true
4
+ hash: 15424105
5
+ prerelease: 6
5
6
  segments:
6
7
  - 3
7
8
  - 1
8
9
  - 0
9
- - rc5
10
- version: 3.1.0.rc5
10
+ - rc
11
+ - 6
12
+ version: 3.1.0.rc6
11
13
  platform: ruby
12
14
  authors:
13
15
  - David Heinemeier Hansson
@@ -15,46 +17,53 @@ autorequire:
15
17
  bindir: bin
16
18
  cert_chain: []
17
19
 
18
- date: 2011-07-25 00:00:00 -07:00
19
- default_executable:
20
+ date: 2011-08-16 00:00:00 Z
20
21
  dependencies:
21
22
  - !ruby/object:Gem::Dependency
22
23
  name: activesupport
23
24
  prerelease: false
24
25
  requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
25
27
  requirements:
26
28
  - - "="
27
29
  - !ruby/object:Gem::Version
30
+ hash: 15424105
28
31
  segments:
29
32
  - 3
30
33
  - 1
31
34
  - 0
32
- - rc5
33
- version: 3.1.0.rc5
35
+ - rc
36
+ - 6
37
+ version: 3.1.0.rc6
34
38
  type: :runtime
35
39
  version_requirements: *id001
36
40
  - !ruby/object:Gem::Dependency
37
41
  name: activemodel
38
42
  prerelease: false
39
43
  requirement: &id002 !ruby/object:Gem::Requirement
44
+ none: false
40
45
  requirements:
41
46
  - - "="
42
47
  - !ruby/object:Gem::Version
48
+ hash: 15424105
43
49
  segments:
44
50
  - 3
45
51
  - 1
46
52
  - 0
47
- - rc5
48
- version: 3.1.0.rc5
53
+ - rc
54
+ - 6
55
+ version: 3.1.0.rc6
49
56
  type: :runtime
50
57
  version_requirements: *id002
51
58
  - !ruby/object:Gem::Dependency
52
59
  name: rack-cache
53
60
  prerelease: false
54
61
  requirement: &id003 !ruby/object:Gem::Requirement
62
+ none: false
55
63
  requirements:
56
64
  - - ~>
57
65
  - !ruby/object:Gem::Version
66
+ hash: 19
58
67
  segments:
59
68
  - 1
60
69
  - 0
@@ -66,9 +75,11 @@ dependencies:
66
75
  name: builder
67
76
  prerelease: false
68
77
  requirement: &id004 !ruby/object:Gem::Requirement
78
+ none: false
69
79
  requirements:
70
80
  - - ~>
71
81
  - !ruby/object:Gem::Version
82
+ hash: 7
72
83
  segments:
73
84
  - 3
74
85
  - 0
@@ -80,9 +91,11 @@ dependencies:
80
91
  name: i18n
81
92
  prerelease: false
82
93
  requirement: &id005 !ruby/object:Gem::Requirement
94
+ none: false
83
95
  requirements:
84
96
  - - ~>
85
97
  - !ruby/object:Gem::Version
98
+ hash: 7
86
99
  segments:
87
100
  - 0
88
101
  - 6
@@ -93,23 +106,27 @@ dependencies:
93
106
  name: rack
94
107
  prerelease: false
95
108
  requirement: &id006 !ruby/object:Gem::Requirement
109
+ none: false
96
110
  requirements:
97
111
  - - ~>
98
112
  - !ruby/object:Gem::Version
113
+ hash: 31
99
114
  segments:
100
115
  - 1
101
116
  - 3
102
- - 1
103
- version: 1.3.1
117
+ - 2
118
+ version: 1.3.2
104
119
  type: :runtime
105
120
  version_requirements: *id006
106
121
  - !ruby/object:Gem::Dependency
107
122
  name: rack-test
108
123
  prerelease: false
109
124
  requirement: &id007 !ruby/object:Gem::Requirement
125
+ none: false
110
126
  requirements:
111
127
  - - ~>
112
128
  - !ruby/object:Gem::Version
129
+ hash: 7
113
130
  segments:
114
131
  - 0
115
132
  - 6
@@ -121,9 +138,11 @@ dependencies:
121
138
  name: rack-mount
122
139
  prerelease: false
123
140
  requirement: &id008 !ruby/object:Gem::Requirement
141
+ none: false
124
142
  requirements:
125
143
  - - ~>
126
144
  - !ruby/object:Gem::Version
145
+ hash: 61
127
146
  segments:
128
147
  - 0
129
148
  - 8
@@ -135,9 +154,11 @@ dependencies:
135
154
  name: sprockets
136
155
  prerelease: false
137
156
  requirement: &id009 !ruby/object:Gem::Requirement
157
+ none: false
138
158
  requirements:
139
159
  - - ~>
140
160
  - !ruby/object:Gem::Version
161
+ hash: 62196475
141
162
  segments:
142
163
  - 2
143
164
  - 0
@@ -151,9 +172,11 @@ dependencies:
151
172
  name: erubis
152
173
  prerelease: false
153
174
  requirement: &id010 !ruby/object:Gem::Requirement
175
+ none: false
154
176
  requirements:
155
177
  - - ~>
156
178
  - !ruby/object:Gem::Version
179
+ hash: 19
157
180
  segments:
158
181
  - 2
159
182
  - 7
@@ -165,9 +188,11 @@ dependencies:
165
188
  name: tzinfo
166
189
  prerelease: false
167
190
  requirement: &id011 !ruby/object:Gem::Requirement
191
+ none: false
168
192
  requirements:
169
193
  - - ~>
170
194
  - !ruby/object:Gem::Version
195
+ hash: 41
171
196
  segments:
172
197
  - 0
173
198
  - 3
@@ -369,7 +394,6 @@ files:
369
394
  - lib/sprockets/helpers/rails_helper.rb
370
395
  - lib/sprockets/helpers.rb
371
396
  - lib/sprockets/railtie.rb
372
- has_rdoc: true
373
397
  homepage: http://www.rubyonrails.org
374
398
  licenses: []
375
399
 
@@ -379,18 +403,22 @@ rdoc_options: []
379
403
  require_paths:
380
404
  - lib
381
405
  required_ruby_version: !ruby/object:Gem::Requirement
406
+ none: false
382
407
  requirements:
383
408
  - - ">="
384
409
  - !ruby/object:Gem::Version
410
+ hash: 57
385
411
  segments:
386
412
  - 1
387
413
  - 8
388
414
  - 7
389
415
  version: 1.8.7
390
416
  required_rubygems_version: !ruby/object:Gem::Requirement
417
+ none: false
391
418
  requirements:
392
419
  - - ">"
393
420
  - !ruby/object:Gem::Version
421
+ hash: 25
394
422
  segments:
395
423
  - 1
396
424
  - 3
@@ -399,7 +427,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
399
427
  requirements:
400
428
  - none
401
429
  rubyforge_project:
402
- rubygems_version: 1.3.6
430
+ rubygems_version: 1.8.8
403
431
  signing_key:
404
432
  specification_version: 3
405
433
  summary: Web-flow and rendering framework putting the VC in MVC (part of Rails).