activegraph 10.0.2 → 10.2.0.beta.1

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
  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