neoid 0.0.1 → 0.0.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/CHANGELOG.md +6 -0
- data/README.md +2 -4
- data/lib/neoid.rb +6 -2
- data/lib/neoid/model_additions.rb +5 -5
- data/lib/neoid/node.rb +15 -15
- data/lib/neoid/relationship.rb +6 -6
- data/lib/neoid/version.rb +1 -1
- data/neoid.gemspec +2 -1
- data/spec/neoid/model_additions_spec.rb +3 -7
- metadata +26 -15
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# DRAFT ONLY - GEM IS NOT HOSTED YET.
|
2
|
-
|
3
1
|
# Neoid
|
4
2
|
|
5
3
|
Make your ActiveRecords stored and searchable on Neo4j graph database, in order to make fast graph queries that MySQL would crawl while doing them.
|
@@ -261,11 +259,11 @@ Please create a [new issue](https://github.com/elado/neoid/issues) if you run in
|
|
261
259
|
|
262
260
|
## To Do
|
263
261
|
|
264
|
-
* Auto create node when creating an AR, instead of lazily-creating it
|
265
262
|
* `after_update` to update a node/relationship.
|
266
263
|
* Allow to disable sub reference nodes through options
|
267
264
|
* Execute queries/scripts from model and not Neography (e.g. `Movie.neo_gremlin(gremlin_query)` with query that outputs IDs, returns a list of `Movie`s)
|
265
|
+
* Rake task to index all nodes and relatiohsips in Neo4j
|
268
266
|
|
269
267
|
---
|
270
268
|
|
271
|
-
|
269
|
+
Developed by [@elado](http://twitter.com/elado)
|
data/lib/neoid.rb
CHANGED
@@ -3,18 +3,22 @@ require "neoid/model_config"
|
|
3
3
|
require "neoid/model_additions"
|
4
4
|
require "neoid/node"
|
5
5
|
require "neoid/relationship"
|
6
|
-
require "neoid/railtie" if defined? Rails
|
7
6
|
|
8
7
|
module Neoid
|
9
8
|
class << self
|
10
9
|
attr_accessor :db
|
10
|
+
attr_accessor :logger
|
11
11
|
attr_accessor :ref_node
|
12
12
|
|
13
13
|
def db
|
14
|
-
raise "Neoid.db
|
14
|
+
raise "Must set Neoid.db with a Neography::Rest instance" unless @db
|
15
15
|
@db
|
16
16
|
end
|
17
17
|
|
18
|
+
def logger
|
19
|
+
@logger ||= Logger.new(ENV['NEOID_LOG'] ? $stdout : '/dev/null')
|
20
|
+
end
|
21
|
+
|
18
22
|
def ref_node
|
19
23
|
@ref_node ||= Neography::Node.load(Neoid.db.get_root['self'])
|
20
24
|
end
|
@@ -10,21 +10,21 @@ module Neoid
|
|
10
10
|
def neoidable_options
|
11
11
|
@neoidable_options
|
12
12
|
end
|
13
|
+
|
14
|
+
def neo_index_name
|
15
|
+
@index_name ||= "#{self.name.tableize}_index"
|
16
|
+
end
|
13
17
|
end
|
14
18
|
|
15
19
|
module InstanceMethods
|
16
20
|
def to_neo
|
17
21
|
{}
|
18
22
|
end
|
19
|
-
|
20
|
-
def neo_index_name
|
21
|
-
@index_name ||= "#{self.class.name.tableize}_index"
|
22
|
-
end
|
23
23
|
|
24
24
|
protected
|
25
25
|
def neo_properties_to_hash(*property_list)
|
26
26
|
property_list.flatten.inject({}) { |all, property|
|
27
|
-
all[property] = self.
|
27
|
+
all[property] = self.attributes[property]
|
28
28
|
all
|
29
29
|
}
|
30
30
|
end
|
data/lib/neoid/node.rb
CHANGED
@@ -10,6 +10,8 @@ module Neoid
|
|
10
10
|
|
11
11
|
def neo_subref_node
|
12
12
|
@_neo_subref_node ||= begin
|
13
|
+
Neoid::logger.info "Node#neo_subref_node #{neo_subref_rel_type}"
|
14
|
+
|
13
15
|
subref_node_query = Neoid.ref_node.outgoing(neo_subref_rel_type)
|
14
16
|
|
15
17
|
if subref_node_query.to_a.blank?
|
@@ -30,7 +32,8 @@ module Neoid
|
|
30
32
|
|
31
33
|
module InstanceMethods
|
32
34
|
def neo_find_by_id
|
33
|
-
Neoid.
|
35
|
+
Neoid::logger.info "Node#neo_find_by_id #{self.class.neo_index_name} #{self.id}"
|
36
|
+
Neoid.db.get_node_index(self.class.neo_index_name, :ar_id, self.id)
|
34
37
|
end
|
35
38
|
|
36
39
|
def neo_create
|
@@ -39,18 +42,16 @@ module Neoid
|
|
39
42
|
|
40
43
|
node = Neography::Node.create(data)
|
41
44
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
)
|
48
|
-
rescue Exception => e
|
49
|
-
puts [$!.message] + $!.backtrace
|
50
|
-
raise e
|
51
|
-
end
|
45
|
+
Neography::Relationship.create(
|
46
|
+
self.class.neo_subref_node_rel_type,
|
47
|
+
self.class.neo_subref_node,
|
48
|
+
node
|
49
|
+
)
|
52
50
|
|
53
|
-
Neoid.db.add_node_to_index(neo_index_name, :ar_id, self.id, node)
|
51
|
+
Neoid.db.add_node_to_index(self.class.neo_index_name, :ar_id, self.id, node)
|
52
|
+
|
53
|
+
Neoid::logger.info "Node#neo_create #{self.class.name} #{self.id}, index = #{self.class.neo_index_name}"
|
54
|
+
|
54
55
|
node
|
55
56
|
end
|
56
57
|
|
@@ -64,14 +65,12 @@ module Neoid
|
|
64
65
|
|
65
66
|
def neo_destroy
|
66
67
|
return unless neo_node
|
67
|
-
Neoid.db.remove_node_from_index(neo_index_name, neo_node)
|
68
|
+
Neoid.db.remove_node_from_index(self.class.neo_index_name, neo_node)
|
68
69
|
neo_node.del
|
69
70
|
end
|
70
71
|
end
|
71
72
|
|
72
73
|
def self.included(receiver)
|
73
|
-
Neoid.db.create_node_index(receiver.name.tableize)
|
74
|
-
|
75
74
|
receiver.extend Neoid::ModelAdditions::ClassMethods
|
76
75
|
receiver.send :include, Neoid::ModelAdditions::InstanceMethods
|
77
76
|
receiver.extend ClassMethods
|
@@ -79,6 +78,7 @@ module Neoid
|
|
79
78
|
|
80
79
|
receiver.neo_subref_node # ensure
|
81
80
|
|
81
|
+
receiver.after_create :neo_create
|
82
82
|
receiver.after_destroy :neo_destroy
|
83
83
|
end
|
84
84
|
end
|
data/lib/neoid/relationship.rb
CHANGED
@@ -2,7 +2,7 @@ module Neoid
|
|
2
2
|
module Relationship
|
3
3
|
module InstanceMethods
|
4
4
|
def neo_find_by_id
|
5
|
-
Neoid.db.get_relationship_index(neo_index_name, :ar_id, self.id)
|
5
|
+
Neoid.db.get_relationship_index(self.class.neo_index_name, :ar_id, self.id)
|
6
6
|
end
|
7
7
|
|
8
8
|
def neo_create
|
@@ -19,7 +19,9 @@ module Neoid
|
|
19
19
|
end_node.neo_node
|
20
20
|
)
|
21
21
|
|
22
|
-
Neoid.db.add_relationship_to_index(neo_index_name, :ar_id, self.id, relationship)
|
22
|
+
Neoid.db.add_relationship_to_index(self.class.neo_index_name, :ar_id, self.id, relationship)
|
23
|
+
|
24
|
+
Neoid::logger.info "Relationship#neo_create #{self.class.name} #{self.id}, index = #{self.class.neo_index_name}"
|
23
25
|
|
24
26
|
relationship
|
25
27
|
end
|
@@ -30,8 +32,8 @@ module Neoid
|
|
30
32
|
|
31
33
|
def neo_destroy
|
32
34
|
return unless neo_relationship
|
33
|
-
Neoid.db.remove_relationship_from_index(neo_index_name, neo_relationship)
|
34
|
-
|
35
|
+
Neoid.db.remove_relationship_from_index(self.class.neo_index_name, neo_relationship)
|
36
|
+
neo_relationship.del
|
35
37
|
end
|
36
38
|
|
37
39
|
def neo_relationship
|
@@ -40,8 +42,6 @@ module Neoid
|
|
40
42
|
end
|
41
43
|
|
42
44
|
def self.included(receiver)
|
43
|
-
Neoid.db.create_relationship_index(receiver.name.tableize)
|
44
|
-
|
45
45
|
receiver.extend Neoid::ModelAdditions::ClassMethods
|
46
46
|
receiver.send :include, Neoid::ModelAdditions::InstanceMethods
|
47
47
|
receiver.send :include, InstanceMethods
|
data/lib/neoid/version.rb
CHANGED
data/neoid.gemspec
CHANGED
@@ -18,8 +18,9 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
|
+
s.add_development_dependency "rake"
|
21
22
|
s.add_development_dependency "rspec"
|
22
23
|
s.add_development_dependency "rest-client"
|
24
|
+
s.add_development_dependency "supermodel"
|
23
25
|
s.add_runtime_dependency "neography"
|
24
|
-
s.add_runtime_dependency "supermodel"
|
25
26
|
end
|
@@ -77,12 +77,9 @@ describe Neoid::ModelAdditions do
|
|
77
77
|
context "nodes" do
|
78
78
|
context "create graph nodes" do
|
79
79
|
it "should call neo_create on a neo_node for user" do
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
user.should_receive(:neo_create)
|
85
|
-
user.neo_node
|
80
|
+
User.any_instance.should_receive(:neo_create)
|
81
|
+
|
82
|
+
User.create(name: "Elad Ossadon")
|
86
83
|
end
|
87
84
|
|
88
85
|
it "should create a neo_node for user" do
|
@@ -110,7 +107,6 @@ describe Neoid::ModelAdditions do
|
|
110
107
|
it "should find a neo_node for user" do
|
111
108
|
user = User.create(name: "Elad Ossadon", slug: "elado")
|
112
109
|
|
113
|
-
user.neo_find_by_id.should be_nil
|
114
110
|
user.neo_node.should_not be_nil
|
115
111
|
user.neo_find_by_id.should_not be_nil
|
116
112
|
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.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01-
|
12
|
+
date: 2012-01-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: &70163085349120 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70163085349120
|
14
25
|
- !ruby/object:Gem::Dependency
|
15
26
|
name: rspec
|
16
|
-
requirement: &
|
27
|
+
requirement: &70163085342100 !ruby/object:Gem::Requirement
|
17
28
|
none: false
|
18
29
|
requirements:
|
19
30
|
- - ! '>='
|
@@ -21,10 +32,10 @@ dependencies:
|
|
21
32
|
version: '0'
|
22
33
|
type: :development
|
23
34
|
prerelease: false
|
24
|
-
version_requirements: *
|
35
|
+
version_requirements: *70163085342100
|
25
36
|
- !ruby/object:Gem::Dependency
|
26
37
|
name: rest-client
|
27
|
-
requirement: &
|
38
|
+
requirement: &70163085341480 !ruby/object:Gem::Requirement
|
28
39
|
none: false
|
29
40
|
requirements:
|
30
41
|
- - ! '>='
|
@@ -32,21 +43,21 @@ dependencies:
|
|
32
43
|
version: '0'
|
33
44
|
type: :development
|
34
45
|
prerelease: false
|
35
|
-
version_requirements: *
|
46
|
+
version_requirements: *70163085341480
|
36
47
|
- !ruby/object:Gem::Dependency
|
37
|
-
name:
|
38
|
-
requirement: &
|
48
|
+
name: supermodel
|
49
|
+
requirement: &70163085341000 !ruby/object:Gem::Requirement
|
39
50
|
none: false
|
40
51
|
requirements:
|
41
52
|
- - ! '>='
|
42
53
|
- !ruby/object:Gem::Version
|
43
54
|
version: '0'
|
44
|
-
type: :
|
55
|
+
type: :development
|
45
56
|
prerelease: false
|
46
|
-
version_requirements: *
|
57
|
+
version_requirements: *70163085341000
|
47
58
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
49
|
-
requirement: &
|
59
|
+
name: neography
|
60
|
+
requirement: &70163085340500 !ruby/object:Gem::Requirement
|
50
61
|
none: false
|
51
62
|
requirements:
|
52
63
|
- - ! '>='
|
@@ -54,7 +65,7 @@ dependencies:
|
|
54
65
|
version: '0'
|
55
66
|
type: :runtime
|
56
67
|
prerelease: false
|
57
|
-
version_requirements: *
|
68
|
+
version_requirements: *70163085340500
|
58
69
|
description: Extend Ruby on Rails ActiveRecord with Neo4j nodes. Keep RDBMS and utilize
|
59
70
|
the power of Neo4j queries
|
60
71
|
email:
|
@@ -94,7 +105,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
94
105
|
version: '0'
|
95
106
|
segments:
|
96
107
|
- 0
|
97
|
-
hash: -
|
108
|
+
hash: -1739317772889618819
|
98
109
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
110
|
none: false
|
100
111
|
requirements:
|
@@ -103,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
103
114
|
version: '0'
|
104
115
|
segments:
|
105
116
|
- 0
|
106
|
-
hash: -
|
117
|
+
hash: -1739317772889618819
|
107
118
|
requirements: []
|
108
119
|
rubyforge_project: neoid
|
109
120
|
rubygems_version: 1.8.10
|