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 |           [message] | ||||||
|             { "name" => name, :v => 1 } |  | ||||||
|           end |  | ||||||
|         end |         end | ||||||
|         assert_equal "[{\"name\":\"Jeremiah\",\"v\":1},{\"name\":\"Smathers\",\"v\":1}]", @filter.jsonify([AThing.new("Jeremiah"), AThing.new("Smathers")]) |       end | ||||||
|  |       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