module Lutaml::Model::Liquefiable::ClassMethods

def drop_class

def drop_class
  const_get(drop_class_name)
rescue StandardError
  nil
end

def drop_class_name

def drop_class_name
  @drop_class_name ||= if name
                         "#{to_s.split('::').last}Drop"
                       else
                         "Drop"
                       end
end

def initialize(object)

def initialize(object)
  super()
  @object = object
end

def register_drop_method(method_name)

def register_drop_method(method_name)
  register_liquid_drop_class unless drop_class
  return if drop_class.method_defined?(method_name)
  drop_class.define_method(method_name) do
    value = @object.public_send(method_name)
    if value.is_a?(Array)
      value.map(&:to_liquid)
    else
      value.to_liquid
    end
  end
end

def register_liquid_drop_class

def register_liquid_drop_class
  validate_liquid!
  if drop_class
    raise "#{drop_class_name} Already exists!"
  end
  const_set(drop_class_name,
            Class.new(Liquid::Drop) do
              def initialize(object)
                super()
                @object = object
              end
            end)
end

def validate_liquid!

def validate_liquid!
  return if Object.const_defined?(:Liquid)
  raise Lutaml::Model::LiquidNotEnabledError
end