Merge pull request #5056 from ayastreb/drop-fetch
Merge pull request 5056
This commit is contained in:
		
						commit
						08b279cbdd
					
				|  | @ -199,6 +199,17 @@ module Jekyll | |||
|           end | ||||
|         end | ||||
|       end | ||||
| 
 | ||||
|       # Imitate Hash.fetch method in Drop | ||||
|       # | ||||
|       # Returns value if key is present in Drop, otherwise returns default value | ||||
|       # KeyError is raised if key is not present and no default value given | ||||
|       def fetch(key, default = nil, &block) | ||||
|         return self[key] if key?(key) | ||||
|         raise KeyError, %(key not found: "#{key}") if default.nil? && block.nil? | ||||
|         return yield(key) unless block.nil? | ||||
|         return default unless default.nil? | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  |  | |||
|  | @ -0,0 +1,42 @@ | |||
| require "helper" | ||||
| 
 | ||||
| class TestDrop < JekyllUnitTest | ||||
|   context "a document drop" do | ||||
|     setup do | ||||
|       @site = fixture_site({ | ||||
|         "collections" => ["methods"] | ||||
|       }) | ||||
|       @site.process | ||||
|       @document = @site.collections["methods"].docs.detect do |d| | ||||
|         d.relative_path == "_methods/configuration.md" | ||||
|       end | ||||
|       @drop = @document.to_liquid | ||||
|     end | ||||
| 
 | ||||
|     should "raise KeyError if key is not found and no default provided" do | ||||
|       assert_raises KeyError do | ||||
|         @drop.fetch("not_existing_key") | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     should "fetch value without default" do | ||||
|       assert_equal "Jekyll.configuration", @drop.fetch("title") | ||||
|     end | ||||
| 
 | ||||
|     should "fetch default if key is not found" do | ||||
|       assert_equal "default", @drop.fetch("not_existing_key", "default") | ||||
|     end | ||||
| 
 | ||||
|     should "fetch default boolean value correctly" do | ||||
|       assert_equal false, @drop.fetch("bar", false) | ||||
|     end | ||||
| 
 | ||||
|     should "fetch default value from block if key is not found" do | ||||
|       assert_equal "default bar", @drop.fetch("bar") { |el| "default #{el}" } | ||||
|     end | ||||
| 
 | ||||
|     should "fetch default value from block first if both argument and block given" do | ||||
|       assert_equal "baz", @drop.fetch("bar", "default") { "baz" } | ||||
|     end | ||||
|   end | ||||
| end | ||||
		Loading…
	
		Reference in New Issue