lib/smart_kv.rb in smart_kv-0.1.1 vs lib/smart_kv.rb in smart_kv-0.1.2

- old
+ new

@@ -27,12 +27,21 @@ raise NotImplementedError, "unrecognized key(s): #{unrecognized_keys.map{|k| "`:#{k}'" }.join(', ')} in #{self.class}" end end def method_missing(m, *args) - @object ||= @object_class <= Hash ? @kv : @object_class.new(@kv) + @object ||= if @object_class <= Struct + Struct.new(*@kv.keys).new(*@kv.values) + elsif @object_class.respond_to?(:members) + raise "#{ @object_class } struct members don't match" unless (@object_class.members - @kv.keys).empty? + @object_class.new(*@kv.values) + elsif @object_class <= Hash + @kv + else + @object_class.new(@kv.to_h) + end @object.send(m, *args) - end + end protected def prevent_direct_instantiation if self.class == SmartKv