Skip to content

Commit

Permalink
Rename _assigns to view_assigns in AV::TC
Browse files Browse the repository at this point in the history
- also add tests
- also deprecate _assigns

[#5751 state:resolved]

Signed-off-by: Santiago Pastorino <santiago@wyeworks.com>
  • Loading branch information
dchelimsky authored and spastorino committed Oct 3, 2010
1 parent 49cc010 commit f656796
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 9 deletions.
30 changes: 21 additions & 9 deletions actionpack/lib/action_view/test_case.rb
Expand Up @@ -103,7 +103,7 @@ def config
end end


def render(options = {}, local_assigns = {}, &block) def render(options = {}, local_assigns = {}, &block)
view.assign(_assigns) view.assign(view_assigns)
@rendered << output = view.render(options, local_assigns, &block) @rendered << output = view.render(options, local_assigns, &block)
output output
end end
Expand Down Expand Up @@ -169,15 +169,19 @@ def view


alias_method :_view, :view alias_method :_view, :view


EXCLUDE_IVARS = %w{ INTERNAL_IVARS = %w{
@__name__
@_assertion_wrapped @_assertion_wrapped
@_assertions
@_result @_result
@_routes
@controller @controller
@layouts @layouts
@locals @locals
@method_name @method_name
@output_buffer @output_buffer
@partials @partials
@passed
@rendered @rendered
@request @request
@routes @routes
Expand All @@ -187,18 +191,26 @@ def view
@view_context_class @view_context_class
} }


def _instance_variables def _user_defined_ivars
instance_variables.map(&:to_s) - EXCLUDE_IVARS instance_variables.map(&:to_s) - INTERNAL_IVARS
end end


def _assigns # Returns a Hash of instance variables and their values, as defined by
_instance_variables.inject({}) do |hash, var| # the user in the test case, which are then assigned to the view being
name = var[1..-1].to_sym # rendered. This is generally intended for internal use and extension
hash[name] = instance_variable_get(var) # frameworks.
hash def view_assigns
_user_defined_ivars.inject({}) do |hash, var|
hash.merge(var.sub('@','').to_sym => instance_variable_get(var))
end end
end end


def _assigns
ActiveSupport::Deprecation.warn "ActionView::TestCase#_assigns is deprecated and will be removed in future versions. " <<
"Please use view_assigns instead."
view_assigns
end

def _routes def _routes
@controller._routes if @controller.respond_to?(:_routes) @controller._routes if @controller.respond_to?(:_routes)
end end
Expand Down
31 changes: 31 additions & 0 deletions actionpack/test/template/test_case_test.rb
Expand Up @@ -116,6 +116,37 @@ def render_from_helper
end end
end end


class AssignsTest < ActionView::TestCase
setup do
ActiveSupport::Deprecation.stubs(:warn)
end

test "_assigns delegates to user_defined_ivars" do
self.expects(:view_assigns)
_assigns
end

test "_assigns is deprecated" do
ActiveSupport::Deprecation.expects(:warn)
_assigns
end
end

class ViewAssignsTest < ActionView::TestCase
test "view_assigns returns a Hash of user defined ivars" do
@a = 'b'
@c = 'd'
assert_equal({:a => 'b', :c => 'd'}, view_assigns)
end

test "view_assigns excludes internal ivars" do
INTERNAL_IVARS.each do |ivar|
assert defined?(ivar), "expected #{ivar} to be defined"
assert !view_assigns.keys.include?(ivar.sub('@','').to_sym), "expected #{ivar} to be excluded from view_assigns"
end
end
end

class HelperExposureTest < ActionView::TestCase class HelperExposureTest < ActionView::TestCase
helper(Module.new do helper(Module.new do
def render_from_helper def render_from_helper
Expand Down

0 comments on commit f656796

Please sign in to comment.