Class: RailsAiGateway::Configuration
- Inherits:
-
Object
- Object
- RailsAiGateway::Configuration
- Defined in:
- lib/rails_ai_gateway/configuration.rb
Overview
Runtime and security settings configured in host Rails initializer.
Instance Attribute Summary collapse
-
#admin_authorization ⇒ #call
Callback receiving admin controller; must return exactly true.
-
#admin_controller ⇒ String
Host controller class inherited by mounted admin controller.
-
#allow_http ⇒ Boolean
Whether upstream providers may use unencrypted HTTP.
-
#allow_private_networks ⇒ Boolean
Whether upstream DNS may resolve to private/reserved networks.
-
#max_attempts ⇒ Integer
Maximum provider routes attempted per request.
-
#max_request_bytes ⇒ Integer
Maximum accepted JSON request size in bytes.
-
#max_response_bytes ⇒ Integer
Maximum buffered non-streaming response size in bytes.
-
#open_timeout ⇒ Numeric
Upstream connection timeout in seconds.
-
#read_timeout ⇒ Numeric
Upstream socket read timeout in seconds.
-
#request_timeout ⇒ Numeric
Total deadline across fallback attempts in seconds.
-
#write_timeout ⇒ Numeric
Upstream socket write timeout in seconds.
Instance Method Summary collapse
-
#initialize ⇒ Configuration
constructor
A new instance of Configuration.
-
#validate! ⇒ nil
Validates all settings.
Constructor Details
#initialize ⇒ Configuration
Returns a new instance of Configuration.
27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/rails_ai_gateway/configuration.rb', line 27 def initialize @admin_controller = "ActionController::Base" @admin_authorization = ->(_controller) { false } @open_timeout = 5 @read_timeout = 60 @write_timeout = 30 @request_timeout = 120 @max_request_bytes = 2 * 1024 * 1024 @max_response_bytes = 16 * 1024 * 1024 @max_attempts = 3 @allow_private_networks = false @allow_http = false end |
Instance Attribute Details
#admin_authorization ⇒ #call
Returns callback receiving admin controller; must return exactly true.
5 6 7 |
# File 'lib/rails_ai_gateway/configuration.rb', line 5 def @admin_authorization end |
#admin_controller ⇒ String
Returns host controller class inherited by mounted admin controller.
7 8 9 |
# File 'lib/rails_ai_gateway/configuration.rb', line 7 def admin_controller @admin_controller end |
#allow_http ⇒ Boolean
Returns whether upstream providers may use unencrypted HTTP.
25 26 27 |
# File 'lib/rails_ai_gateway/configuration.rb', line 25 def allow_http @allow_http end |
#allow_private_networks ⇒ Boolean
Returns whether upstream DNS may resolve to private/reserved networks.
23 24 25 |
# File 'lib/rails_ai_gateway/configuration.rb', line 23 def allow_private_networks @allow_private_networks end |
#max_attempts ⇒ Integer
Returns maximum provider routes attempted per request.
21 22 23 |
# File 'lib/rails_ai_gateway/configuration.rb', line 21 def max_attempts @max_attempts end |
#max_request_bytes ⇒ Integer
Returns maximum accepted JSON request size in bytes.
17 18 19 |
# File 'lib/rails_ai_gateway/configuration.rb', line 17 def max_request_bytes @max_request_bytes end |
#max_response_bytes ⇒ Integer
Returns maximum buffered non-streaming response size in bytes.
19 20 21 |
# File 'lib/rails_ai_gateway/configuration.rb', line 19 def max_response_bytes @max_response_bytes end |
#open_timeout ⇒ Numeric
Returns upstream connection timeout in seconds.
9 10 11 |
# File 'lib/rails_ai_gateway/configuration.rb', line 9 def open_timeout @open_timeout end |
#read_timeout ⇒ Numeric
Returns upstream socket read timeout in seconds.
11 12 13 |
# File 'lib/rails_ai_gateway/configuration.rb', line 11 def read_timeout @read_timeout end |
#request_timeout ⇒ Numeric
Returns total deadline across fallback attempts in seconds.
15 16 17 |
# File 'lib/rails_ai_gateway/configuration.rb', line 15 def request_timeout @request_timeout end |
#write_timeout ⇒ Numeric
Returns upstream socket write timeout in seconds.
13 14 15 |
# File 'lib/rails_ai_gateway/configuration.rb', line 13 def write_timeout @write_timeout end |
Instance Method Details
#validate! ⇒ nil
Validates all settings.
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/rails_ai_gateway/configuration.rb', line 44 def validate! %i[open_timeout read_timeout write_timeout request_timeout].each do |name| value = public_send(name) raise ArgumentError, "#{name} must be positive and finite" unless value.is_a?(Numeric) && value.finite? && value.positive? end %i[max_request_bytes max_response_bytes max_attempts].each do |name| value = public_send(name) raise ArgumentError, "#{name} must be a positive integer" unless value.is_a?(Integer) && value.positive? end %i[allow_private_networks allow_http].each do |name| raise ArgumentError, "#{name} must be boolean" unless [true, false].include?(public_send(name)) end raise ArgumentError, "admin_authorization must be callable" unless .respond_to?(:call) raise ArgumentError, "admin_controller must be a class name" unless admin_controller.is_a?(String) && !admin_controller.empty? end |