From 54185fe9ebda11ddb8cf533c931b4dfb469e249e Mon Sep 17 00:00:00 2001 From: Andy Meneely Date: Sun, 26 Jul 2015 21:50:43 -0400 Subject: [PATCH] Warn on non-existing layout Fix #99 and refactor args_loader a bit --- lib/squib/args/arg_loader.rb | 17 +++++++++-------- spec/args/box_spec.rb | 12 +++++++++++- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/lib/squib/args/arg_loader.rb b/lib/squib/args/arg_loader.rb index 2001474..480b1d1 100644 --- a/lib/squib/args/arg_loader.rb +++ b/lib/squib/args/arg_loader.rb @@ -52,16 +52,17 @@ module Squib # def defaultify(p, args, layout) return args[p] if args.key? p # arg was specified, no defaults used - dsl_method_defaults = @dsl_method_defaults || {} + defaults = self.class.parameters.merge(@dsl_method_defaults || {}) args[:layout].map do |layout_arg| - if layout_arg.nil? - self.class.parameters.merge(dsl_method_defaults)[p] # no layout specified, use default + return defaults[p] if layout_arg.nil? # no layout specified, use default + unless layout.key? layout_arg.to_s # specified a layout, but it doesn't exist in layout. Oops! + Squib.logger.warn("Layout \"#{layout_arg.to_s}\" does not exist in layout file - using default instead") + return defaults[p] + end + if layout[layout_arg.to_s].key?(p.to_s) + layout[layout_arg.to_s][p.to_s] # param specified in layout else - if layout[layout_arg.to_s].key? p.to_s - layout[layout_arg.to_s][p.to_s] # param specified in layout - else - self.class.parameters.merge(dsl_method_defaults)[p] # layout specified, but not this param - end + defaults[p] # layout specified, but not this param end end end diff --git a/spec/args/box_spec.rb b/spec/args/box_spec.rb index 447da26..f8761d1 100644 --- a/spec/args/box_spec.rb +++ b/spec/args/box_spec.rb @@ -79,6 +79,16 @@ describe Squib::Args::Box do y: [0, 0], # Box default ) end + + it 'warns on non-existent layouts' do + args = { layout: :heal} + expect(Squib.logger).to receive(:warn).with('Layout "heal" does not exist in layout file - using default instead').at_least(:once) + box.load!(args, expand_by: 2, layout: layout) + expect(box).to have_attributes( + x: [0, 0], # Box default + y: [0, 0], # Box default + ) + end end context 'unit conversion' do @@ -114,4 +124,4 @@ describe Squib::Args::Box do end -end \ No newline at end of file +end