Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

fixed subref relationship type

separated tests for node and relationships

latest version accidentally changed the subref outgoing relationship type.

the right way is
refnode-[:users_subref]->users_subref-[:users]->node

and not
refnode-[:users_subref]->users_subref-[:users_subref]->node
  • Loading branch information...
commit e6431d00291b2fb0bd49bfeea28d16549853d17d 1 parent 1bf0275
Elad Ossadon authored
2  README.md
Source Rendered
@@ -217,7 +217,7 @@ Neoid::Node.from_hash(Neoid.db.get_node_auto_index(Neoid::UNIQUE_ID_KEY, user.ne
217 217 If Subreferences are enabled, you can get the subref node and then get all attached nodes:
218 218
219 219 ```ruby
220   -Neoid.ref_node.outgoing('users_subref').first.outgoing('users_subref').to_a
  220 +Neoid.ref_node.outgoing('users_subref').first.outgoing('users').to_a
221 221 # => this, according to Neography, returns an array of Neography::Node so no conversion is needed
222 222 ```
223 223
4 lib/neoid/node.rb
@@ -106,7 +106,7 @@ def _neo_save
106 106 }
107 107 } else {
108 108 node = g.addVertex(node_data);
109   - if (enable_subrefs) g.addEdge(g.v(subref_id), node, neo_subref_rel_type);
  109 + if (enable_subrefs) g.addEdge(g.v(subref_id), node, neo_subref_node_rel_type);
110 110
111 111 if (enable_model_index) g.idx(neo_model_index_name).put('ar_id', node.ar_id, node);
112 112 }
@@ -125,7 +125,7 @@ def _neo_save
125 125 if Neoid.config.enable_subrefs
126 126 script_vars.update(
127 127 subref_id: self.class.neo_subref_node.neo_id,
128   - neo_subref_rel_type: self.class.neo_subref_rel_type
  128 + neo_subref_node_rel_type: self.class.neo_subref_node_rel_type
129 129 )
130 130 end
131 131
2  lib/neoid/version.rb
... ... @@ -1,3 +1,3 @@
1 1 module Neoid
2   - VERSION = "0.1.1"
  2 + VERSION = "0.1.2"
3 3 end
222 spec/neoid/model_additions_spec.rb
... ... @@ -1,222 +0,0 @@
1   -require 'spec_helper'
2   -
3   -describe Neoid::ModelAdditions do
4   - context "nodes" do
5   - context "create graph nodes" do
6   - it "should call neo_save after model creation" do
7   - user = User.new(name: "Elad Ossadon")
8   - user.should_receive(:neo_save)
9   - user.save!
10   - end
11   -
12   - it "should create a node for user" do
13   - user = User.create!(name: "Elad Ossadon", slug: "elado")
14   -
15   - user.neo_node.should_not be_nil
16   -
17   - user.neo_node.ar_id.should == user.id
18   - user.neo_node.name.should == user.name
19   - user.neo_node.slug.should == user.slug
20   - end
21   -
22   - it "should create a neo_node for movie" do
23   - movie = Movie.create!(name: "Memento", slug: "memento-1999", year: 1999)
24   -
25   - movie.neo_node.should_not be_nil
26   -
27   - movie.neo_node.ar_id.should == movie.id
28   - movie.neo_node.name.should == movie.name
29   - movie.neo_node.year.should == movie.year
30   - end
31   - end
32   -
33   - context "update graph nodes" do
34   - it "should call neo_save after model update" do
35   - user = User.create!(name: "Elad Ossadon")
36   - user.should_receive(:neo_save)
37   - user.name = "John Doe"
38   - user.save!
39   - end
40   -
41   - it "should update a node after model update" do
42   - user = User.create!(name: "Elad Ossadon")
43   - user.neo_node.name.should == "Elad Ossadon"
44   -
45   - user.name = "John Doe"
46   - user.save!
47   -
48   - user.neo_node.name.should == "John Doe"
49   - end
50   - end
51   -
52   - context "find by id" do
53   - it "should find a neo_node for user" do
54   - user = User.create!(name: "Elad Ossadon", slug: "elado")
55   -
56   - user.neo_node.should_not be_nil
57   - user.neo_find_by_id.should_not be_nil
58   - end
59   - end
60   -
61   - context "no auto_index" do
62   - it "should not index a node if option :auto_index is set to false" do
63   - model = NoAutoIndexNode.new(name: "Hello")
64   - model.should_not_receive(:neo_save)
65   - model.save!
66   - end
67   - end
68   -
69   - context "subrefs" do
70   - it "should create a relationship with a subref node" do
71   - old, Neoid.config.enable_subrefs = Neoid.config.enable_subrefs, true
72   -
73   - Neoid.send(:initialize_subrefs)
74   -
75   - begin
76   - user = User.create!(name: "Elad")
77   - user.neo_node.rel(:incoming, :users_subref).should_not be_nil
78   - ensure
79   - Neoid.config.enable_subrefs = old
80   - end
81   - end
82   -
83   - it "should not create a relationship with a subref node if disabled" do
84   - old, Neoid.config.enable_subrefs = Neoid.config.enable_subrefs, false
85   -
86   - begin
87   - user = User.create!(name: "Elad")
88   - user.neo_node.rel(:incoming, :users_subref).should be_nil
89   - ensure
90   - Neoid.config.enable_subrefs = old
91   - end
92   - end
93   - end
94   -
95   - context "per_model_indexes" do
96   - it "should create a relationship with a subref node" do
97   - old, Neoid.config.enable_per_model_indexes = Neoid.config.enable_per_model_indexes, true
98   -
99   - Neoid.send(:initialize_per_model_indexes)
100   -
101   - begin
102   - user = User.create!(name: "Elad")
103   - Neoid.db.get_node_index(User.neo_model_index_name, 'ar_id', user.id).should_not be_nil
104   - ensure
105   - Neoid.config.enable_per_model_indexes = old
106   - end
107   - end
108   -
109   - it "should not create a relationship with a subref node if disabled" do
110   - old, Neoid.config.enable_per_model_indexes = Neoid.config.enable_per_model_indexes, false
111   -
112   - begin
113   - user = User.create!(name: "Elad")
114   - expect { Neoid.db.get_node_index(User.neo_model_index_name, 'ar_id', user.id) }.to raise_error(Neography::NotFoundException)
115   - ensure
116   - Neoid.config.enable_per_model_indexes = old
117   - end
118   - end
119   - end
120   - end
121   -
122   - context "relationships" do
123   - let(:user) { User.create!(name: "Elad Ossadon", slug: "elado") }
124   - let(:movie) { Movie.create!(name: "Memento", slug: "memento-1999", year: 1999) }
125   -
126   - it "should call neo_save after relationship model creation" do
127   - Like.any_instance.should_receive(:neo_save)
128   - user.like! movie
129   - end
130   -
131   - it "should create a neo_relationship for like" do
132   - like = user.like! movie
133   - like = user.likes.last
134   -
135   - like.neo_find_by_id.should_not be_nil
136   -
137   - like.neo_relationship.should_not be_nil
138   -
139   - like.neo_relationship.start_node.should == user.neo_node
140   - like.neo_relationship.end_node.should == movie.neo_node
141   - like.neo_relationship.rel_type.should == 'likes'
142   - end
143   -
144   - it "should delete a relationship on deleting a record" do
145   - user.like! movie
146   - like = user.likes.last
147   -
148   - relationship_neo_id = like.neo_relationship.neo_id
149   -
150   - Neography::Relationship.load(relationship_neo_id).should_not be_nil
151   -
152   - user.unlike! movie
153   -
154   - expect { Neography::Relationship.load(relationship_neo_id) }.to raise_error(Neography::RelationshipNotFoundException)
155   - end
156   -
157   - it "should update neo4j on manual set of a collection" do
158   - movies = [
159   - Movie.create(name: "Memento"),
160   - Movie.create(name: "The Prestige"),
161   - Movie.create(name: "The Dark Knight"),
162   - Movie.create(name: "Spiderman")
163   - ]
164   -
165   - user.neo_node.outgoing(:likes).length.should == 0
166   -
167   - expect {
168   - user.movies = movies
169   - }.to change{ user.neo_node.outgoing(:likes).length }.to(movies.length)
170   -
171   - expect { expect {
172   - user.movies -= movies[0..1]
173   - }.to change{ user.movies.count }.by(-2)
174   - }.to change{ user.neo_node.outgoing(:likes).length }.by(-2)
175   -
176   - expect {
177   - user.movies = []
178   - }.to change{ user.neo_node.outgoing(:likes).length }.to(0)
179   -
180   - expect {
181   - user.movie_ids = movies[0...2].collect(&:id)
182   - }.to change{ user.neo_node.outgoing(:likes).length }.to(2)
183   - end
184   -
185   - it "should update a relationship after relationship model update" do
186   - like = user.like! movie
187   -
188   - like.neo_relationship.rate.should be_nil
189   -
190   - like.rate = 10
191   - like.save!
192   -
193   - like.neo_relationship.rate.should == 10
194   - end
195   - end
196   -
197   - context "polymorphic relationship" do
198   - let(:user) { User.create(name: "Elad Ossadon", slug: "elado") }
199   -
200   - it "should create relationships with polymorphic items" do
201   - followed = [
202   - User.create(name: "Some One", slug: "someone"),
203   - Movie.create(name: "The Prestige"),
204   - Movie.create(name: "The Dark Knight")
205   - ]
206   -
207   - expect {
208   - followed.each do |item|
209   - user.user_follows.create!(item: item)
210   - end
211   - }.to change{ user.neo_node.outgoing(:follows).length }.to(followed.length)
212   -
213   - expect {
214   - user.user_follows = user.user_follows[0...1]
215   - }.to change{ user.neo_node.outgoing(:follows).length }.to(1)
216   -
217   - expect {
218   - user.user_follows = []
219   - }.to change{ user.neo_node.outgoing(:follows).length }.to(0)
220   - end
221   - end
222   -end
131 spec/neoid/node_spec.rb
... ... @@ -0,0 +1,131 @@
  1 +require 'spec_helper'
  2 +
  3 +describe Neoid::Node do
  4 + context "create graph nodes" do
  5 + it "should call neo_save after model creation" do
  6 + user = User.new(name: "Elad Ossadon")
  7 + user.should_receive(:neo_save)
  8 + user.save!
  9 + end
  10 +
  11 + it "should create a node for user" do
  12 + user = User.create!(name: "Elad Ossadon", slug: "elado")
  13 +
  14 + user.neo_node.should_not be_nil
  15 +
  16 + user.neo_node.ar_id.should == user.id
  17 + user.neo_node.name.should == user.name
  18 + user.neo_node.slug.should == user.slug
  19 + end
  20 +
  21 + it "should create a neo_node for movie" do
  22 + movie = Movie.create!(name: "Memento", slug: "memento-1999", year: 1999)
  23 +
  24 + movie.neo_node.should_not be_nil
  25 +
  26 + movie.neo_node.ar_id.should == movie.id
  27 + movie.neo_node.name.should == movie.name
  28 + movie.neo_node.year.should == movie.year
  29 + end
  30 + end
  31 +
  32 + context "update graph nodes" do
  33 + it "should call neo_save after model update" do
  34 + user = User.create!(name: "Elad Ossadon")
  35 + user.should_receive(:neo_save)
  36 + user.name = "John Doe"
  37 + user.save!
  38 + end
  39 +
  40 + it "should update a node after model update" do
  41 + user = User.create!(name: "Elad Ossadon")
  42 + user.neo_node.name.should == "Elad Ossadon"
  43 +
  44 + user.name = "John Doe"
  45 + user.save!
  46 +
  47 + user.neo_node.name.should == "John Doe"
  48 + end
  49 + end
  50 +
  51 + context "find by id" do
  52 + it "should find a neo_node for user" do
  53 + user = User.create!(name: "Elad Ossadon", slug: "elado")
  54 +
  55 + user.neo_node.should_not be_nil
  56 + user.neo_find_by_id.should_not be_nil
  57 + end
  58 + end
  59 +
  60 + context "no auto_index" do
  61 + it "should not index a node if option :auto_index is set to false" do
  62 + model = NoAutoIndexNode.new(name: "Hello")
  63 + model.should_not_receive(:neo_save)
  64 + model.save!
  65 + end
  66 + end
  67 +
  68 + context "subrefs" do
  69 + it "should connect subrefs to reference node" do
  70 + old, Neoid.config.enable_subrefs = Neoid.config.enable_subrefs, true
  71 +
  72 + Neoid.send(:initialize_subrefs)
  73 +
  74 + begin
  75 + Neoid.ref_node.rel(:outgoing, :users_subref).should_not be_nil
  76 + ensure
  77 + Neoid.config.enable_subrefs = old
  78 + end
  79 + end
  80 +
  81 + it "should create a relationship with a subref node" do
  82 + old, Neoid.config.enable_subrefs = Neoid.config.enable_subrefs, true
  83 +
  84 + Neoid.send(:initialize_subrefs)
  85 +
  86 + begin
  87 + user = User.create!(name: "Elad")
  88 + user.neo_node.rel(:incoming, :users).should_not be_nil
  89 + ensure
  90 + Neoid.config.enable_subrefs = old
  91 + end
  92 + end
  93 +
  94 + it "should not create a relationship with a subref node if disabled" do
  95 + old, Neoid.config.enable_subrefs = Neoid.config.enable_subrefs, false
  96 +
  97 + begin
  98 + user = User.create!(name: "Elad")
  99 + user.neo_node.rel(:incoming, :users_subref).should be_nil
  100 + ensure
  101 + Neoid.config.enable_subrefs = old
  102 + end
  103 + end
  104 + end
  105 +
  106 + context "per_model_indexes" do
  107 + it "should create a relationship with a subref node" do
  108 + old, Neoid.config.enable_per_model_indexes = Neoid.config.enable_per_model_indexes, true
  109 +
  110 + Neoid.send(:initialize_per_model_indexes)
  111 +
  112 + begin
  113 + user = User.create!(name: "Elad")
  114 + Neoid.db.get_node_index(User.neo_model_index_name, 'ar_id', user.id).should_not be_nil
  115 + ensure
  116 + Neoid.config.enable_per_model_indexes = old
  117 + end
  118 + end
  119 +
  120 + it "should not create a relationship with a subref node if disabled" do
  121 + old, Neoid.config.enable_per_model_indexes = Neoid.config.enable_per_model_indexes, false
  122 +
  123 + begin
  124 + user = User.create!(name: "Elad")
  125 + expect { Neoid.db.get_node_index(User.neo_model_index_name, 'ar_id', user.id) }.to raise_error(Neography::NotFoundException)
  126 + ensure
  127 + Neoid.config.enable_per_model_indexes = old
  128 + end
  129 + end
  130 + end
  131 +end
102 spec/neoid/relationship_spec.rb
... ... @@ -0,0 +1,102 @@
  1 +require 'spec_helper'
  2 +
  3 +describe Neoid::Relationship do
  4 + let(:user) { User.create!(name: "Elad Ossadon", slug: "elado") }
  5 + let(:movie) { Movie.create!(name: "Memento", slug: "memento-1999", year: 1999) }
  6 +
  7 + it "should call neo_save after relationship model creation" do
  8 + Like.any_instance.should_receive(:neo_save)
  9 + user.like! movie
  10 + end
  11 +
  12 + it "should create a neo_relationship for like" do
  13 + like = user.like! movie
  14 + like = user.likes.last
  15 +
  16 + like.neo_find_by_id.should_not be_nil
  17 +
  18 + like.neo_relationship.should_not be_nil
  19 +
  20 + like.neo_relationship.start_node.should == user.neo_node
  21 + like.neo_relationship.end_node.should == movie.neo_node
  22 + like.neo_relationship.rel_type.should == 'likes'
  23 + end
  24 +
  25 + it "should delete a relationship on deleting a record" do
  26 + user.like! movie
  27 + like = user.likes.last
  28 +
  29 + relationship_neo_id = like.neo_relationship.neo_id
  30 +
  31 + Neography::Relationship.load(relationship_neo_id).should_not be_nil
  32 +
  33 + user.unlike! movie
  34 +
  35 + expect { Neography::Relationship.load(relationship_neo_id) }.to raise_error(Neography::RelationshipNotFoundException)
  36 + end
  37 +
  38 + it "should update neo4j on manual set of a collection" do
  39 + movies = [
  40 + Movie.create(name: "Memento"),
  41 + Movie.create(name: "The Prestige"),
  42 + Movie.create(name: "The Dark Knight"),
  43 + Movie.create(name: "Spiderman")
  44 + ]
  45 +
  46 + user.neo_node.outgoing(:likes).length.should == 0
  47 +
  48 + expect {
  49 + user.movies = movies
  50 + }.to change{ user.neo_node.outgoing(:likes).length }.to(movies.length)
  51 +
  52 + expect { expect {
  53 + user.movies -= movies[0..1]
  54 + }.to change{ user.movies.count }.by(-2)
  55 + }.to change{ user.neo_node.outgoing(:likes).length }.by(-2)
  56 +
  57 + expect {
  58 + user.movies = []
  59 + }.to change{ user.neo_node.outgoing(:likes).length }.to(0)
  60 +
  61 + expect {
  62 + user.movie_ids = movies[0...2].collect(&:id)
  63 + }.to change{ user.neo_node.outgoing(:likes).length }.to(2)
  64 + end
  65 +
  66 + it "should update a relationship after relationship model update" do
  67 + like = user.like! movie
  68 +
  69 + like.neo_relationship.rate.should be_nil
  70 +
  71 + like.rate = 10
  72 + like.save!
  73 +
  74 + like.neo_relationship.rate.should == 10
  75 + end
  76 +
  77 + context "polymorphic relationship" do
  78 + let(:user) { User.create(name: "Elad Ossadon", slug: "elado") }
  79 +
  80 + it "should create relationships with polymorphic items" do
  81 + followed = [
  82 + User.create(name: "Some One", slug: "someone"),
  83 + Movie.create(name: "The Prestige"),
  84 + Movie.create(name: "The Dark Knight")
  85 + ]
  86 +
  87 + expect {
  88 + followed.each do |item|
  89 + user.user_follows.create!(item: item)
  90 + end
  91 + }.to change{ user.neo_node.outgoing(:follows).length }.to(followed.length)
  92 +
  93 + expect {
  94 + user.user_follows = user.user_follows[0...1]
  95 + }.to change{ user.neo_node.outgoing(:follows).length }.to(1)
  96 +
  97 + expect {
  98 + user.user_follows = []
  99 + }.to change{ user.neo_node.outgoing(:follows).length }.to(0)
  100 + end
  101 + end
  102 +end

0 comments on commit e6431d0

Please sign in to comment.
Something went wrong with that request. Please try again.