Merge pull request #3063 from jekyll/jsonify-on-hashes
This commit is contained in:
commit
1b68a29f29
|
@ -328,10 +328,14 @@ module Jekyll
|
||||||
|
|
||||||
def as_liquid(item)
|
def as_liquid(item)
|
||||||
case item
|
case item
|
||||||
|
when String, Numeric, nil
|
||||||
|
item.to_liquid
|
||||||
|
when Hash
|
||||||
|
Hash[item.map { |k, v| [as_liquid(k), as_liquid(v)] }]
|
||||||
when Array
|
when Array
|
||||||
item.map{ |i| as_liquid(i) }
|
item.map{ |i| as_liquid(i) }
|
||||||
else
|
else
|
||||||
item.respond_to?(:to_liquid) ? item.to_liquid : item
|
item.respond_to?(:to_liquid) ? as_liquid(item.to_liquid) : item
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -148,13 +148,26 @@ class TestFilters < Test::Unit::TestCase
|
||||||
assert_equal "[{\"name\":\"Jack\"},{\"name\":\"Smith\"}]", @filter.jsonify([{:name => 'Jack'}, {:name => 'Smith'}])
|
assert_equal "[{\"name\":\"Jack\"},{\"name\":\"Smith\"}]", @filter.jsonify([{:name => 'Jack'}, {:name => 'Smith'}])
|
||||||
end
|
end
|
||||||
|
|
||||||
should "call #to_liquid " do
|
class M < Struct.new(:message)
|
||||||
class AThing < Struct.new(:name)
|
|
||||||
def to_liquid
|
def to_liquid
|
||||||
{ "name" => name, :v => 1 }
|
[message]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
assert_equal "[{\"name\":\"Jeremiah\",\"v\":1},{\"name\":\"Smathers\",\"v\":1}]", @filter.jsonify([AThing.new("Jeremiah"), AThing.new("Smathers")])
|
class T < Struct.new(:name)
|
||||||
|
def to_liquid
|
||||||
|
{ "name" => name, :v => 1, :thing => M.new({:kay => "jewelers"}) }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
should "call #to_liquid " do
|
||||||
|
expected = "[{\"name\":\"Jeremiah\",\"v\":1,\"thing\":[{\"kay\":\"jewelers\"}]},{\"name\":\"Smathers\",\"v\":1,\"thing\":[{\"kay\":\"jewelers\"}]}]"
|
||||||
|
assert_equal expected, @filter.jsonify([T.new("Jeremiah"), T.new("Smathers")])
|
||||||
|
end
|
||||||
|
|
||||||
|
should "handle hashes with all sorts of weird keys and values" do
|
||||||
|
my_hash = { "posts" => Array.new(5) { |i| T.new(i) } }
|
||||||
|
expected = "{\"posts\":[{\"name\":0,\"v\":1,\"thing\":[{\"kay\":\"jewelers\"}]},{\"name\":1,\"v\":1,\"thing\":[{\"kay\":\"jewelers\"}]},{\"name\":2,\"v\":1,\"thing\":[{\"kay\":\"jewelers\"}]},{\"name\":3,\"v\":1,\"thing\":[{\"kay\":\"jewelers\"}]},{\"name\":4,\"v\":1,\"thing\":[{\"kay\":\"jewelers\"}]}]}"
|
||||||
|
assert_equal expected, @filter.jsonify(my_hash)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue