Class: ActionView::Partials::PartialRenderer
- Inherits:
-
Object
- Object
- ActionView::Partials::PartialRenderer
- Defined in:
- lib/action_view/render/partials.rb
Constant Summary collapse
- PARTIAL_NAMES =
Hash.new {|h,k| h[k] = {} }
Instance Method Summary collapse
- #collection_with_template(template = @template) ⇒ Object
- #collection_without_template(collection_paths = @collection_paths) ⇒ Object
-
#initialize(view_context, options, block) ⇒ PartialRenderer
constructor
A new instance of PartialRenderer.
- #render ⇒ Object
- #render_collection ⇒ Object
- #render_partial(object = @object) ⇒ Object
- #setup(options, block) ⇒ Object
Constructor Details
#initialize(view_context, options, block) ⇒ PartialRenderer
Returns a new instance of PartialRenderer.
219 220 221 222 223 224 |
# File 'lib/action_view/render/partials.rb', line 219 def initialize(view_context, , block) @view = view_context @partial_names = PARTIAL_NAMES[@view.controller.class.name] setup(, block) end |
Instance Method Details
#collection_with_template(template = @template) ⇒ Object
284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 |
# File 'lib/action_view/render/partials.rb', line 284 def collection_with_template(template = @template) segments, locals, template = [], @locals, @template if @options[:as] as = @options[:as] counter = "#{as}_counter".to_sym else as = template.variable_name counter = template.counter_name end locals[counter] = -1 @collection.each do |object| locals[counter] += 1 locals[as] = object segments << template.render(@view, locals) end segments end |
#collection_without_template(collection_paths = @collection_paths) ⇒ Object
306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 |
# File 'lib/action_view/render/partials.rb', line 306 def collection_without_template(collection_paths = @collection_paths) segments, locals = [], @locals index, template = -1, nil if @options[:as] as = @options[:as] counter = "#{as}_counter" end @collection.each_with_index do |object, i| template = find_template(collection_paths[i]) locals[as || template.variable_name] = object locals[counter || template.counter_name] = (index += 1) segments << template.render(@view, locals) end @template = template segments end |
#render ⇒ Object
249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 |
# File 'lib/action_view/render/partials.rb', line 249 def render identifier = ((@template = find_template) ? @template.identifier : @path) if @collection ActiveSupport::Notifications.instrument("render_collection.action_view", :identifier => identifier || "collection", :count => @collection.size) do render_collection end else block, , locals = @block, @options, @locals content = ActiveSupport::Notifications.instrument("render_partial.action_view", :identifier => identifier) do render_partial end if !block && (layout = [:layout]) content = @view._render_layout(find_template(layout), locals){ content } end content end end |
#render_collection ⇒ Object
273 274 275 276 277 278 279 280 281 282 |
# File 'lib/action_view/render/partials.rb', line 273 def render_collection return nil if @collection.blank? if @options.key?(:spacer_template) spacer = find_template(@options[:spacer_template]).render(@view, @locals) end result = @template ? collection_with_template : collection_without_template result.join(spacer).html_safe end |
#render_partial(object = @object) ⇒ Object
327 328 329 330 331 332 333 334 335 336 |
# File 'lib/action_view/render/partials.rb', line 327 def render_partial(object = @object) locals, view, template, block = @locals, @view, @template, @block object ||= locals[template.variable_name] locals[@options[:as] || template.variable_name] = object template.render(view, locals) do |*name| view._layout_for(*name, &block) end end |
#setup(options, block) ⇒ Object
226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 |
# File 'lib/action_view/render/partials.rb', line 226 def setup(, block) partial = [:partial] @options = @locals = [:locals] || {} @block = block if String === partial @object = [:object] @path = partial @collection = collection else @object = partial if @collection = collection_from_object || collection paths = @collection_paths = @collection.map { |o| partial_path(o) } @path = paths.uniq.size == 1 ? paths.first : nil else @path = partial_path end end end |