class Liquid::Drop

or implement the liquid_method_missing(name) method which is a catch all.
Your drop can either implement the methods sans any parameters
tmpl.render(‘product’ => ProductDrop.new ) # will invoke top_sales query.
tmpl = Liquid::Template.parse( ‘ {% for product in product.top_sales %} {{ product.name }} {%endfor%} ’ )
end
end
Shop.current.products.find(:all, :order => ‘sales’, :limit => 10 )
def top_sales
class ProductDrop < Liquid::Drop
Example:
a drop is a great way to do that.
If you would like to make data available to the web designers which you don’t want loaded unless needed then
The main use for liquid drops is to implement lazy loaded objects.
Methods of drops are callable.
A drop in liquid is a class which allows you to export DOM like things to liquid.

def self.invokable?(method_name)

Check for method existence without invoking respond_to?, which creates symbols
def self.invokable?(method_name)
  invokable_methods.include?(method_name.to_s)
end

def self.invokable_methods

def self.invokable_methods
  @invokable_methods ||= begin
    blacklist = Liquid::Drop.public_instance_methods + [:each]
    if include?(Enumerable)
      blacklist += Enumerable.public_instance_methods
      blacklist -= [:sort, :count, :first, :min, :max]
    end
    whitelist = [:to_liquid] + (public_instance_methods - blacklist)
    Set.new(whitelist.map(&:to_s))
  end
end

def initialize

def initialize
  @context = nil
end

def inspect

def inspect
  self.class.to_s
end

def invoke_drop(method_or_key)

called by liquid to invoke a drop
def invoke_drop(method_or_key)
  if self.class.invokable?(method_or_key)
    send(method_or_key)
  else
    liquid_method_missing(method_or_key)
  end
end

def key?(_name)

def key?(_name)
  true
end

def liquid_method_missing(method)

Catch all for the method
def liquid_method_missing(method)
  return nil unless @context&.strict_variables
  raise Liquid::UndefinedDropMethod, "undefined method #{method}"
end

def to_liquid

def to_liquid
  self
end

def to_s

def to_s
  self.class.name
end