neo4j 1.0.0.beta.26-java → 1.0.0.beta.27-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 (90) hide show
  1. data/bin/neo4j-shell +107 -0
  2. data/bin/neo4j-shell~ +108 -0
  3. data/config/locales/en.yml +5 -0
  4. data/config/neo4j/config.yml +89 -0
  5. data/lib/Gemfile~ +3 -0
  6. data/lib/config2.yml~ +86 -0
  7. data/lib/neo4j.rb +34 -8
  8. data/lib/neo4j/config.rb +41 -12
  9. data/lib/neo4j/database.rb +34 -13
  10. data/lib/neo4j/index/class_methods.rb +1 -1
  11. data/lib/neo4j/index/lucene_query.rb +4 -2
  12. data/lib/neo4j/jars/{geronimo-jta_1.1_spec-1.1.1.jar → core/geronimo-jta_1.1_spec-1.1.1.jar} +0 -0
  13. data/lib/neo4j/jars/{lucene-core-3.0.2.jar → core/lucene-core-3.0.3.jar} +0 -0
  14. data/lib/neo4j/jars/core/neo4j-graph-algo-0.8-SNAPSHOT.jar +0 -0
  15. data/lib/neo4j/jars/core/neo4j-index-1.3-SNAPSHOT.jar +0 -0
  16. data/lib/neo4j/jars/core/neo4j-kernel-1.3-SNAPSHOT.jar +0 -0
  17. data/lib/neo4j/jars/core/neo4j-lucene-index-0.5-SNAPSHOT.jar +0 -0
  18. data/lib/neo4j/jars/ha/log4j-1.2.16.jar +0 -0
  19. data/lib/neo4j/jars/ha/neo4j-ha-0.6-SNAPSHOT.jar +0 -0
  20. data/lib/neo4j/jars/ha/neo4j-management-1.3-SNAPSHOT.jar +0 -0
  21. data/lib/neo4j/jars/ha/neo4j-shell-1.3-SNAPSHOT.jar +0 -0
  22. data/lib/neo4j/jars/ha/netty-3.2.1.Final.jar +0 -0
  23. data/lib/neo4j/jars/ha/org.apache.servicemix.bundles.jline-0.9.94_1.jar +0 -0
  24. data/lib/neo4j/jars/ha/org.apache.servicemix.bundles.lucene-3.0.1_2.jar +0 -0
  25. data/lib/neo4j/jars/ha/zookeeper-3.3.2.jar +0 -0
  26. data/lib/neo4j/mapping/class_methods/relationship.rb +1 -2
  27. data/lib/neo4j/mapping/class_methods/rule.rb +35 -3
  28. data/lib/neo4j/mapping/decl_relationship_dsl.rb +1 -1
  29. data/lib/neo4j/mapping/has_n.rb +4 -1
  30. data/lib/neo4j/mapping/node_mixin.rb +1 -1
  31. data/lib/neo4j/mapping/rule.rb +9 -6
  32. data/lib/neo4j/mapping/rule_node.rb +0 -1
  33. data/lib/neo4j/migrations.rb +12 -0
  34. data/lib/neo4j/migrations/extensions.rb +57 -0
  35. data/lib/neo4j/migrations/global_migration.rb +29 -0
  36. data/lib/neo4j/migrations/lazy_migration_mixin.rb +47 -0
  37. data/lib/neo4j/migrations/migration.rb +109 -0
  38. data/lib/neo4j/migrations/migration_mixin.rb +78 -0
  39. data/lib/neo4j/migrations/migrations.rb +100 -0
  40. data/lib/neo4j/neo4j.rb +33 -9
  41. data/lib/neo4j/node_relationship.rb +2 -4
  42. data/lib/neo4j/node_traverser.rb +5 -0
  43. data/lib/neo4j/rails/finders.rb +10 -3
  44. data/lib/neo4j/rails/lucene_connection_closer.rb +1 -2
  45. data/lib/neo4j/rails/mapping/property.rb +1 -1
  46. data/lib/neo4j/rails/model.rb +1 -1
  47. data/lib/neo4j/rails/persistence.rb +1 -5
  48. data/lib/neo4j/rails/relationships/relationships.rb +13 -10
  49. data/lib/neo4j/version.rb +1 -1
  50. data/lib/perf.rb~ +36 -0
  51. data/neo4j.gemspec +4 -2
  52. metadata +40 -78
  53. data/lib/neo4j/jars/neo4j-graph-algo-0.7-1.2.jar +0 -0
  54. data/lib/neo4j/jars/neo4j-index-1.2-1.2.jar +0 -0
  55. data/lib/neo4j/jars/neo4j-kernel-1.2-1.2.jar +0 -0
  56. data/lib/neo4j/jars/neo4j-lucene-index-0.2-1.2.jar +0 -0
  57. data/lib/tmp/neo4j/active_tx_log +0 -1
  58. data/lib/tmp/neo4j/index.db +0 -0
  59. data/lib/tmp/neo4j/index/lucene-store.db +0 -0
  60. data/lib/tmp/neo4j/index/lucene.log.active +0 -0
  61. data/lib/tmp/neo4j/index/lucene/node/Network-exact/_0.cfs +0 -0
  62. data/lib/tmp/neo4j/index/lucene/node/Network-exact/segments.gen +0 -0
  63. data/lib/tmp/neo4j/index/lucene/node/Network-exact/segments_2 +0 -0
  64. data/lib/tmp/neo4j/lucene-fulltext/lucene-store.db +0 -0
  65. data/lib/tmp/neo4j/lucene-fulltext/lucene.log.active +0 -0
  66. data/lib/tmp/neo4j/lucene/lucene-store.db +0 -0
  67. data/lib/tmp/neo4j/lucene/lucene.log.active +0 -0
  68. data/lib/tmp/neo4j/messages.log +0 -85
  69. data/lib/tmp/neo4j/neostore +0 -0
  70. data/lib/tmp/neo4j/neostore.id +0 -0
  71. data/lib/tmp/neo4j/neostore.nodestore.db +0 -0
  72. data/lib/tmp/neo4j/neostore.nodestore.db.id +0 -0
  73. data/lib/tmp/neo4j/neostore.propertystore.db +0 -0
  74. data/lib/tmp/neo4j/neostore.propertystore.db.arrays +0 -0
  75. data/lib/tmp/neo4j/neostore.propertystore.db.arrays.id +0 -0
  76. data/lib/tmp/neo4j/neostore.propertystore.db.id +0 -0
  77. data/lib/tmp/neo4j/neostore.propertystore.db.index +0 -0
  78. data/lib/tmp/neo4j/neostore.propertystore.db.index.id +0 -0
  79. data/lib/tmp/neo4j/neostore.propertystore.db.index.keys +0 -0
  80. data/lib/tmp/neo4j/neostore.propertystore.db.index.keys.id +0 -0
  81. data/lib/tmp/neo4j/neostore.propertystore.db.strings +0 -0
  82. data/lib/tmp/neo4j/neostore.propertystore.db.strings.id +0 -0
  83. data/lib/tmp/neo4j/neostore.relationshipstore.db +0 -0
  84. data/lib/tmp/neo4j/neostore.relationshipstore.db.id +0 -0
  85. data/lib/tmp/neo4j/neostore.relationshiptypestore.db +0 -0
  86. data/lib/tmp/neo4j/neostore.relationshiptypestore.db.id +0 -0
  87. data/lib/tmp/neo4j/neostore.relationshiptypestore.db.names +0 -0
  88. data/lib/tmp/neo4j/neostore.relationshiptypestore.db.names.id +0 -0
  89. data/lib/tmp/neo4j/nioneo_logical.log.active +0 -0
  90. data/lib/tmp/neo4j/tm_tx_log.1 +0 -0
data/lib/neo4j/config.rb CHANGED
@@ -17,22 +17,51 @@ module Neo4j
17
17
  class Config
18
18
  # This code is copied from merb-core/config.rb.
19
19
  class << self
20
- # Returns the hash of default config values for neo4j
20
+
21
+ # The location of the default configuration file
22
+ def default_file
23
+ @default_file ||= File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "config", "neo4j", "config.yml"))
24
+ end
25
+
26
+ # You can keep all the configuration in your own yaml file
27
+ # Also deletes all old configurations.
28
+ def default_file=(file_path)
29
+ @configuration = nil
30
+ @defaults = nil
31
+ @default_file = File.expand_path(file_path)
32
+ end
33
+
34
+ # Returns the hash of default config values for neo4j.
21
35
  #
22
36
  # ==== Returns
23
37
  # Hash:: The defaults for the config.
24
38
  def defaults
25
- @defaults ||= {
26
- :storage_path => 'tmp/neo4j',
27
- :timestamps => true,
28
-
29
- :lucene => {
30
- :fulltext => {"provider" => "lucene", "type" => "fulltext" },
31
- :exact => {"provider" => "lucene", "type" => "exact" }}
32
- }
39
+ @defaults ||= YAML.load_file(default_file)
40
+ end
41
+
42
+ # Returns a Java HashMap used by the Java Neo4j API as configuration for the GraphDatabase
43
+ def to_java_map
44
+ map = java.util.HashMap.new
45
+ to_hash.each_pair do |k, v|
46
+ case v
47
+ when TrueClass
48
+ map[k.to_s] = "YES"
49
+ when FalseClass
50
+ map[k.to_s] = "NO"
51
+ when String, Fixnum, Float
52
+ map[k.to_s] = v.to_s
53
+ # skip list and hash values - not accepted by the Java Neo4j API
54
+ end
55
+ end
56
+ map
57
+ end
58
+
59
+
60
+ # Returns the expanded path of the Config[:storage_path] property
61
+ def storage_path
62
+ File.expand_path(self[:storage_path])
33
63
  end
34
64
 
35
-
36
65
  # Yields the configuration.
37
66
  #
38
67
  # ==== Block parameters
@@ -116,7 +145,7 @@ module Neo4j
116
145
  # The a new configuration using default values as a hash.
117
146
  #
118
147
  def setup()
119
- @configuration = {}
148
+ @configuration = ActiveSupport::HashWithIndifferentAccess.new(defaults)
120
149
  @configuration.merge!(defaults)
121
150
  @configuration
122
151
  end
@@ -128,7 +157,7 @@ module Neo4j
128
157
  # The config as a hash.
129
158
  #
130
159
  def to_hash
131
- @configuration
160
+ @configuration ||= setup
132
161
  end
133
162
 
134
163
  # Returns the config as YAML.
@@ -16,25 +16,46 @@ module Neo4j
16
16
  def start #:nodoc:
17
17
  return if running?
18
18
  @running = true
19
-
20
- if self.class.locked?
21
- start_readonly_graph_db
22
- else
23
- start_local_graph_db
19
+
20
+ begin
21
+ if self.class.locked?
22
+ start_readonly_graph_db
23
+ elsif Neo4j::Config['ha.db']
24
+ start_ha_graph_db
25
+ Neo4j.migrate!
26
+ else
27
+ start_local_graph_db
28
+ Neo4j.migrate!
29
+ end
30
+ rescue
31
+ @running = false
32
+ raise
24
33
  end
25
34
 
26
35
  at_exit { shutdown }
27
36
  end
28
37
 
29
38
  def start_readonly_graph_db #:nodoc:
30
- puts "Starting Neo4j in readonly mode since the #{Config[:storage_path]} is locked"
31
- @graph = org.neo4j.kernel.EmbeddedReadOnlyGraphDatabase.new(Config[:storage_path])
39
+ Neo4j.logger.info "Starting Neo4j in readonly mode since the #{Neo4j.config.storage_path} is locked"
40
+ Neo4j.load_local_jars
41
+ @graph = org.neo4j.kernel.EmbeddedReadOnlyGraphDatabase.new(Config[:storage_path], Config.to_java_map)
32
42
  end
33
43
 
34
44
  def start_local_graph_db #:nodoc:
35
- @graph = org.neo4j.kernel.EmbeddedGraphDatabase.new(Config[:storage_path])
45
+ Neo4j.logger.info "Starting local Neo4j using db #{Neo4j.config.storage_path}"
46
+ Neo4j.load_local_jars
47
+ @graph = org.neo4j.kernel.EmbeddedGraphDatabase.new(Neo4j.config.storage_path, Config.to_java_map)
48
+ @graph.register_transaction_event_handler(@event_handler)
49
+ @lucene = @graph.index
50
+ @event_handler.neo4j_started(self)
51
+ end
52
+
53
+ def start_ha_graph_db
54
+ Neo4j.logger.info "starting Neo4j in HA mode, machine id: #{Neo4j.config['ha.machine_id']} at #{Neo4j.config['ha.server']} db #{Neo4j.config.storage_path}"
55
+ Neo4j.load_ha_jars # those jars are only needed for the HighlyAvailableGraphDatabase
56
+ @graph = org.neo4j.kernel.HighlyAvailableGraphDatabase.new(Neo4j.config.storage_path, Neo4j.config.to_java_map)
36
57
  @graph.register_transaction_event_handler(@event_handler)
37
- @lucene = @graph.index #org.neo4j.index.impl.lucene.LuceneIndexProvider.new
58
+ @lucene = @graph.index #org.neo4j.index.impl.lucene.LuceneIndexProvider.new
38
59
  @event_handler.neo4j_started(self)
39
60
  end
40
61
 
@@ -50,7 +71,7 @@ module Neo4j
50
71
 
51
72
  # check if the database is locked. A neo4j database is locked when there is running.
52
73
  def self.locked?
53
- lock_file = File.join(::Neo4j::Config[:storage_path], 'neostore')
74
+ lock_file = File.join(Neo4j.config.storage_path, 'neostore')
54
75
  return false unless File.exist?(lock_file)
55
76
  rfile = java.io.RandomAccessFile.new(lock_file, 'rw')
56
77
  begin
@@ -61,14 +82,14 @@ module Neo4j
61
82
  return false
62
83
  end
63
84
  end
64
-
85
+
65
86
  def shutdown #:nodoc:
66
87
  if @running
67
88
  @graph.unregister_transaction_event_handler(@event_handler) unless read_only?
68
89
  @event_handler.neo4j_shutdown(self)
69
90
  @graph.shutdown
70
- @graph = nil
71
- @lucene = nil
91
+ @graph = nil
92
+ @lucene = nil
72
93
  @running = false
73
94
  end
74
95
 
@@ -71,7 +71,7 @@ module Neo4j
71
71
  end
72
72
 
73
73
  def indexer(clazz, type) #:nodoc:
74
- @_indexer = IndexerRegistry.create_for(self, clazz, type)
74
+ @_indexer ||= IndexerRegistry.create_for(self, clazz, type)
75
75
  end
76
76
  end
77
77
  end
@@ -99,7 +99,9 @@ module Neo4j
99
99
  # Does simply loop all search items till the n'th is found.
100
100
  #
101
101
  def [](index)
102
- each_with_index { |node, i| break node if index == i }
102
+ i = 0
103
+ each{|x| return x if i == index; i += 1}
104
+ nil # out of index
103
105
  end
104
106
 
105
107
  # Returns the number of search hits
@@ -199,7 +201,7 @@ module Neo4j
199
201
  and_query = org.apache.lucene.search.BooleanQuery.new
200
202
 
201
203
  query.each_pair do |key, value|
202
- type = @decl_props[key.to_sym] && @decl_props[key.to_sym][:type]
204
+ type = @decl_props && @decl_props[key.to_sym] && @decl_props[key.to_sym][:type]
203
205
  if !type.nil? && type != String
204
206
  if Range === value
205
207
  and_query.add(range_query(key, value.first, value.last, true, !value.exclude_end?), org.apache.lucene.search.BooleanClause::Occur::MUST)
Binary file
@@ -72,14 +72,13 @@ module Neo4j::Mapping
72
72
  end}, __FILE__, __LINE__)
73
73
 
74
74
  module_eval(%Q{def #{rel_type}
75
- #dsl = #{clazz}._decl_rels[:#{rel_type}]
76
75
  dsl = _decl_rels_for(:#{rel_type})
77
76
  dsl.single_node(self)
78
77
  end}, __FILE__, __LINE__)
79
78
 
80
79
  module_eval(%Q{def #{rel_type}_rel
80
+ # TODO - use the class variable instance since we don't want to use none persisted rails relationships
81
81
  dsl = #{clazz}._decl_rels[:'#{rel_type.to_s}']
82
- # dsl = _decl_rels_for(:#{rel_type})
83
82
  dsl.single_relationship(self)
84
83
  end}, __FILE__, __LINE__)
85
84
 
@@ -128,7 +128,7 @@ module Neo4j::Mapping
128
128
  end
129
129
 
130
130
  # This is typically used for RSpecs to clean up rule nodes created by the #rule method.
131
- # It also remove the given class method.
131
+ # It also remove all the rule class methods.
132
132
  def delete_rules
133
133
  singelton = class << self;
134
134
  self;
@@ -141,10 +141,42 @@ module Neo4j::Mapping
141
141
 
142
142
  # Force to trigger the rules.
143
143
  # You don't normally need that since it will be done automatically.
144
- def trigger_rules(node)
145
- Neo4j::Mapping::Rule.trigger_rules(node)
144
+ # This can be useful if you need to trigger rules on already existing nodes in the database.
145
+ # Can also be called from an migration.
146
+ #
147
+ def trigger_rules(node, *changes)
148
+ Neo4j::Mapping::Rule.trigger_rules(node, *changes)
149
+ end
150
+
151
+ # Returns a proc that will call add method on the given function
152
+ # Can be used in migration to trigger rules on already existing nodes.
153
+ # Parameter function_id is default to '_classname' which means that
154
+ # the function 'reacts' on changes on the property '_classname'.
155
+ # That property changes only when a node is created or deleted.
156
+ # Function using function_id '_classname' is typically used for counting number of nodes of a class.
157
+ def add_function_for(rule_name, function_name_or_class, function_id = '_classname')
158
+ function_for(:add, rule_name, function_name_or_class, function_id)
159
+ end
160
+
161
+ # See #add_function_for
162
+ # Calls the delete method on the function.
163
+ def delete_function_for(rule_name, function_name_or_class, function_id = '_classname')
164
+ function_for(:delete, rule_name, function_name_or_class, function_id)
146
165
  end
147
166
 
167
+ # Returns a proc that calls the given method on the given function.
168
+ def function_for(method, rule_name, function_name_or_class, function_id = '_classname')
169
+ function_name = function_name_or_class.is_a?(Symbol)? function_name_or_class : function_name_or_class.function_name
170
+ rule_node = Neo4j::Mapping::Rule.rule_node_for(self)
171
+ rule = rule_node.find_rule(rule_name)
172
+ rule_node_raw = rule_node.rule_node
173
+
174
+ function = rule_node.find_function(rule_name, function_name, function_id)
175
+ lambda do |node|
176
+ new_value = node[function_id]
177
+ function.send(method, rule.rule_name, rule_node_raw, new_value)
178
+ end
179
+ end
148
180
  end
149
181
 
150
182
  Neo4j.unstarted_db.event_handler.add(Neo4j::Mapping::Rule) unless Neo4j.read_only?
@@ -171,7 +171,7 @@ module Neo4j::Mapping
171
171
  if other_class_dsl
172
172
  @relationship = other_class_dsl.relationship_class
173
173
  else
174
- puts "WARNING: Unknown outgoing relationship #{args[1]} on #{@target_class}"
174
+ Neo4j.logger.warn "Unknown outgoing relationship #{args[1]} on #{@target_class}"
175
175
  end
176
176
  elsif (Symbol === args[0])
177
177
  # handle unspecified (unprefixed) relationship, e.g. has_n(:known_by).from(:type)
@@ -32,8 +32,11 @@ module Neo4j
32
32
 
33
33
  alias_method :length, :size
34
34
 
35
+
35
36
  def [](index)
36
- each_with_index {|node,i| break node if index == i}
37
+ i = 0
38
+ each{|x| return x if i == index; i += 1}
39
+ nil # out of index
37
40
  end
38
41
 
39
42
  # Pretend we are an array - this is neccessarly for Rails actionpack/actionview/formhelper to work with this
@@ -33,7 +33,7 @@ module Neo4j::Mapping
33
33
 
34
34
  delegate :[]=, :[], :property?, :props, :attributes, :update, :neo_id, :id, :rels, :rel?, :to_param, :getId,
35
35
  :rel, :del, :list?, :print, :print_sub, :outgoing, :incoming, :both, :expand, :get_property, :set_property,
36
- :equal?, :eql?, :==, :exist?, :getRelationships, :getSingleRelationship, :_rels, :rel,
36
+ :equal?, :eql?, :==, :exist?, :getRelationships, :getSingleRelationship, :_rels, :rel, :wrapped_entity,
37
37
  :to => :@_java_node, :allow_nil => true
38
38
 
39
39
 
@@ -15,7 +15,7 @@ module Neo4j::Mapping
15
15
  @functions = props[:functions]
16
16
  @triggers = [@triggers] if @triggers && !@triggers.respond_to?(:each)
17
17
  @functions = [@functions] if @functions && !@functions.respond_to?(:each)
18
- @filter = block.nil? ? Proc.new { |*| true } : block
18
+ @filter = block
19
19
  end
20
20
 
21
21
  def to_s
@@ -41,7 +41,9 @@ module Neo4j::Mapping
41
41
  end
42
42
 
43
43
  def execute_filter(node)
44
- if @filter.arity != 1
44
+ if @filter.nil?
45
+ true
46
+ elsif @filter.arity != 1
45
47
  node.wrapper.instance_eval(&@filter)
46
48
  else
47
49
  @filter.call(node)
@@ -54,9 +56,7 @@ module Neo4j::Mapping
54
56
 
55
57
  class << self
56
58
  def add(clazz, rule_name, props, &block)
57
- @rule_nodes ||= {}
58
- @rule_nodes[clazz.to_s] ||= RuleNode.new(clazz)
59
- rule_node = @rule_nodes[clazz.to_s]
59
+ rule_node = rule_node_for(clazz.to_s)
60
60
  rule_node.remove_rule(rule_name) # remove any previously inherited rules
61
61
  rule_node.add_rule(rule_name, props, &block)
62
62
  end
@@ -67,7 +67,9 @@ module Neo4j::Mapping
67
67
  end
68
68
 
69
69
  def rule_node_for(clazz)
70
- @rule_nodes && @rule_nodes[clazz.to_s]
70
+ return nil if clazz.nil?
71
+ @rule_nodes ||= {}
72
+ @rule_nodes[clazz.to_s] ||= RuleNode.new(clazz)
71
73
  end
72
74
 
73
75
  def inherit(parent_class, subclass)
@@ -90,6 +92,7 @@ module Neo4j::Mapping
90
92
 
91
93
  def trigger_rules(node, *changes)
92
94
  classname = node[:_classname]
95
+ return unless classname # there are no rules if there is not a :_classname property
93
96
  rule_node = rule_node_for(classname)
94
97
  rule_node.execute_rules(node, *changes)
95
98
 
@@ -148,7 +148,6 @@ module Neo4j::Mapping
148
148
  end
149
149
 
150
150
  def find_functions_for_changes(rule, *changes)
151
- # changes = [property, old_value, new_value]
152
151
  !changes.empty? && rule.functions_for(changes[0])
153
152
  end
154
153
 
@@ -0,0 +1,12 @@
1
+ require 'neo4j/migrations/extensions'
2
+ require 'neo4j/migrations/lazy_migration_mixin'
3
+ require 'neo4j/migrations/migration'
4
+ require 'neo4j/migrations/migration_mixin'
5
+ require 'neo4j/migrations/migrations'
6
+ require 'neo4j/migrations/global_migration'
7
+
8
+ module Neo4j
9
+ module Migrations
10
+
11
+ end
12
+ end
@@ -0,0 +1,57 @@
1
+ module Neo4j
2
+
3
+ class << self
4
+ extend Forwardable
5
+
6
+ ##
7
+ # Returns the current version of the database.
8
+ # This version has been set by running one or more migrations.
9
+ # The version is stored on the reference node, with property 'db_version'
10
+ # (It Delegates to the Reference Node)
11
+ #
12
+ # === See Also
13
+ # Neo4j::MigrationMixin#db_version
14
+ #
15
+ # :singleton-method: db_version
16
+
17
+ ##
18
+ # Force Neo4j.rb to perform migrations
19
+ #
20
+ # === See Also
21
+ # Neo4j::MigrationMixin#migrate!
22
+ #
23
+ # :singleton-method: migrate!
24
+
25
+ ##
26
+ # Specifies a single migration.
27
+ # The up and down methods are automatically wrapped in a transaction.
28
+ #
29
+ # === Example
30
+ #
31
+ # Neo4j.migration 1, :create_articles do
32
+ # up do
33
+ # Neo4j.ref_node.rels.outgoing(:colours) << Neo4j.Node.new(:colour => 'red') << Neo4j.Node.new(:colour => 'blue')
34
+ # end
35
+ # down do
36
+ # Neo4j.ref_node.rels.outgoing(:colours).each {|n| n.del }
37
+ # end
38
+ # end
39
+ #
40
+ # === See Also
41
+ # Neo4j::MigrationMixin::ClassMethods#migration
42
+ #
43
+ # :singleton-method: migration
44
+
45
+ ##
46
+ # Returns all migrations that has been defined.
47
+ #
48
+ # === See Also
49
+ # Neo4j::MigrationMixin::ClassMethods#migrations
50
+ #
51
+ # :singleton-method: migrations
52
+
53
+
54
+ def_delegators :'Neo4j::GlobalMigration', :db_version, :migrate!, :migrations, :migration
55
+
56
+ end
57
+ end