neo4j 1.2.5-java → 1.2.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.
data/CHANGELOG CHANGED
@@ -1,3 +1,11 @@
1
+ == 1.2.6 / 2011-11-02
2
+ * Generators can now generate relationships as well [#195]
3
+ * Better will_paginate support for Neo4j::Rails::Model [#194]
4
+ * Fixing updated_at to be set only if model has changed (pull #68, Deepak N)
5
+ * Bringing back changes removed during identiy map to fix bug [#190] (Deepak N)
6
+ * Fixing updated_at to be set only if model has changed, using callbacks instead of overriding method for stamping time (Deepak N)
7
+ * Added versioning support (pull #67) (Vivek Prahlad)
8
+
1
9
  == 1.2.5 / 2011-10-21
2
10
  * Faster traversals by avoiding loading Ruby wrappers (new method 'raw' on traversals) [#189]
3
11
  * Support for IdentityMap [#188]
data/Gemfile CHANGED
@@ -6,7 +6,7 @@ group 'test' do
6
6
  gem "rake", ">= 0.8.7"
7
7
  gem "rdoc", ">= 2.5.10"
8
8
  gem "horo", ">= 1.0.2"
9
- gem "rspec", ">= 2.0.0"
9
+ gem "rspec", "= 2.6.0"
10
10
 
11
11
  # use this version for rspec-rails-matchers which work with latest RSpec (Rspec => RSpec)
12
12
  gem "rspec-rails-matchers", :git => 'git://github.com/afcapel/rspec-rails-matchers.git'
@@ -2,63 +2,71 @@ require 'rails/generators/named_base'
2
2
  require 'rails/generators/active_model'
3
3
 
4
4
  module Neo4j
5
- module Generators #:nodoc:
6
- end
5
+ module Generators #:nodoc:
6
+ end
7
7
  end
8
8
 
9
9
  class Neo4j::Generators::Base < Rails::Generators::NamedBase #:nodoc:
10
- def self.source_root
11
- @_neo4j_source_root ||= File.expand_path(File.join(File.dirname(__FILE__),
12
- 'neo4j', generator_name, 'templates'))
13
- end
10
+ def self.source_root
11
+ @_neo4j_source_root ||= File.expand_path(File.join(File.dirname(__FILE__),
12
+ 'neo4j', generator_name, 'templates'))
13
+ end
14
14
  end
15
15
 
16
16
  class Neo4j::Generators::ActiveModel < Rails::Generators::ActiveModel #:nodoc:
17
- def self.all(klass)
18
- "#{klass}.all"
19
- end
17
+ def self.all(klass)
18
+ "#{klass}.all"
19
+ end
20
20
 
21
- def self.find(klass, params=nil)
22
- "#{klass}.find(#{params})"
23
- end
21
+ def self.find(klass, params=nil)
22
+ "#{klass}.find(#{params})"
23
+ end
24
24
 
25
- def self.build(klass, params=nil)
26
- if params
27
- "#{klass}.new(#{params})"
28
- else
29
- "#{klass}.new"
30
- end
31
- end
25
+ def self.build(klass, params=nil)
26
+ if params
27
+ "#{klass}.new(#{params})"
28
+ else
29
+ "#{klass}.new"
30
+ end
31
+ end
32
32
 
33
- def save
34
- "#{name}.save"
35
- end
33
+ def save
34
+ "#{name}.save"
35
+ end
36
36
 
37
- def update_attributes(params=nil)
38
- "#{name}.update_attributes(#{params})"
39
- end
37
+ def update_attributes(params=nil)
38
+ "#{name}.update_attributes(#{params})"
39
+ end
40
40
 
41
- def errors
42
- "#{name}.errors"
43
- end
41
+ def errors
42
+ "#{name}.errors"
43
+ end
44
44
 
45
- def destroy
46
- "#{name}.destroy"
47
- end
45
+ def destroy
46
+ "#{name}.destroy"
47
+ end
48
48
  end
49
49
 
50
50
  module Rails
51
51
  module Generators
52
52
  class GeneratedAttribute #:nodoc:
53
53
  def type_class
54
- case type.to_s.downcase
55
- when 'datetime' then 'DateTime'
56
- when 'date' then 'Date'
57
- when 'text' then 'String'
58
- when 'integer', 'number', 'fixnum' then 'Fixnum'
59
- when 'float' then 'Float'
60
- else 'String'
61
- end
54
+ case type.to_s.downcase
55
+ when 'any' then
56
+ 'any'
57
+ when 'datetime' then
58
+ 'DateTime'
59
+ when 'date' then
60
+ 'Date'
61
+ when 'text' then
62
+ 'String'
63
+ when 'integer', 'number', 'fixnum' then
64
+ 'Fixnum'
65
+ when 'float' then
66
+ 'Float'
67
+ else
68
+ 'String'
69
+ end
62
70
  end
63
71
  end
64
72
  end
@@ -7,7 +7,10 @@ class Neo4j::Generators::ModelGenerator < Neo4j::Generators::Base #:nodoc:
7
7
 
8
8
  class_option :timestamps, :type => :boolean
9
9
  class_option :parent, :type => :string, :desc => "The parent class for the generated model"
10
-
10
+ class_option :indices, :type => :array, :desc => "The properties which should be indexed"
11
+ class_option :has_one, :type => :array, :desc => "A list of has_one relationships"
12
+ class_option :has_n, :type => :array, :desc => "A list of has_n relationships"
13
+
11
14
  def create_model_file
12
15
  template "model.erb", File.join('app/models', "#{singular_name}.rb")
13
16
  end
@@ -20,7 +23,47 @@ class Neo4j::Generators::ModelGenerator < Neo4j::Generators::Base #:nodoc:
20
23
  def timestamps?
21
24
  options[:timestamps]
22
25
  end
23
-
26
+
27
+ def has_n?
28
+ options[:has_n]
29
+ end
30
+
31
+ def has_n_statements
32
+ txt = ""
33
+ options[:has_n].each do |key|
34
+ to, from = key.split(':')
35
+ txt << (from ? "\n has_n(:#{to}).from(:#{from})\n" : "\n has_n :#{to}")
36
+ end
37
+ txt
38
+ end
39
+
40
+ def has_one?
41
+ options[:has_one]
42
+ end
43
+
44
+ def has_one_statements
45
+ txt = ""
46
+ options[:has_one].each do |key|
47
+ to, from = key.split(':')
48
+ txt << (from ? "\n has_one(:#{to}).from(:#{from})\n" : "\n has_one :#{to}")
49
+ end
50
+ txt
51
+ end
52
+
53
+ def indices?
54
+ options[:indices]
55
+ end
56
+
57
+ def indices_statements
58
+ puts "indices_statements #{options[:indices].inspect}"
59
+ txt = ""
60
+ options[:indices].each do |key|
61
+ txt << %Q{
62
+ index :#{key}}
63
+ end
64
+ txt
65
+ end
66
+
24
67
  def parent?
25
68
  options[:parent]
26
69
  end
@@ -1,7 +1,11 @@
1
1
  class <%= class_name %> < <%= parent? ? options[:parent].classify : "Neo4j::Rails::Model" %>
2
2
  <% attributes.each do |attribute| -%>
3
- property :<%= attribute.name %><%= ", :type => #{attribute.type_class}" %>
3
+ property :<%= attribute.name %><%= ", :type => #{attribute.type_class}" unless attribute.type_class == 'any' %>
4
4
  <% end -%>
5
+ <%= indices_statements if indices? -%>
6
+
7
+ <%= has_n_statements if has_n? -%>
8
+ <%= has_one_statements if has_one? -%>
5
9
 
6
10
  <%= timestamp_statements if timestamps? -%>
7
11
  end
data/lib/neo4j.rb CHANGED
@@ -70,6 +70,7 @@ end
70
70
 
71
71
  require 'neo4j/version'
72
72
  require 'neo4j/neo4j'
73
+ require 'neo4j/paginate'
73
74
  require 'neo4j/node'
74
75
  require 'neo4j/relationship'
75
76
  require 'neo4j/relationship_set'
@@ -104,7 +105,4 @@ require 'neo4j/batch/batch'
104
105
 
105
106
  require 'orm_adapter/adapters/neo4j'
106
107
 
107
- require 'neo4j/identity_map'
108
-
109
-
110
-
108
+ require 'neo4j/identity_map'
@@ -330,9 +330,10 @@ module Neo4j
330
330
  def index_prefix
331
331
  return "" unless Neo4j.running?
332
332
  return "" unless @indexer_for.respond_to?(:ref_node_for_class)
333
- ref_node = @indexer_for.ref_node_for_class
334
- ref_node_name = ref_node[:name]
335
- ref_node_name.blank? ? "" : ref_node_name + "_"
333
+ ref_node = @indexer_for.ref_node_for_class.wrapper
334
+ prefix = ref_node.send(:_index_prefix) if ref_node.respond_to?(:_index_prefix)
335
+ prefix ||= ref_node[:name] # To maintain backward compatiblity
336
+ prefix.blank? ? "" : prefix + "_"
336
337
  end
337
338
  end
338
339
  end
@@ -0,0 +1,25 @@
1
+ module Neo4j
2
+ module Paginate
3
+ def self.included(base)
4
+ base.send(:include, WillPaginate::Finders::Base)
5
+ end
6
+
7
+
8
+ def wp_query(options, pager, args, &block) #:nodoc:
9
+ page = pager.current_page || 1
10
+ per_page = pager.per_page
11
+ to = per_page * page
12
+ from = to - per_page
13
+ i = 0
14
+ res = []
15
+ each do |node|
16
+ res << node.wrapper if i >= from
17
+ i += 1
18
+ break if i >= to
19
+ end
20
+ pager.replace res
21
+ pager.total_entries ||= count
22
+ end
23
+
24
+ end
25
+ end
@@ -262,9 +262,9 @@ module Neo4j
262
262
  include Attributes # handles how to save and retrieve attributes
263
263
  include Mapping::Property # allows some additional options on the #property class method
264
264
  include Serialization # enable to_xml and to_json
265
- include Timestamps # handle created_at, updated_at timestamp properties
266
265
  include Validations # enable validations
267
266
  include Callbacks # enable callbacks
267
+ include Timestamps # handle created_at, updated_at timestamp properties
268
268
  include ActiveModel::Observing # enable observers
269
269
  include Finders # ActiveRecord style find
270
270
  include Relationships # for none persisted relationships
@@ -23,3 +23,4 @@ require 'neo4j/rails/model'
23
23
  require 'neo4j/rails/rack_middleware'
24
24
  require 'neo4j/rails/rel_persistence'
25
25
  require 'neo4j/rails/relationship'
26
+ require 'neo4j/rails/versioning/versioning'
@@ -88,6 +88,10 @@ module Neo4j
88
88
  @properties = {}
89
89
  end
90
90
 
91
+ def wrapper
92
+ self
93
+ end
94
+
91
95
  # --------------------------------------
92
96
  # Public Class Methods
93
97
  # --------------------------------------
@@ -128,9 +132,9 @@ module Neo4j
128
132
  include Attributes # handles how to save and retrieve attributes
129
133
  include Mapping::Property # allows some additional options on the #property class method
130
134
  include Serialization # enable to_xml and to_json
131
- include Timestamps # handle created_at, updated_at timestamp properties
132
135
  include Validations # enable validations
133
136
  include Callbacks # enable callbacks
137
+ include Timestamps # handle created_at, updated_at timestamp properties
134
138
  include Finders # ActiveRecord style find
135
139
  include Compositions
136
140
  end
@@ -9,6 +9,7 @@ module Neo4j
9
9
  #
10
10
  class NodesDSL
11
11
  include Enumerable
12
+ include Neo4j::Paginate
12
13
 
13
14
  def initialize(storage, dir)
14
15
  @storage = storage
@@ -2,13 +2,19 @@ module Neo4j
2
2
  module Rails
3
3
  module Relationships
4
4
 
5
-
6
5
  def write_changed_relationships #:nodoc:
7
6
  @_relationships.each_value do |storage|
8
7
  storage.persist
9
8
  end
10
9
  end
11
10
 
11
+ def relationships_changed?
12
+ @_relationships.each_value do |storage|
13
+ return true if !storage.persisted?
14
+ end
15
+ false
16
+ end
17
+
12
18
  def clear_relationships #:nodoc:
13
19
  @_relationships && @_relationships.each_value{|storage| storage.remove_from_identity_map}
14
20
  @_relationships = {}
@@ -18,6 +18,7 @@ module Neo4j
18
18
  #
19
19
  class RelsDSL
20
20
  include Enumerable
21
+ include Neo4j::Paginate
21
22
 
22
23
  def initialize(storage, dir=:both)
23
24
  @storage = storage
@@ -14,13 +14,15 @@ module Neo4j
14
14
  @target_class = (dsl && dsl.target_class) || Neo4j::Rails::Model
15
15
  @outgoing_rels = []
16
16
  @incoming_rels = []
17
+ @persisted_related_nodes = {}
18
+ @persisted_relationships = {}
19
+ @persisted_node_to_relationships = {}
17
20
  end
18
21
 
19
22
  def to_s #:nodoc:
20
23
  "Storage #{object_id} node: #{@node.id} rel_type: #{@rel_type} outgoing #{@outgoing_rels.size} incoming #{@incoming_rels.size}"
21
24
  end
22
25
 
23
-
24
26
  def remove_from_identity_map
25
27
  @outgoing_rels.each {|r| Neo4j::IdentityMap.remove(r._java_rel)}
26
28
  @incoming_rels.each {|r| Neo4j::IdentityMap.remove(r._java_rel)}
@@ -35,7 +37,6 @@ module Neo4j
35
37
  counter
36
38
  end
37
39
 
38
-
39
40
  def build(attrs)
40
41
  @target_class.new(attrs)
41
42
  end
@@ -60,14 +61,34 @@ module Neo4j
60
61
  end
61
62
 
62
63
  def each_rel(dir, &block) #:nodoc:
63
- relationships(dir).each { |rel| block.call rel }
64
+ relationships(dir).each { |rel| block.call rel }
64
65
  if @node.persisted?
65
- @node._java_node.getRelationships(java_rel_type, dir_to_java(dir)).each do |rel|
66
- block.call(rel.wrapper)
67
- end
66
+ cache_relationships(dir) if @persisted_relationships[dir].nil?
67
+ @persisted_relationships[dir].each {|rel| block.call rel unless !rel.exist?}
68
+ end
69
+ end
70
+
71
+ def cache_relationships(dir)
72
+ @persisted_relationships[dir] ||= []
73
+ node._java_node.getRelationships(java_rel_type, dir_to_java(dir)).each do |rel|
74
+ @persisted_relationships[dir] << rel.wrapper
75
+ end
76
+ end
77
+
78
+ def cache_persisted_nodes_and_relationships(dir)
79
+ @persisted_related_nodes[dir] ||= []
80
+ @persisted_node_to_relationships[dir] ||= {}
81
+ @node._java_node.getRelationships(java_rel_type, dir_to_java(dir)).each do |rel|
82
+ end_node = rel.getOtherNode(@node._java_node).wrapper
83
+ @persisted_related_nodes[dir] << end_node
84
+ @persisted_node_to_relationships[dir][end_node]=rel
68
85
  end
69
86
  end
70
-
87
+
88
+ def relationship_deleted?(dir,node)
89
+ @persisted_node_to_relationships[dir][node].nil? || !@persisted_node_to_relationships[dir][node].exist?
90
+ end
91
+
71
92
  def each_node(dir, &block)
72
93
  relationships(dir).each do |rel|
73
94
  if rel.start_node == @node
@@ -76,18 +97,14 @@ module Neo4j
76
97
  block.call rel.start_node
77
98
  end
78
99
  end
79
-
80
100
  if @node.persisted?
81
- @node._java_node.getRelationships(java_rel_type, dir_to_java(dir)).each do |rel|
82
- end_node = rel.getOtherNode(@node._java_node).wrapper
83
- block.call(end_node)
84
- end
101
+ cache_persisted_nodes_and_relationships(dir) if @persisted_related_nodes[dir].nil?
102
+ @persisted_related_nodes[dir].each {|node| block.call node unless relationship_deleted?(dir,node)}
85
103
  end
86
104
  end
87
105
 
88
106
  def single_relationship(dir, raw = false)
89
107
  rel = relationships(dir).first
90
- # puts "single_relationship #{dir} for #{self}, got #{rel && rel._java_rel} @node.persisted?=#{@node.persisted?}, #{@node._java_node}"
91
108
  if rel.nil? && @node.persisted?
92
109
  java_rel = @node._java_node.getSingleRelationship(java_rel_type, dir_to_java(dir))
93
110
  raw ? java_rel : java_rel && java_rel.wrapper
@@ -145,7 +162,7 @@ module Neo4j
145
162
  out_rels = @outgoing_rels.clone
146
163
  in_rels = @incoming_rels.clone
147
164
 
148
- [@outgoing_rels, @incoming_rels].each{|c| c.clear}
165
+ [@outgoing_rels, @incoming_rels, @persisted_related_nodes, @persisted_node_to_relationships, @persisted_relationships].each{|c| c.clear}
149
166
 
150
167
  out_rels.each do |rel|
151
168
  rel.end_node.rm_incoming_rel(@rel_type.to_sym, rel) if rel.end_node
@@ -6,16 +6,10 @@ module Neo4j
6
6
 
7
7
  TIMESTAMP_PROPERTIES = [ :created_at, :created_on, :updated_at, :updated_on ]
8
8
 
9
- def write_changed_attributes
10
- update_timestamp
11
- super
12
- end
13
-
14
- def init_on_create(*args)
15
- create_timestamp
16
- super
17
- end
18
-
9
+ included do
10
+ before_create :create_timestamp
11
+ before_save :update_timestamp, :if => :new_or_changed?
12
+ end
19
13
  # Set the timestamps for this model if timestamps is set to true in the config
20
14
  # and the model is set up with the correct property name, e.g.:
21
15
  #
@@ -50,6 +44,10 @@ module Neo4j
50
44
  send("#{attribute}=", value)
51
45
  end
52
46
 
47
+ def new_or_changed?
48
+ self.new? or self.changed?
49
+ end
50
+
53
51
  module ClassMethods
54
52
  def property_setup(property, options)
55
53
  super
@@ -0,0 +1,131 @@
1
+ module Neo4j
2
+ module Rails
3
+ # Adds snapshot based versioning to Neo4j Rails models
4
+ # To use versioning, include this module in your model.
5
+ #
6
+ # Example:
7
+ # class VersionableModel < Neo4j::Rails::Model
8
+ # include Neo4j::Rails::Versioning
9
+ # end
10
+ #
11
+ # To find out the number of versions of an instance, you can use the current_version method.
12
+ #
13
+ # To retrieve a snapshot of an older version, use the version method.
14
+ # snapshot = instance.version(1) #Retrieves version 1.
15
+ #
16
+ # Note that the version numbers start from 1 onwards.
17
+ #
18
+ # The snapshot retains all the properties and relationships at the point when a versioned model is saved.
19
+ # The snapshot also allows you to traverse incoming and outgoing relationships.
20
+ #
21
+ # For example:
22
+ # snapshot.incoming(:friends) would return a collection of nodes that are related via the friends relationship.
23
+ #
24
+ # The snapshot node creates relationships with a model's related nodes with a "version_" prefix in order to
25
+ # avoid name clashes. However, you can call the incoming and outgoing methods using your model's relationship names.
26
+ #
27
+ # To control the maximum number of versions created, you can use the max_versions property.
28
+ #
29
+ # Example:
30
+ # class MaxVersionableModel < Neo4j::Rails::Model
31
+ # include Neo4j::Rails::Versioning
32
+ # max_versions 10
33
+ # end
34
+ module Versioning
35
+ extend ActiveSupport::Concern
36
+
37
+ class Version
38
+ include Neo4j::RelationshipMixin
39
+ property :number, :type => Fixnum
40
+ property :instance_id, :type => Fixnum
41
+ property :model_classname
42
+ index :number, :instance_id, :model_classname
43
+ end
44
+
45
+ class Snapshot
46
+ include Neo4j::NodeMixin
47
+
48
+ def incoming(rel_type)
49
+ super "version_#{rel_type.to_s}".to_sym
50
+ end
51
+
52
+ def outgoing(rel_type)
53
+ super "version_#{rel_type.to_s}".to_sym
54
+ end
55
+ end
56
+
57
+ included do
58
+ class_attribute :version_max
59
+ property :_version, :type => Fixnum
60
+ end
61
+
62
+ ##
63
+ # Returns the current version of a model instance
64
+ def current_version
65
+ self._version ||= 0
66
+ end
67
+
68
+ ##
69
+ # Returns the snapshot version for a given instance.
70
+ # @param [ Integer ] number The version number to retrieve.
71
+ # Returns nil in case a version is not found.
72
+ def version(number)
73
+ Version.find(:model_classname => _classname, :instance_id => neo_id, :number => number) {|query| query.first.nil? ? nil : query.first.end_node}
74
+ end
75
+
76
+ ##
77
+ # Overrides Rails's save method to save snapshots.
78
+ def save
79
+ if self.changed? || self.relationships_changed?
80
+ self._version = current_version + 1
81
+ super
82
+ revise
83
+ end
84
+ end
85
+
86
+ private
87
+ def revise
88
+ Neo4j::Transaction.run do
89
+ snapshot = Snapshot.new(self.props.reject{|key, value| key.to_sym == :_classname})
90
+ version_relationships(snapshot)
91
+ delete_old_version if version_max.present? && number_of_versions >= version_max
92
+ Version.new(:version, self, snapshot, :model_classname => _classname, :instance_id => neo_id, :number => current_version)
93
+ end
94
+ end
95
+
96
+ def number_of_versions
97
+ Version.find(:model_classname => _classname, :instance_id => neo_id) {|query| query.size}
98
+ end
99
+
100
+ def version_relationships(snapshot)
101
+ self._java_node.getRelationships().each do |rel|
102
+ if (self._java_node == rel.getStartNode())
103
+ snapshot._java_node.createRelationshipTo(rel.getEndNode(), relationship_type(rel.getType()))
104
+ else
105
+ rel.getStartNode().createRelationshipTo(snapshot._java_node, relationship_type(rel.getType()))
106
+ end
107
+ end
108
+ end
109
+
110
+ def relationship_type(rel_type)
111
+ org.neo4j.graphdb.DynamicRelationshipType.withName( "version_#{rel_type.name}" )
112
+ end
113
+
114
+ def delete_old_version
115
+ versions = Version.find(:model_classname => _classname).asc(:number)
116
+ versions.first.del
117
+ versions.close
118
+ end
119
+
120
+ module ClassMethods #:nodoc:
121
+
122
+ # Sets the maximum number of versions to store.
123
+ #
124
+ # @param [ Integer ] number The maximum number of versions to store.
125
+ def max_versions(number)
126
+ self.version_max = number.to_i
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end
@@ -31,7 +31,7 @@ module Neo4j
31
31
  class Traverser
32
32
  include Enumerable
33
33
  include ToJava
34
- include WillPaginate::Finders::Base
34
+ include Neo4j::Paginate
35
35
 
36
36
 
37
37
  def initialize(from, type = nil, dir=nil)
@@ -85,22 +85,6 @@ module Neo4j
85
85
  end
86
86
 
87
87
 
88
- def wp_query(options, pager, args, &block) #:nodoc:
89
- page = pager.current_page || 1
90
- per_page = pager.per_page
91
- to = per_page * page
92
- from = to - per_page
93
- i = 0
94
- res = []
95
- iterator.each do |node|
96
- res << node.wrapper if i >= from
97
- i += 1
98
- break if i >= to
99
- end
100
- pager.replace res
101
- pager.total_entries ||= count
102
- end
103
-
104
88
  def <<(other_node)
105
89
  new(other_node)
106
90
  self
data/lib/neo4j/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Neo4j
2
- VERSION = "1.2.5"
2
+ VERSION = "1.2.6"
3
3
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: neo4j
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.2.5
5
+ version: 1.2.6
6
6
  platform: java
7
7
  authors:
8
8
  - Andreas Ronge
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-10-21 00:00:00 +02:00
13
+ date: 2011-11-03 00:00:00 +01:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -92,6 +92,7 @@ files:
92
92
  - lib/neo4j/neo4j.rb
93
93
  - lib/neo4j/node.rb
94
94
  - lib/neo4j/load.rb
95
+ - lib/neo4j/paginate.rb
95
96
  - lib/neo4j/database.rb
96
97
  - lib/neo4j/relationship_set.rb
97
98
  - lib/neo4j/version.rb
@@ -143,6 +144,7 @@ files:
143
144
  - lib/neo4j/rails/relationships/node_dsl.rb
144
145
  - lib/neo4j/rails/relationships/relationships.rb
145
146
  - lib/neo4j/rails/relationships/storage.rb
147
+ - lib/neo4j/rails/versioning/versioning.rb
146
148
  - lib/neo4j/rails/mapping/property.rb
147
149
  - lib/neo4j/rails/validations/associated.rb
148
150
  - lib/neo4j/rails/validations/uniqueness.rb