neoid 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -15,7 +15,7 @@ Neoid offers querying Neo4j for IDs of objects and then fetch them from your RDB
15
15
 
16
16
  ## Changelog
17
17
 
18
- [See Changelog](https://github.com/elado/neoid/blob/master/CHANGELOG.md)
18
+ [See Changelog](https://github.com/elado/neoid/blob/master/CHANGELOG.md). Including some breaking changes (and solutions) from previos versions.
19
19
 
20
20
 
21
21
  ## Installation
@@ -23,7 +23,7 @@ Neoid offers querying Neo4j for IDs of objects and then fetch them from your RDB
23
23
  Add to your Gemfile and run the `bundle` command to install it.
24
24
 
25
25
  ```ruby
26
- gem 'neoid', '~> 0.1'
26
+ gem 'neoid', '~> 0.1.1'
27
27
  ```
28
28
 
29
29
  **Requires Ruby 1.9.2 or later.**
@@ -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
 
data/lib/neoid/node.rb CHANGED
@@ -106,7 +106,7 @@ module Neoid
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 @@ module Neoid
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
 
data/lib/neoid/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Neoid
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -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
@@ -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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: neoid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-08 00:00:00.000000000 Z
12
+ date: 2013-01-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -139,8 +139,9 @@ files:
139
139
  - neoid.gemspec
140
140
  - spec/neoid/batch_spec.rb
141
141
  - spec/neoid/config_spec.rb
142
- - spec/neoid/model_additions_spec.rb
143
142
  - spec/neoid/model_config_spec.rb
143
+ - spec/neoid/node_spec.rb
144
+ - spec/neoid/relationship_spec.rb
144
145
  - spec/neoid/search_spec.rb
145
146
  - spec/neoid_spec.rb
146
147
  - spec/spec_helper.rb
@@ -174,8 +175,9 @@ summary: Neo4j for ActiveRecord
174
175
  test_files:
175
176
  - spec/neoid/batch_spec.rb
176
177
  - spec/neoid/config_spec.rb
177
- - spec/neoid/model_additions_spec.rb
178
178
  - spec/neoid/model_config_spec.rb
179
+ - spec/neoid/node_spec.rb
180
+ - spec/neoid/relationship_spec.rb
179
181
  - spec/neoid/search_spec.rb
180
182
  - spec/neoid_spec.rb
181
183
  - spec/spec_helper.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