activegraph 12.0.0.beta.5 → 12.0.0.beta.7

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: 1d874584342339574829e1049d3b50075283ce6811e09156408a8e6845a3646e
4
- data.tar.gz: 56670037e70309d62db283a165691576af3137c3c1632fd9cdb96f4c9fb087c5
3
+ metadata.gz: 855f60d7bca8cec018819f65c0765be6002683af5617b3ec2e81b8c0cc5559e0
4
+ data.tar.gz: 06261c803fc0c5ed98d7b32b4bb621f7d2a239b8519c7f23e9c2c84458018271
5
5
  SHA512:
6
- metadata.gz: 8b1e932ec561196a75ec02f84a9d715b4ff251b039a0761c97d4bbc21931bb5086c54b712d5cccdbf3efd9d1943a4287e84893eec5dea5aeb283e4d97572120b
7
- data.tar.gz: fede28ced764c0e9cdac7479464a6ebba25bb26bdaac05c00cdd6150596fdbee228a4253685165981b339807ed12e103c7d1fa80a97eb169d56cc216cc55f75b
6
+ metadata.gz: d815973f66662ea91c56b12c0bde8cc5ae17ce5df727c19f735397cce96e4b4549dcda7a1c84fd26dfe645b4ac0602a303a1cd4e2e2aecb33801d7d8d462e4fb
7
+ data.tar.gz: 9e3bf57529430fad4cfb4332bc48f497bf19f17ade7dae94f1047e9a26d953a74b04f157223b1a382a0f07b7422b4f018e47a1bdd60d6dc964f607060e2636d3
data/CHANGELOG.md CHANGED
@@ -3,6 +3,25 @@ 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
+ ## [12.0.0.beta.7] (2026-03-19)
7
+
8
+ ### Fixed
9
+ - Improved rollback handling in nested transactions to ensure the result of the block is returned even when a rollback is triggered.
10
+
11
+ ## [12.0.0.beta.6] 2026-03-18
12
+
13
+ ## Added
14
+
15
+ - reworked rollback handling, using `ActiveGraph::Rollback` exception
16
+ - bumped required ruby version to `>= 3.4`
17
+ - bumped `neo4j-ruby-driver` dependency to `>= 6.0.3.alpha.0`
18
+ - updated CI to test against ActiveRecord 7.1, 7.2, 8.0, 8.1
19
+ - updated CI to use Java 21 for JRuby
20
+ - internal: switched from `write_transaction`/`read_transaction` to `execute_write`/`execute_read` in line with new driver API
21
+ - internal: replaced `last_bookmark` with `last_bookmarks`
22
+ - internal: removed `sorted_set` and `neo4j-rake_tasks` dependencies
23
+ - internal: added `benchmark` as a dependency
24
+
6
25
  ## [12.0.0.beta.1] 2024-01-01
7
26
 
8
27
  ## Added
data/activegraph.gemspec CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
7
7
  s.name = 'activegraph'
8
8
  s.version = ActiveGraph::VERSION
9
9
 
10
- s.required_ruby_version = '>= 3.1'
10
+ s.required_ruby_version = '>= 3.4'
11
11
 
12
12
  s.authors = 'Andreas Ronge, Brian Underwood, Chris Grigg, Heinrich Klobuczek'
13
13
  s.email = 'andreas.ronge@gmail.com, public@brian-underwood.codes, chris@subvertallmedia.com, heinrich@mail.com'
@@ -31,15 +31,15 @@ DESCRIPTION
31
31
  }
32
32
 
33
33
  s.add_dependency('activemodel')
34
+ s.add_dependency('benchmark')
34
35
  s.add_dependency('i18n', '!= 1.8.8') # https://github.com/jruby/jruby/issues/6547
35
- s.add_dependency('neo4j-ruby-driver', '>= 5.7.0.alpha.3')
36
+ s.add_dependency('neo4j-ruby-driver', '>= 6.0.3.alpha.0')
36
37
  s.add_dependency('orm_adapter', '>= 0.5.0')
37
- s.add_dependency('sorted_set')
38
38
  s.add_development_dependency('guard')
39
39
  s.add_development_dependency('guard-rspec')
40
40
  s.add_development_dependency('guard-rubocop')
41
- s.add_development_dependency('neo4j-rake_tasks', '>= 0.3.0')
42
41
  s.add_development_dependency('os')
42
+ s.add_development_dependency('ostruct')
43
43
  s.add_development_dependency('pry')
44
44
  s.add_development_dependency('railties', '>= 7')
45
45
  s.add_development_dependency('rake')
@@ -11,12 +11,14 @@ module ActiveGraph
11
11
  MIGRATION_RUNNING = {up: 'running', down: 'reverting'}.freeze
12
12
  MIGRATION_DONE = {up: 'migrated', down: 'reverted'}.freeze
13
13
 
14
+ attr_reader :up_versions
15
+
14
16
  def initialize(options = {})
15
17
  @silenced = options[:silenced] || !!ENV['MIGRATIONS_SILENCED']
16
18
  label = SchemaMigration.mapped_label
17
19
  label.create_constraint(:migration_id, type: :unique) unless label.constraint?(:migration_id)
18
- @schema_migrations = SchemaMigration.all.to_a
19
- @up_versions = SortedSet.new(@schema_migrations.map(&:migration_id))
20
+ @schema_migrations = SchemaMigration.order(:migration_id).to_a
21
+ @up_versions = @schema_migrations.map(&:migration_id)
20
22
  end
21
23
 
22
24
  def all
@@ -43,7 +45,7 @@ module ActiveGraph
43
45
 
44
46
  def rollback(steps)
45
47
  handle_incomplete_states!
46
- @up_versions.to_a.reverse.first(steps).each do |version|
48
+ @up_versions.reverse.first(steps).each do |version|
47
49
  down(version)
48
50
  end
49
51
  end
@@ -52,10 +54,6 @@ module ActiveGraph
52
54
  all_migrations.select { |migration| !up?(migration) }
53
55
  end
54
56
 
55
- def complete_migration_versions
56
- @schema_migrations.map(&:migration_id)
57
- end
58
-
59
57
  def mark_versions_as_complete(versions)
60
58
  ActiveGraph::Base.new_query
61
59
  .with('$versions AS versions').params(versions: versions).break
@@ -158,7 +156,7 @@ MSG
158
156
  end
159
157
 
160
158
  def incomplete_states
161
- @incomplete_states ||= SortedSet.new(@schema_migrations.select(&:incomplete?))
159
+ @incomplete_states ||= @schema_migrations.select(&:incomplete?)
162
160
  end
163
161
 
164
162
  delegate :migration_files, :migration_files_versions, to: :class
@@ -5,10 +5,6 @@ module ActiveGraph
5
5
  id_property :migration_id
6
6
  property :migration_id, type: String
7
7
  property :incomplete, type: Boolean
8
-
9
- def <=>(other)
10
- migration_id <=> other.migration_id
11
- end
12
8
  end
13
9
  end
14
10
  end
@@ -65,7 +65,7 @@ COMMENT
65
65
  schema_data = ActiveGraph::Migrations::Schema.fetch_schema_data
66
66
 
67
67
  runner = ActiveGraph::Migrations::Runner.new
68
- schema_data[:versions] = runner.complete_migration_versions.sort
68
+ schema_data[:versions] = runner.up_versions
69
69
 
70
70
  FileUtils.mkdir_p(File.dirname(SCHEMA_YAML_PATH))
71
71
  File.open(SCHEMA_YAML_PATH, 'w') { |file| file << SCHEMA_YAML_COMMENT + schema_data.to_yaml }
@@ -1,16 +1,19 @@
1
1
  module ActiveGraph
2
2
  module Transaction
3
3
  def rollback
4
- super
5
4
  @rolled_back = true
6
5
  end
7
6
 
7
+ def check_rollback
8
+ fail ActiveGraph::Rollback if @rolled_back
9
+ end
10
+
8
11
  def after_commit(&block)
9
12
  after_commit_registry << block
10
13
  end
11
14
 
12
15
  def apply_callbacks
13
- after_commit_registry.each(&:call) unless @rolled_back
16
+ after_commit_registry.each(&:call)
14
17
  end
15
18
 
16
19
  private
@@ -5,7 +5,7 @@ module ActiveGraph
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do
8
- thread_mattr_accessor :explicit_session, :tx, :last_bookmark
8
+ thread_mattr_accessor :explicit_session, :tx, :last_bookmarks
9
9
  end
10
10
 
11
11
  class_methods do
@@ -14,48 +14,54 @@ module ActiveGraph
14
14
  self.explicit_session = session
15
15
  yield session
16
16
  ensure
17
- self.last_bookmark = session.last_bookmark
17
+ self.last_bookmarks = session.last_bookmarks
18
18
  end
19
19
  end
20
20
 
21
21
  def write_transaction(**config, &block)
22
- send_transaction(:write_transaction, **config, &block)
22
+ send_transaction(:execute_write, **config, &block)
23
23
  end
24
24
 
25
25
  def read_transaction(**config, &block)
26
- send_transaction(:read_transaction, **config, &block)
26
+ send_transaction(:execute_read, **config, &block)
27
27
  end
28
28
 
29
29
  alias transaction write_transaction
30
30
 
31
31
  def lock_node(node)
32
- node.as(:n).query.remove('n._AGLOCK_').exec if tx&.open?
32
+ node.as(:n).query.remove('n._AGLOCK_').exec if tx
33
33
  end
34
34
 
35
35
  private
36
36
 
37
37
  def send_transaction(method, **config, &block)
38
- return yield tx if tx&.open?
38
+ return yield tx if tx
39
39
  return run_transaction_work(explicit_session, method, **config, &block) if explicit_session&.open?
40
40
  driver.session do |session|
41
41
  run_transaction_work(session, method, **config, &block)
42
42
  end
43
43
  end
44
44
 
45
- def run_transaction_work(session, method, **config, &block)
46
- implicit = config.delete(:implicit)
45
+ def run_transaction_work(session, method, implicit: false, **config, &block)
46
+ result = nil
47
47
  session.send(method, **config) do |tx|
48
48
  self.tx = tx
49
- block.call(tx).tap do |result|
50
- if implicit &&
51
- [Core::Result, ActiveGraph::Node::Query::QueryProxy, ActiveGraph::Core::Query]
52
- .any?(&result.method(:is_a?))
53
- result.store
54
- end
49
+ (result = block.call(tx)).tap do
50
+ store(it) if implicit
51
+ tx.check_rollback
55
52
  end
56
53
  end.tap { tx.apply_callbacks }
57
54
  rescue ActiveGraph::Rollback
58
55
  # rollbacks are silently swallowed
56
+ result
57
+ ensure
58
+ self.tx = nil
59
+ end
60
+
61
+ def store(result)
62
+ if [Core::Result, ActiveGraph::Node::Query::QueryProxy, ActiveGraph::Core::Query].any?(&result.method(:is_a?))
63
+ result.store
64
+ end
59
65
  end
60
66
  end
61
67
  end
@@ -1,3 +1,3 @@
1
1
  module ActiveGraph
2
- VERSION = '12.0.0.beta.5'
2
+ VERSION = '12.0.0.beta.7'
3
3
  end
data/lib/active_graph.rb CHANGED
@@ -19,7 +19,6 @@ require 'neo4j/driver'
19
19
  require 'orm_adapter'
20
20
  require 'rake'
21
21
  require 'set'
22
- require 'sorted_set'
23
22
  require 'yaml'
24
23
 
25
24
  loader = Zeitwerk::Loader.for_gem
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activegraph
3
3
  version: !ruby/object:Gem::Version
4
- version: 12.0.0.beta.5
4
+ version: 12.0.0.beta.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Ronge, Brian Underwood, Chris Grigg, Heinrich Klobuczek
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-01-13 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: activemodel
@@ -24,61 +24,61 @@ dependencies:
24
24
  - !ruby/object:Gem::Version
25
25
  version: '0'
26
26
  - !ruby/object:Gem::Dependency
27
- name: i18n
27
+ name: benchmark
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
- - - "!="
30
+ - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 1.8.8
32
+ version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "!="
37
+ - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: 1.8.8
39
+ version: '0'
40
40
  - !ruby/object:Gem::Dependency
41
- name: neo4j-ruby-driver
41
+ name: i18n
42
42
  requirement: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - ">="
44
+ - - "!="
45
45
  - !ruby/object:Gem::Version
46
- version: 5.7.0.alpha.3
46
+ version: 1.8.8
47
47
  type: :runtime
48
48
  prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - ">="
51
+ - - "!="
52
52
  - !ruby/object:Gem::Version
53
- version: 5.7.0.alpha.3
53
+ version: 1.8.8
54
54
  - !ruby/object:Gem::Dependency
55
- name: orm_adapter
55
+ name: neo4j-ruby-driver
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - ">="
59
59
  - !ruby/object:Gem::Version
60
- version: 0.5.0
60
+ version: 6.0.3.alpha.0
61
61
  type: :runtime
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - ">="
66
66
  - !ruby/object:Gem::Version
67
- version: 0.5.0
67
+ version: 6.0.3.alpha.0
68
68
  - !ruby/object:Gem::Dependency
69
- name: sorted_set
69
+ name: orm_adapter
70
70
  requirement: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - ">="
73
73
  - !ruby/object:Gem::Version
74
- version: '0'
74
+ version: 0.5.0
75
75
  type: :runtime
76
76
  prerelease: false
77
77
  version_requirements: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - ">="
80
80
  - !ruby/object:Gem::Version
81
- version: '0'
81
+ version: 0.5.0
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: guard
84
84
  requirement: !ruby/object:Gem::Requirement
@@ -122,21 +122,21 @@ dependencies:
122
122
  - !ruby/object:Gem::Version
123
123
  version: '0'
124
124
  - !ruby/object:Gem::Dependency
125
- name: neo4j-rake_tasks
125
+ name: os
126
126
  requirement: !ruby/object:Gem::Requirement
127
127
  requirements:
128
128
  - - ">="
129
129
  - !ruby/object:Gem::Version
130
- version: 0.3.0
130
+ version: '0'
131
131
  type: :development
132
132
  prerelease: false
133
133
  version_requirements: !ruby/object:Gem::Requirement
134
134
  requirements:
135
135
  - - ">="
136
136
  - !ruby/object:Gem::Version
137
- version: 0.3.0
137
+ version: '0'
138
138
  - !ruby/object:Gem::Dependency
139
- name: os
139
+ name: ostruct
140
140
  requirement: !ruby/object:Gem::Requirement
141
141
  requirements:
142
142
  - - ">="
@@ -424,14 +424,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
424
424
  requirements:
425
425
  - - ">="
426
426
  - !ruby/object:Gem::Version
427
- version: '3.1'
427
+ version: '3.4'
428
428
  required_rubygems_version: !ruby/object:Gem::Requirement
429
429
  requirements:
430
430
  - - ">="
431
431
  - !ruby/object:Gem::Version
432
432
  version: '0'
433
433
  requirements: []
434
- rubygems_version: 3.6.2
434
+ rubygems_version: 4.0.3
435
435
  specification_version: 4
436
436
  summary: A graph database for Ruby
437
437
  test_files: []