neo4j 2.0.0.alpha.5-java → 2.0.0.alpha.6-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. data/CHANGELOG +12 -0
  2. data/Gemfile +0 -4
  3. data/README.rdoc +106 -62
  4. data/lib/neo4j.rb +7 -33
  5. data/lib/neo4j/performance.rb +43 -0
  6. data/lib/neo4j/rails/accept_id.rb +19 -18
  7. data/lib/neo4j/rails/attributes.rb +366 -120
  8. data/lib/neo4j/rails/finders.rb +41 -15
  9. data/lib/neo4j/rails/has_n.rb +203 -0
  10. data/lib/neo4j/rails/identity.rb +25 -0
  11. data/lib/neo4j/rails/model.rb +65 -242
  12. data/lib/neo4j/rails/nested_attributes.rb +108 -0
  13. data/lib/neo4j/rails/node_persistance.rb +56 -0
  14. data/lib/neo4j/rails/observer.rb +0 -2
  15. data/lib/neo4j/rails/persistence.rb +32 -154
  16. data/lib/neo4j/rails/rack_middleware.rb +26 -2
  17. data/lib/neo4j/rails/rails.rb +9 -6
  18. data/lib/neo4j/rails/railtie.rb +1 -2
  19. data/lib/neo4j/rails/relationship.rb +18 -125
  20. data/lib/neo4j/rails/relationship_persistence.rb +107 -0
  21. data/lib/neo4j/rails/relationships/node_dsl.rb +72 -44
  22. data/lib/neo4j/rails/relationships/relationships.rb +187 -59
  23. data/lib/neo4j/rails/relationships/rels_dsl.rb +18 -17
  24. data/lib/neo4j/rails/relationships/storage.rb +19 -17
  25. data/lib/neo4j/rails/timestamps.rb +53 -51
  26. data/lib/neo4j/rails/transaction.rb +9 -1
  27. data/lib/neo4j/rails/validations/uniqueness.rb +1 -1
  28. data/lib/neo4j/rails/versioning/versioning.rb +2 -2
  29. data/lib/neo4j/version.rb +1 -1
  30. data/lib/orm_adapter/adapters/neo4j.rb +47 -46
  31. data/neo4j.gemspec +1 -1
  32. metadata +10 -69
  33. data/lib/neo4j/algo/algo.rb +0 -294
  34. data/lib/neo4j/batch/batch.rb +0 -4
  35. data/lib/neo4j/batch/indexer.rb +0 -109
  36. data/lib/neo4j/batch/inserter.rb +0 -179
  37. data/lib/neo4j/batch/rule_inserter.rb +0 -24
  38. data/lib/neo4j/batch/rule_node.rb +0 -72
  39. data/lib/neo4j/config.rb +0 -177
  40. data/lib/neo4j/core_ext/class/inheritable_attributes.rb +0 -12
  41. data/lib/neo4j/core_ext/class/rewrite_inheritable_attributes.rb +0 -170
  42. data/lib/neo4j/database.rb +0 -158
  43. data/lib/neo4j/equal.rb +0 -21
  44. data/lib/neo4j/event_handler.rb +0 -263
  45. data/lib/neo4j/has_list/class_methods.rb +0 -11
  46. data/lib/neo4j/has_list/has_list.rb +0 -3
  47. data/lib/neo4j/has_list/mapping.rb +0 -133
  48. data/lib/neo4j/has_n/class_methods.rb +0 -119
  49. data/lib/neo4j/has_n/decl_relationship_dsl.rb +0 -246
  50. data/lib/neo4j/has_n/has_n.rb +0 -3
  51. data/lib/neo4j/has_n/mapping.rb +0 -98
  52. data/lib/neo4j/identity_map.rb +0 -140
  53. data/lib/neo4j/index/class_methods.rb +0 -108
  54. data/lib/neo4j/index/index.rb +0 -39
  55. data/lib/neo4j/index/indexer.rb +0 -341
  56. data/lib/neo4j/index/indexer_registry.rb +0 -68
  57. data/lib/neo4j/index/lucene_query.rb +0 -256
  58. data/lib/neo4j/load.rb +0 -25
  59. data/lib/neo4j/migrations/class_methods.rb +0 -110
  60. data/lib/neo4j/migrations/extensions.rb +0 -58
  61. data/lib/neo4j/migrations/lazy_node_mixin.rb +0 -41
  62. data/lib/neo4j/migrations/migration.rb +0 -112
  63. data/lib/neo4j/migrations/migrations.rb +0 -6
  64. data/lib/neo4j/migrations/node_mixin.rb +0 -80
  65. data/lib/neo4j/migrations/ref_node_wrapper.rb +0 -32
  66. data/lib/neo4j/model.rb +0 -4
  67. data/lib/neo4j/neo4j.rb +0 -216
  68. data/lib/neo4j/node.rb +0 -270
  69. data/lib/neo4j/node_mixin/class_methods.rb +0 -51
  70. data/lib/neo4j/node_mixin/node_mixin.rb +0 -141
  71. data/lib/neo4j/paginated.rb +0 -23
  72. data/lib/neo4j/property/class_methods.rb +0 -79
  73. data/lib/neo4j/property/property.rb +0 -111
  74. data/lib/neo4j/rails/mapping/property.rb +0 -183
  75. data/lib/neo4j/rails/rel_persistence.rb +0 -237
  76. data/lib/neo4j/relationship.rb +0 -239
  77. data/lib/neo4j/relationship_mixin/class_methods.rb +0 -36
  78. data/lib/neo4j/relationship_mixin/relationship_mixin.rb +0 -142
  79. data/lib/neo4j/relationship_set.rb +0 -58
  80. data/lib/neo4j/rels/rels.rb +0 -110
  81. data/lib/neo4j/rels/traverser.rb +0 -102
  82. data/lib/neo4j/rule/class_methods.rb +0 -201
  83. data/lib/neo4j/rule/event_listener.rb +0 -66
  84. data/lib/neo4j/rule/functions/count.rb +0 -43
  85. data/lib/neo4j/rule/functions/function.rb +0 -74
  86. data/lib/neo4j/rule/functions/functions.rb +0 -3
  87. data/lib/neo4j/rule/functions/sum.rb +0 -29
  88. data/lib/neo4j/rule/rule.rb +0 -150
  89. data/lib/neo4j/rule/rule_node.rb +0 -217
  90. data/lib/neo4j/to_java.rb +0 -31
  91. data/lib/neo4j/transaction.rb +0 -73
  92. data/lib/neo4j/traversal/filter_predicate.rb +0 -25
  93. data/lib/neo4j/traversal/prune_evaluator.rb +0 -14
  94. data/lib/neo4j/traversal/rel_expander.rb +0 -31
  95. data/lib/neo4j/traversal/traversal.rb +0 -141
  96. data/lib/neo4j/traversal/traverser.rb +0 -284
  97. data/lib/neo4j/type_converters/type_converters.rb +0 -288
data/lib/neo4j/node.rb DELETED
@@ -1,270 +0,0 @@
1
- # external neo4j dependencies
2
- require 'neo4j/property/property'
3
- require 'neo4j/rels/rels'
4
- require 'neo4j/traversal/traversal'
5
- require 'neo4j/index/index'
6
- require 'neo4j/equal'
7
- require 'neo4j/load'
8
-
9
- module Neo4j
10
- # A node in the graph with properties and relationships to other entities.
11
- # Along with relationships, nodes are the core building blocks of the Neo4j data representation model.
12
- # Node has three major groups of operations: operations that deal with relationships, operations that deal with properties and operations that traverse the node space.
13
- # The property operations give access to the key-value property pairs.
14
- # Property keys are always strings. Valid property value types are the primitives(<tt>String</tt>, <tt>Fixnum</tt>, <tt>Float</tt>, <tt>Boolean</tt>), and arrays of those primitives.
15
- #
16
- # === Instance Methods from Included Mixins
17
- # * Neo4j::Property - methods that deal with properties
18
- # * Neo4j::Rels methods for accessing incoming and outgoing relationship and nodes of depth one.
19
- # * Neo4j::Equal equality operators: <tt>eql?</tt>, <tt>equal</tt>, <tt>==</tt>
20
- # * Neo4j::Index lucene index methods, like indexing a node
21
- # * Neo4j::Traversal - provides an API for accessing outgoing and incoming nodes by traversing from this node of any depth.
22
- #
23
- # === Class Methods from Included Mixins
24
- # * Neo4j::Index::ClassMethods lucene index class methods, like find
25
- # * Neo4j::Load - methods for loading a node
26
- #
27
- # === Neo4j::Node#new and Wrappers
28
- #
29
- # The Neo4j::Node#new method does not return a new Ruby instance (!). Instead it will call the Neo4j Java API which will return a
30
- # *org.neo4j.kernel.impl.core.NodeProxy* object. This java object includes those mixins, see above. The #class method on the java object
31
- # returns Neo4j::Node in order to make it feel like an ordnary Ruby object.
32
- #
33
- # If you want to map your own class to a neo4j node you can use the Neo4j::NodeMixin or the Neo4j::Rails::Model.
34
- # The Neo4j::NodeMixin and Neo4j::Rails::Model wraps the Neo4j::Node object. The raw java node/Neo4j::Node object can be access with the Neo4j::NodeMixin#java_node method.
35
- #
36
- class Node
37
- extend Neo4j::Index::ClassMethods
38
- extend Neo4j::Load
39
-
40
- self.node_indexer self
41
-
42
-
43
- ##
44
- # :method: del
45
- # Delete the node and all its relationship.
46
- #
47
- # It might raise an exception if this method was called without a Transaction,
48
- # or if it failed to delete the node (it maybe was already deleted).
49
- #
50
- # If this method raise an exception you may also get an exception when the transaction finish.
51
- # This method is defined in the org.neo4j.kernel.impl.core.NodeProxy which is return by Neo4j::Node.new
52
- #
53
- # ==== Returns
54
- # nil or raise an exception
55
- #
56
-
57
- ##
58
- # :method: exist?
59
- # returns true if the node exists in the database
60
- # This method is defined in the org.neo4j.kernel.impl.core.NodeProxy which is return by Neo4j::Node.new
61
-
62
- ##
63
- # :method: wrapped_entity
64
- # same as _java_node
65
- # Used so that we have same method for both relationship and nodes
66
- # This method is defined in the org.neo4j.kernel.impl.core.NodeProxy which is return by Neo4j::Node.new
67
-
68
- ##
69
- # :method: wrapper
70
- # Loads the Ruby wrapper for this node (unless it is already the wrapper).
71
- # If there is no _classname property for this node then it will simply return itself.
72
- # Same as Neo4j::Node.wrapper(node)
73
- # This method is defined in the org.neo4j.kernel.impl.core.NodeProxy which is return by Neo4j::Node.new
74
-
75
-
76
- ##
77
- # :method: _java_node
78
- # Returns the java node/relationship object representing this object unless it is already the java object.
79
- # This method is defined in the org.neo4j.kernel.impl.core.NodeProxy which is return by Neo4j::Node.new
80
-
81
-
82
- ##
83
- # :method: expand
84
- # See Neo4j::Traversal#expand
85
-
86
- ##
87
- # :method: outgoing
88
- # See Neo4j::Traversal#outgoing
89
-
90
-
91
- ##
92
- # :method: incoming
93
- # See Neo4j::Traversal#incoming
94
-
95
- ##
96
- # :method: both
97
- # See Neo4j::Traversal#both
98
-
99
- ##
100
- # :method: eval_paths
101
- # See Neo4j::Traversal#eval_paths
102
-
103
- ##
104
- # :method: unique
105
- # See Neo4j::Traversal#unique
106
-
107
- ##
108
- # :method: node
109
- # See Neo4j::Rels#node or Neo4j::Rels
110
-
111
- ##
112
- # :method: _node
113
- # See Neo4j::Rels#_node or Neo4j::Rels
114
-
115
- ##
116
- # :method: rels
117
- # See Neo4j::Rels#rels or Neo4j::Rels
118
-
119
- ##
120
- # :method: _rels
121
- # See Neo4j::Rels#_rels or Neo4j::Rels
122
-
123
- ##
124
- # :method: rel
125
- # See Neo4j::Rels#rel
126
-
127
- ##
128
- # :method: _rel
129
- # See Neo4j::Rels#_rel
130
-
131
- ##
132
- # :method: rel?
133
- # See Neo4j::Rels#rel?
134
-
135
- ##
136
- # :method: props
137
- # See Neo4j::Property#props
138
-
139
- ##
140
- # :method: neo_id
141
- # See Neo4j::Property#neo_id
142
-
143
- ##
144
- # :method: attributes
145
- # See Neo4j::Property#attributes
146
-
147
- ##
148
- # :method: property?
149
- # See Neo4j::Property#property?
150
-
151
- ##
152
- # :method: update
153
- # See Neo4j::Property#update
154
-
155
- ##
156
- # :method: []
157
- # See Neo4j::Property#[]
158
-
159
- ##
160
- # :method: []=
161
- # See Neo4j::Property#[]=
162
-
163
- ##
164
- # :method: []=
165
- # See Neo4j::Property#[]=
166
-
167
- class << self
168
-
169
- # Returns a new neo4j Node.
170
- # The return node is actually an Java obejct of type org.neo4j.graphdb.Node java object
171
- # which has been extended (see the included mixins for Neo4j::Node).
172
- #
173
- # The created node will have a unique id - Neo4j::Property#neo_id
174
- #
175
- # ==== Parameters
176
- # *args :: a hash of properties to initialize the node with or nil
177
- #
178
- # ==== Returns
179
- # org.neo4j.graphdb.Node java object
180
- #
181
- # ==== Examples
182
- #
183
- # Neo4j::Transaction.run do
184
- # Neo4j::Node.new
185
- # Neo4j::Node.new :name => 'foo', :age => 100
186
- # end
187
- #
188
- #
189
- def new(*args)
190
- # the first argument can be an hash of properties to set
191
- props = args[0].respond_to?(:each_pair) && args[0]
192
-
193
- # a db instance can be given, is the first argument if that was not a hash, or otherwise the second
194
- db = (!props && args[0]) || args[1] || Neo4j.started_db
195
-
196
- node = db.graph.create_node
197
- props.each_pair { |k, v| node[k]= v } if props
198
- node
199
- end
200
-
201
- # create is the same as new
202
- alias_method :create, :new
203
-
204
- # Loads a node or wrapped node given a native java node or an id.
205
- # If there is a Ruby wrapper for the node then it will create a Ruby object that will
206
- # wrap the java node (see Neo4j::NodeMixin).
207
- #
208
- # If the node does not exist it will return nil
209
- #
210
- def load(node_id, db = Neo4j.started_db)
211
- node = _load(node_id, db)
212
- node && node.wrapper
213
- end
214
-
215
- # Same as load but does not return the node as a wrapped Ruby object.
216
- #
217
- def _load(node_id, db = Neo4j.started_db)
218
- return nil if node_id.nil?
219
- db.graph.get_node_by_id(node_id.to_i)
220
- rescue java.lang.IllegalStateException
221
- nil # the node has been deleted
222
- rescue org.neo4j.graphdb.NotFoundException
223
- nil
224
- end
225
-
226
- def extend_java_class(java_clazz) #:nodoc:
227
- java_clazz.class_eval do
228
- include Neo4j::Property
229
- include Neo4j::Rels
230
- include Neo4j::Traversal
231
- include Neo4j::Equal
232
- include Neo4j::Index
233
-
234
- def del #:nodoc:
235
- rels.each { |r| r.del }
236
- delete
237
- nil
238
- end
239
-
240
- def exist? #:nodoc:
241
- Neo4j::Node.exist?(self)
242
- end
243
-
244
- def wrapped_entity #:nodoc:
245
- self
246
- end
247
-
248
- def wrapper #:nodoc:
249
- self.class.wrapper(self)
250
- end
251
-
252
- def _java_node #:nodoc:
253
- self
254
- end
255
-
256
- def class #:nodoc:
257
- Neo4j::Node
258
- end
259
- end
260
- end
261
- end
262
- end
263
-
264
- # org.neo4j.kernel.HighlyAvailableGraphDatabase$LookupNode
265
- #
266
- Neo4j::Node.extend_java_class(org.neo4j.kernel.impl.core.NodeProxy)
267
-
268
-
269
-
270
- end
@@ -1,51 +0,0 @@
1
- module Neo4j
2
- module NodeMixin
3
- module ClassMethods
4
-
5
- def load_wrapper(node)
6
- wrapped_node = self.orig_new
7
- wrapped_node.init_on_load(node)
8
- wrapped_node
9
- end
10
-
11
-
12
- # Creates a new node or loads an already existing Neo4j node.
13
- #
14
- # You can use two callback method to initialize the node
15
- # init_on_load:: this method is called when the node is loaded from the database
16
- # init_on_create:: called when the node is created, will be provided with the same argument as the new method
17
- #
18
- #
19
- # Does
20
- # * sets the neo4j property '_classname' to self.class.to_s
21
- # * creates a neo4j node java object (in @_java_node)
22
- #
23
- # If you want to provide your own initialize method you should instead implement the
24
- # method init_on_create method.
25
- #
26
- # === Example
27
- #
28
- # class MyNode
29
- # include Neo4j::NodeMixin
30
- #
31
- # def init_on_create(name, age)
32
- # self[:name] = name
33
- # self[:age] = age
34
- # end
35
- # end
36
- #
37
- # node = MyNode.new('jimmy', 23)
38
- #
39
- def new(*args)
40
- node = Neo4j::Node.create
41
- wrapped_node = super()
42
- Neo4j::IdentityMap.add(node, wrapped_node)
43
- wrapped_node.init_on_load(node)
44
- wrapped_node.init_on_create(*args)
45
- wrapped_node
46
- end
47
-
48
- alias_method :create, :new
49
- end
50
- end
51
- end
@@ -1,141 +0,0 @@
1
- # external third party dependencies
2
- require "active_support/core_ext/module/delegation"
3
-
4
- # external neo4j dependencies
5
- require 'neo4j/index/index'
6
- require 'neo4j/property/property'
7
- require 'neo4j/has_n/has_n'
8
- require 'neo4j/rule/rule'
9
- require 'neo4j/has_list/has_list'
10
-
11
- # internal dependencies
12
- require 'neo4j/node_mixin/class_methods'
13
-
14
-
15
- module Neo4j
16
- # This Mixin is used to wrap Neo4j Java Nodes in Ruby objects.
17
- #
18
- # It includes a number of mixins and forwards some methods to the raw Java node (Neo4j::Node) which includes the mixins below:
19
- #
20
- # === Instance Methods
21
- #
22
- # Mixins:
23
- # * Neo4j::Index
24
- # * Neo4j::Property
25
- # * Neo4j::Rels
26
- # * Neo4j::Equal
27
- # * Neo4j::Index
28
- #
29
- # === Class Methods
30
- #
31
- # Mixins:
32
- # * Neo4j::NodeMixin::ClassMethods
33
- # * Neo4j::Property::ClassMethods
34
- # * Neo4j::HasN::ClassMethods
35
- # * Neo4j::Rule::ClassMethods
36
- # * Neo4j::Index::ClassMethods
37
- # * Neo4j::HasList::ClassMethods
38
- #
39
- module NodeMixin
40
- include Neo4j::Index
41
-
42
- include Neo4j::Rule::Functions
43
-
44
- delegate :[]=, :[], :property?, :props, :attributes, :update, :neo_id, :id, :rels, :rel?, :node, :to_param, :getId,
45
- :rel, :del, :list?, :print, :print_sub, :outgoing, :incoming, :both, :expand, :get_property, :set_property,
46
- :equal?, :eql?, :==, :exist?, :getRelationships, :getSingleRelationship, :_rels, :rel, :wrapped_entity, :_node,
47
- :to => :@_java_node, :allow_nil => true
48
-
49
-
50
- # --------------------------------------------------------------------------
51
- # Initialization methods
52
- #
53
-
54
-
55
- # Init this node with the specified java neo node
56
- #
57
- def init_on_load(java_node) # :nodoc:
58
- @_java_node = java_node
59
- end
60
-
61
-
62
- # Creates a new node and initialize with given properties.
63
- # You can override this to provide your own initialization.
64
- #
65
- def init_on_create(*args) # :nodoc:
66
- self[:_classname] = self.class.to_s
67
- if args[0].respond_to?(:each_pair)
68
- args[0].each_pair { |k, v| respond_to?("#{k}=") ? self.send("#{k}=", v) : @_java_node[k] = v }
69
- end
70
- end
71
-
72
- # Returns the org.neo4j.graphdb.Node wrapped object
73
- def _java_node
74
- @_java_node
75
- end
76
-
77
- # same as _java_node - so that we can use the same method for both relationships and nodes
78
- def _java_entity
79
- @_java_node
80
- end
81
-
82
- # Trigger rules.
83
- # You don't normally need to call this method (except in Migration) since
84
- # it will be triggered automatically by the Neo4j::Rule::Rule
85
- #
86
- def trigger_rules
87
- self.class.trigger_rules(self)
88
- end
89
-
90
-
91
- def _decl_rels_for(rel_type)
92
- self.class._decl_rels[rel_type]
93
- end
94
-
95
- # Returns self. Implements the same method as the Neo4j::Node#wrapper - duck typing.
96
- def wrapper
97
- self
98
- end
99
-
100
- def pagination_source(*a)
101
- binding.pry
102
- end
103
-
104
- def self.pagination_source(*a)
105
- binding.pry
106
- end
107
-
108
- def self.included(c) # :nodoc:
109
- c.instance_eval do
110
- class << self
111
- alias_method :orig_new, :new
112
- end
113
- end unless c.respond_to?(:orig_new)
114
-
115
- c.class_inheritable_accessor :_decl_props
116
- c._decl_props ||= {}
117
-
118
- c.class_inheritable_accessor :_decl_rels
119
- c._decl_rels ||= {}
120
-
121
- c.extend ClassMethods
122
- c.extend Neo4j::Property::ClassMethods
123
- c.extend Neo4j::HasN::ClassMethods
124
- c.extend Neo4j::Rule::ClassMethods
125
- c.extend Neo4j::HasList::ClassMethods
126
- c.extend Neo4j::Index::ClassMethods
127
-
128
- def c.inherited(subclass)
129
- # inherit the index properties
130
- subclass.node_indexer self
131
-
132
- # inherit the rules too
133
- subclass.inherit_rules_from self
134
-
135
- super
136
- end
137
-
138
- c.node_indexer c unless c == Neo4j::Rails::Model
139
- end
140
- end
141
- end