forked from Shopify/liquid
-
Notifications
You must be signed in to change notification settings - Fork 2
Introduction to Drops
baldwindavid edited this page Aug 29, 2010
·
4 revisions
Drops let you provide the user with custom functionality. They're very much like a standard Ruby class, but have all un-needed and potentialy dangerous methods removed. From the user's perspective a drop acts very much like a Hash, thought methods are accessed with dot-notation aswell as element selection. A drop method cannot be invoked with arguments. Drops are called just-in-time thus allowing you to lazily load objects.
before_method(method):
Called once for every invokation, even if the destination method doesn't exist. Can be used to provide dynamically named methods.
Example:
class MembersDrop < Liquid::Drop
def before_method(method)
user = User.find_by_name(method)
user ? UserDrop.new(user) : nil
end
end
{% assign user = members.ian %} {{ user.name }}
invoke_drop(method):
Called by liquid to invoke the target drop method.
has_key(name):
Currently returns true regardless.
to_liquid:
Returns the drop instance.
class ProductDrop < Liquid::Drop
def initialize(product)
@product = product
end
def name
@product[:name]
end
def description
@product[:description]
end
def price
@product[:price]
end
end
template = Liquid::Template.parse( File.read( product_view.liquid ) ) template.render( { :product => ProductDrop.new(@product) } )
Viewing product: {{ product.name }} <br/><br /> {{ product.description }} <br /> £{{ product.price }}