lib/smart_kv.rb in smart_kv-0.1.0 vs lib/smart_kv.rb in smart_kv-0.1.1
- old
+ new
@@ -1,17 +1,22 @@
require "smart_kv/version"
require "smart_kv/register"
+require "smart_kv/macro"
SmartKvInitializationError = Class.new(StandardError)
class SmartKv
extend Register
+ extend Macro
- def initialize(required_keys = [], optional_keys = [], kv = {})
+ attr_reader :object_class
+
+ def initialize(required_keys = [], optional_keys = [], object_class = nil, kv = {})
prevent_direct_instantiation
- @kv = kv
+ @object_class = object_class || kv.class
+ @kv = kv.dup
hash = kv.to_h.dup
missing_keys = required_keys - hash.keys
unless missing_keys.empty?
raise KeyError, "missing required key(s): #{missing_keys.map{|k| "`:#{k}'" }.join(', ')} in #{self.class}"
@@ -22,10 +27,11 @@
raise NotImplementedError, "unrecognized key(s): #{unrecognized_keys.map{|k| "`:#{k}'" }.join(', ')} in #{self.class}"
end
end
def method_missing(m, *args)
- @kv.send(m, *args)
+ @object ||= @object_class <= Hash ? @kv : @object_class.new(@kv)
+ @object.send(m, *args)
end
protected
def prevent_direct_instantiation