Class: TrilogyAurora::Client
- Inherits:
-
Object
- Object
- TrilogyAurora::Client
- Defined in:
- lib/trilogy_aurora/client.rb
Overview
Trilogy Aurora wrapper
Instance Attribute Summary collapse
-
#trilogy ⇒ Object
readonly
Returns the value of attribute trilogy.
Class Method Summary collapse
-
.const_defined? ⇒ Boolean
Delegate ‘const_defined?` to TrilogyAurora::Trilogy.
-
.const_missing ⇒ Object
Delegate const reference to TrilogyAurora::Trilogy.
-
.method_missing ⇒ Object
Delegate class method calls to TrilogyAurora::Trilogy.
-
.respond_to_missing? ⇒ Boolean
Delegate ‘respond_to?` to TrilogyAurora::Trilogy.
Instance Method Summary collapse
-
#disconnect! ⇒ Object
Close TrilogyAurora::Trilogy connection.
-
#initialize(options = {}) ⇒ Client
constructor
A new instance of Client.
-
#method_missing ⇒ Object
Delegate instance method calls to TrilogyAurora::Trilogy instance.
-
#query ⇒ Object
Execute a TrilogyAurora::Trilogy query, disconnecting or reconnecting after read-only errors based on initialization options.
-
#reconnect! ⇒ Object
Disconnect and re-initialize TrilogyAurora::Trilogy.
-
#respond_to_missing? ⇒ Boolean
Delegate ‘respond_to?` to TrilogyAurora::Trilogy instance.
Constructor Details
#initialize(options = {}) ⇒ Client
Returns a new instance of Client.
10 11 12 |
# File 'lib/trilogy_aurora/client.rb', line 10 def initialize( = {}) @trilogy = TrilogyAurora::Trilogy.new() end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing ⇒ Object
Delegate instance method calls to TrilogyAurora::Trilogy instance.
62 63 64 |
# File 'lib/trilogy_aurora/client.rb', line 62 def method_missing(...) trilogy.public_send(...) end |
Instance Attribute Details
#trilogy ⇒ Object (readonly)
Returns the value of attribute trilogy.
8 9 10 |
# File 'lib/trilogy_aurora/client.rb', line 8 def trilogy @trilogy end |
Class Method Details
.const_defined? ⇒ Boolean
Delegate ‘const_defined?` to TrilogyAurora::Trilogy.
87 88 89 |
# File 'lib/trilogy_aurora/client.rb', line 87 def self.const_defined?(...) TrilogyAurora::Trilogy.const_defined?(...) end |
.const_missing ⇒ Object
Delegate const reference to TrilogyAurora::Trilogy.
82 83 84 |
# File 'lib/trilogy_aurora/client.rb', line 82 def self.const_missing(...) TrilogyAurora::Trilogy.const_get(...) end |
.method_missing ⇒ Object
Delegate class method calls to TrilogyAurora::Trilogy.
72 73 74 |
# File 'lib/trilogy_aurora/client.rb', line 72 def self.method_missing(...) TrilogyAurora::Trilogy.public_send(...) end |
.respond_to_missing? ⇒ Boolean
Delegate ‘respond_to?` to TrilogyAurora::Trilogy.
77 78 79 |
# File 'lib/trilogy_aurora/client.rb', line 77 def self.respond_to_missing?(...) TrilogyAurora::Trilogy.respond_to?(...) end |
Instance Method Details
#disconnect! ⇒ Object
Close TrilogyAurora::Trilogy connection
22 23 24 25 26 |
# File 'lib/trilogy_aurora/client.rb', line 22 def disconnect! trilogy&.close rescue StandardError nil end |
#query ⇒ Object
Execute a TrilogyAurora::Trilogy query, disconnecting or reconnecting after read-only errors based on initialization options.
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/trilogy_aurora/client.rb', line 30 def query(...) # rubocop:disable Metrics/AbcSize try_count = 0 begin trilogy.query(...) rescue TrilogyAurora::Trilogy::Error => e raise unless e.&.include?('--read-only') try_count += 1 if trilogy.[:aurora_disconnect_on_readonly] warn " [trilogy_aurora] Database is readonly, Aurora failover event likely occured. \\\n Closing database connection\n WARNING\n disconnect!\n elsif try_count <= trilogy.connection_options[:aurora_max_retry]\n retry_interval_seconds = [1.5 * (try_count - 1), 10].min\n warn <<~WARNING\n [trilogy_aurora] Database is readonly. \\\n Retry after \#{retry_interval_seconds} seconds\n WARNING\n sleep retry_interval_seconds\n reconnect!\n retry\n end\n\n raise\n end\nend\n" |
#reconnect! ⇒ Object
Disconnect and re-initialize TrilogyAurora::Trilogy
15 16 17 18 19 |
# File 'lib/trilogy_aurora/client.rb', line 15 def reconnect! disconnect! @trilogy = TrilogyAurora::Trilogy.new(@trilogy..dup) end |
#respond_to_missing? ⇒ Boolean
Delegate ‘respond_to?` to TrilogyAurora::Trilogy instance.
67 68 69 |
# File 'lib/trilogy_aurora/client.rb', line 67 def respond_to_missing?(...) trilogy.respond_to?(...) end |