Merge pull request #135 from astathopoulos/preserve_filters_ordering

Use array instead of Hash to keep the registered filters
This commit is contained in:
Dylan Thacker-Smith
2013-05-17 05:25:07 -07:00
2 changed files with 28 additions and 3 deletions

View File

@@ -8,7 +8,7 @@ module Liquid
# The Strainer only allows method calls defined in filters given to it via Strainer.global_filter,
# Context#add_filters or Template.register_filter
class Strainer #:nodoc:
@@filters = {}
@@filters = []
@@known_filters = Set.new
@@known_methods = Set.new
@@ -19,7 +19,7 @@ module Liquid
def self.global_filter(filter)
raise ArgumentError, "Passed filter is not a module" unless filter.is_a?(Module)
add_known_filter(filter)
@@filters[filter.name] = filter
@@filters << filter unless @@filters.include?(filter)
end
def self.add_known_filter(filter)
@@ -34,7 +34,7 @@ module Liquid
def self.create(context)
strainer = Strainer.new(context)
@@filters.each { |k,m| strainer.extend(m) }
@@filters.each { |m| strainer.extend(m) }
strainer
end

View File

@@ -0,0 +1,25 @@
require 'test_helper'
module MoneyFilter
def money(input)
sprintf(' %d$ ', input)
end
end
module CanadianMoneyFilter
def money(input)
sprintf(' %d$ CAD ', input)
end
end
class HashOrderingTest < Test::Unit::TestCase
include Liquid
def test_global_register_order
Template.register_filter(MoneyFilter)
Template.register_filter(CanadianMoneyFilter)
assert_equal " 1000$ CAD ", Template.parse("{{1000 | money}}").render(nil, nil)
end
end