From 2fe8e6042be8a263f250acda590daf3b99043025 Mon Sep 17 00:00:00 2001 From: Cyberarm Date: Mon, 24 Jun 2019 15:06:51 -0500 Subject: [PATCH] Added deep_merge for Theme --- lib/cyberarm_engine/ui/theme.rb | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/cyberarm_engine/ui/theme.rb b/lib/cyberarm_engine/ui/theme.rb index b79707f..d25d708 100644 --- a/lib/cyberarm_engine/ui/theme.rb +++ b/lib/cyberarm_engine/ui/theme.rb @@ -26,7 +26,23 @@ module CyberarmEngine end end - hash.merge(options) + deep_merge(hash, options) + end + + # Derived from Rails Hash#deep_merge! + # Enables passing partial themes through Element options without issue + def deep_merge(original, intergrate, &block) + hash = original.merge(intergrate) do |key, this_val, other_val| + if this_val.is_a?(Hash) && other_val.is_a?(Hash) + deep_merge(this_val, other_val, &block) + elsif block_given? + block.call(key, this_val, other_val) + else + other_val + end + end + + return hash end THEME = { @@ -91,4 +107,4 @@ module CyberarmEngine } }.freeze end -end \ No newline at end of file +end