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