lib/jinx/metadata/property.rb in jinx-2.1.3 vs lib/jinx/metadata/property.rb in jinx-2.1.4

- old
+ new

@@ -270,12 +270,12 @@ unless flag_supported?(flag) then raise ArgumentError.new("Property #{declarer.name}.#{self} flag not supported: #{flag.qp}") end @flags << flag case flag - when :owner then owner_flag_set - when :dependent then dependent_flag_set + when :owner then owner_flag_set + when :dependent then dependent_flag_set end end # This method is called when the owner flag is set. # The inverse is inferred as the referenced owner type's dependent attribute which references @@ -284,23 +284,28 @@ # @raise [MetadataError] if this attribute is dependent or an inverse could not be inferred def owner_flag_set if dependent? then raise MetadataError.new("#{declarer.qp}.#{self} cannot be set as a #{type.qp} owner since it is already defined as a #{type.qp} dependent") end - inv_attr = type.dependent_attribute(@declarer) - if inv_attr.nil? then - raise MetadataError.new("#{@declarer.qp} owner attribute #{self} does not have a #{type.qp} dependent inverse") + inv_prop = inverse_property + if inv_prop then + inv_prop.qualify(:dependent) unless inv_prop.dependent? + else + inv_attr = type.dependent_attribute(@declarer) + if inv_attr.nil? then + raise MetadataError.new("The #{@declarer.qp} owner attribute #{self} of type #{type.qp} does not have an inverse") + end + logger.debug { "#{declarer.qp}.#{self} inverse is the #{type.qp} dependent attribute #{inv_attr}." } + self.inverse = inv_attr end - logger.debug { "#{declarer.qp}.#{self} inverse is the #{type.qp} dependent attribute #{inv_attr}." } - self.inverse = inv_attr end # Validates that this is not an owner attribute. # # @raise [MetadataError] if this is an owner attribute def dependent_flag_set if owner? then - raise MetadataError.new("#{declarer.qp}.#{self} cannot be set as a #{type.qp} dependent since it is already defined as a #{type.qp} owner") + raise MetadataError.new("#{declarer.qp}.#{self} cannot be set as a #{type.qp} dependent since it is already defined as a #{type.qp} owner") end end end end