Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Ticket #8900: render_partial_hash_collection.patch

File render_partial_hash_collection.patch, 4.8 kB (added by lifofifo, 2 years ago)

render :partial with hash collection

  • test/controller/new_render_test.rb

    old new  
    157157  def partial_with_hash_object 
    158158    render :partial => "hash_object", :object => {:first_name => "Sam"} 
    159159  end 
    160  
     160   
     161  def partial_hash_collection 
     162    render :partial => "hash_object", :collection => [ {:first_name => "Pratik"}, {:first_name => "Amy"} ] 
     163  end 
     164   
     165  def partial_hash_collection_with_locals 
     166    render :partial => "hash_greeting", :collection => [ {:first_name => "Pratik"}, {:first_name => "Amy"} ], :locals => { :greeting => "Hola" } 
     167  end 
     168   
    161169  def partial_with_implicit_local_assignment 
    162170    @customer = Customer.new("Marcel") 
    163171    render :partial => "customer" 
     
    680688    get :partial_with_hash_object 
    681689    assert_equal "Sam", @response.body 
    682690  end 
     691   
     692  def test_hash_partial_collection 
     693    get :partial_hash_collection 
     694    assert_equal "PratikAmy", @response.body 
     695  end 
     696   
     697  def test_partial_hash_collection_with_locals 
     698    get :partial_hash_collection_with_locals 
     699    assert_equal "Hola: PratikHola: Amy", @response.body 
     700  end 
    683701 
    684702  def test_partial_with_implicit_local_assignment 
    685703    get :partial_with_implicit_local_assignment 
  • test/fixtures/test/_hash_greeting.erb

    old new  
  • lib/action_view/partials.rb

    old new  
    4646  # This will render the partial "advertisement/_ad.erb" regardless of which controller this is being called from. 
    4747  module Partials 
    4848    private 
    49       # Deprecated, use render :partial 
    50       def render_partial(partial_path, local_assigns = nil, deprecated_local_assigns = nil) #:nodoc: 
     49      def render_partial(partial_path, object_assigns = nil, local_assigns = nil) #:nodoc: 
    5150        case partial_path 
    5251        when String, Symbol, NilClass 
    5352          path, partial_name = partial_pieces(partial_path) 
    54           object = extracting_object(partial_name, local_assigns, deprecated_local_assigns) 
    55           local_assigns = extract_local_assigns(local_assigns, deprecated_local_assigns) 
     53          object = extracting_object(partial_name, object_assigns) 
    5654          local_assigns = local_assigns ? local_assigns.clone : {} 
    5755          add_counter_to_local_assigns!(partial_name, local_assigns) 
    5856          add_object_to_local_assigns!(partial_name, local_assigns, object) 
     
    6866          if partial_path.any? 
    6967            path       = ActionController::RecordIdentifier.partial_path(partial_path.first) 
    7068            collection = partial_path 
    71             render_partial_collection(path, collection, nil, local_assigns.value) 
     69            render_partial_collection(path, collection, nil, object_assigns.value) 
    7270          else 
    7371            "" 
    7472          end 
    7573        else 
    7674          render_partial( 
    7775            ActionController::RecordIdentifier.partial_path(partial_path), 
    78             local_assigns, deprecated_local_assigns) 
     76            object_assigns, local_assigns) 
    7977        end 
    8078      end 
    8179 
    82       # Deprecated, use render :partial, :collection 
    8380      def render_partial_collection(partial_name, collection, partial_spacer_template = nil, local_assigns = nil) #:nodoc: 
    8481        collection_of_partials = Array.new 
    8582        counter_name = partial_counter_name(partial_name) 
     
    117114        partial_name.split('/').last.split('.').first.intern 
    118115      end 
    119116 
    120       def extracting_object(partial_name, local_assigns, deprecated_local_assigns) 
     117      def extracting_object(partial_name, object_assigns) 
    121118        variable_name = partial_variable_name(partial_name) 
    122         if local_assigns.is_a?(Hash) || local_assigns.nil? 
     119        if object_assigns.nil? 
    123120          controller.instance_variable_get("@#{variable_name}") 
    124121        else 
    125           # deprecated form where object could be passed in as second parameter 
    126           local_assigns 
     122          object_assigns 
    127123        end 
    128124      end 
    129125 
    130       def extract_local_assigns(local_assigns, deprecated_local_assigns) 
    131         local_assigns.is_a?(Hash) ? local_assigns : deprecated_local_assigns 
    132       end 
    133  
    134126      def add_counter_to_local_assigns!(partial_name, local_assigns) 
    135127        counter_name = partial_counter_name(partial_name) 
    136128        local_assigns[counter_name] = 1 unless local_assigns.has_key?(counter_name)