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