semian 0.28.2 → 0.28.3

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: c31bef07157ffec7aeb634db462f832595897cf1fd562771fca73021e1757274
4
- data.tar.gz: e8d8f487a8696445beff26e6924b2672b247f57c959141be8825f2bec10969e7
3
+ metadata.gz: 65071f9b9f241c4306a81f24e696220928dd7fd42fe50f9664f51212af37be27
4
+ data.tar.gz: aea78d645e703f42516e8a507887184a85ef98d547312646f609d6d145c9c2ee
5
5
  SHA512:
6
- metadata.gz: a213874d4a487b36b672b2ddc5a6de6dc4959fb291931c93f0e365cb709de9af1e04756ae314d40a4d74ea6b50a96527aecab1ce77aee692f423ca5f1c17236d
7
- data.tar.gz: 8995c32426a6f817367ba642c7b780cdf367089b86105485a31f4ca001448ecbb3295844373ebe369de65f271abd83b9afbe0b1ab5ebdd175fc90dfe8c5fed3c
6
+ metadata.gz: f628d7359a24fe78fc5ae8885f81e181d1e1a6da1b2956079fdc19e48df63d78f76de29d0cf681ea8c9e6bfc8952b23ab69e86d7313a49628c52ed6b482b49b2
7
+ data.tar.gz: f166272364381bdc17db8bfc6bf4b62827ae0ac7c99803b1ab6617acc80244d0163dd2a54b7f704501fd4790135fa2f7fbc90b181a8f656d05ecbff83e9bc7c6
@@ -58,8 +58,26 @@ module Semian
58
58
  def execute_intent(intent)
59
59
  return super if self.class.query_allowlisted?(intent.processed_sql)
60
60
 
61
+ result = nil
62
+ delivered_error = nil
63
+
61
64
  acquire_semian_resource(adapter: semian_adapter_name, scope: :query) do
62
- super
65
+ result = super
66
+
67
+ # In Rails 8.2 execute_intent no longer raises errors. Instead, they are stored on the intent
68
+ # and handled later by the caller to better enable asynchronous execution. However, we need to raise
69
+ # any errors here to trip the circuit breaker. Then we can swallow the error and return the result for
70
+ # Rails to continue with.
71
+ if intent.respond_to?(:error)
72
+ delivered_error = intent.error
73
+ raise delivered_error if delivered_error
74
+ end
75
+ end
76
+ rescue => error
77
+ if error.equal?(delivered_error)
78
+ result
79
+ else
80
+ raise
63
81
  end
64
82
  end
65
83
  else
@@ -7,6 +7,7 @@ module ActiveRecord
7
7
  module ConnectionAdapters
8
8
  class PostgreSQLAdapter
9
9
  ActiveRecord::ActiveRecordError.include(::Semian::AdapterError)
10
+ ::PG::ConnectionBad.include(::Semian::AdapterError)
10
11
 
11
12
  class SemianError < ConnectionNotEstablished
12
13
  def initialize(semian_identifier, *args)
@@ -40,6 +41,10 @@ module Semian
40
41
 
41
42
  private
42
43
 
44
+ def resource_exceptions
45
+ super + [::PG::ConnectionBad]
46
+ end
47
+
43
48
  def semian_adapter_name = :postgresql_adapter
44
49
 
45
50
  def semian_adapter_default_port = 5432
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Semian
4
- VERSION = "0.28.2"
4
+ VERSION = "0.28.3"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: semian
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.28.2
4
+ version: 0.28.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Francis
@@ -100,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
100
  - !ruby/object:Gem::Version
101
101
  version: '0'
102
102
  requirements: []
103
- rubygems_version: 4.0.11
103
+ rubygems_version: 4.0.19
104
104
  specification_version: 4
105
105
  summary: Bulkheading for Ruby with SysV semaphores
106
106
  test_files: []