activegraph 10.0.2 → 10.2.0.beta.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: da2d8a7259add3643cf674f25c93580424d614791b68394c6ebd51e936828140
4
- data.tar.gz: 7c6987932e0bb59d96a1233d51a20748fee03d585cc2fa5dcd45111e17b8fb04
3
+ metadata.gz: c01920a2ca46982b8de50984fbd0a07210ef483a4b933f0de9f4b9c3caa9bb1e
4
+ data.tar.gz: 1a3c0f858a7653a1a30497b5df0ef552a297efb66d6f5ff56ec545a81b666be1
5
5
  SHA512:
6
- metadata.gz: 97733e8f86febdfd278a75cbef2561074d14d7d545ce98474f61b8b395a9972e04643b624c0f87b9c132493a316cb8b0a7011e28dc27d918c7bc787681b57b84
7
- data.tar.gz: b1529b3c7e256ecef44a7006691593fc0a7a8f1e7b7e6de60fb5d22bae6b92a91307d4753d4f9b12fec0a8853df3369f0e1479b7945c035b1f550f9dc7053b64
6
+ metadata.gz: e63aa9728efe64bb40bd0b650d6485af7ee9e814b951ee30d6862ef2821556891d8d95cb9d637711a35f18e5d98347b8913c1d42f51c93d4ee694fee873f440e
7
+ data.tar.gz: 1632af7ded55530fa57b22754a0a156aa3662f61c8cbd962e87753971bf11bf6fdf345d897b80b7537bb61705c5cf5e69f50afc41b48b5c7c64ff4ebe3590f9a
data/CHANGELOG.md CHANGED
@@ -3,6 +3,19 @@ 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
+ ## [10.1.1] 2021-11-05
7
+
8
+ ## Fixed
9
+
10
+ - Fixed issue where some has_one relationships where incorrectly deleted disregarding direction
11
+ - It changes the relationship length assignment in query proxy eagerloading module to be consistent with query proxy relationship length syntax.
12
+
13
+ ## [10.1.0] 2021-02-05
14
+
15
+ ## Added
16
+
17
+ - support for ruby 3.0.0
18
+
6
19
  ## [10.0.2] 2020-12-08
7
20
 
8
21
  ## Fixed
data/Gemfile CHANGED
@@ -7,7 +7,7 @@ gemspec
7
7
  gem 'listen', '< 3.1'
8
8
 
9
9
  active_model_version = ENV['ACTIVE_MODEL_VERSION']
10
- gem 'activemodel', "~> #{active_model_version}" if active_model_version
10
+ gem 'activemodel', "~> #{active_model_version}" if active_model_version&.length&.positive?
11
11
 
12
12
  group 'test' do
13
13
  gem 'coveralls', require: false
@@ -15,7 +15,6 @@ group 'test' do
15
15
  gem 'codecov', require: false
16
16
  gem 'simplecov', require: false
17
17
  gem 'simplecov-html', require: false
18
- gem 'rspec', '~> 3.4'
19
18
  gem 'its'
20
19
  gem 'test-unit'
21
20
  gem 'colored'
data/README.md CHANGED
@@ -45,31 +45,33 @@ Neo4j.rb v4.1.0 was released in January of 2015. Its changes are outlined [here]
45
45
 
46
46
  ## Neo4j version support
47
47
 
48
- | **Neo4j Version** | v2.x | v3.x | >= v4.x | >= 7.0.3 | activegraph 10.0 |
49
- |-------------------|------|-------|---------|----------|------------------|
50
- | 1.9.x | Yes | No | No | No | No |
51
- | 2.0.x | No | Yes | No | No | No |
52
- | 2.1.x | No | Yes | Yes * | Yes | No |
53
- | 2.2.x | No | No | Yes | Yes | No |
54
- | 2.3.x | No | No | Yes | Yes | No |
55
- | 3.0, 3.1, 3.3 | No | No | No | Yes | No |
56
- | 3.4, 3.5 | No | No | No | Yes | Yes |
57
- | 4.0 | No | No | No | No | Yes |
58
- | 4.1 | No | No | No | No | No |
48
+ | **Neo4j Version** | v2.x | v3.x | >= v4.x | >= 7.0.3 | activegraph 10.0 | activegraph 11.0.0.beta.4-java |
49
+ |-------------------|------|-------|---------|----------|------------------|--------------------------------|
50
+ | 1.9.x | Yes | No | No | No | No | No
51
+ | 2.0.x | No | Yes | No | No | No | No
52
+ | 2.1.x | No | Yes | Yes * | Yes | No | No
53
+ | 2.2.x | No | No | Yes | Yes | No | No
54
+ | 2.3.x | No | No | Yes | Yes | No | No
55
+ | 3.0, 3.1, 3.3 | No | No | No | Yes | No | No
56
+ | 3.4 | No | No | No | Yes | Yes | No
57
+ | 3.5 | No | No | No | Yes | Yes | Yes
58
+ | 4.0 | No | No | No | No | Yes | Yes
59
+ | 4.1 | No | No | No | No | No | Yes
60
+ | 4.2 | No | No | No | No | No | Yes
59
61
 
60
62
  `*` Neo4j.rb >= 4.x doesn't support Neo4j versions before 2.1.5. To use 2.1.x you should upgrade to a version >= 2.1.5
61
63
 
62
64
  ## Neo4j feature support
63
65
 
64
- | **Neo4j Feature** | v2.x | v3.x | >= v4.x | >= 8.x | activegraph 10.0 |
65
- |----------------------------|--------|------|---------|--------|------------------|
66
- | Bolt Protocol | No | No | No | Yes | Yes |
67
- | Auth | No | No | Yes | Yes | Yes |
68
- | Remote Cypher | Yes | Yes | Yes | Yes | No |
69
- | Transactions | Yes | Yes | Yes | Yes | Yes |
70
- | High Availability | No | Yes | Yes | Yes | Yes |
71
- | Causal Cluster | No | No | No | No | Yes |
72
- | Embedded JVM support | Yes | Yes | Yes | Yes | via bolt only |
66
+ | **Neo4j Feature** | v2.x | v3.x | >= v4.x | >= 8.x | >= activegraph 10.0 |
67
+ |----------------------------|--------|------|---------|--------|---------------------|
68
+ | Bolt Protocol | No | No | No | Yes | Yes |
69
+ | Auth | No | No | Yes | Yes | Yes |
70
+ | Remote Cypher | Yes | Yes | Yes | Yes | No |
71
+ | Transactions | Yes | Yes | Yes | Yes | Yes |
72
+ | High Availability | No | Yes | Yes | Yes | Yes |
73
+ | Causal Cluster | No | No | No | No | Yes |
74
+ | Embedded JVM support | Yes | Yes | Yes | Yes | via bolt only |
73
75
 
74
76
  ## Documentation
75
77
 
data/activegraph.gemspec CHANGED
@@ -32,13 +32,14 @@ DESCRIPTION
32
32
 
33
33
  s.add_dependency('activemodel', '>= 4.0')
34
34
  s.add_dependency('activesupport', '>= 4.0')
35
- s.add_dependency('i18n', '!= 1.3.0') # version 1.3.0 introduced a bug with `symbolize_key`
35
+ s.add_dependency('i18n', '!= 1.8.8') # https://github.com/jruby/jruby/issues/6547
36
36
  s.add_dependency('orm_adapter', '~> 0.5.0')
37
+ s.add_dependency('sorted_set')
37
38
  s.add_development_dependency('guard')
38
39
  s.add_development_dependency('guard-rspec')
39
40
  s.add_development_dependency('guard-rubocop')
40
41
  s.add_development_dependency('neo4j-rake_tasks', '>= 0.3.0')
41
- s.add_development_dependency("neo4j-#{ENV['driver'] == 'java' ? 'java' : 'ruby'}-driver", '~> 1.7.0')
42
+ s.add_development_dependency("neo4j-#{ENV['driver'] == 'java' ? 'java' : 'ruby'}-driver", '~> 1.7.4')
42
43
  s.add_development_dependency('os')
43
44
  s.add_development_dependency('pry')
44
45
  s.add_development_dependency('railties', '>= 4.0')
@@ -46,4 +47,5 @@ DESCRIPTION
46
47
  s.add_development_dependency('rubocop', '>= 0.56.0')
47
48
  s.add_development_dependency('yard')
48
49
  s.add_development_dependency('dryspec')
50
+ s.add_development_dependency('rspec', '< 3.10') # Cannot proxy frozen objects
49
51
  end
@@ -2,28 +2,32 @@ module ActiveGraph
2
2
  module Core
3
3
  module Schema
4
4
  def version
5
- result = query('CALL dbms.components()', {}, skip_instrumentation: true)
6
-
7
5
  # BTW: community / enterprise could be retrieved via `result.first.edition`
8
- result.first[:versions][0]
6
+ query('CALL dbms.components()', {}, skip_instrumentation: true).first[:versions][0]
9
7
  end
10
8
 
11
9
  def indexes
12
- result = query('CALL db.indexes()', {}, skip_instrumentation: true)
13
-
14
- result.map do |row|
15
- { type: row[:type].to_sym, label: label(result, row), properties: properties(row), state: row[:state].to_sym }
10
+ raw_indexes do |keys, result|
11
+ result.map do |row|
12
+ { type: row[:type].to_sym, label: label(keys, row), properties: properties(row),
13
+ state: row[:state].to_sym }
14
+ end
16
15
  end
17
16
  end
18
17
 
19
18
  def constraints
20
- result = query('CALL db.indexes()', {}, skip_instrumentation: true)
21
-
22
- result.select(&method(v4?(result) ? :v4_filter : :v3_filter)).map do |row|
23
- { type: :uniqueness, label: label(result, row), properties: properties(row) }
19
+ raw_indexes do |keys, result|
20
+ result.select(&method(v4?(keys) ? :v4_filter : :v3_filter)).map do |row|
21
+ { type: :uniqueness, label: label(keys, row), properties: properties(row) }
22
+ end
24
23
  end
25
24
  end
26
25
 
26
+ def raw_indexes
27
+ result = query('CALL db.indexes()', {}, skip_instrumentation: true)
28
+ yield result.keys, result.reject { |row| row[:type] == 'LOOKUP' }
29
+ end
30
+
27
31
  private
28
32
 
29
33
  def v4_filter(row)
@@ -34,22 +38,22 @@ module ActiveGraph
34
38
  row[:type] == 'node_unique_property'
35
39
  end
36
40
 
37
- def label(result, row)
38
- if v34?(result)
41
+ def label(keys, row)
42
+ if v34?(keys)
39
43
  row[:label]
40
44
  else
41
- (v4?(result) ? row[:labelsOrTypes] : row[:tokenNames]).first
45
+ (v4?(keys) ? row[:labelsOrTypes] : row[:tokenNames]).first
42
46
  end.to_sym
43
47
  end
44
48
 
45
- def v4?(result)
49
+ def v4?(keys)
46
50
  return @v4 unless @v4.nil?
47
- @v4 = result.keys.include?(:labelsOrTypes)
51
+ @v4 = keys.include?(:labelsOrTypes)
48
52
  end
49
53
 
50
- def v34?(result)
54
+ def v34?(keys)
51
55
  return @v34 unless @v34.nil?
52
- @v34 = result.keys.include?(:label)
56
+ @v34 = keys.include?(:label)
53
57
  end
54
58
 
55
59
  def properties(row)
@@ -57,9 +57,13 @@ module ActiveGraph
57
57
  end
58
58
 
59
59
  def handle_migration_error!(e)
60
- fail e unless e.message =~ /Cannot perform data updates in a transaction that has performed schema updates./
61
- fail MigrationError,
62
- "#{e.message}. Please add `disable_transactions!` in your migration file."
60
+ if e.is_a?(Neo4j::Driver::Exceptions::ClientException) &&
61
+ e.code == 'Neo.ClientError.Transaction.ForbiddenDueToTransactionType' ||
62
+ e.message =~ /Cannot perform data updates in a transaction that has performed schema updates./
63
+ fail MigrationError, "#{e.message}. Please add `disable_transactions!` in your migration file."
64
+ else
65
+ fail e
66
+ end
63
67
  end
64
68
 
65
69
  def migration_transaction(&block)
@@ -1,15 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sorted_set'
4
+
1
5
  module ActiveGraph
2
6
  module Migrations
3
7
  class Runner
4
- STATUS_TABLE_FORMAT = '%-10s %-20s %s'.freeze
5
- SEPARATOR = '--------------------------------------------------'.freeze
6
- FILE_MISSING = '**** file missing ****'.freeze
7
- STATUS_TABLE_HEADER = ['Status'.freeze, 'Migration ID'.freeze, 'Migration Name'.freeze].freeze
8
- UP_MESSAGE = 'up'.freeze
9
- DOWN_MESSAGE = 'down'.freeze
10
- INCOMPLETE_MESSAGE = 'incomplete'.freeze
11
- MIGRATION_RUNNING = {up: 'running'.freeze, down: 'reverting'.freeze}.freeze
12
- MIGRATION_DONE = {up: 'migrated'.freeze, down: 'reverted'.freeze}.freeze
8
+ STATUS_TABLE_FORMAT = '%-10s %-20s %s'
9
+ SEPARATOR = '--------------------------------------------------'
10
+ FILE_MISSING = '**** file missing ****'
11
+ STATUS_TABLE_HEADER = ['Status', 'Migration ID', 'Migration Name'].freeze
12
+ UP_MESSAGE = 'up'
13
+ DOWN_MESSAGE = 'down'
14
+ INCOMPLETE_MESSAGE = 'incomplete'
15
+ MIGRATION_RUNNING = {up: 'running', down: 'reverting'}.freeze
16
+ MIGRATION_DONE = {up: 'migrated', down: 'reverted'}.freeze
13
17
 
14
18
  def initialize(options = {})
15
19
  @silenced = options[:silenced] || !!ENV['MIGRATIONS_SILENCED']
@@ -253,8 +253,10 @@ module ActiveGraph::Node
253
253
 
254
254
  def relationship_corresponding_rel(relationship, direction, target_class)
255
255
  self.class.associations.find do |_key, assoc|
256
- assoc.relationship_class_name == relationship.class.name ||
257
- (assoc.relationship_type == relationship.type.to_sym && assoc.target_class == target_class && assoc.direction == direction)
256
+ assoc.direction == direction && (
257
+ assoc.relationship_class_name == relationship.class.name ||
258
+ (assoc.relationship_type == relationship.type.to_sym && assoc.target_class == target_class)
259
+ )
258
260
  end
259
261
  end
260
262
 
@@ -58,6 +58,7 @@ module ActiveGraph
58
58
  def process_string(str)
59
59
  head, rest = str.split('.', 2)
60
60
  k, length = head.split('*', -2)
61
+ length = {max: length} if length
61
62
  add_nested(k.to_sym, rest, length)
62
63
  end
63
64
 
@@ -68,7 +68,7 @@ module ActiveGraph
68
68
 
69
69
  def init_associations(node, element)
70
70
  element.each_key { |key| node.association_proxy(key).init_cache }
71
- node.association_proxy(element.name).init_cache if element.rel_length == ''
71
+ node.association_proxy(element.name).init_cache if element.rel_length && element.rel_length[:max] == ''
72
72
  end
73
73
 
74
74
  def cache_and_init(node, element)
@@ -157,14 +157,8 @@ module ActiveGraph
157
157
  end
158
158
 
159
159
  def relationship_part(association, path_name, rel_length)
160
- if rel_length
161
- rel_name = nil
162
- length = {max: rel_length}
163
- else
164
- rel_name = escape("#{path_name}_rel")
165
- length = nil
166
- end
167
- "#{association.arrow_cypher(rel_name, {}, false, false, length)}(#{escape(path_name)})"
160
+ rel_name = escape("#{path_name}_rel") unless rel_length
161
+ "#{association.arrow_cypher(rel_name, {}, false, false, rel_length)}(#{escape(path_name)})"
168
162
  end
169
163
 
170
164
  def chain
@@ -28,7 +28,7 @@ module ActiveGraph
28
28
  def validate_each(record, attribute, value)
29
29
  return unless found(record, attribute, value).exists?
30
30
 
31
- record.errors.add(attribute, :taken, options.except(:case_sensitive, :scope).merge(value: value))
31
+ record.errors.add(attribute, :taken, **options.except(:case_sensitive, :scope).merge(value: value))
32
32
  end
33
33
 
34
34
  def found(record, attribute, value)
@@ -1,3 +1,3 @@
1
1
  module ActiveGraph
2
- VERSION = '10.0.2'
2
+ VERSION = '10.2.0.beta.1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activegraph
3
3
  version: !ruby/object:Gem::Version
4
- version: 10.0.2
4
+ version: 10.2.0.beta.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Ronge, Brian Underwood, Chris Grigg, Heinrich Klobuczek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-09 00:00:00.000000000 Z
11
+ date: 2022-02-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "!="
46
46
  - !ruby/object:Gem::Version
47
- version: 1.3.0
47
+ version: 1.8.8
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "!="
53
53
  - !ruby/object:Gem::Version
54
- version: 1.3.0
54
+ version: 1.8.8
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: orm_adapter
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: 0.5.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: sorted_set
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: guard
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -128,14 +142,14 @@ dependencies:
128
142
  requirements:
129
143
  - - "~>"
130
144
  - !ruby/object:Gem::Version
131
- version: 1.7.0
145
+ version: 1.7.4
132
146
  type: :development
133
147
  prerelease: false
134
148
  version_requirements: !ruby/object:Gem::Requirement
135
149
  requirements:
136
150
  - - "~>"
137
151
  - !ruby/object:Gem::Version
138
- version: 1.7.0
152
+ version: 1.7.4
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: os
141
155
  requirement: !ruby/object:Gem::Requirement
@@ -234,6 +248,20 @@ dependencies:
234
248
  - - ">="
235
249
  - !ruby/object:Gem::Version
236
250
  version: '0'
251
+ - !ruby/object:Gem::Dependency
252
+ name: rspec
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - "<"
256
+ - !ruby/object:Gem::Version
257
+ version: '3.10'
258
+ type: :development
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - "<"
263
+ - !ruby/object:Gem::Version
264
+ version: '3.10'
237
265
  description: 'A Neo4j OGM (Object-Graph-Mapper) for Ruby heavily inspired by ActiveRecord.
238
266
 
239
267
  '
@@ -411,11 +439,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
411
439
  version: '2.5'
412
440
  required_rubygems_version: !ruby/object:Gem::Requirement
413
441
  requirements:
414
- - - ">="
442
+ - - ">"
415
443
  - !ruby/object:Gem::Version
416
- version: '0'
444
+ version: 1.3.1
417
445
  requirements: []
418
- rubygems_version: 3.1.2
446
+ rubygems_version: 3.3.3
419
447
  signing_key:
420
448
  specification_version: 4
421
449
  summary: A graph database for Ruby