Sha256: 87ee97f084c2e60bb03c2d92525fcf2d9c9eefab14b1f579f629a68403aa5e6c

Contents?: true

Size: 1.42 KB

Versions: 1

Compression:

Stored size: 1.42 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
      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

1 entries across 1 versions & 1 rubygems

Version Path
neo4j-3.0.0.alpha.9 lib/neo4j/wrapper.rb