From 5f807e74212af2f7c8dd87fec3743e3616066627 Mon Sep 17 00:00:00 2001 From: Anatol Broder Date: Sun, 8 Jun 2014 21:27:06 +0200 Subject: [PATCH 1/3] Merge deep --- lib/jekyll/frontmatter_defaults.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/jekyll/frontmatter_defaults.rb b/lib/jekyll/frontmatter_defaults.rb index 2c5755b5..8011c29b 100644 --- a/lib/jekyll/frontmatter_defaults.rb +++ b/lib/jekyll/frontmatter_defaults.rb @@ -41,10 +41,10 @@ module Jekyll old_scope = nil matching_sets(path, type).each do |set| if has_precedence?(old_scope, set['scope']) - defaults.merge! set['values'] + defaults.deep_merge! set['values'] old_scope = set['scope'] else - defaults = set['values'].merge(defaults) + defaults = set['values'].deep_merge(defaults) end end defaults @@ -145,4 +145,4 @@ module Jekyll end end end -end \ No newline at end of file +end From edbc273829e73f369913b7f2c6e8c4049285772b Mon Sep 17 00:00:00 2001 From: Anatol Broder Date: Mon, 9 Jun 2014 02:03:02 +0200 Subject: [PATCH 2/3] Use Utils.deep_merge_hashes --- lib/jekyll/frontmatter_defaults.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/jekyll/frontmatter_defaults.rb b/lib/jekyll/frontmatter_defaults.rb index 8011c29b..42b85ed5 100644 --- a/lib/jekyll/frontmatter_defaults.rb +++ b/lib/jekyll/frontmatter_defaults.rb @@ -41,10 +41,10 @@ module Jekyll old_scope = nil matching_sets(path, type).each do |set| if has_precedence?(old_scope, set['scope']) - defaults.deep_merge! set['values'] + defaults = Utils.deep_merge_hashes(defaults, set['values']) old_scope = set['scope'] else - defaults = set['values'].deep_merge(defaults) + defaults = Utils.deep_merge_hashes(set['values'], defaults) end end defaults From 880a503094da94d63f872e9fb5e2758bdfbf45aa Mon Sep 17 00:00:00 2001 From: Anatol Broder Date: Tue, 24 Jun 2014 20:27:01 +0200 Subject: [PATCH 3/3] Add a test --- features/frontmatter_defaults.feature | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/features/frontmatter_defaults.feature b/features/frontmatter_defaults.feature index c3e7c8de..41a7a35e 100644 --- a/features/frontmatter_defaults.feature +++ b/features/frontmatter_defaults.feature @@ -128,3 +128,9 @@ Feature: frontmatter defaults When I run jekyll build Then the _site directory should exist And I should see "Value: Override" in "_site/slides/slide2.html" + + Scenario: Deep merge frontmatter defaults + Given I have an "index.html" page with fruit "{orange: 1}" that contains "Fruits: {{ page.fruit.orange | plus: page.fruit.apple }}" + And I have a configuration file with "defaults" set to "[{scope: {path: ""}, values: {fruit: {apple: 2}}}]" + When I run jekyll build + Then I should see "Fruits: 3" in "_site/index.html"