mirror of
https://github.com/kemko/liquid.git
synced 2026-01-02 00:05:42 +03:00
Merge pull request #135 from astathopoulos/preserve_filters_ordering
Use array instead of Hash to keep the registered filters
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
25
test/liquid/hash_ordering_test.rb
Normal file
25
test/liquid/hash_ordering_test.rb
Normal 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
|
||||
Reference in New Issue
Block a user