Sha256: 294ea5cb0c072296c2d5386581844cd982f79b8b861d1e7c3fd5a787514f29b9

Contents?: true

Size: 1.45 KB

Versions: 71

Compression:

Stored size: 1.45 KB

Contents

require 'active_support/inflector'
require 'neo4j/core/node'

wrapping_proc = proc do |node|
  found_class = Neo4j::NodeWrapping.class_to_wrap(node.labels)
  next node if not found_class

  found_class.new.tap do |wrapped_node|
    wrapped_node.init_on_load(node, node.props)
  end
end
Neo4j::Core::Node.wrapper_callback(wrapping_proc)

module Neo4j
  module NodeWrapping
    # Only load classes once for performance
    CONSTANTS_FOR_LABELS_CACHE = {}

    class << self
      def class_to_wrap(labels)
        load_classes_from_labels(labels)
        Neo4j::ActiveNode::Labels.model_for_labels(labels).tap do |model_class|
          populate_constants_for_labels_cache(model_class, labels)
        end
      end

      private

      def load_classes_from_labels(labels)
        labels.each { |label| constant_for_label(label) }
      end

      def constant_for_label(label)
        CONSTANTS_FOR_LABELS_CACHE[label] || CONSTANTS_FOR_LABELS_CACHE[label] = constantized_label(label)
      end

      def constantized_label(label)
        "#{association_model_namespace}::#{label}".constantize
      rescue NameError
        nil
      end

      def populate_constants_for_labels_cache(model_class, labels)
        labels.each do |label|
          CONSTANTS_FOR_LABELS_CACHE[label] = model_class if CONSTANTS_FOR_LABELS_CACHE[label].nil?
        end
      end

      def association_model_namespace
        Neo4j::Config.association_model_namespace_string
      end
    end
  end
end

Version data entries

71 entries across 71 versions & 1 rubygems

Version Path
neo4j-8.0.0.alpha.12 lib/neo4j/active_node/node_wrapper.rb
neo4j-8.0.0.alpha.11 lib/neo4j/active_node/node_wrapper.rb
neo4j-8.0.0.alpha.10 lib/neo4j/active_node/node_wrapper.rb
neo4j-8.0.0.alpha.9 lib/neo4j/active_node/node_wrapper.rb
neo4j-8.0.0.alpha.8 lib/neo4j/active_node/node_wrapper.rb
neo4j-8.0.0.alpha.7 lib/neo4j/active_node/node_wrapper.rb
neo4j-8.0.0.alpha.6 lib/neo4j/active_node/node_wrapper.rb
neo4j-8.0.0.alpha.5 lib/neo4j/active_node/node_wrapper.rb
neo4j-8.0.0.alpha.4 lib/neo4j/active_node/node_wrapper.rb
neo4j-8.0.0.alpha.2 lib/neo4j/active_node/node_wrapper.rb
neo4j-8.0.0.alpha.1 lib/neo4j/active_node/node_wrapper.rb