5350f4323a
Up until now, the patch used to be a no-op. While the filters class attribute was set correctly, the methods using it were not actually overridden as they are only included above the existing methods in the module chain. This resulted in an arbitrary load order of filters on Ruby 1.8. As such, our overridden standard filters might not have actually overridden anything. Still, the patch can be completely removed once we either require Ruby 1.9 (as we have ordered ahshes by default then) or once https://github.com/Shopify/liquid/pull/87 was merged and released upstream.
50 lines
1.5 KiB
Ruby
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
|