neo4j 6.0.9 → 6.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 268f0f4433b4ea5007d954b93734f163fd213fb3
4
- data.tar.gz: 292e0d52e9fba8ce3ff115051706ae7d8a26bca7
3
+ metadata.gz: a3c832dc3c664a9c43d1014226af9d856a9ae5dc
4
+ data.tar.gz: 2343fc4c93707ee597da241d452da0b912a9f53a
5
5
  SHA512:
6
- metadata.gz: 83717444682a0591f81d368275069561fe9818b2551841dc9431aa6d521bca6abb132cbe96941f63657e1ce1bfb6717827d17c043e4a06792f80385a9779bbec
7
- data.tar.gz: cd5775b891a085b4342cce67f7b9ee5e9f8376e79992a72d676b52636a42fa1c3307e6fdd27de6b6abf2049e1fd66b04fb69ab2598a602be01f00722bbfd0de0
6
+ metadata.gz: 950118a98e2a592dd0a54550c9e47ed57e243a52e9c879404b0c1a539b1b63a0bfa8726711c107ea7af303aba750ff84846cd3508370b01dc410a282ba3cd731
7
+ data.tar.gz: d9c55f185d51bf226f98de8eac2fe52db9d1d64b1a79ec1822d7805ee04fd3539f3c13e666ec89961df3a4e3850e69fdb3f89ac40be6ee0285568a7f1fbc7894
data/CHANGELOG.md CHANGED
@@ -3,29 +3,24 @@ All notable changes to this project will be documented in this file.
3
3
  This file should follow the standards specified on [http://keepachangelog.com/]
4
4
  This project adheres to [Semantic Versioning](http://semver.org/).
5
5
 
6
- ## [6.0.9] - 05-27-2016
6
+ ## [6.1.0] - 2016-01-01
7
7
 
8
- ### Fixed
9
-
10
- - Fix to `find_in_batches` (thanks to ProGM / see #1208)
11
-
12
- ## [6.0.8] - 03-14-2016
13
-
14
- ### Fixed
15
-
16
- - Fixed issue where backticks weren't being added to where clauses for `with_associations`
8
+ ### Changed
17
9
 
18
- ## [6.0.7] - 03-08-2016
10
+ - When a `model_class` is specified on an association which is not an ActiveNode model, an error is raised
11
+ - The `model_class` option on associations can no longer be a `Class` constant (should be a String, Symbol, nil, false, or an Array of Symbols/Strings)
12
+ - The `rel_class` option on associations can no longer be a `Class` constant (should be a String, Symbol, or nil)
13
+ - The `from_class` and `to_class` arguments can no longer be a `Class` constant (should be a String, Symbol, :any, or false)
14
+ - ActiveNode and ActiveRel models can now be marshaled (thanks to jhoffner for the suggestion in #1093)
19
15
 
20
16
  ### Fixed
21
17
 
22
- - Issue where creating relationships via `has_one` association created two relationships
23
-
24
- ## [6.0.6] - 01-20-2016
18
+ - Inheritance of properties in ActiveRel is fixed (see #1080)
25
19
 
26
- ### Fixed
20
+ ### Added
27
21
 
28
- - Issue where `inspect` failed outside of Rails (Thanks to louspringer, #1111)
22
+ - `config/neo4j.yml` now renders with an ERB step (thanks to mrstif via #1060)
23
+ - `#increment`, `#increment!` and `#concurrent_increment!` methods added to instances of ActiveNode and ActiveRel (thanks to ProGM in #1074)
29
24
 
30
25
  ## [6.0.5] - 12-29-2015
31
26
 
data/Gemfile CHANGED
@@ -2,8 +2,11 @@ source 'http://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
- # gem 'neo4j-core', github: 'neo4jrb/neo4j-core', branch: 'master'
6
- # gem 'neo4j-core', path: '../neo4j-core'
5
+ if ENV['CI']
6
+ gem 'neo4j-core', github: 'neo4jrb/neo4j-core', branch: 'master'
7
+ else
8
+ # gem 'neo4j-core', path: '../neo4j-core'
9
+ end
7
10
 
8
11
  # gem 'active_attr', github: 'neo4jrb/active_attr', branch: 'performance'
9
12
  # gem 'active_attr', path: '../active_attr'
@@ -13,7 +16,7 @@ group 'test' do
13
16
  gem 'codecov', require: false
14
17
  gem 'simplecov', require: false
15
18
  gem 'simplecov-html', require: false
16
- gem 'rspec', '~> 2.0'
19
+ gem 'rspec', '~> 3.4'
17
20
  gem 'its'
18
21
  gem 'test-unit'
19
22
  gem 'overcommit'
data/README.md CHANGED
@@ -18,7 +18,7 @@ All new documentation will be done via our [readthedocs](http://neo4jrb.readthed
18
18
 
19
19
  ### Contact Us
20
20
 
21
- [![StackOverflow](https://img.shields.io/badge/StackOverflow-Ask%20a%20question!-blue.svg)](http://stackoverflow.com/questions/ask?tags=neo4j.rb+neo4j+ruby) [![Gitter](https://img.shields.io/badge/Gitter-Join%20our%20chat!-blue.svg)](https://gitter.im/neo4jrb/neo4j?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Twitter](https://img.shields.io/badge/Twitter-Tweet%20with%20us!-blue.svg)](https://twitter.com/neo4jrb) [![Mailing list](https://img.shields.io/badge/Mailing%20list-Mail%20us!-blue.svg)](https://groups.google.com/forum/#!forum/neo4jrb)
21
+ [![StackOverflow](https://img.shields.io/badge/StackOverflow-Ask%20a%20question!-blue.svg)](http://stackoverflow.com/questions/ask?tags=neo4j.rb+neo4j+ruby) [![Gitter](https://img.shields.io/badge/Gitter-Join%20our%20chat!-blue.svg)](https://gitter.im/neo4jrb/neo4j?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Twitter](https://img.shields.io/badge/Twitter-Tweet%20with%20us!-blue.svg)](https://twitter.com/neo4jrb)
22
22
 
23
23
 
24
24
 
data/lib/neo4j.rb CHANGED
@@ -24,6 +24,7 @@ require 'neo4j/active_rel/rel_wrapper'
24
24
  require 'neo4j/active_node/node_wrapper'
25
25
  require 'neo4j/shared/type_converters'
26
26
  require 'neo4j/shared/rel_type_converters'
27
+ require 'neo4j/shared/marshal'
27
28
  require 'neo4j/type_converters'
28
29
  require 'neo4j/paginated'
29
30
  require 'neo4j/schema/operation'
@@ -23,8 +23,11 @@ module Neo4j
23
23
  module ActiveNode
24
24
  extend ActiveSupport::Concern
25
25
 
26
+ MARSHAL_INSTANCE_VARIABLES = [:@attributes, :@_persisted_obj, :@default_property_value]
27
+
26
28
  include Neo4j::Shared
27
29
  include Neo4j::Shared::Identity
30
+ include Neo4j::Shared::Marshal
28
31
  include Neo4j::ActiveNode::Initialize
29
32
  include Neo4j::ActiveNode::IdProperty
30
33
  include Neo4j::Shared::SerializedProperties
@@ -306,9 +306,9 @@ module Neo4j::ActiveNode
306
306
  #
307
307
  # Post.has_one :in, :author, type: :has_author, model_class: 'Person'
308
308
  #
309
- # *model_class*: The model class to which the association is referring. Can be either a
310
- # model object ``include`` ing ``ActiveNode`` or a Symbol/String (or an ``Array`` of same).
311
- # **A Symbol or String is recommended** to avoid load-time issues
309
+ # *model_class*: The model class to which the association is referring. Can be a
310
+ # Symbol/String (or an ``Array`` of same) with the name of the `ActiveNode` class,
311
+ # `false` to specify any model, or nil to specify that it should be guessed.
312
312
  #
313
313
  # *rel_class*: The ``ActiveRel`` class to use for this association. Can be either a
314
314
  # model object ``include`` ing ``ActiveRel`` or a Symbol/String (or an ``Array`` of same).
@@ -504,6 +504,7 @@ module Neo4j::ActiveNode
504
504
  end
505
505
 
506
506
  def build_association(macro, direction, name, options)
507
+ options[:model_class] = options[:model_class].name if options[:model_class] == self
507
508
  Neo4j::ActiveNode::HasN::Association.new(macro, direction, name, options).tap do |association|
508
509
  @associations ||= {}
509
510
  @associations[name] = association
@@ -1,4 +1,5 @@
1
1
  require 'active_support/inflector/inflections'
2
+ require 'neo4j/class_arguments'
2
3
 
3
4
  module Neo4j
4
5
  module ActiveNode
@@ -32,7 +33,7 @@ module Neo4j
32
33
  @pending_model_refresh = @target_classes_or_nil = nil
33
34
 
34
35
  # Using #to_s on purpose here to take care of classes/strings/symbols
35
- @model_class = @model_class.to_s.constantize if @model_class
36
+ @model_class = ClassArguments.constantize_argument(@model_class.to_s) if @model_class
36
37
  end
37
38
 
38
39
  def queue_model_refresh!
@@ -67,7 +68,7 @@ module Neo4j
67
68
  end
68
69
 
69
70
  def target_classes
70
- target_class_names.map(&:constantize)
71
+ ClassArguments.constantize_argument(target_class_names)
71
72
  end
72
73
 
73
74
  def target_classes_or_nil
@@ -78,12 +79,12 @@ module Neo4j
78
79
  return if model_class == false
79
80
 
80
81
  Array.new(target_classes).map do |target_class|
81
- "#{name}:`#{target_class.mapped_label_name}`"
82
+ "#{name}:#{target_class.mapped_label_name}"
82
83
  end.join(' OR ')
83
84
  end
84
85
 
85
86
  def discovered_model
86
- target_class_names.map(&:constantize).select do |constant|
87
+ target_classes.select do |constant|
87
88
  constant.ancestors.include?(::Neo4j::ActiveNode)
88
89
  end
89
90
  end
@@ -91,17 +92,11 @@ module Neo4j
91
92
  def target_class
92
93
  return @target_class if @target_class
93
94
 
94
- if target_class_names && target_class_names.size == 1
95
- class_const = target_class_names[0].constantize
95
+ return if !(target_class_names && target_class_names.size == 1)
96
96
 
97
- if !class_const.included_modules.include?(Neo4j::ActiveNode)
98
- fail ArgumentError, "Invalid argument to `#{name}` association: `#{class_const.inspect}` is not an ActiveNode model"
99
- end
97
+ class_const = ClassArguments.constantize_argument(target_class_names[0])
100
98
 
101
- @target_class = class_const
102
- end
103
- rescue NameError
104
- raise ArgumentError, "Invalid argument to `#{name}` association: Could not find class `#{target_class_names[0]}`"
99
+ @target_class = class_const
105
100
  end
106
101
 
107
102
  def callback(type)
@@ -215,12 +210,12 @@ module Neo4j
215
210
  VALID_ASSOCIATION_OPTION_KEYS = [:type, :origin, :model_class, :rel_class, :dependent, :before, :after, :unique]
216
211
 
217
212
  def validate_association_options!(_association_name, options)
218
- type_keys = (options.keys & [:type, :origin, :rel_class])
213
+ ClassArguments.validate_argument!(options[:model_class], 'model_class')
214
+ ClassArguments.validate_argument!(options[:rel_class], 'rel_class')
215
+
219
216
  message = case
220
- when type_keys.size > 1
221
- "Only one of 'type', 'origin', or 'rel_class' options are allowed for associations"
222
- when type_keys.empty?
223
- "The 'type' option must be specified( even if it is `nil`) or `origin`/`rel_class` must be specified"
217
+ when (message = type_keys_error_message(options.keys))
218
+ message
224
219
  when (unknown_keys = options.keys - VALID_ASSOCIATION_OPTION_KEYS).size > 0
225
220
  "Unknown option(s) specified: #{unknown_keys.join(', ')}"
226
221
  end
@@ -228,6 +223,15 @@ module Neo4j
228
223
  fail ArgumentError, message if message
229
224
  end
230
225
 
226
+ def type_keys_error_message(keys)
227
+ type_keys = (keys & [:type, :origin, :rel_class])
228
+ if type_keys.size > 1
229
+ "Only one of 'type', 'origin', or 'rel_class' options are allowed for associations"
230
+ elsif type_keys.empty?
231
+ "The 'type' option must be specified( even if it is `nil`) or `origin`/`rel_class` must be specified"
232
+ end
233
+ end
234
+
231
235
  def check_valid_type_and_dir(type, direction)
232
236
  fail ArgumentError, "Invalid association type: #{type.inspect} (valid value: :has_many and :has_one)" if ![:has_many, :has_one].include?(type.to_sym)
233
237
  fail ArgumentError, "Invalid direction: #{direction.inspect} (valid value: :out, :in, and :both)" if ![:out, :in, :both].include?(direction.to_sym)
@@ -29,6 +29,14 @@ module Neo4j::ActiveNode
29
29
  end
30
30
  end
31
31
 
32
+ # Increments concurrently a numeric attribute by a centain amount
33
+ # @param [Symbol, String] name of the attribute to increment
34
+ # @param [Integer, Float] amount to increment
35
+ def concurrent_increment!(attribute, by = 1)
36
+ query_node = Neo4j::Session.query.match_nodes(n: neo_id)
37
+ increment_by_query! query_node, attribute, by
38
+ end
39
+
32
40
  # Persist the object to the database. Validations and Callbacks are included
33
41
  # by default but validation can be disabled by passing :validate => false
34
42
  # to #save! Creates a new transaction.
@@ -51,7 +51,7 @@ module Neo4j::ActiveNode
51
51
  id_property_name = self.class.id_property_name.to_s
52
52
 
53
53
  attribute_pairs = attributes.except(id_property_name).sort.map do |key, value|
54
- [key, (value.is_a?(String) && value.size > 100) ? value.dup[0..100] : value]
54
+ [key, (value.is_a?(String) && value.size > 100) ? value.dup.first(100) : value]
55
55
  end
56
56
 
57
57
  attribute_pairs.unshift([id_property_name, self.send(id_property_name)])
@@ -4,7 +4,7 @@ module Neo4j
4
4
  module QueryProxyFindInBatches
5
5
  def find_in_batches(options = {})
6
6
  query.return(identity).find_in_batches(identity, @model.primary_key, options) do |batch|
7
- yield batch.map(&identity)
7
+ yield batch.map(&:identity)
8
8
  end
9
9
  end
10
10
 
@@ -4,9 +4,12 @@ module Neo4j
4
4
  module ActiveRel
5
5
  extend ActiveSupport::Concern
6
6
 
7
+ MARSHAL_INSTANCE_VARIABLES = [:@attributes, :@rel_type, :@_persisted_obj]
8
+
7
9
  include Neo4j::Shared
8
10
  include Neo4j::ActiveRel::Initialize
9
11
  include Neo4j::Shared::Identity
12
+ include Neo4j::Shared::Marshal
10
13
  include Neo4j::Shared::SerializedProperties
11
14
  include Neo4j::ActiveRel::Property
12
15
  include Neo4j::ActiveRel::Persistence
@@ -40,9 +43,6 @@ module Neo4j
40
43
  include Neo4j::Timestamps if Neo4j::Config[:record_timestamps]
41
44
 
42
45
  def self.inherited(other)
43
- attributes.each_pair do |k, v|
44
- other.inherit_property k.to_sym, v.clone, declared_properties[k].options
45
- end
46
46
  super
47
47
  end
48
48
  end
@@ -36,6 +36,14 @@ module Neo4j::ActiveRel
36
36
  save(*args) or fail(RelInvalidError, inspect) # rubocop:disable Style/AndOr
37
37
  end
38
38
 
39
+ # Increments concurrently a numeric attribute by a centain amount
40
+ # @param [Symbol, String] name of the attribute to increment
41
+ # @param [Integer, Float] amount to increment
42
+ def concurrent_increment!(attribute, by = 1)
43
+ query_rel = Neo4j::Session.query.match('()-[n]-()').where(n: {neo_id: neo_id})
44
+ increment_by_query! query_rel, attribute, by
45
+ end
46
+
39
47
  def create_model
40
48
  validate_node_classes!
41
49
  rel = _create_rel
@@ -1,3 +1,5 @@
1
+ require 'neo4j/class_arguments'
2
+
1
3
  module Neo4j::ActiveRel
2
4
  module Property
3
5
  extend ActiveSupport::Concern
@@ -55,13 +57,23 @@ module Neo4j::ActiveRel
55
57
 
56
58
  %w(to_class from_class).each do |direction|
57
59
  define_method("#{direction}") do |argument = nil|
58
- return self.instance_variable_get("@#{direction}") if argument.nil?
59
- instance_variable_set("@#{direction}", argument)
60
+ if !argument.nil?
61
+ Neo4j::ClassArguments.validate_argument!(argument, direction)
62
+
63
+ instance_variable_set("@#{direction}", argument)
64
+ end
65
+
66
+ self.instance_variable_get("@#{direction}")
60
67
  end
61
68
 
62
69
  define_method("_#{direction}") { instance_variable_get "@#{direction}" }
63
70
  end
64
71
 
72
+ def valid_class_argument?(class_argument)
73
+ [String, Symbol, FalseClass].include?(class_argument.class) ||
74
+ (class_argument.is_a?(Array) && class_argument.all? { |c| [String, Symbol].include?(c.class) })
75
+ end
76
+
65
77
  alias_method :start_class, :from_class
66
78
  alias_method :end_class, :to_class
67
79
 
@@ -73,9 +73,7 @@ module Neo4j::ActiveRel
73
73
 
74
74
  def as_constant(given_class)
75
75
  case given_class
76
- when String
77
- given_class.constantize
78
- when Symbol
76
+ when String, Symbol
79
77
  given_class.to_s.constantize
80
78
  when Array
81
79
  fail "ActiveRel query methods are being deprecated and do not support Array (from|to)_class options. Current value: #{given_class}"
@@ -0,0 +1,39 @@
1
+ module Neo4j
2
+ module ClassArguments
3
+ class << self
4
+ INVALID_CLASS_ARGUMENT_ERROR = 'option must by String, Symbol, false, nil, or an Array of Symbols/Strings'
5
+
6
+ def valid_argument?(class_argument)
7
+ [NilClass, String, Symbol, FalseClass].include?(class_argument.class) ||
8
+ (class_argument.is_a?(Array) && class_argument.all? { |c| [Symbol, String].include?(c.class) })
9
+ end
10
+
11
+ def validate_argument!(class_argument, context)
12
+ return if valid_argument?(class_argument)
13
+
14
+ fail ArgumentError, "#{context} #{INVALID_CLASS_ARGUMENT_ERROR} (was #{class_argument.inspect})"
15
+ end
16
+
17
+ def active_node_model?(class_constant)
18
+ class_constant.included_modules.include?(Neo4j::ActiveNode)
19
+ end
20
+
21
+ def constantize_argument(class_argument)
22
+ case class_argument
23
+ when 'any', :any, false, nil
24
+ nil
25
+ when Array
26
+ class_argument.map(&method(:constantize_argument))
27
+ else
28
+ class_argument.to_s.constantize.tap do |class_constant|
29
+ if !active_node_model?(class_constant)
30
+ fail ArgumentError, "#{class_constant} is not an ActiveNode model"
31
+ end
32
+ end
33
+ end
34
+ rescue NameError
35
+ raise ArgumentError, "Could not find class: #{class_argument}"
36
+ end
37
+ end
38
+ end
39
+ end
data/lib/neo4j/railtie.rb CHANGED
@@ -30,7 +30,7 @@ module Neo4j
30
30
 
31
31
  return if !cfg.sessions.empty?
32
32
 
33
- cfg.sessions << {type: cfg.session_type, path: cfg.session_path, options: cfg.session_options}
33
+ cfg.sessions << {type: cfg.session_type, path: cfg.session_path, options: cfg.session_options.merge(default: true)}
34
34
  end
35
35
 
36
36
  def setup_config_defaults!(cfg)
@@ -42,7 +42,7 @@ module Neo4j
42
42
 
43
43
  def config_data
44
44
  @config_data ||= if yaml_path
45
- HashWithIndifferentAccess.new(YAML.load(yaml_path.read)[Rails.env])
45
+ HashWithIndifferentAccess.new(YAML.load(ERB.new(yaml_path.read).result)[Rails.env])
46
46
  else
47
47
  {}
48
48
  end
data/lib/neo4j/shared.rb CHANGED
@@ -33,13 +33,6 @@ module Neo4j
33
33
  def self.i18n_scope
34
34
  :neo4j
35
35
  end
36
-
37
- def self.inherited(other)
38
- attributes.each_pair do |k, v|
39
- other.inherit_property k.to_sym, v.clone, declared_properties[k].options
40
- end
41
- super
42
- end
43
36
  end
44
37
 
45
38
  def declared_properties
@@ -0,0 +1,23 @@
1
+ module Neo4j
2
+ module Shared
3
+ module Marshal
4
+ extend ActiveSupport::Concern
5
+
6
+ def marshal_dump
7
+ marshal_instance_variables.map(&method(:instance_variable_get))
8
+ end
9
+
10
+ def marshal_load(array)
11
+ marshal_instance_variables.zip(array).each do |var, value|
12
+ instance_variable_set(var, value)
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ def marshal_instance_variables
19
+ self.class::MARSHAL_INSTANCE_VARIABLES
20
+ end
21
+ end
22
+ end
23
+ end
@@ -37,6 +37,29 @@ module Neo4j::Shared
37
37
  props_for_db(changed_props)
38
38
  end
39
39
 
40
+ # Increments a numeric attribute by a centain amount
41
+ # @param [Symbol, String] name of the attribute to increment
42
+ # @param [Integer, Float] amount to increment
43
+ def increment(attribute, by = 1)
44
+ self[attribute] ||= 0
45
+ self[attribute] += by
46
+ self
47
+ end
48
+
49
+ # Convenience method to increment numeric attribute and #save at the same time
50
+ # @param [Symbol, String] name of the attribute to increment
51
+ # @param [Integer, Float] amount to increment
52
+ def increment!(attribute, by = 1)
53
+ increment(attribute, by).update_attribute(attribute, self[attribute])
54
+ end
55
+
56
+ # Increments concurrently a numeric attribute by a centain amount
57
+ # @param [Symbol, String] name of the attribute to increment
58
+ # @param [Integer, Float] amount to increment
59
+ def concurrent_increment!(_attribute, _by = 1)
60
+ fail 'not_implemented'
61
+ end
62
+
40
63
  # Convenience method to set attribute and #save at the same time
41
64
  # @param [Symbol, String] attribute of the attribute to update
42
65
  # @param [Object] value to set
@@ -166,6 +189,19 @@ module Neo4j::Shared
166
189
  end
167
190
  end
168
191
 
192
+ protected
193
+
194
+ def increment_by_query!(match_query, attribute, by, element_name = :n)
195
+ new_attribute = match_query.with(element_name)
196
+ .set("#{element_name}.`#{attribute}` = COALESCE(#{element_name}.`#{attribute}`, 0) + {by}")
197
+ .params(by: by).limit(1)
198
+ .pluck("#{element_name}.`#{attribute}`").first
199
+ return false unless new_attribute
200
+ self[attribute] = new_attribute
201
+ changed_attributes.delete(attribute)
202
+ true
203
+ end
204
+
169
205
  private
170
206
 
171
207
  def props_for_db(props_hash)
@@ -27,7 +27,7 @@ module Neo4j::Shared
27
27
  # It calls an init method in active_attr that has a very negative impact on performance.
28
28
  def initialize(attributes = nil)
29
29
  attributes = process_attributes(attributes)
30
- @relationship_props = {} # self.class.extract_association_attributes!(attributes)
30
+ @relationship_props = self.class.extract_association_attributes!(attributes)
31
31
  modded_attributes = inject_defaults!(attributes)
32
32
  validate_attributes!(modded_attributes)
33
33
  writer_method_props = extract_writer_methods!(modded_attributes)
@@ -132,6 +132,13 @@ module Neo4j::Shared
132
132
 
133
133
  def_delegators :declared_properties, :serialized_properties, :serialized_properties=, :serialize, :declared_property_defaults
134
134
 
135
+ def inherited(other)
136
+ self.declared_properties.registered_properties.each_pair do |prop_key, prop_def|
137
+ other.property(prop_key, prop_def.options)
138
+ end
139
+ super
140
+ end
141
+
135
142
  # Defines a property on the class
136
143
  #
137
144
  # See active_attr gem for allowed options, e.g which type
data/lib/neo4j/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Neo4j
2
- VERSION = '6.0.9'
2
+ VERSION = '6.1.0'
3
3
  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: 6.0.9
4
+ version: 6.1.0
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: 2016-05-27 00:00:00.000000000 Z
11
+ date: 2016-01-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: orm_adapter
@@ -268,6 +268,7 @@ files:
268
268
  - lib/neo4j/active_rel/related_node.rb
269
269
  - lib/neo4j/active_rel/types.rb
270
270
  - lib/neo4j/active_rel/validations.rb
271
+ - lib/neo4j/class_arguments.rb
271
272
  - lib/neo4j/config.rb
272
273
  - lib/neo4j/core/query.rb
273
274
  - lib/neo4j/errors.rb
@@ -284,6 +285,7 @@ files:
284
285
  - lib/neo4j/shared/filtered_hash.rb
285
286
  - lib/neo4j/shared/identity.rb
286
287
  - lib/neo4j/shared/initialize.rb
288
+ - lib/neo4j/shared/marshal.rb
287
289
  - lib/neo4j/shared/persistence.rb
288
290
  - lib/neo4j/shared/property.rb
289
291
  - lib/neo4j/shared/property/default_property.rb