Sha256: e59ace777765df901864d709bf71fe771abc0380be7b4a1dd0234f633f6a53cd

Contents?: true

Size: 1.46 KB

Versions: 6

Compression:

Stored size: 1.46 KB

Contents

class Neo4j::Node
  module Wrapper

    # this is a plugin in the neo4j-core so that the Ruby wrapper will be wrapped around the Neo4j::Node objects
    def wrapper
      most_concrete_class = sorted_wrapper_classes
      return self unless most_concrete_class
      wrapped_node = most_concrete_class.new
      wrapped_node.init_on_load(self, self.props)
      wrapped_node
    end

    def checked_labels_set
      @@_checked_labels_set ||= Set.new
    end

    def check_label(label_name)
      unless checked_labels_set.include?(label_name)
        load_class_from_label(label_name)
        # do this only once
        checked_labels_set.add(label_name)
      end
    end

    def sorted_wrapper_classes
      if self.props.is_a?(Hash) && self.props.has_key?(Neo4j::Config.class_name_property)
        self.props[Neo4j::Config.class_name_property].constantize
      else
        wrappers = _class_wrappers
        return self if wrappers.nil?
        wrapper_classes = wrappers.map{|w| Neo4j::ActiveNode::Labels._wrapped_labels[w]}
        wrapper_classes.sort.first
      end
    end

    def load_class_from_label(label_name)
      begin
        label_name.to_s.split("::").inject(Kernel) {|container, name| container.const_get(name.to_s) }
      rescue NameError
        nil
      end
    end

    def _class_wrappers
      labels.find_all do |label_name|
        check_label(label_name)
        Neo4j::ActiveNode::Labels._wrapped_labels[label_name].class == Class
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
neo4j-3.0.1 lib/neo4j/active_node/node_wrapper.rb
neo4j-3.0.0 lib/neo4j/active_node/node_wrapper.rb
neo4j-3.0.0.rc.5 lib/neo4j/active_node/node_wrapper.rb
neo4j-3.0.0.rc.4 lib/neo4j/active_node/node_wrapper.rb
neo4j-3.0.0.rc.3 lib/neo4j/active_node/node_wrapper.rb
neo4j-3.0.0.rc.2 lib/neo4j/active_node/node_wrapper.rb