lib/neo4j/active_rel/rel_wrapper.rb in neo4j-7.2.3 vs lib/neo4j/active_rel/rel_wrapper.rb in neo4j-8.0.0.alpha.1
- old
+ new
@@ -1,22 +1,30 @@
-class Neo4j::Relationship
- module Wrapper
- def wrapper
- props.symbolize_keys!
- begin
- most_concrete_class = class_from_type
- wrapped_rel = most_concrete_class.constantize.new
- rescue NameError
- return self
- end
+require 'neo4j/core/relationship'
- wrapped_rel.init_on_load(self, self._start_node_id, self._end_node_id, self.rel_type)
- wrapped_rel
- end
+wrapping_proc = proc do |relationship|
+ Neo4j::RelWrapping.wrapper(relationship)
+end
+Neo4j::Core::Relationship.wrapper_callback(wrapping_proc)
- private
+module Neo4j
+ module RelWrapping
+ class << self
+ def wrapper(rel)
+ rel.props.symbolize_keys!
+ begin
+ most_concrete_class = class_from_type(rel.rel_type)
+ most_concrete_class.constantize.new
+ rescue NameError => e
+ raise e unless e.message =~ /(uninitialized|wrong) constant/
- def class_from_type
- Neo4j::ActiveRel::Types::WRAPPED_CLASSES[rel_type] || Neo4j::ActiveRel::Types::WRAPPED_CLASSES[rel_type] = rel_type.camelize
+ return rel
+ end.tap do |wrapped_rel|
+ wrapped_rel.init_on_load(rel, rel.start_node_id, rel.end_node_id, rel.type)
+ end
+ end
+
+ def class_from_type(rel_type)
+ Neo4j::ActiveRel::Types::WRAPPED_CLASSES[rel_type] || Neo4j::ActiveRel::Types::WRAPPED_CLASSES[rel_type] = rel_type.to_s.camelize
+ end
end
end
end