Sha256: 17b848f515ba0248bc0071b0b6b62e6d763478e287856ecfdf6dc692f405c7e3

Contents?: true

Size: 1.91 KB

Versions: 1

Compression:

Stored size: 1.91 KB

Contents

module Neo4j::ActiveRel
  module Property
    extend ActiveSupport::Concern
    include Neo4j::Shared::Property

    %w[to_node from_node].each do |direction|
      define_method("#{direction}") { instance_variable_get("@#{direction}") }
      define_method("#{direction}=") do |argument|
        raise FrozenRelError, "Relationship start/end nodes cannot be changed once persisted" if self.persisted?
        instance_variable_set("@#{direction}", argument)
      end
    end

    alias_method :start_node, :from_node
    alias_method :end_node,   :to_node

    def type
      self.class._type
    end

    def initialize(attributes={}, options={})
      super(attributes, options)

      send_props(@relationship_props) unless @relationship_props.nil?
    end

    module ClassMethods

      # Extracts keys from attributes hash which are relationships of the model
      # TODO: Validate separately that relationships are getting the right values?  Perhaps also store the values and persist relationships on save?
      def extract_association_attributes!(attributes)
        attributes.keys.each_with_object({}) do |key, relationship_props|
          relationship_props[key] = attributes.delete(key) if [:from_node, :to_node].include?(key)
        end
      end

      %w[to_class from_class].each do |direction|
        define_method("#{direction}") { |argument| instance_variable_set("@#{direction}", argument) }
        define_method("_#{direction}") { instance_variable_get "@#{direction}" }
      end

      alias_method :start_class,  :from_class
      alias_method :end_class,    :to_class

      def type(type = nil)
        @rel_type = type
      end

      def _type
        @rel_type
      end

      def load_entity(id)
        Neo4j::Node.load(id)
      end

    end

    private

    def load_nodes(start_node=nil, end_node=nil)
      @from_node = RelatedNode.new(end_node)
      @to_node = RelatedNode.new(start_node)
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
neo4j-3.0.0.rc.3 lib/neo4j/active_rel/property.rb