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

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.
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