obsolete.ChilliProject/lib/chili_project/liquid/liquid_ext/strainer.rb

50 lines
1.5 KiB
Ruby

#-- encoding: UTF-8
#-- copyright
# ChiliProject is a project management system.
#
# Copyright (C) 2010-2012 the ChiliProject Team
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# See doc/COPYRIGHT.rdoc for more details.
#++
# Required until https://github.com/Shopify/liquid/pull/87 got merged upstream
module ChiliProject
module Liquid
module LiquidExt
module Strainer
def self.included(base)
base.extend(ClassMethods)
base.class_attribute :filters, :instance_reader => false, :instance_writer => false
base.class_eval do
self.filters = base.send(:class_variable_get, '@@filters').values
class << self
alias_method_chain :global_filter, :filter_array
alias_method_chain :create, :filter_array
end
end
end
module ClassMethods
def global_filter_with_filter_array(filter)
raise ArgumentError, "Passed filter is not a module" unless filter.is_a?(Module)
self.filters += [filter]
end
def create_with_filter_array(context)
strainer = self.new(context)
filters.each { |filter| strainer.extend(filter) }
strainer
end
end
end
end
end
end