neo4j 1.0.0.beta.27-java → 1.0.0.beta.28-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 (85) hide show
  1. data/CONTRIBUTORS +1 -0
  2. data/lib/neo4j.rb +38 -72
  3. data/lib/neo4j/{algo.rb → algo/algo.rb} +5 -1
  4. data/lib/neo4j/batch/batch.rb +2 -0
  5. data/lib/neo4j/batch/indexer.rb +108 -0
  6. data/lib/neo4j/batch/inserter.rb +168 -0
  7. data/lib/neo4j/database.rb +13 -8
  8. data/lib/neo4j/{mapping/class_methods/list.rb → has_list/class_methods.rb} +2 -4
  9. data/lib/neo4j/has_list/has_list.rb +3 -0
  10. data/lib/neo4j/{mapping/has_list.rb → has_list/mapping.rb} +2 -2
  11. data/lib/neo4j/{mapping/class_methods/relationship.rb → has_n/class_methods.rb} +42 -12
  12. data/lib/neo4j/has_n/decl_relationship_dsl.rb +216 -0
  13. data/lib/neo4j/has_n/has_n.rb +3 -0
  14. data/lib/neo4j/{mapping/has_n.rb → has_n/mapping.rb} +16 -7
  15. data/lib/neo4j/index/index.rb +5 -0
  16. data/lib/neo4j/index/indexer.rb +27 -22
  17. data/lib/neo4j/index/lucene_query.rb +3 -1
  18. data/lib/neo4j/jars/core/neo4j-graph-algo-0.8-1.3.M01.jar +0 -0
  19. data/lib/neo4j/jars/core/neo4j-index-1.3-1.3.M01.jar +0 -0
  20. data/lib/neo4j/jars/core/neo4j-kernel-1.3-1.3.M01.jar +0 -0
  21. data/lib/neo4j/jars/core/neo4j-lucene-index-0.5-1.3.M01.jar +0 -0
  22. data/lib/neo4j/jars/ha/{neo4j-ha-0.6-SNAPSHOT.jar → neo4j-ha-0.6-1.3.M01.jar} +0 -0
  23. data/lib/neo4j/jars/ha/neo4j-management-1.3-1.3.M01.jar +0 -0
  24. data/lib/neo4j/jars/ha/neo4j-shell-1.3-1.3.M01.jar +0 -0
  25. data/lib/neo4j/migrations/class_methods.rb +102 -0
  26. data/lib/neo4j/migrations/extensions.rb +10 -9
  27. data/lib/neo4j/migrations/lazy_node_mixin.rb +50 -0
  28. data/lib/neo4j/migrations/migration.rb +84 -81
  29. data/lib/neo4j/migrations/migrations.rb +6 -100
  30. data/lib/neo4j/migrations/node_mixin.rb +80 -0
  31. data/lib/neo4j/migrations/ref_node_wrapper.rb +32 -0
  32. data/lib/neo4j/neo4j.rb +11 -0
  33. data/lib/neo4j/node.rb +55 -25
  34. data/lib/neo4j/{mapping/class_methods/init_node.rb → node_mixin/class_methods.rb} +3 -3
  35. data/lib/neo4j/{mapping → node_mixin}/node_mixin.rb +35 -18
  36. data/lib/neo4j/{mapping/class_methods/property.rb → property/class_methods.rb} +5 -4
  37. data/lib/neo4j/{property.rb → property/property.rb} +2 -0
  38. data/lib/neo4j/rails/finders.rb +21 -7
  39. data/lib/neo4j/rails/rails.rb +19 -0
  40. data/lib/neo4j/rails/timestamps.rb +1 -1
  41. data/lib/neo4j/relationship.rb +7 -0
  42. data/lib/neo4j/{mapping/class_methods/init_rel.rb → relationship_mixin/class_methods.rb} +4 -4
  43. data/lib/neo4j/{mapping → relationship_mixin}/relationship_mixin.rb +23 -5
  44. data/lib/neo4j/rels/rels.rb +85 -0
  45. data/lib/neo4j/rels/traverser.rb +102 -0
  46. data/lib/neo4j/{mapping/class_methods/rule.rb → rule/class_methods.rb} +11 -11
  47. data/lib/neo4j/rule/functions/count.rb +37 -0
  48. data/lib/neo4j/rule/functions/function.rb +74 -0
  49. data/lib/neo4j/rule/functions/functions.rb +3 -0
  50. data/lib/neo4j/rule/functions/sum.rb +29 -0
  51. data/lib/neo4j/rule/rule.rb +5 -0
  52. data/lib/neo4j/rule/rule_event_listener.rb +162 -0
  53. data/lib/neo4j/rule/rule_node.rb +182 -0
  54. data/lib/neo4j/to_java.rb +0 -14
  55. data/lib/neo4j/traversal/filter_predicate.rb +25 -0
  56. data/lib/neo4j/traversal/prune_evaluator.rb +14 -0
  57. data/lib/neo4j/traversal/rel_expander.rb +31 -0
  58. data/lib/neo4j/traversal/traversal.rb +90 -0
  59. data/lib/neo4j/traversal/traverser.rb +173 -0
  60. data/lib/neo4j/{type_converters.rb → type_converters/type_converters.rb} +0 -0
  61. data/lib/neo4j/version.rb +1 -1
  62. data/lib/test.rb~ +2 -0
  63. data/neo4j.gemspec +11 -10
  64. metadata +48 -37
  65. data/lib/neo4j/functions/count.rb +0 -33
  66. data/lib/neo4j/functions/function.rb +0 -72
  67. data/lib/neo4j/functions/sum.rb +0 -27
  68. data/lib/neo4j/jars/core/neo4j-graph-algo-0.8-SNAPSHOT.jar +0 -0
  69. data/lib/neo4j/jars/core/neo4j-index-1.3-SNAPSHOT.jar +0 -0
  70. data/lib/neo4j/jars/core/neo4j-kernel-1.3-SNAPSHOT.jar +0 -0
  71. data/lib/neo4j/jars/core/neo4j-lucene-index-0.5-SNAPSHOT.jar +0 -0
  72. data/lib/neo4j/jars/ha/neo4j-management-1.3-SNAPSHOT.jar +0 -0
  73. data/lib/neo4j/jars/ha/neo4j-shell-1.3-SNAPSHOT.jar +0 -0
  74. data/lib/neo4j/mapping/decl_relationship_dsl.rb +0 -214
  75. data/lib/neo4j/mapping/rule.rb +0 -158
  76. data/lib/neo4j/mapping/rule_node.rb +0 -176
  77. data/lib/neo4j/migrations.rb +0 -12
  78. data/lib/neo4j/migrations/global_migration.rb +0 -29
  79. data/lib/neo4j/migrations/lazy_migration_mixin.rb +0 -47
  80. data/lib/neo4j/migrations/migration_mixin.rb +0 -78
  81. data/lib/neo4j/node_mixin.rb +0 -4
  82. data/lib/neo4j/node_relationship.rb +0 -161
  83. data/lib/neo4j/node_traverser.rb +0 -224
  84. data/lib/neo4j/relationship_mixin.rb +0 -4
  85. data/lib/neo4j/relationship_traverser.rb +0 -92
@@ -1,100 +1,6 @@
1
- module Neo4j
2
- module Migrations
3
-
4
- # Sets the the version we request to migrate to
5
- # If not set will migrate to the highest possible migration
6
- def migrate_to=(version)
7
- @migrate_to = version
8
- end
9
-
10
- def migrate_to
11
- @migrate_to
12
- end
13
-
14
- def latest_migration
15
- migrations.keys.sort.reverse[0]
16
- end
17
-
18
- # contains all the migrations defined with the #migration DSL method
19
- def migrations
20
- @migrations ||= {}
21
- end
22
-
23
- # Specifies a migration to be performed.
24
- # Updates the migrate_to variable so that it will migrate to the latest migration.
25
- #
26
- # === Example
27
- #
28
- # In the following example the up and down method will be evaluated in the context of a Person node.
29
- #
30
- # Person.migration 1, :my_first_migration do
31
- # up { ... }
32
- # down { ... }
33
- # end
34
- #
35
- # See the Neo4j::MigrationMixin::Migration which the DSL is evaluated in.
36
- #
37
- def migration(version, name, &block)
38
- migration = Migration.new(version, name)
39
- migration.instance_eval(&block)
40
- migrations[version] = migration
41
- self.migrate_to = latest_migration
42
- end
43
-
44
-
45
- def _migrate!(context, meta_node, version=nil) #:nodoc:
46
- # set the version we want to migrate to if provided
47
- self.migrate_to = version if version
48
-
49
- # requested to migrate to a version ?
50
- return if self.migrate_to.nil?
51
-
52
- # which version are we on now ?
53
- current_version = meta_node[:_db_version] || 0
54
-
55
- # do we need to migrate ?
56
- return if current_version == self.migrate_to
57
-
58
- # ok, so we are running some migrations
59
- if Neo4j::Config['migration_thread']
60
- Thread.new{ _upgrade_or_downgrade(current_version, context, meta_node)}
61
- else
62
- _upgrade_or_downgrade(current_version, context, meta_node)
63
- end
64
- end
65
-
66
- def _upgrade_or_downgrade(current_version, context, meta_node) #:nodoc:
67
- if (current_version < self.migrate_to)
68
- upgrade((current_version+1).upto(self.migrate_to).collect { |ver| migrations[ver] }, context, meta_node)
69
- else
70
- downgrade(current_version.downto(self.migrate_to+1).collect { |ver| migrations[ver] }, context, meta_node)
71
- end
72
-
73
- end
74
-
75
-
76
- # Running the up method on the given migrations.
77
- #
78
- # === Parameters
79
- # migrations :: an enumerable of Migration objects
80
- def upgrade(migrations, context, meta_node)
81
- migrations.each do |m|
82
- Neo4j.logger.info "Running upgrade: #{m}"
83
- m.execute_up(context, meta_node)
84
- end
85
- end
86
-
87
- # Running the down method on the given migrations.
88
- #
89
- # === Parameters
90
- # migrations:: an enumerable of Migration objects
91
- def downgrade(migrations, context, meta_node)
92
- migrations.each do |m|
93
- Neo4j.logger.info "Running downgrade: #{m}"
94
- m.execute_down(context, meta_node)
95
- end
96
- end
97
-
98
- end
99
- end
100
-
1
+ require 'neo4j/migrations/extensions'
2
+ require 'neo4j/migrations/class_methods'
3
+ require 'neo4j/migrations/migration'
4
+ require 'neo4j/migrations/lazy_node_mixin'
5
+ require 'neo4j/migrations/node_mixin'
6
+ require 'neo4j/migrations/ref_node_wrapper'
@@ -0,0 +1,80 @@
1
+ module Neo4j
2
+ module Migrations
3
+
4
+
5
+ # By including this mixing on a node class one can add migrations to it.
6
+ # Each class has a unique db version.
7
+ #
8
+ # ==== Example
9
+ #
10
+ # class Person
11
+ # include Neo4j::NodeMixin
12
+ # include Neo4j::Migrations::NodeMixin
13
+ # rule :all # adding the method all to make it possible to find all nodes of this class
14
+ # end
15
+ #
16
+ # Person.migration 1, :split_property do
17
+ # up do
18
+ # all.each_raw do |node|
19
+ # node[:given_name] = node[:name].split[0]
20
+ # node[:surname] = node[:name].split[1]
21
+ # node[:name] = nil
22
+ # end
23
+ # end
24
+ #
25
+ # down do
26
+ # all.each_raw do |node|
27
+ # node[:name] = "#{node[:given_name]} #{node[:surname]}"
28
+ # node[:surename] = nil
29
+ # node[:given_name] = nil
30
+ # end
31
+ # end
32
+ # end
33
+ #
34
+ # Notice that the up and down methods are evaluated in the context of the class (where the all method is defined
35
+ # if using the rule :all).
36
+ #
37
+ module NodeMixin
38
+ extend ActiveSupport::Concern
39
+
40
+ included do
41
+ extend Neo4j::Migrations::ClassMethods
42
+ end
43
+
44
+ module ClassMethods
45
+ def migrate!(version=nil)
46
+ _migrate!(self, migration_meta_node, version)
47
+ end
48
+
49
+ # The node that holds the db version property
50
+ def migration_meta_node
51
+ Neo4j::Rule::RuleEventListener.rule_node_for(self).rule_node
52
+ end
53
+
54
+ # Remote all migration and set migrate_to = nil and set the current version to nil
55
+ def reset_migrations!
56
+ @migrations = nil
57
+ @migrate_to = nil
58
+ Neo4j::Transaction.run do
59
+ migration_meta_node[:_db_version] = nil
60
+ end
61
+ end
62
+
63
+ # sets the migration db version for this class on a 'meta' node.
64
+ def db_version=(version)
65
+ Neo4j::Transaction.run do
66
+ migration_meta_node[:_db_version] = version
67
+ end
68
+ end
69
+
70
+ # returns the current version of the database for this class.
71
+ def db_version
72
+ migration_meta_node[:_db_version]
73
+ end
74
+ end
75
+
76
+ end
77
+
78
+
79
+ end
80
+ end
@@ -0,0 +1,32 @@
1
+ module Neo4j
2
+
3
+ module Migrations
4
+ # This node stores the migrations for Neo4j.migrations
5
+ # Uses the Neo4j.ref_node for keeping the current version of the db.
6
+ # When the database starts it will check if it needs to run a migration.
7
+ class RefNodeWrapper
8
+ extend ClassMethods
9
+
10
+ class << self
11
+ def migrate!(version=nil)
12
+ _migrate!(self, Neo4j.ref_node, version)
13
+ end
14
+
15
+ def db_version
16
+ Neo4j.ref_node[:_db_version] || 0
17
+ end
18
+
19
+ # Remote all migration and set migrate_to = nil and set the current version to nil
20
+ def reset_migrations!
21
+ @migrations = nil
22
+ @migrate_to = nil
23
+ Neo4j::Transaction.run do
24
+ Neo4j.ref_node[:_db_version] = nil
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ end
31
+
32
+ end
data/lib/neo4j/neo4j.rb CHANGED
@@ -1,3 +1,7 @@
1
+ # external neo4j dependencies
2
+ require 'neo4j/config'
3
+ require 'neo4j/database'
4
+
1
5
  # = Neo4j
2
6
  #
3
7
  # The Neo4j modules is used to interact with an Neo4j Database instance.
@@ -44,6 +48,13 @@ module Neo4j
44
48
  db
45
49
  end
46
50
 
51
+ # Returns the current storage path of a running neo4j database.
52
+ # If the database is not running it returns nil.
53
+ def storage_path
54
+ return nil unless db.running?
55
+ db.storage_path
56
+ end
57
+
47
58
  # Returns the Neo4j::Config class
48
59
  # Same as typing; Neo4j::Config
49
60
  def config
data/lib/neo4j/node.rb CHANGED
@@ -1,52 +1,43 @@
1
- module Neo4j
2
-
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'
3
8
 
9
+ module Neo4j
4
10
 
5
11
  org.neo4j.kernel.impl.core.NodeProxy.class_eval do
6
12
  include Neo4j::Property
7
- include Neo4j::NodeRelationship
13
+ include Neo4j::Rels
14
+ include Neo4j::Traversal
8
15
  include Neo4j::Equal
9
16
  include Neo4j::Index
10
17
 
11
- # Delete the node and all its relationship.
12
- #
13
- # It might raise an exception if this method was called without a Transaction,
14
- # or if it failed to delete the node (it maybe was already deleted).
15
- #
16
- # If this method raise an exception you may also get an exception when the transaction finish.
17
- #
18
- # ==== Returns
19
- # nil or raise an exception
20
- #
21
- def del
18
+ def del #:nodoc:
22
19
  rels.each {|r| r.del}
23
20
  delete
24
21
  nil
25
22
  end
26
23
 
27
- # returns true if the node exists in the database
28
- def exist?
24
+ def exist? #:nodoc:
29
25
  Neo4j::Node.exist?(self)
30
26
  end
31
27
 
32
- # same as _java_node
33
- # Used so that we have same method for both relationship and nodes
34
- def wrapped_entity
28
+ def wrapped_entity #:nodoc:
35
29
  self
36
30
  end
37
31
 
38
- # Loads the Ruby wrapper for this node
39
- # If there is no _classname property for this node then it will simply return itself.
40
- # Same as Neo4j::Node.wrapper(node)
41
- def wrapper
32
+ def wrapper #:nodoc:
42
33
  self.class.wrapper(self)
43
34
  end
44
35
 
45
- def _java_node
36
+ def _java_node #:nodoc:
46
37
  self
47
38
  end
48
39
 
49
- def class
40
+ def class #:nodoc:
50
41
  Neo4j::Node
51
42
  end
52
43
  end
@@ -76,6 +67,45 @@ module Neo4j
76
67
 
77
68
  self.node_indexer self
78
69
 
70
+
71
+ ##
72
+ # :method: del
73
+ # Delete the node and all its relationship.
74
+ #
75
+ # It might raise an exception if this method was called without a Transaction,
76
+ # or if it failed to delete the node (it maybe was already deleted).
77
+ #
78
+ # If this method raise an exception you may also get an exception when the transaction finish.
79
+ # This method is defined in the org.neo4j.kernel.impl.core.NodeProxy which is return by Neo4j::Node.new
80
+ #
81
+ # ==== Returns
82
+ # nil or raise an exception
83
+ #
84
+
85
+ ##
86
+ # :method: exist?
87
+ # returns true if the node exists in the database
88
+ # This method is defined in the org.neo4j.kernel.impl.core.NodeProxy which is return by Neo4j::Node.new
89
+
90
+ ##
91
+ # :method: wrapped_entity
92
+ # same as _java_node
93
+ # Used so that we have same method for both relationship and nodes
94
+ # This method is defined in the org.neo4j.kernel.impl.core.NodeProxy which is return by Neo4j::Node.new
95
+
96
+ ##
97
+ # :method: wrapper
98
+ # Loads the Ruby wrapper for this node (unless it is already the wrapper).
99
+ # If there is no _classname property for this node then it will simply return itself.
100
+ # Same as Neo4j::Node.wrapper(node)
101
+ # This method is defined in the org.neo4j.kernel.impl.core.NodeProxy which is return by Neo4j::Node.new
102
+
103
+
104
+ ##
105
+ # :method: _java_node
106
+ # Returns the java node/relationship object representing this object unless it is already the java object.
107
+ # This method is defined in the org.neo4j.kernel.impl.core.NodeProxy which is return by Neo4j::Node.new
108
+
79
109
  class << self
80
110
 
81
111
  # Returns a new neo4j Node.
@@ -1,6 +1,6 @@
1
- module Neo4j::Mapping
2
- module ClassMethods
3
- module InitNode
1
+ module Neo4j
2
+ module NodeMixin
3
+ module ClassMethods
4
4
 
5
5
  def load_wrapper(node)
6
6
  wrapped_node = self.orig_new
@@ -1,7 +1,18 @@
1
+ # external third party dependencies
1
2
  require "active_support/core_ext/module/delegation"
2
3
 
3
- module Neo4j::Mapping
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'
4
10
 
11
+ # internal dependencies
12
+ require 'neo4j/node_mixin/class_methods'
13
+
14
+
15
+ module Neo4j
5
16
  # This Mixin is used to wrap Neo4j Java Nodes in Ruby objects.
6
17
  #
7
18
  # It includes a number of mixins and forwards some methods to the raw Java node which in term includes a number of mixins, see below.
@@ -11,30 +22,31 @@ module Neo4j::Mapping
11
22
  # Mixins:
12
23
  # * Neo4j::Index
13
24
  # * Neo4j::Property
14
- # * Neo4j::NodeRelationship
25
+ # * Neo4j::Rels
15
26
  # * Neo4j::Equal
16
27
  # * Neo4j::Index
17
28
  #
18
29
  # === Class Methods
19
30
  #
20
31
  # Mixins:
21
- # * Neo4j::Mapping::ClassMethods::Root
22
- # * Neo4j::Mapping::ClassMethods::Property
23
- # * Neo4j::Mapping::ClassMethods::InitNode
24
- # * Neo4j::Mapping::ClassMethods::Relationship
25
- # * Neo4j::Mapping::ClassMethods::Rule
26
- # * Neo4j::Mapping::ClassMethods::List
32
+ # * Neo4j::NodeMixin::ClassMethods
33
+ # * Neo4j::Property::ClassMethods
34
+ # * Neo4j::HasN::ClassMethods
35
+ # * Neo4j::Rule::ClassMethods
27
36
  # * Neo4j::Index::ClassMethods
37
+ # * Neo4j::HasList::ClassMethods
38
+ #
39
+ # This class also includes the class mixin WillPaginate::Finders::Base, see http://github.com/mislav/will_paginate/wiki
28
40
  #
29
41
  module NodeMixin
30
42
  include Neo4j::Index
31
43
 
32
- include Neo4j::Functions
44
+ include Neo4j::Rule::Functions
33
45
 
34
46
  delegate :[]=, :[], :property?, :props, :attributes, :update, :neo_id, :id, :rels, :rel?, :to_param, :getId,
35
47
  :rel, :del, :list?, :print, :print_sub, :outgoing, :incoming, :both, :expand, :get_property, :set_property,
36
48
  :equal?, :eql?, :==, :exist?, :getRelationships, :getSingleRelationship, :_rels, :rel, :wrapped_entity,
37
- :to => :@_java_node, :allow_nil => true
49
+ :to => :@_java_node, :allow_nil => true
38
50
 
39
51
 
40
52
  # --------------------------------------------------------------------------
@@ -55,7 +67,7 @@ module Neo4j::Mapping
55
67
  def init_on_create(*args) # :nodoc:
56
68
  self[:_classname] = self.class.to_s
57
69
  if args[0].respond_to?(:each_pair)
58
- args[0].each_pair { |k, v| respond_to?("#{k}=")? self.send("#{k}=", v) : @_java_node[k] = v }
70
+ args[0].each_pair { |k, v| respond_to?("#{k}=") ? self.send("#{k}=", v) : @_java_node[k] = v }
59
71
  end
60
72
  end
61
73
 
@@ -64,6 +76,10 @@ module Neo4j::Mapping
64
76
  @_java_node
65
77
  end
66
78
 
79
+ # Trigger rules.
80
+ # You don't normally need to call this method (except in Migration) since
81
+ # it will be triggered automatically by the Neo4j::Rule::RuleEventListener
82
+ #
67
83
  def trigger_rules
68
84
  self.class.trigger_rules(self)
69
85
  end
@@ -72,7 +88,8 @@ module Neo4j::Mapping
72
88
  def _decl_rels_for(rel_type)
73
89
  self.class._decl_rels[rel_type]
74
90
  end
75
-
91
+
92
+ # Returns self. Implements the same method as the Neo4j::Node#wrapper - duck typing.
76
93
  def wrapper
77
94
  self
78
95
  end
@@ -91,11 +108,11 @@ module Neo4j::Mapping
91
108
  c.class_inheritable_hash :_decl_rels
92
109
  c._decl_rels ||= {}
93
110
 
94
- c.extend ClassMethods::Property
95
- c.extend ClassMethods::InitNode
96
- c.extend ClassMethods::Relationship
97
- c.extend ClassMethods::Rule
98
- c.extend ClassMethods::List
111
+ c.extend ClassMethods
112
+ c.extend Neo4j::Property::ClassMethods
113
+ c.extend Neo4j::HasN::ClassMethods
114
+ c.extend Neo4j::Rule::ClassMethods
115
+ c.extend Neo4j::HasList::ClassMethods
99
116
  c.extend Neo4j::Index::ClassMethods
100
117
  c.extend WillPaginate::Finders::Base
101
118
 
@@ -112,4 +129,4 @@ module Neo4j::Mapping
112
129
  c.node_indexer c
113
130
  end
114
131
  end
115
- end
132
+ end