class Liquid::Rails::CollectionDrop
Attributes
_scopes[RW]
objects[R]
Public Class Methods
inherited(base)
click to toggle source
# File lib/liquid-rails/drops/collection_drop.rb, line 9 def self.inherited(base) base._scopes = [] end
new(objects, options={})
click to toggle source
# File lib/liquid-rails/drops/collection_drop.rb, line 31 def initialize(objects, options={}) options.assert_valid_keys(:with, :scope) @objects = options[:scope].nil? ? objects : objects.send(options[:scope]) @drop_class_name = options[:with] end
scope(*scope_names)
click to toggle source
# File lib/liquid-rails/drops/collection_drop.rb, line 13 def self.scope(*scope_names) @_scopes.concat scope_names scope_names.each do |scope_name| define_method(scope_name) do value = instance_variable_get("@_#{scope_name}") return value if value raise ::Liquid::ArgumentError, "#{objects.class.name} doesn't define scope: #{scope_name}" unless objects.respond_to?(scope_name) instance_variable_set("@_#{scope_name}", self.class.new(objects.send(scope_name))) end end end
Public Instance Methods
[](method)
click to toggle source
:[] is invoked by parser before the actual. However, this method has the same name as array method. Override this, so it will work for both cases. {{ post_drop.comments }} {{ post_drop.<other_methods> }}
# File lib/liquid-rails/drops/collection_drop.rb, line 59 def [](method) if method.is_a?(Integer) dropped_collection.at(method) else public_send(method) end end
dropped_collection()
click to toggle source
# File lib/liquid-rails/drops/collection_drop.rb, line 46 def dropped_collection @dropped_collection ||= @objects.map { |item| drop_item(item) } end
inspect()
click to toggle source
# File lib/liquid-rails/drops/collection_drop.rb, line 73 def inspect "#<#{self.class.name} of #{drop_class} for #{objects.inspect}>" end
kind_of?(klass)
click to toggle source
Calls superclass method
# File lib/liquid-rails/drops/collection_drop.rb, line 50 def kind_of?(klass) dropped_collection.kind_of?(klass) || super end
Also aliased as: is_a?
page(number)
click to toggle source
# File lib/liquid-rails/drops/collection_drop.rb, line 38 def page(number) self.class.new(objects.page(number)) end
per(number)
click to toggle source
# File lib/liquid-rails/drops/collection_drop.rb, line 42 def per(number) self.class.new(objects.per(number)) end
to_liquid()
click to toggle source
Need to override this. I don't understand too, otherwise it will return an array of drop objects. Need to return self so that we can do chaining.
# File lib/liquid-rails/drops/collection_drop.rb, line 69 def to_liquid self end
Protected Instance Methods
drop_class()
click to toggle source
# File lib/liquid-rails/drops/collection_drop.rb, line 81 def drop_class @drop_class ||= @drop_class_name.is_a?(String) ? @drop_class_name.safe_constantize : @drop_class_name end
drop_item(item)
click to toggle source
# File lib/liquid-rails/drops/collection_drop.rb, line 85 def drop_item(item) liquid_drop_class = drop_class || item.drop_class liquid_drop_class.new(item) end