lib/autoparse/instance.rb in autoparse-0.3.1 vs lib/autoparse/instance.rb in autoparse-0.3.2
- old
+ new
@@ -63,10 +63,29 @@
{}
end
)
end
+ def self.property(property_name)
+ property_key = self.keys[property_name] || property_name
+ schema_class = self.properties[property_key]
+ if !schema_class
+ if self.data[property_name]
+ schema_class = AutoParse.generate(self.data[property_name], :parent => self)
+ else
+ schema_class = self.additional_properties_schema
+ end
+ end
+ if schema_class.data['$ref']
+ # Dereference the schema if necessary.
+ schema_class = schema_class.dereference
+ # Avoid this dereference in the future.
+ self.properties[property_key] = schema_class
+ end
+ return schema_class
+ end
+
def self.keys
return @keys ||= (
if self.superclass.ancestors.include?(::AutoParse::Instance)
self.superclass.keys.dup
else
@@ -322,44 +341,28 @@
end
end
def __get__(property_name)
property_key = self.class.keys[property_name] || property_name
-
- schema_class = self.class.properties[property_key]
- schema_class = self.class.additional_properties_schema if !schema_class
+ schema_class = self.class.property(property_name)
if !schema_class
@data[property_key]
else
- if schema_class.data['$ref']
- # Dereference the schema if necessary.
- schema_class = schema_class.dereference
- # Avoid this dereference in the future.
- self.class.properties[property_key] = schema_class
+ if @data.has_key?(property_key)
+ value = @data[property_key]
+ else
+ value = schema_class.data['default']
end
-
- value = @data[property_key] || schema_class.data['default']
-
AutoParse.import(value, schema_class)
- end
- end
+ end end
protected :__get__
def __set__(property_name, value)
property_key = self.class.keys[property_name] || property_name
-
- schema_class = self.class.properties[property_key]
- schema_class = self.class.additional_properties_schema if !schema_class
+ schema_class = self.class.property(property_name)
if !schema_class
@data[property_key] = value
else
- if schema_class.data['$ref']
- # Dereference the schema if necessary.
- schema_class = schema_class.dereference
- # Avoid this dereference in the future.
- self.class.properties[property_key] = schema_class
- end
-
@data[property_key] = AutoParse.export(value, schema_class)
end
end
protected :__set__