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
is_a?(klass)
Alias for: kind_of?
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