lib/parametric/struct.rb in parametric-0.2.4 vs lib/parametric/struct.rb in parametric-0.2.5

- old
+ new

@@ -53,11 +53,11 @@ raise InvalidStructError.new(st) unless st.valid? st end # this hook is called after schema definition in DSL module - def after_define_schema(schema) + def parametric_after_define_schema(schema) schema.fields.keys.each do |key| define_method key do _graph[key] end end @@ -67,23 +67,28 @@ attrs.each_with_object({}) do |(k, v), obj| obj[k] = wrap(k, v) end end + def parametric_build_class_for_child(key, child_schema) + klass = Class.new do + include Struct + end + klass.schema = child_schema + klass + end + def wrap(key, value) field = schema.fields[key] return value unless field case value when Hash # find constructor for field cons = field.meta_data[:schema] if cons.kind_of?(Parametric::Schema) - klass = Class.new do - include Struct - end - klass.schema = cons - klass.after_define_schema(cons) + klass = parametric_build_class_for_child(key, cons) + klass.parametric_after_define_schema(cons) cons = klass end cons ? cons.new(value) : value.freeze when Array value.map{|v| wrap(key, v) }.freeze