Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Extend basic rendering, test it in railties

  • Loading branch information...
commit a2ca04bb3ac178bbe1503ac65dc88f5f3f8cb37f 1 parent c40c362
@strzalek strzalek authored
View
19 actionpack/lib/action_controller/metal/rendering.rb
@@ -6,15 +6,28 @@ module BasicRendering
# :api: public
def render(*args, &block)
super(*args, &block)
- text = args.first[:text]
- if text.present?
- self.response_body = text
+ opts = args.first
+ if (opts.keys & [:text, :nothing]).present?
+ self.response_body = if opts.has_key?(:text) && opts[:text].present?
+ opts[:text]
+ elsif opts.has_key?(:nothing) && opts[:nothing]
+ " "
+ end
+ else
+ raise UnsupportedOperationError
end
end
def rendered_format
Mime::TEXT
end
+
+ class UnsupportedOperationError < StandardError
+ def initialize
+ super "Unsupported render operation. BasicRendering supports only :text
+ and :nothing options. For more, you need to include ActionView."
+ end
+ end
end
module Rendering
View
19 actionpack/test/controller/basic_rendering_test.rb
@@ -1,19 +0,0 @@
-require 'abstract_unit'
-
-class BasicRenderingController < ActionController::Base
- def render_hello_world
- render text: "Hello World!"
- end
-end
-
-class BasicRenderingTest < ActionController::TestCase
- tests BasicRenderingController
-
- def test_render_hello_world
- get :render_hello_world
-
- assert_equal "Hello World!", @response.body
- assert_equal "text/plain", @response.content_type
- end
-end
-
View
62 railties/test/application/basic_rendering_test.rb
@@ -0,0 +1,62 @@
+require 'isolation/abstract_unit'
+require 'rack/test'
+
+module ApplicationTests
+ class BasicRenderingTest < ActiveSupport::TestCase
+ include ActiveSupport::Testing::Isolation
+ include Rack::Test::Methods
+
+ def setup
+ build_app
+ end
+
+ def teardown
+ teardown_app
+ end
+
+ test "Rendering without ActionView" do
+ gsub_app_file 'config/application.rb', "require 'rails/all'", <<-RUBY
+ require "active_model/railtie"
+ require "action_controller/railtie"
+ RUBY
+
+ # Turn off ActionView and jquery-rails (it depends on AV)
+ $:.reject! {|path| path =~ /(actionview|jquery\-rails)/ }
+ boot_rails
+
+ app_file 'app/controllers/pages_controller.rb', <<-RUBY
+ class PagesController < ApplicationController
+ def render_hello_world
+ render text: "Hello World!"
+ end
+
+ def render_nothing
+ render nothing: true
+ end
+
+ def no_render; end
+
+ def raise_error
+ render foo: "bar"
+ end
+ end
+ RUBY
+
+ get '/pages/render_hello_world'
+ assert_equal 200, last_response.status
+ assert_equal "Hello World!", last_response.body
+ assert_equal "text/plain; charset=utf-8", last_response.content_type
+
+ get '/pages/render_nothing'
+ assert_equal 200, last_response.status
+ assert_equal " ", last_response.body
+ assert_equal "text/plain; charset=utf-8", last_response.content_type
+
+ get '/pages/no_render'
+ assert_equal 500, last_response.status
+
+ get '/pages/raise_error'
+ assert_equal 500, last_response.status
+ end
+ end
+end
View
6 railties/test/isolation/abstract_unit.rb
@@ -243,6 +243,12 @@ def app_file(path, contents)
end
end
+ def gsub_app_file(path, regexp, *args, &block)
+ path = "#{app_path}/#{path}"
+ content = File.read(path).gsub(regexp, *args, &block)
+ File.open(path, 'wb') { |f| f.write(content) }
+ end
+
def remove_file(path)
FileUtils.rm_rf "#{app_path}/#{path}"
end
Please sign in to comment.
Something went wrong with that request. Please try again.