lib/liquid/drop.rb in locomotive_liquid-2.2.3 vs lib/liquid/drop.rb in locomotive_liquid-2.4.1

- old
+ new

@@ -1,41 +1,41 @@ module Liquid - # A drop in liquid is a class which allows you to to export DOM like things to liquid + # A drop in liquid is a class which allows you to export DOM like things to liquid. # Methods of drops are callable. - # The main use for liquid drops is the implement lazy loaded objects. + # The main use for liquid drops is to implement lazy loaded objects. # If you would like to make data available to the web designers which you don't want loaded unless needed then - # a drop is a great way to do that + # a drop is a great way to do that. # # Example: # - # class ProductDrop < Liquid::Drop - # def top_sales - # Shop.current.products.find(:all, :order => 'sales', :limit => 10 ) + # class ProductDrop < Liquid::Drop + # def top_sales + # Shop.current.products.find(:all, :order => 'sales', :limit => 10 ) + # end # end - # end # - # tmpl = Liquid::Template.parse( ' {% for product in product.top_sales %} {{ product.name }} {%endfor%} ' ) - # tmpl.render('product' => ProductDrop.new ) # will invoke top_sales query. + # tmpl = Liquid::Template.parse( ' {% for product in product.top_sales %} {{ product.name }} {%endfor%} ' ) + # tmpl.render('product' => ProductDrop.new ) # will invoke top_sales query. # # Your drop can either implement the methods sans any parameters or implement the before_method(name) method which is a - # catch all + # catch all. class Drop attr_writer :context + EMPTY_STRING = ''.freeze + # Catch all for the method def before_method(method) nil end # called by liquid to invoke a drop - def invoke_drop(method) - # for backward compatibility with Ruby 1.8 - methods = self.class.public_instance_methods.map { |m| m.to_s } - if methods.include?(method.to_s) - send(method.to_sym) + def invoke_drop(method_or_key) + if method_or_key && method_or_key != EMPTY_STRING && self.class.public_method_defined?(method_or_key.to_s.to_sym) + send(method_or_key.to_s.to_sym) else - before_method(method) + before_method(method_or_key) end end def has_key?(name) true