Class: RailsAiGateway::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_ai_gateway/configuration.rb

Overview

Runtime and security settings configured in host Rails initializer.

Instance Attribute Summary collapse

Instance Method Summary collapse

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.

Returns:

  • callback receiving admin controller; must return exactly true



5
6
7
# File 'lib/rails_ai_gateway/configuration.rb', line 5

def admin_authorization
  @admin_authorization
end

#admin_controller ⇒ String

Returns host controller class inherited by mounted admin controller.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

Returns:

Raises:

  • when a setting is invalid



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 admin_authorization.respond_to?(:call)
  raise ArgumentError, "admin_controller must be a class name" unless admin_controller.is_a?(String) && !admin_controller.empty?
end