neo4j 3.0.0.alpha.6 → 3.0.0.alpha.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +9 -0
  3. data/Gemfile +6 -2
  4. data/lib/mydb2/active_tx_log +1 -0
  5. data/lib/mydb2/index/lucene-store.db +0 -0
  6. data/lib/mydb2/index/lucene.log.1 +0 -0
  7. data/lib/mydb2/index/lucene.log.active +0 -0
  8. data/lib/mydb2/index/lucene.log.v0 +0 -0
  9. data/lib/mydb2/lock +0 -0
  10. data/lib/mydb2/messages.log +618 -0
  11. data/lib/mydb2/neostore +0 -0
  12. data/lib/mydb2/neostore.id +0 -0
  13. data/lib/mydb2/neostore.labeltokenstore.db +0 -0
  14. data/lib/mydb2/neostore.labeltokenstore.db.id +0 -0
  15. data/lib/mydb2/neostore.labeltokenstore.db.names +0 -0
  16. data/lib/mydb2/neostore.labeltokenstore.db.names.id +0 -0
  17. data/lib/mydb2/neostore.nodestore.db +0 -0
  18. data/lib/mydb2/neostore.nodestore.db.id +0 -0
  19. data/lib/mydb2/neostore.nodestore.db.labels +0 -0
  20. data/lib/mydb2/neostore.nodestore.db.labels.id +0 -0
  21. data/lib/mydb2/neostore.propertystore.db +0 -0
  22. data/lib/mydb2/neostore.propertystore.db.arrays +0 -0
  23. data/lib/mydb2/neostore.propertystore.db.arrays.id +0 -0
  24. data/lib/mydb2/neostore.propertystore.db.id +0 -0
  25. data/lib/mydb2/neostore.propertystore.db.index +0 -0
  26. data/lib/mydb2/neostore.propertystore.db.index.id +0 -0
  27. data/lib/mydb2/neostore.propertystore.db.index.keys +0 -0
  28. data/lib/mydb2/neostore.propertystore.db.index.keys.id +0 -0
  29. data/lib/mydb2/neostore.propertystore.db.strings +0 -0
  30. data/lib/mydb2/neostore.propertystore.db.strings.id +0 -0
  31. data/lib/mydb2/neostore.relationshipstore.db +0 -0
  32. data/lib/mydb2/neostore.relationshipstore.db.id +0 -0
  33. data/lib/mydb2/neostore.relationshiptypestore.db +0 -0
  34. data/lib/mydb2/neostore.relationshiptypestore.db.id +0 -0
  35. data/lib/mydb2/neostore.relationshiptypestore.db.names +0 -0
  36. data/lib/mydb2/neostore.relationshiptypestore.db.names.id +0 -0
  37. data/lib/mydb2/neostore.schemastore.db +0 -0
  38. data/lib/mydb2/neostore.schemastore.db.id +0 -0
  39. data/lib/mydb2/nioneo_logical.log.1 +0 -0
  40. data/lib/mydb2/nioneo_logical.log.active +0 -0
  41. data/lib/mydb2/nioneo_logical.log.v0 +0 -0
  42. data/lib/mydb2/schema/label/lucene/segments.gen +0 -0
  43. data/lib/mydb2/schema/label/lucene/segments_1 +0 -0
  44. data/lib/mydb2/schema/label/lucene/write.lock +0 -0
  45. data/lib/mydb2/store_lock +0 -0
  46. data/lib/mydb2/tm_tx_log.1 +0 -0
  47. data/lib/neo4j.rb +4 -6
  48. data/lib/neo4j.rb~ +40 -0
  49. data/lib/neo4j/active_node.rb +10 -2
  50. data/lib/neo4j/active_node/has_n.rb +25 -3
  51. data/lib/neo4j/active_node/has_n/decl_rel.rb +6 -2
  52. data/lib/neo4j/active_node/has_n/nodes.rb +11 -2
  53. data/lib/neo4j/active_node/identity.rb +3 -2
  54. data/lib/neo4j/active_node/initialize.rb +1 -1
  55. data/lib/neo4j/active_node/labels.rb +69 -7
  56. data/lib/neo4j/active_node/orm_adapter.rb +88 -0
  57. data/lib/neo4j/active_node/persistence.rb +47 -5
  58. data/lib/neo4j/active_node/property.rb +48 -2
  59. data/lib/neo4j/active_node/rels.rb +2 -2
  60. data/lib/neo4j/active_node/validations.rb +3 -4
  61. data/lib/neo4j/version.rb +1 -1
  62. data/lib/neo4j/wrapper.rb +24 -2
  63. data/lib/rails/generators/neo4j/model/model_generator.rb +4 -4
  64. data/lib/rails/generators/neo4j/model/templates/model.erb +1 -1
  65. data/neo4j.gemspec +3 -3
  66. metadata +51 -6
@@ -0,0 +1,88 @@
1
+ require 'orm_adapter'
2
+
3
+ module Neo4j
4
+ module ActiveNode
5
+ module ClassMethods
6
+ include OrmAdapter::ToAdapter
7
+ end
8
+
9
+ class OrmAdapter < ::OrmAdapter::Base
10
+ module ClassMethods
11
+ include ActiveModel::Callbacks
12
+ end
13
+
14
+ def column_names
15
+ klass._decl_props.keys
16
+ end
17
+
18
+ def i18n_scope
19
+ :neo4j
20
+ end
21
+
22
+ # Get an instance by id of the model
23
+ def get!(id)
24
+ klass.find(wrap_key(id)).tap do |node|
25
+ raise "No record found" if node.nil?
26
+ end
27
+ end
28
+
29
+ # Get an instance by id of the model
30
+ def get(id)
31
+ klass.find(wrap_key(id))
32
+ end
33
+
34
+ # Find the first instance matching conditions
35
+ def find_first(options = {})
36
+ conditions, order = extract_conditions!(options)
37
+ extract_id!(conditions)
38
+ order = hasherize_order(order)
39
+
40
+ if !order.empty?
41
+ klass.find(conditions: conditions, order: order)
42
+ else
43
+ result = klass.find(conditions: conditions)
44
+ result
45
+ end
46
+ end
47
+
48
+ # Find all models matching conditions
49
+ def find_all(options = {})
50
+ conditions, order, limit, offset = extract_conditions!(options)
51
+ extract_id!(conditions)
52
+ order = hasherize_order(order)
53
+
54
+ result = if !order.empty?
55
+ klass.all(conditions: conditions, order: order, limit: limit, skip: offset)
56
+ else
57
+ klass.all(conditions: conditions)
58
+ end
59
+
60
+ result.to_a
61
+ end
62
+
63
+ # Create a model using attributes
64
+ def create!(attributes = {})
65
+ klass.create!(attributes)
66
+ end
67
+
68
+ # @see OrmAdapter::Base#destroy
69
+ def destroy(object)
70
+ object.destroy && true if valid_object?(object)
71
+ end
72
+
73
+ private
74
+
75
+ def hasherize_order(order)
76
+ (order || []).map {|clause| Hash[*clause] }
77
+ end
78
+
79
+ def extract_id!(conditions)
80
+ if id = conditions.delete(:id)
81
+ conditions['id(n)'] = id.to_i
82
+ end
83
+ end
84
+
85
+ end
86
+ end
87
+ end
88
+
@@ -25,7 +25,7 @@ module Neo4j::ActiveNode
25
25
  end
26
26
 
27
27
  def update_magic_properties
28
- self.updated_at = DateTime.now if respond_to?(:updated_at=)
28
+ self.updated_at = DateTime.now if respond_to?(:updated_at=) && changed?
29
29
  end
30
30
 
31
31
  # Creates a model with values matching those of the instance attributes and returns its id.
@@ -57,6 +57,29 @@ module Neo4j::ActiveNode
57
57
  end
58
58
  end
59
59
 
60
+ # Convenience method to set attribute and #save at the same time
61
+ # @param [Symbol, String] attribute of the attribute to update
62
+ # @param [Object] value to set
63
+ def update_attribute(attribute, value)
64
+ send("#{attribute}=", value)
65
+ self.save
66
+ end
67
+
68
+ # Convenience method to set attribute and #save! at the same time
69
+ # @param [Symbol, String] attribute of the attribute to update
70
+ # @param [Object] value to set
71
+ def update_attribute!(attribute, value)
72
+ send("#{attribute}=", value)
73
+ self.save!
74
+ end
75
+
76
+ # Convenience method to set multiple attributes and #save at the same time
77
+ # @param [Hash] attributes of names and values of attributes to set
78
+ def update_attributes(attributes)
79
+ assign_attributes(attributes)
80
+ self.save
81
+ end
82
+
60
83
  def create_or_update
61
84
  # since the same model can be created or updated twice from a relationship we have to have this guard
62
85
  @_create_or_updating = true
@@ -101,11 +124,11 @@ module Neo4j::ActiveNode
101
124
  end
102
125
 
103
126
  def update_model
104
- if @changed_attributes && !@changed_attributes.empty?
105
- changed_props = attributes.select{|k,v| @changed_attributes.include?(k)}
127
+ if changed_attributes && !changed_attributes.empty?
128
+ changed_props = attributes.select{|k,v| changed_attributes.include?(k)}
106
129
  changed_props = convert_properties_to :db, changed_props
107
130
  _persisted_node.update_props(changed_props)
108
- @changed_attributes.clear
131
+ changed_attributes.clear
109
132
  end
110
133
  end
111
134
 
@@ -144,7 +167,7 @@ module Neo4j::ActiveNode
144
167
 
145
168
  def reload
146
169
  return self if new_record?
147
- @changed_attributes && @changed_attributes.clear
170
+ changed_attributes && changed_attributes.clear
148
171
  unless reload_from_database
149
172
  @_deleted = true
150
173
  freeze
@@ -179,16 +202,27 @@ module Neo4j::ActiveNode
179
202
  # Creates a saves a new node
180
203
  # @param [Hash] props the properties the new node should have
181
204
  def create(props = {})
205
+ relationship_props = extract_relationship_attributes!(props)
206
+
182
207
  new(props).tap do |obj|
183
208
  obj.save
209
+ relationship_props.each do |prop, value|
210
+ obj.send("#{prop}=", value)
211
+ end
184
212
  end
185
213
  end
186
214
 
187
215
  # Same as #create, but raises an error if there is a problem during save.
188
216
  def create!(*args)
217
+ props = args[0] || {}
218
+ relationship_props = extract_relationship_attributes!(props)
219
+
189
220
  new(*args).tap do |o|
190
221
  yield o if block_given?
191
222
  o.save!
223
+ relationship_props.each do |prop, value|
224
+ o.send("#{prop}=", value)
225
+ end
192
226
  end
193
227
  end
194
228
 
@@ -198,6 +232,14 @@ module Neo4j::ActiveNode
198
232
 
199
233
  end
200
234
 
235
+ private
236
+
237
+ def assign_attributes(attributes)
238
+ attributes.each do |attribute, value|
239
+ send("#{attribute}=", value)
240
+ end
241
+ end
242
+
201
243
  end
202
244
 
203
245
  end
@@ -6,19 +6,55 @@ module Neo4j::ActiveNode
6
6
  include ActiveAttr::MassAssignment
7
7
  include ActiveAttr::TypecastedAttributes
8
8
  include ActiveAttr::AttributeDefaults
9
+ include ActiveAttr::QueryAttributes
9
10
  include ActiveModel::Dirty
10
11
 
12
+ class UndefinedPropertyError < RuntimeError
13
+ end
11
14
 
12
15
  def initialize(attributes={}, options={})
16
+ relationship_props = self.class.extract_relationship_attributes!(attributes)
17
+ writer_method_props = extract_writer_methods!(attributes)
18
+
19
+ validate_attributes!(attributes)
20
+
21
+ writer_method_props.each do |key, value|
22
+ self.send("#{key}=", value)
23
+ end
24
+
13
25
  super(attributes, options)
14
- (@changed_attributes || {}).clear
15
26
  end
16
27
 
17
28
  def save_properties
18
29
  @previously_changed = changes
19
- @changed_attributes.clear
30
+ changed_attributes.clear
31
+ end
32
+
33
+
34
+ # Returning nil when we get ActiveAttr::UnknownAttributeError from ActiveAttr
35
+ def read_attribute(name)
36
+ super(name)
37
+ rescue ActiveAttr::UnknownAttributeError
38
+ nil
39
+ end
40
+ alias_method :[], :read_attribute
41
+
42
+ private
43
+
44
+ # Changes attributes hash to remove relationship keys
45
+ # Raises an error if there are any keys left which haven't been defined as properties on the model
46
+ def validate_attributes!(attributes)
47
+ invalid_properties = attributes.keys.map(&:to_s) - self.attributes.keys
48
+ raise UndefinedPropertyError, "Undefined properties: #{invalid_properties.join(',')}" if invalid_properties.size > 0
20
49
  end
21
50
 
51
+ def extract_writer_methods!(attributes)
52
+ attributes.keys.inject({}) do |writer_method_props, key|
53
+ writer_method_props[key] = attributes.delete(key) if self.respond_to?("#{key}=")
54
+
55
+ writer_method_props
56
+ end
57
+ end
22
58
 
23
59
  module ClassMethods
24
60
 
@@ -37,6 +73,16 @@ module Neo4j::ActiveNode
37
73
  end
38
74
  end
39
75
 
76
+ # Extracts keys from attributes hash which are relationships of the model
77
+ # TODO: Validate separately that relationships are getting the right values? Perhaps also store the values and persist relationships on save?
78
+ def extract_relationship_attributes!(attributes)
79
+ attributes.keys.inject({}) do |relationship_props, key|
80
+ relationship_props[key] = attributes.delete(key) if self.has_relationship?(key)
81
+
82
+ relationship_props
83
+ end
84
+ end
85
+
40
86
  end
41
87
  end
42
88
 
@@ -4,8 +4,8 @@ module Neo4j::ActiveNode
4
4
  def_delegators :_rels_delegator, :rel?, :rel, :rels, :node, :nodes, :create_rel
5
5
 
6
6
  def _rels_delegator
7
- raise "Can't access relationship on a none persisted node" unless _persisted_node
7
+ raise "Can't access relationship on a non persisted node" unless _persisted_node
8
8
  _persisted_node
9
9
  end
10
10
  end
11
- end
11
+ end
@@ -41,7 +41,6 @@ module Neo4j
41
41
  class UniquenessValidator < ::ActiveModel::EachValidator
42
42
  def initialize(options)
43
43
  super(options.reverse_merge(:case_sensitive => true))
44
- @klass = options[:class]
45
44
  end
46
45
 
47
46
  def validate_each(record, attribute, value)
@@ -56,9 +55,9 @@ module Neo4j
56
55
  conditions[attribute] = /^#{Regexp.escape(value.to_s)}$/i
57
56
  end
58
57
 
59
- # prevent that same object is returned
58
+ # prevent that same object is returned
60
59
  # TODO: add negative condtion to not return current record
61
- found = @klass.all(conditions).to_a
60
+ found = record.class.all(conditions: conditions).to_a
62
61
  found.delete(record)
63
62
 
64
63
  if found.count > 0
@@ -75,7 +74,7 @@ module Neo4j
75
74
  conditions.merge(key => instance[key])
76
75
  end
77
76
  end
78
- end
77
+ end
79
78
 
80
79
  private
81
80
  def perform_validations(options={})
data/lib/neo4j/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Neo4j
2
- VERSION = "3.0.0.alpha.6"
2
+ VERSION = "3.0.0.alpha.7"
3
3
  end
data/lib/neo4j/wrapper.rb CHANGED
@@ -8,15 +8,37 @@ class Neo4j::Node
8
8
  if wrappers.empty?
9
9
  self
10
10
  else
11
- found = wrappers.sort.first
12
- wrapped_node = Neo4j::ActiveNode::Labels._wrapped_labels[found].new
11
+ wrapper_classes = wrappers.map{|w| Neo4j::ActiveNode::Labels._wrapped_labels[w]}
12
+ most_concrete_class = wrapper_classes.sort.first
13
+ wrapped_node = most_concrete_class.new
13
14
  wrapped_node.init_on_load(self, self.props)
14
15
  wrapped_node
15
16
  end
16
17
  end
17
18
 
19
+ def checked_labels_set
20
+ @@_checked_labels_set ||= Set.new
21
+ end
22
+
23
+ def check_label(label_name)
24
+ unless checked_labels_set.include?(label_name)
25
+ load_class_from_label(label_name)
26
+ # do this only once
27
+ checked_labels_set.add(label_name)
28
+ end
29
+ end
30
+
31
+ def load_class_from_label(label_name)
32
+ begin
33
+ label_name.to_s.split("::").inject(Kernel) {|container, name| container.const_get(name.to_s) }
34
+ rescue NameError
35
+ nil
36
+ end
37
+ end
38
+
18
39
  def _class_wrappers
19
40
  labels.find_all do |label_name|
41
+ check_label(label_name)
20
42
  Neo4j::ActiveNode::Labels._wrapped_labels[label_name].class == Class
21
43
  end
22
44
  end
@@ -70,11 +70,11 @@ class Neo4j::Generators::ModelGenerator < Neo4j::Generators::Base #:nodoc:
70
70
 
71
71
  def timestamp_statements
72
72
  %q{
73
- property :created_at, :type => DateTime
74
- # property :created_on, :type => Date
73
+ property :created_at, type: DateTime
74
+ # property :created_on, type: Date
75
75
 
76
- property :updated_at, :type => DateTime
77
- # property :updated_on, :type => Date
76
+ property :updated_at, type: DateTime
77
+ # property :updated_on, type: Date
78
78
  }
79
79
  end
80
80
 
@@ -1,7 +1,7 @@
1
1
  class <%= class_name %> <%= parent? ? "#{options[:parent].classify}" : "" %>
2
2
  include Neo4j::ActiveNode
3
3
  <% attributes.each do |attribute| -%>
4
- property :<%= attribute.name %><%= ", :type => #{attribute.type_class}" unless attribute.type_class == 'any' %>
4
+ property :<%= attribute.name %><%= ", type: #{attribute.type_class}" unless attribute.type_class == 'any' %>
5
5
  <%= index_fragment(attribute.name) %>
6
6
  <% end -%>
7
7
  <%= has_n_statements if has_n? -%>
data/neo4j.gemspec CHANGED
@@ -29,13 +29,13 @@ It comes included with the Apache Lucene document database.
29
29
  s.extra_rdoc_files = %w( README.md )
30
30
  s.rdoc_options = ["--quiet", "--title", "Neo4j.rb", "--line-numbers", "--main", "README.rdoc", "--inline-source"]
31
31
 
32
- s.add_dependency('orm_adapter', "~> 0.4.0")
32
+ s.add_dependency('orm_adapter', "~> 0.5.0")
33
33
  s.add_dependency("activemodel", "~> 4")
34
34
  s.add_dependency("railties", "~> 4")
35
35
  s.add_dependency('active_attr', "~> 0.8")
36
- s.add_dependency("neo4j-core", "= 3.0.0.alpha.12")
36
+ s.add_dependency("neo4j-core", "= 3.0.0.alpha.16")
37
37
 
38
38
  if RUBY_PLATFORM =~ /java/
39
- s.add_dependency("neo4j-community", '~> 2.0.0')
39
+ s.add_dependency("neo4j-community", '~> 2.0')
40
40
  end
41
41
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: neo4j
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.alpha.6
4
+ version: 3.0.0.alpha.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Ronge
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-27 00:00:00.000000000 Z
11
+ date: 2014-06-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: orm_adapter
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.4.0
19
+ version: 0.5.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.4.0
26
+ version: 0.5.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activemodel
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: 3.0.0.alpha.12
75
+ version: 3.0.0.alpha.16
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: 3.0.0.alpha.12
82
+ version: 3.0.0.alpha.16
83
83
  description: "You can think of Neo4j as a high-performance graph engine with all the
84
84
  features of a mature and robust database.\nThe programmer works with an object-oriented,
85
85
  flexible network structure rather than with strict and static tables \nyet enjoys
@@ -99,7 +99,51 @@ files:
99
99
  - bin/neo4j-jars
100
100
  - config/locales/en.yml
101
101
  - config/neo4j/config.yml
102
+ - lib/mydb2/active_tx_log
103
+ - lib/mydb2/index/lucene-store.db
104
+ - lib/mydb2/index/lucene.log.1
105
+ - lib/mydb2/index/lucene.log.active
106
+ - lib/mydb2/index/lucene.log.v0
107
+ - lib/mydb2/lock
108
+ - lib/mydb2/messages.log
109
+ - lib/mydb2/neostore
110
+ - lib/mydb2/neostore.id
111
+ - lib/mydb2/neostore.labeltokenstore.db
112
+ - lib/mydb2/neostore.labeltokenstore.db.id
113
+ - lib/mydb2/neostore.labeltokenstore.db.names
114
+ - lib/mydb2/neostore.labeltokenstore.db.names.id
115
+ - lib/mydb2/neostore.nodestore.db
116
+ - lib/mydb2/neostore.nodestore.db.id
117
+ - lib/mydb2/neostore.nodestore.db.labels
118
+ - lib/mydb2/neostore.nodestore.db.labels.id
119
+ - lib/mydb2/neostore.propertystore.db
120
+ - lib/mydb2/neostore.propertystore.db.arrays
121
+ - lib/mydb2/neostore.propertystore.db.arrays.id
122
+ - lib/mydb2/neostore.propertystore.db.id
123
+ - lib/mydb2/neostore.propertystore.db.index
124
+ - lib/mydb2/neostore.propertystore.db.index.id
125
+ - lib/mydb2/neostore.propertystore.db.index.keys
126
+ - lib/mydb2/neostore.propertystore.db.index.keys.id
127
+ - lib/mydb2/neostore.propertystore.db.strings
128
+ - lib/mydb2/neostore.propertystore.db.strings.id
129
+ - lib/mydb2/neostore.relationshipstore.db
130
+ - lib/mydb2/neostore.relationshipstore.db.id
131
+ - lib/mydb2/neostore.relationshiptypestore.db
132
+ - lib/mydb2/neostore.relationshiptypestore.db.id
133
+ - lib/mydb2/neostore.relationshiptypestore.db.names
134
+ - lib/mydb2/neostore.relationshiptypestore.db.names.id
135
+ - lib/mydb2/neostore.schemastore.db
136
+ - lib/mydb2/neostore.schemastore.db.id
137
+ - lib/mydb2/nioneo_logical.log.1
138
+ - lib/mydb2/nioneo_logical.log.active
139
+ - lib/mydb2/nioneo_logical.log.v0
140
+ - lib/mydb2/schema/label/lucene/segments.gen
141
+ - lib/mydb2/schema/label/lucene/segments_1
142
+ - lib/mydb2/schema/label/lucene/write.lock
143
+ - lib/mydb2/store_lock
144
+ - lib/mydb2/tm_tx_log.1
102
145
  - lib/neo4j.rb
146
+ - lib/neo4j.rb~
103
147
  - lib/neo4j/active_node.rb
104
148
  - lib/neo4j/active_node/callbacks.rb
105
149
  - lib/neo4j/active_node/has_n.rb
@@ -108,6 +152,7 @@ files:
108
152
  - lib/neo4j/active_node/identity.rb
109
153
  - lib/neo4j/active_node/initialize.rb
110
154
  - lib/neo4j/active_node/labels.rb
155
+ - lib/neo4j/active_node/orm_adapter.rb
111
156
  - lib/neo4j/active_node/persistence.rb
112
157
  - lib/neo4j/active_node/property.rb
113
158
  - lib/neo4j/active_node/rels.rb