Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Monkey patch Rack::Lint to allow string subclass body
- Loading branch information
Showing
3 changed files
with
57 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,36 @@ | |||
# Rack 1.0 does not allow string subclass body. This does not play well with our ActionView::SafeBuffer. | |||
# The next release of Rack will be allowing string subclass body - http://github.com/rack/rack/commit/de668df02802a0335376a81ba709270e43ba9d55 | |||
# TODO : Remove this monkey patch after the next release of Rack | |||
|
|||
module RackLintPatch | |||
module AllowStringSubclass | |||
def self.included(base) | |||
base.send :alias_method, :each, :each_with_hack | |||
end | |||
|
|||
def each_with_hack | |||
@closed = false | |||
|
|||
@body.each { |part| | |||
assert("Body yielded non-string value #{part.inspect}") { | |||
part.kind_of?(String) | |||
} | |||
yield part | |||
} | |||
|
|||
if @body.respond_to?(:to_path) | |||
assert("The file identified by body.to_path does not exist") { | |||
::File.exist? @body.to_path | |||
} | |||
end | |||
end | |||
end | |||
|
|||
begin | |||
app = proc {|env| [200, {"Content-Type" => "text/plain", "Content-Length" => "12"}, [Class.new(String).new("Hello World!")]] } | |||
response = Rack::MockRequest.new(Rack::Lint.new(app)).get('/') | |||
rescue Rack::Lint::LintError => e | |||
raise(e) unless e.message =~ /Body yielded non-string value/ | |||
Rack::Lint.send :include, AllowStringSubclass | |||
end | |||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters