neo4j 5.0.15 → 5.1.0.rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +60 -5
  3. data/Gemfile +1 -1
  4. data/README.md +8 -0
  5. data/lib/neo4j.rb +4 -0
  6. data/lib/neo4j/active_node.rb +3 -1
  7. data/lib/neo4j/active_node/dependent/association_methods.rb +4 -2
  8. data/lib/neo4j/active_node/dependent/query_proxy_methods.rb +3 -3
  9. data/lib/neo4j/active_node/has_n.rb +103 -36
  10. data/lib/neo4j/active_node/has_n/association.rb +10 -33
  11. data/lib/neo4j/active_node/has_n/association_cypher_methods.rb +108 -0
  12. data/lib/neo4j/active_node/id_property.rb +19 -11
  13. data/lib/neo4j/active_node/id_property/accessor.rb +62 -0
  14. data/lib/neo4j/active_node/labels.rb +13 -2
  15. data/lib/neo4j/active_node/persistence.rb +19 -4
  16. data/lib/neo4j/active_node/property.rb +4 -3
  17. data/lib/neo4j/active_node/query/query_proxy.rb +29 -13
  18. data/lib/neo4j/active_node/query/query_proxy_eager_loading.rb +8 -0
  19. data/lib/neo4j/active_node/query/query_proxy_enumerable.rb +7 -0
  20. data/lib/neo4j/active_node/query/query_proxy_link.rb +16 -6
  21. data/lib/neo4j/active_node/query/query_proxy_methods.rb +4 -0
  22. data/lib/neo4j/active_node/query/query_proxy_unpersisted.rb +17 -0
  23. data/lib/neo4j/active_node/unpersisted.rb +49 -0
  24. data/lib/neo4j/active_node/validations.rb +1 -1
  25. data/lib/neo4j/active_rel.rb +17 -0
  26. data/lib/neo4j/active_rel/persistence.rb +10 -5
  27. data/lib/neo4j/active_rel/property.rb +17 -5
  28. data/lib/neo4j/railtie.rb +2 -1
  29. data/lib/neo4j/shared/declared_property_manager.rb +10 -0
  30. data/lib/neo4j/shared/initialize.rb +3 -3
  31. data/lib/neo4j/shared/property.rb +7 -51
  32. data/lib/neo4j/shared/property/default_property.rb +0 -0
  33. data/lib/neo4j/shared/type_converters.rb +49 -6
  34. data/lib/neo4j/shared/typecaster.rb +22 -18
  35. data/lib/neo4j/shared/validations.rb +1 -1
  36. data/lib/neo4j/version.rb +1 -1
  37. data/neo4j.gemspec +1 -1
  38. metadata +12 -7
@@ -9,6 +9,10 @@ module Neo4j::Shared
9
9
  Date
10
10
  end
11
11
 
12
+ def db_type
13
+ Integer
14
+ end
15
+
12
16
  def to_db(value)
13
17
  Time.utc(value.year, value.month, value.day).to_i
14
18
  end
@@ -26,6 +30,10 @@ module Neo4j::Shared
26
30
  DateTime
27
31
  end
28
32
 
33
+ def db_type
34
+ Integer
35
+ end
36
+
29
37
  # Converts the given DateTime (UTC) value to an Integer.
30
38
  # DateTime values are automatically converted to UTC.
31
39
  def to_db(value)
@@ -59,9 +67,16 @@ module Neo4j::Shared
59
67
  Time
60
68
  end
61
69
 
70
+ # ActiveAttr, which assists with property management, does not recognize Time as a valid type. We tell it to interpret it as
71
+ # Integer, as it will be when saved to the database.
62
72
  def primitive_type
63
73
  Integer
64
74
  end
75
+
76
+ def db_type
77
+ Integer
78
+ end
79
+
65
80
  # Converts the given DateTime (UTC) value to an Integer.
66
81
  # Only utc times are supported !
67
82
  def to_db(value)
@@ -86,6 +101,10 @@ module Neo4j::Shared
86
101
  Hash
87
102
  end
88
103
 
104
+ def db_type
105
+ String
106
+ end
107
+
89
108
  def to_db(value)
90
109
  Psych.dump(value)
91
110
  end
@@ -103,6 +122,10 @@ module Neo4j::Shared
103
122
  JSON
104
123
  end
105
124
 
125
+ def db_type
126
+ String
127
+ end
128
+
106
129
  def to_db(value)
107
130
  value.to_json
108
131
  end
@@ -113,14 +136,26 @@ module Neo4j::Shared
113
136
  end
114
137
  end
115
138
 
139
+ # Modifies a hash's values to be of types acceptable to Neo4j or matching what the user defined using `type` in property definitions.
140
+ # @param [Neo4j::Shared::Property] obj A node or rel that mixes in the Property module
141
+ # @param [Symbol] medium Indicates the type of conversion to perform.
142
+ # @param [Hash] properties A hash of symbol-keyed properties for conversion.
116
143
  def convert_properties_to(obj, medium, properties)
117
- converter = medium == :ruby ? :to_ruby : :to_db
118
- properties.each_pair do |attr, value|
119
- next if skip_conversion?(obj, attr, value)
120
- properties[attr] = converted_property(primitive_type(attr.to_sym), value, converter)
144
+ direction = medium == :ruby ? :to_ruby : :to_db
145
+ properties.each_pair do |key, value|
146
+ next if skip_conversion?(obj, key, value)
147
+ properties[key] = convert_property(key, value, direction)
121
148
  end
122
149
  end
123
150
 
151
+ # Converts a single property from its current format to its db- or Ruby-expected output type.
152
+ # @param [Symbol] key A property declared on the model
153
+ # @param value The value intended for conversion
154
+ # @param [Symbol] direction Either :to_ruby or :to_db, indicates the type of conversion to perform
155
+ def convert_property(key, value, direction)
156
+ converted_property(primitive_type(key.to_sym), value, direction)
157
+ end
158
+
124
159
  private
125
160
 
126
161
  def converted_property(type, value, converter)
@@ -156,7 +191,6 @@ module Neo4j::Shared
156
191
  end
157
192
  end
158
193
 
159
-
160
194
  def typecaster_for(primitive_type)
161
195
  return nil if primitive_type.nil?
162
196
  converters.key?(primitive_type) ? converters[primitive_type] : nil
@@ -166,7 +200,16 @@ module Neo4j::Shared
166
200
  def to_other(direction, value, type)
167
201
  fail "Unknown direction given: #{direction}" unless direction == :to_ruby || direction == :to_db
168
202
  found_converter = converters[type]
169
- found_converter ? found_converter.send(direction, value) : value
203
+ return value unless found_converter
204
+ return value if direction == :to_db && formatted_for_db?(found_converter, value)
205
+ found_converter.send(direction, value)
206
+ end
207
+
208
+ # Attempts to determine whether conversion should be skipped because the object is already of the anticipated output type.
209
+ # @param [#convert_type] found_converter An object that responds to #convert_type, hinting that it is a type converter.
210
+ # @param value The value for conversion.
211
+ def formatted_for_db?(found_converter, value)
212
+ found_converter.respond_to?(:db_type) && value.is_a?(found_converter.db_type)
170
213
  end
171
214
 
172
215
  def register_converter(converter)
@@ -1,30 +1,34 @@
1
1
  module Neo4j
2
2
  module Shared
3
3
  # This module provides a convenient way of registering a custom Typecasting class. Custom Typecasters all follow a simple pattern.
4
+ #
4
5
  # EXAMPLE:
5
- # class RangeConverter
6
- # class << self
7
- # def primitive_type
8
- # String
9
- # end
10
6
  #
11
- # def convert_type
12
- # Range
13
- # end
7
+ # .. code-block:: ruby
14
8
  #
15
- # def to_db(value)
16
- # value.to_s
17
- # end
9
+ # class RangeConverter
10
+ # class << self
11
+ # def primitive_type
12
+ # String
13
+ # end
18
14
  #
19
- # def to_ruby(value)
20
- # ends = value.to_s.split('..').map { |d| Integer(d) }
21
- # ends[0]..ends[1]
15
+ # def convert_type
16
+ # Range
17
+ # end
18
+ #
19
+ # def to_db(value)
20
+ # value.to_s
21
+ # end
22
+ #
23
+ # def to_ruby(value)
24
+ # ends = value.to_s.split('..').map { |d| Integer(d) }
25
+ # ends[0]..ends[1]
26
+ # end
27
+ # alias_method :call, :to_ruby
22
28
  # end
23
- # alias_method :call, :to_ruby
24
- # end
25
29
  #
26
- # include Neo4j::Shared::Typecaster
27
- # end
30
+ # include Neo4j::Shared::Typecaster
31
+ # end
28
32
  #
29
33
  # This would allow you to use `property :my_prop, type: Range` in a model.
30
34
  # Each method and the `alias_method` call is required. Make sure the module inclusion happens at the end of the file.
@@ -24,7 +24,7 @@ module Neo4j
24
24
 
25
25
  # @return [Boolean] true if valid
26
26
  def valid?(context = nil)
27
- context ||= (new_record? ? :create : :update)
27
+ context ||= (new_record? ? :create : :update)
28
28
  super(context)
29
29
  errors.empty?
30
30
  end
data/lib/neo4j/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Neo4j
2
- VERSION = '5.0.15'
2
+ VERSION = '5.1.0.rc.1'
3
3
  end
data/neo4j.gemspec CHANGED
@@ -30,7 +30,7 @@ A Neo4j OGM (Object-Graph-Mapper) for use in Ruby on Rails and Rack frameworks h
30
30
  s.add_dependency('activemodel', '~> 4')
31
31
  s.add_dependency('activesupport', '~> 4')
32
32
  s.add_dependency('active_attr', '~> 0.8')
33
- s.add_dependency('neo4j-core', '~> 5.0.1')
33
+ s.add_dependency('neo4j-core', '~> 5.1.0.rc.1')
34
34
  s.add_dependency('neo4j-community', '~> 2.0') if RUBY_PLATFORM =~ /java/
35
35
  s.add_development_dependency('railties', '~> 4')
36
36
  s.add_development_dependency('pry')
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: 5.0.15
4
+ version: 5.1.0.rc.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Ronge, Brian Underwood, Chris Grigg
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-12 00:00:00.000000000 Z
11
+ date: 2015-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: orm_adapter
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 5.0.1
75
+ version: 5.1.0.rc.1
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: 5.0.1
82
+ version: 5.1.0.rc.1
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: railties
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -231,7 +231,9 @@ files:
231
231
  - lib/neo4j/active_node/dependent/query_proxy_methods.rb
232
232
  - lib/neo4j/active_node/has_n.rb
233
233
  - lib/neo4j/active_node/has_n/association.rb
234
+ - lib/neo4j/active_node/has_n/association_cypher_methods.rb
234
235
  - lib/neo4j/active_node/id_property.rb
236
+ - lib/neo4j/active_node/id_property/accessor.rb
235
237
  - lib/neo4j/active_node/initialize.rb
236
238
  - lib/neo4j/active_node/labels.rb
237
239
  - lib/neo4j/active_node/node_wrapper.rb
@@ -245,10 +247,12 @@ files:
245
247
  - lib/neo4j/active_node/query/query_proxy_find_in_batches.rb
246
248
  - lib/neo4j/active_node/query/query_proxy_link.rb
247
249
  - lib/neo4j/active_node/query/query_proxy_methods.rb
250
+ - lib/neo4j/active_node/query/query_proxy_unpersisted.rb
248
251
  - lib/neo4j/active_node/query_methods.rb
249
252
  - lib/neo4j/active_node/reflection.rb
250
253
  - lib/neo4j/active_node/rels.rb
251
254
  - lib/neo4j/active_node/scope.rb
255
+ - lib/neo4j/active_node/unpersisted.rb
252
256
  - lib/neo4j/active_node/validations.rb
253
257
  - lib/neo4j/active_rel.rb
254
258
  - lib/neo4j/active_rel/callbacks.rb
@@ -274,6 +278,7 @@ files:
274
278
  - lib/neo4j/shared/initialize.rb
275
279
  - lib/neo4j/shared/persistence.rb
276
280
  - lib/neo4j/shared/property.rb
281
+ - lib/neo4j/shared/property/default_property.rb
277
282
  - lib/neo4j/shared/rel_type_converters.rb
278
283
  - lib/neo4j/shared/serialized_properties.rb
279
284
  - lib/neo4j/shared/type_converters.rb
@@ -309,12 +314,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
309
314
  version: 1.9.3
310
315
  required_rubygems_version: !ruby/object:Gem::Requirement
311
316
  requirements:
312
- - - ">="
317
+ - - ">"
313
318
  - !ruby/object:Gem::Version
314
- version: '0'
319
+ version: 1.3.1
315
320
  requirements: []
316
321
  rubyforge_project: neo4j
317
- rubygems_version: 2.4.6
322
+ rubygems_version: 2.4.5
318
323
  signing_key:
319
324
  specification_version: 4
320
325
  summary: A graph database for Ruby