neo4j 1.0.0.beta.9 → 1.0.0.beta.10
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.rdoc +5 -1971
- data/lib/neo4j/mapping/class_methods/relationship.rb +2 -2
- data/lib/neo4j/mapping/decl_relationship_dsl.rb +6 -1
- data/lib/neo4j/mapping/has_n.rb +17 -1
- data/lib/neo4j/node_traverser.rb +14 -1
- data/lib/neo4j/rails/model.rb +127 -31
- data/lib/neo4j/rails/tx_methods.rb +11 -0
- data/lib/neo4j/rails/value.rb +44 -1
- data/lib/neo4j/version.rb +1 -1
- data/lib/neo4j.rb +1 -0
- metadata +4 -59
- data/lib/neo4j.old/batch_inserter.rb +0 -144
- data/lib/neo4j.old/config.rb +0 -138
- data/lib/neo4j.old/event_handler.rb +0 -73
- data/lib/neo4j.old/extensions/activemodel.rb +0 -158
- data/lib/neo4j.old/extensions/aggregate/aggregate_enum.rb +0 -40
- data/lib/neo4j.old/extensions/aggregate/ext/node_mixin.rb +0 -69
- data/lib/neo4j.old/extensions/aggregate/node_aggregate.rb +0 -8
- data/lib/neo4j.old/extensions/aggregate/node_aggregate_mixin.rb +0 -331
- data/lib/neo4j.old/extensions/aggregate/node_aggregator.rb +0 -216
- data/lib/neo4j.old/extensions/aggregate/node_group.rb +0 -43
- data/lib/neo4j.old/extensions/aggregate/prop_group.rb +0 -30
- data/lib/neo4j.old/extensions/aggregate/property_enum.rb +0 -24
- data/lib/neo4j.old/extensions/aggregate/props_aggregate.rb +0 -8
- data/lib/neo4j.old/extensions/aggregate/props_aggregate_mixin.rb +0 -31
- data/lib/neo4j.old/extensions/aggregate/props_aggregator.rb +0 -80
- data/lib/neo4j.old/extensions/aggregate.rb +0 -12
- data/lib/neo4j.old/extensions/find_path.rb +0 -117
- data/lib/neo4j.old/extensions/graph_algo/all_simple_paths.rb +0 -133
- data/lib/neo4j.old/extensions/graph_algo/neo4j-graph-algo-0.3.jar +0 -0
- data/lib/neo4j.old/extensions/graph_algo.rb +0 -1
- data/lib/neo4j.old/extensions/reindexer.rb +0 -104
- data/lib/neo4j.old/extensions/rest/rest.rb +0 -336
- data/lib/neo4j.old/extensions/rest/rest_mixin.rb +0 -193
- data/lib/neo4j.old/extensions/rest/server.rb +0 -50
- data/lib/neo4j.old/extensions/rest/stubs.rb +0 -141
- data/lib/neo4j.old/extensions/rest.rb +0 -21
- data/lib/neo4j.old/extensions/rest_master.rb +0 -34
- data/lib/neo4j.old/extensions/rest_slave.rb +0 -31
- data/lib/neo4j.old/extensions/tx_tracker.rb +0 -392
- data/lib/neo4j.old/indexer.rb +0 -187
- data/lib/neo4j.old/jars/geronimo-jta_1.1_spec-1.1.1.jar +0 -0
- data/lib/neo4j.old/jars/neo4j-kernel-1.0.jar +0 -0
- data/lib/neo4j.old/jars.rb +0 -6
- data/lib/neo4j.old/mixins/java_list_mixin.rb +0 -139
- data/lib/neo4j.old/mixins/java_node_mixin.rb +0 -205
- data/lib/neo4j.old/mixins/java_property_mixin.rb +0 -169
- data/lib/neo4j.old/mixins/java_relationship_mixin.rb +0 -60
- data/lib/neo4j.old/mixins/migration_mixin.rb +0 -157
- data/lib/neo4j.old/mixins/node_mixin.rb +0 -249
- data/lib/neo4j.old/mixins/property_class_methods.rb +0 -265
- data/lib/neo4j.old/mixins/rel_class_methods.rb +0 -167
- data/lib/neo4j.old/mixins/relationship_mixin.rb +0 -103
- data/lib/neo4j.old/neo.rb +0 -247
- data/lib/neo4j.old/node.rb +0 -49
- data/lib/neo4j.old/reference_node.rb +0 -15
- data/lib/neo4j.old/relationship.rb +0 -85
- data/lib/neo4j.old/relationships/decl_relationship_dsl.rb +0 -164
- data/lib/neo4j.old/relationships/has_list.rb +0 -101
- data/lib/neo4j.old/relationships/has_n.rb +0 -129
- data/lib/neo4j.old/relationships/node_traverser.rb +0 -138
- data/lib/neo4j.old/relationships/relationship_dsl.rb +0 -149
- data/lib/neo4j.old/relationships/traversal_position.rb +0 -50
- data/lib/neo4j.old/relationships/wrappers.rb +0 -51
- data/lib/neo4j.old/search_result.rb +0 -72
- data/lib/neo4j.old/transaction.rb +0 -254
- data/lib/neo4j.old/version.rb +0 -3
data/lib/neo4j.old/config.rb
DELETED
@@ -1,138 +0,0 @@
|
|
1
|
-
|
2
|
-
module Neo4j
|
3
|
-
|
4
|
-
|
5
|
-
# Keeps configuration for neo4j.
|
6
|
-
#
|
7
|
-
# Neo4j::Config[:storage_path]:: is used for locating the neo4j database on the filesystem.
|
8
|
-
# Neo4j::Config[:rest_port]:: used by the REST extension for starting a web server on a port
|
9
|
-
#
|
10
|
-
class Config
|
11
|
-
# This code is copied from merb-core/config.rb.
|
12
|
-
class << self
|
13
|
-
# Returns the hash of default config values for neo4j
|
14
|
-
#
|
15
|
-
# ==== Returns
|
16
|
-
# Hash:: The defaults for the config.
|
17
|
-
def defaults
|
18
|
-
@defaults ||= {
|
19
|
-
:storage_path => 'tmp/neo4j',
|
20
|
-
:rest_port => 9123
|
21
|
-
}
|
22
|
-
end
|
23
|
-
|
24
|
-
|
25
|
-
# Yields the configuration.
|
26
|
-
#
|
27
|
-
# ==== Block parameters
|
28
|
-
# c<Hash>:: The configuration parameters.
|
29
|
-
#
|
30
|
-
# ==== Examples
|
31
|
-
# Neo4j::Config.use do |config|
|
32
|
-
# config[:storage_path] = '/var/neo4j'
|
33
|
-
# end
|
34
|
-
#
|
35
|
-
# ==== Returns
|
36
|
-
# nil
|
37
|
-
def use
|
38
|
-
@configuration ||= {}
|
39
|
-
yield @configuration
|
40
|
-
nil
|
41
|
-
end
|
42
|
-
|
43
|
-
|
44
|
-
# Set the value of a config entry.
|
45
|
-
#
|
46
|
-
# ==== Parameters
|
47
|
-
# key<Object>:: The key to set the parameter for.
|
48
|
-
# val<Object>:: The value of the parameter.
|
49
|
-
#
|
50
|
-
def []=(key, val)
|
51
|
-
(@configuration ||= setup)[key] = val
|
52
|
-
end
|
53
|
-
|
54
|
-
|
55
|
-
# Gets the the value of a config entry
|
56
|
-
#
|
57
|
-
# ==== Parameters
|
58
|
-
# key<Object>:: The key of the config entry value we want
|
59
|
-
#
|
60
|
-
def [](key)
|
61
|
-
(@configuration ||= setup)[key]
|
62
|
-
end
|
63
|
-
|
64
|
-
|
65
|
-
# Remove the value of a config entry.
|
66
|
-
#
|
67
|
-
# ==== Parameters
|
68
|
-
# key<Object>:: The key of the parameter to delete.
|
69
|
-
#
|
70
|
-
# ==== Returns
|
71
|
-
# Object:: The value of the removed entry.
|
72
|
-
#
|
73
|
-
def delete(key)
|
74
|
-
@configuration.delete(key)
|
75
|
-
end
|
76
|
-
|
77
|
-
|
78
|
-
# Remove all configuration. This can be useful for testing purpose.
|
79
|
-
#
|
80
|
-
#
|
81
|
-
# ==== Returns
|
82
|
-
# nil
|
83
|
-
#
|
84
|
-
def delete_all
|
85
|
-
@configuration = nil
|
86
|
-
end
|
87
|
-
|
88
|
-
|
89
|
-
# Retrieve the value of a config entry, returning the provided default if the key is not present
|
90
|
-
#
|
91
|
-
# ==== Parameters
|
92
|
-
# key<Object>:: The key to retrieve the parameter for.
|
93
|
-
# default<Object>::
|
94
|
-
# The default value to return if the parameter is not set.
|
95
|
-
#
|
96
|
-
# ==== Returns
|
97
|
-
# Object:: The value of the configuration parameter or the default.
|
98
|
-
#
|
99
|
-
def fetch(key, default)
|
100
|
-
@configuration.fetch(key, default)
|
101
|
-
end
|
102
|
-
|
103
|
-
# Sets up the configuration
|
104
|
-
#
|
105
|
-
# ==== Returns
|
106
|
-
# The configuration as a hash.
|
107
|
-
#
|
108
|
-
def setup()
|
109
|
-
@configuration = {}
|
110
|
-
@configuration.merge!(defaults)
|
111
|
-
@configuration
|
112
|
-
end
|
113
|
-
|
114
|
-
|
115
|
-
# Returns the configuration as a hash.
|
116
|
-
#
|
117
|
-
# ==== Returns
|
118
|
-
# Hash:: The config as a hash.
|
119
|
-
#
|
120
|
-
# :api: public
|
121
|
-
def to_hash
|
122
|
-
@configuration
|
123
|
-
end
|
124
|
-
|
125
|
-
# Returns the config as YAML.
|
126
|
-
#
|
127
|
-
# ==== Returns
|
128
|
-
# String:: The config as YAML.
|
129
|
-
#
|
130
|
-
# :api: public
|
131
|
-
def to_yaml
|
132
|
-
require "yaml"
|
133
|
-
@configuration.to_yaml
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
end
|
@@ -1,73 +0,0 @@
|
|
1
|
-
module Neo4j
|
2
|
-
|
3
|
-
# Handles events like a new node is created or deleted
|
4
|
-
class EventHandler
|
5
|
-
def initialize
|
6
|
-
@listeners = []
|
7
|
-
@filter_classes = []
|
8
|
-
end
|
9
|
-
|
10
|
-
def add(listener)
|
11
|
-
@listeners << listener unless @listeners.include?(listener)
|
12
|
-
add_filter(listener) # the listener do not want to get events on it self
|
13
|
-
end
|
14
|
-
|
15
|
-
def remove(listener)
|
16
|
-
@listeners.delete(listener)
|
17
|
-
end
|
18
|
-
|
19
|
-
def remove_all
|
20
|
-
@listeners = []
|
21
|
-
end
|
22
|
-
|
23
|
-
def print
|
24
|
-
puts "Listeners #{@listeners.size}"
|
25
|
-
@listeners.each {|li| puts " Listener '#{li}'"}
|
26
|
-
end
|
27
|
-
|
28
|
-
def add_filter(filter_class)
|
29
|
-
@filter_classes << filter_class unless @filter_classes.include?(filter_class)
|
30
|
-
end
|
31
|
-
|
32
|
-
def remove_filter(filter_class)
|
33
|
-
@filter_classes.delete filter_class
|
34
|
-
end
|
35
|
-
|
36
|
-
def node_created(node)
|
37
|
-
return if @filter_classes.include?(node.class)
|
38
|
-
@listeners.each {|li| li.on_node_created(node) if li.respond_to?(:on_node_created)}
|
39
|
-
end
|
40
|
-
|
41
|
-
def node_deleted(node)
|
42
|
-
return if @filter_classes.include?(node.class)
|
43
|
-
@listeners.each {|li| li.on_node_deleted(node) if li.respond_to?(:on_node_deleted)}
|
44
|
-
end
|
45
|
-
|
46
|
-
def relationship_created(relationship)
|
47
|
-
return if @filter_classes.include?(relationship.class)
|
48
|
-
@listeners.each {|li| li.on_relationship_created(relationship) if li.respond_to?(:on_relationship_created)}
|
49
|
-
end
|
50
|
-
|
51
|
-
def relationship_deleted(relationship)
|
52
|
-
return if @filter_classes.include?(relationship.class)
|
53
|
-
@listeners.each {|li| li.on_relationship_deleted(relationship) if li.respond_to?(:on_relationship_deleted)}
|
54
|
-
end
|
55
|
-
|
56
|
-
def property_changed(node, key, old_value, new_value)
|
57
|
-
return if @filter_classes.include?(node.class)
|
58
|
-
@listeners.each {|li| li.on_property_changed(node, key, old_value, new_value) if li.respond_to?(:on_property_changed)}
|
59
|
-
end
|
60
|
-
|
61
|
-
def tx_finished(tx)
|
62
|
-
@listeners.each {|li| li.on_tx_finished(tx) if li.respond_to?(:on_tx_finished)}
|
63
|
-
end
|
64
|
-
|
65
|
-
def neo_started(neo_instance)
|
66
|
-
@listeners.each {|li| li.on_neo_started(neo_instance) if li.respond_to?(:on_neo_started)}
|
67
|
-
end
|
68
|
-
|
69
|
-
def neo_stopped(neo_instance)
|
70
|
-
@listeners.each {|li| li.on_neo_stopped(neo_instance) if li.respond_to?(:on_neo_stopped)}
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
@@ -1,158 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'singleton'
|
3
|
-
require 'neo4j'
|
4
|
-
require 'active_model'
|
5
|
-
|
6
|
-
|
7
|
-
module Neo4j::NodeMixin
|
8
|
-
def to_model
|
9
|
-
Neo4j::ActiveModel::ActiveModelFactory.instance.to_model(self)
|
10
|
-
end
|
11
|
-
|
12
|
-
def attributes
|
13
|
-
attr = props
|
14
|
-
attr.keys.each {|k| attr.delete k if k[0] == ?_}
|
15
|
-
attr
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
|
20
|
-
module Neo4j::ActiveModel
|
21
|
-
|
22
|
-
def self.on_property_changed(node, key, old_value, new_value)
|
23
|
-
# make model dirty since it is changed
|
24
|
-
ActiveModelFactory.instance.dirty_node!(node.neo_id)
|
25
|
-
end
|
26
|
-
|
27
|
-
def self.on_tx_finished(tx)
|
28
|
-
# make all models clean again
|
29
|
-
ActiveModelFactory.instance.clean!
|
30
|
-
end
|
31
|
-
|
32
|
-
class ActiveModelFactory
|
33
|
-
private
|
34
|
-
def initialize
|
35
|
-
@classes = {}
|
36
|
-
@node_models = {}
|
37
|
-
Thread.current[:neo4j_active_model_factory] = self
|
38
|
-
Neo4j.event_handler.add(self)
|
39
|
-
end
|
40
|
-
|
41
|
-
public
|
42
|
-
def self.instance
|
43
|
-
# create one Neo4jActiveModelFactory for each thread
|
44
|
-
# since a transaction belongs to a thread and we don't want
|
45
|
-
# side effect of one transaction making model object dirty or clean for a different transaction
|
46
|
-
# in a different thread.
|
47
|
-
Thread.current[:neo4j_active_model_factory] || ActiveModelFactory.new
|
48
|
-
end
|
49
|
-
|
50
|
-
def dirty_node!(neo_id)
|
51
|
-
@node_models[neo_id] && @node_models[neo_id].dirty!
|
52
|
-
end
|
53
|
-
|
54
|
-
def clean!
|
55
|
-
@node_models.clear
|
56
|
-
end
|
57
|
-
|
58
|
-
def to_model(obj)
|
59
|
-
@node_models[obj.neo_id] || create_model_for(obj)
|
60
|
-
end
|
61
|
-
|
62
|
-
def create_model_for(obj)
|
63
|
-
clazz = @classes[obj.class] || create_wrapped_class_for(obj)
|
64
|
-
@node_models[obj.neo_id] = clazz.new(obj)
|
65
|
-
end
|
66
|
-
|
67
|
-
def create_wrapped_class_for(obj)
|
68
|
-
clazz = Class.new do
|
69
|
-
def initialize(wrapped)
|
70
|
-
@dirty = false
|
71
|
-
@wrapped = wrapped
|
72
|
-
end
|
73
|
-
|
74
|
-
def dirty!
|
75
|
-
@dirty = true
|
76
|
-
end
|
77
|
-
|
78
|
-
def persisted?
|
79
|
-
! @dirty
|
80
|
-
end
|
81
|
-
|
82
|
-
def to_key
|
83
|
-
persisted? ? @wrapped.neo_id : nil
|
84
|
-
end
|
85
|
-
|
86
|
-
def to_param
|
87
|
-
to_key
|
88
|
-
end
|
89
|
-
|
90
|
-
if obj.respond_to?(:errors)
|
91
|
-
def errors;
|
92
|
-
@wrapped.errors;
|
93
|
-
end
|
94
|
-
else
|
95
|
-
def errors
|
96
|
-
object = Object.new
|
97
|
-
|
98
|
-
def object.[](key)
|
99
|
-
[]
|
100
|
-
end
|
101
|
-
|
102
|
-
def object.full_messages()
|
103
|
-
[]
|
104
|
-
end
|
105
|
-
|
106
|
-
object
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
if obj.respond_to?(:valid?)
|
111
|
-
def valid?;
|
112
|
-
@wrapped.valid?;
|
113
|
-
end
|
114
|
-
else
|
115
|
-
def valid?
|
116
|
-
true
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
singleton = class << clazz;
|
122
|
-
self;
|
123
|
-
end
|
124
|
-
singleton.class_eval do
|
125
|
-
# class methods
|
126
|
-
define_method :model_name do
|
127
|
-
@_model_name ||= ActiveModel::Name.new(obj.class)
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
@classes[obj.class] = clazz
|
132
|
-
clazz
|
133
|
-
end
|
134
|
-
|
135
|
-
end
|
136
|
-
|
137
|
-
Neo4j.event_handler.add(self)
|
138
|
-
end
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
#class LintTest < ActiveModel::TestCase
|
143
|
-
# include ActiveModel::Lint::Tests
|
144
|
-
#
|
145
|
-
# class MyModel
|
146
|
-
# include Neo4j::NodeMixin
|
147
|
-
# end
|
148
|
-
#
|
149
|
-
# def setup
|
150
|
-
# @model = MyModel.new
|
151
|
-
# end
|
152
|
-
#
|
153
|
-
#end
|
154
|
-
#
|
155
|
-
#require 'test/unit/ui/console/testrunner'
|
156
|
-
#Neo4j::Transaction.run do
|
157
|
-
# Test::Unit::UI::Console::TestRunner.run(LintTest)
|
158
|
-
#end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
module Neo4j::Aggregate
|
2
|
-
# Used for an enumerable result of aggregates
|
3
|
-
# See Neo4j::NodeMixin#aggregates
|
4
|
-
#
|
5
|
-
# :api: private
|
6
|
-
class AggregateEnum #:nodoc:
|
7
|
-
include Enumerable
|
8
|
-
|
9
|
-
def initialize(node)
|
10
|
-
@node = node
|
11
|
-
end
|
12
|
-
|
13
|
-
def empty?
|
14
|
-
each {true}.nil?
|
15
|
-
end
|
16
|
-
|
17
|
-
def each
|
18
|
-
# if node is an aggregate group then we should look for parent aggregates
|
19
|
-
if (@node.property?(:aggregate_group))
|
20
|
-
@node.rels.incoming.nodes.each do |parent_group|
|
21
|
-
next unless parent_group.property?(:aggregate_size)
|
22
|
-
# if it has the property aggregate_group then it is a group node
|
23
|
-
if (parent_group.property?(:aggregate_group))
|
24
|
-
AggregateEnum.new(parent_group).each {|agg| yield agg}
|
25
|
-
else
|
26
|
-
# aggregate found
|
27
|
-
yield parent_group
|
28
|
-
end
|
29
|
-
end
|
30
|
-
else
|
31
|
-
# the given node (@node) is not a group, we guess it is an leaf in an aggregate
|
32
|
-
# get all the groups that this leaf belongs to and then those groups aggregate nodes
|
33
|
-
@node.rels.incoming(:aggregate).nodes.each do |group|
|
34
|
-
AggregateEnum.new(group ).each {|agg| yield agg}
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
@@ -1,69 +0,0 @@
|
|
1
|
-
org.neo4j.kernel.impl.core.NodeProxy.class_eval do
|
2
|
-
|
3
|
-
# Returns an enumeration of aggregates that this nodes belongs to.
|
4
|
-
#
|
5
|
-
# Is used in combination with the Neo4j::AggregateNodeMixin
|
6
|
-
#
|
7
|
-
# ==== Example
|
8
|
-
#
|
9
|
-
# class MyNode
|
10
|
-
# include Neo4j::NodeMixin
|
11
|
-
# include Neo4j::NodeAggregateMixin
|
12
|
-
# end
|
13
|
-
#
|
14
|
-
# agg1 = MyNode
|
15
|
-
# agg1.aggregate([node1,node2]).group_by(:colour)
|
16
|
-
#
|
17
|
-
# agg2 = MyNode
|
18
|
-
# agg2.aggregate([node1,node2]).group_by(:age)
|
19
|
-
#
|
20
|
-
# [*node1.aggregates] # => [agg1, agg2]
|
21
|
-
#
|
22
|
-
def aggregates
|
23
|
-
Neo4j::Aggregate::AggregateEnum.new(self)
|
24
|
-
end
|
25
|
-
|
26
|
-
# Returns an enumeration of groups that this nodes belongs to.
|
27
|
-
#
|
28
|
-
# Is used in combination with the Neo4j::AggregateNodeMixin
|
29
|
-
#
|
30
|
-
# ==== Parameters
|
31
|
-
#
|
32
|
-
# * group which aggregate group we want, default is :all - an enumeration of all groups will be return
|
33
|
-
#
|
34
|
-
#
|
35
|
-
# ==== Returns
|
36
|
-
# an enumeration of all groups that this node belongs to, or if the group parameter was used
|
37
|
-
# only the given group or nil if not found.
|
38
|
-
#
|
39
|
-
# ==== Example
|
40
|
-
#
|
41
|
-
# class MyNode
|
42
|
-
# include Neo4j::NodeMixin
|
43
|
-
# include Neo4j::AggregateNodeMixin
|
44
|
-
# end
|
45
|
-
#
|
46
|
-
# agg1 = MyNode
|
47
|
-
# agg1.aggregate(:colours).group_by(:colour)
|
48
|
-
#
|
49
|
-
# agg2 = MyNode
|
50
|
-
# agg2.aggregate(:age).group_by(:age)
|
51
|
-
#
|
52
|
-
# agg1 << node1
|
53
|
-
# agg2 << node1
|
54
|
-
#
|
55
|
-
# [*node1.aggregate_groups] # => [agg1[some_group], agg2[some_other_group]]
|
56
|
-
#
|
57
|
-
def aggregate_groups(group = :all)
|
58
|
-
return rels.incoming(:aggregate).nodes if group == :all
|
59
|
-
[*rels.incoming(:aggregate).filter{self[:aggregate_group] == group.to_s}.nodes][0]
|
60
|
-
end
|
61
|
-
|
62
|
-
end
|
63
|
-
|
64
|
-
|
65
|
-
module Neo4j
|
66
|
-
module NodeMixin
|
67
|
-
def_delegators :@_java_node, :aggregate_groups, :aggregates
|
68
|
-
end
|
69
|
-
end
|