Module: Neo4j::Wrapper::NodeMixin::ClassMethods
- Defined in:
- lib/neo4j-wrapper/node_mixin/class_methods.rb
Instance Method Summary collapse
-
#get_or_create(*args) ⇒ Object
Get the indexed entity, creating it (exactly once) if no indexed entity exist.
-
#load_entity(neo_id) ⇒ Object?
Loads a wrapped node from the database given a neo id.
-
#new(*args) ⇒ Object
(also: #create)
Creates a new node or loads an already existing Neo4j node.
-
#unique_factory_key ⇒ Symbol?
The property which has an unique index or nil.
Instance Method Details
#get_or_create(*args) ⇒ Object
It must not be called in a transaction. It will create and finish a new transaction.
Get the indexed entity, creating it (exactly once) if no indexed entity exist.
65 66 67 68 69 70 |
# File 'lib/neo4j-wrapper/node_mixin/class_methods.rb', line 65 def get_or_create(*args) props = args.first raise "Can't get or create entity since #{props.inspect} does not included unique key #{props[unique_factory_key]}'" unless props[unique_factory_key] index = index_for_type(_decl_props[unique_factory_key][:index]) Neo4j::Core::Index::UniqueFactory.new(unique_factory_key, index) { |*| new(*args) }.get_or_create(unique_factory_key, props[unique_factory_key]).wrapper end |
#load_entity(neo_id) ⇒ Object?
it will return nil if the node returned is not kind of this class
Loads a wrapped node from the database given a neo id.
88 89 90 91 92 93 |
# File 'lib/neo4j-wrapper/node_mixin/class_methods.rb', line 88 def load_entity(neo_id) node = Neo4j::Node.load(neo_id) return nil if node.nil? return node if node.class == Neo4j::Node node.kind_of?(self) ? node : nil end |
#new(*args) ⇒ Object Also known as: create
Creates a new node or loads an already existing Neo4j node.
You can use two callback method to initialize the node init_on_load - this method is called when the node is loaded from the database init_on_create - called when the node is created, will be provided with the same argument as the new method
Does
-
sets the neo4j property ‘_classname’ to self.class.to_s
-
creates a neo4j node java object (in @_java_node)
If you want to provide your own initialize method you should instead implement the method init_on_create method.
40 41 42 43 44 45 46 47 |
# File 'lib/neo4j-wrapper/node_mixin/class_methods.rb', line 40 def new(*args) node = Neo4j::Node.create wrapped_node = super() Neo4j::IdentityMap.add(node, wrapped_node) wrapped_node.init_on_load(node) wrapped_node.init_on_create(*args) wrapped_node end |
#unique_factory_key ⇒ Symbol?
Returns the property which has an unique index or nil.
74 75 76 77 78 79 80 81 82 |
# File 'lib/neo4j-wrapper/node_mixin/class_methods.rb', line 74 def unique_factory_key @unique_factory_key ||= begin unique = [] _decl_props.each_pair { |k, v| unique << k if v[:unique] } return nil if unique.empty? raise "Only one property can be unique, got #{unique.join(', ')}" if unique.size > 1 unique.first end end |