Class: Kino::Configuration

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

Overview

Server settings with Puma-style precedence: explicit Server.new kwargs > config file DSL > defaults.

Defined Under Namespace

Classes: DSL

Constant Summary collapse

DEFAULTS =

Every setting and its default; the full reference lives in the generated sample config (kino --init).

{
  bind: "127.0.0.1",
  port: 0,
  workers: nil, # resolved to Etc.nprocessors in #to_h
  threads: nil, # resolved per mode in Server: 1 in :ractor, 3 in :threaded
  mode: :auto,
  queue_depth: 1024,
  queue_timeout: 5.0,
  request_timeout: nil,
  max_connections: nil, # nil = derive from the open-file limit
  max_body_size: 50 * 1024 * 1024, # 50 MB; nil/0 = unlimited
  batch: 1,
  lanes: false,
  log_requests: false,
  shutdown_timeout: 30,
  tokio_threads: nil,
  tls: nil,
  environment: nil,
  pidfile: nil,
  rackup: nil
}.freeze
SETTINGS =

The known setting names.

DEFAULTS.keys.freeze
SAMPLE_TEMPLATE =

Source template for sample.

File.expand_path("templates/kino.rb.tt", __dir__)

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Returns a new instance of Configuration.



61
62
63
# File 'lib/kino/configuration.rb', line 61

def initialize
  @values = {}
end

Class Method Details

.sampleString

The fully-commented sample config (see kino --init).

Returns:

  • (String)


41
42
43
# File 'lib/kino/configuration.rb', line 41

def self.sample
  File.read(SAMPLE_TEMPLATE)
end

.write_sample(path, force: false) ⇒ String

Write the sample config to +path+. Refuses to clobber an existing file unless force: true.

Parameters:

  • path (String)
  • force (Boolean) (defaults to: false)

    overwrite an existing file

Returns:

  • (String)

    the path written

Raises:

  • (Kino::Error)

    when the file exists and force is false



52
53
54
55
56
57
58
59
# File 'lib/kino/configuration.rb', line 52

def self.write_sample(path, force: false)
  if File.exist?(path) && !force
    raise Error, "#{path} already exists (use force: true to overwrite)"
  end

  File.write(path, sample)
  path
end

Instance Method Details

#[](key) ⇒ Object

Returns the explicit value, or the default.

Parameters:

  • key (Symbol)

    a key from DEFAULTS

Returns:

  • (Object)

    the explicit value, or the default



67
68
69
# File 'lib/kino/configuration.rb', line 67

def [](key)
  @values.fetch(key) { DEFAULTS.fetch(key) }
end

#load_file(path) ⇒ self

Load a config file (Ruby DSL) into this configuration.

Parameters:

  • path (String)

Returns:

  • (self)

Raises:



89
90
91
92
93
94
# File 'lib/kino/configuration.rb', line 89

def load_file(path)
  raise Error, "config file not found: #{path}" unless File.exist?(path)

  DSL.new(self).instance_eval(File.read(path), path, 1)
  self
end

#merge!(options) ⇒ self

Explicit kwargs win over everything already set.

Parameters:

  • options (Hash{Symbol => Object})

Returns:

  • (self)


99
100
101
102
# File 'lib/kino/configuration.rb', line 99

def merge!(options)
  options.each { |key, value| set(key, value) }
  self
end

#server_optionsHash{Symbol => Object}

The settings Server.new accepts: everything except the keys only the CLI consumes (rackup file selection, RACK_ENV).

Returns:

  • (Hash{Symbol => Object})


114
115
116
# File 'lib/kino/configuration.rb', line 114

def server_options
  to_h.except(:rackup, :environment)
end

#set(key, value) ⇒ Object

Parameters:

  • key (Symbol)

    a key from DEFAULTS

  • value (Object)

Raises:

  • (ArgumentError)

    for unknown settings



74
75
76
77
78
# File 'lib/kino/configuration.rb', line 74

def set(key, value)
  raise ArgumentError, "unknown setting #{key.inspect}" unless DEFAULTS.key?(key)

  @values[key] = value
end

#set?(key) ⇒ Boolean

Returns whether the key was explicitly set.

Returns:

  • (Boolean)

    whether the key was explicitly set



81
82
83
# File 'lib/kino/configuration.rb', line 81

def set?(key)
  @values.key?(key)
end

#to_hHash{Symbol => Object}

Returns every setting, defaults filled in.

Returns:

  • (Hash{Symbol => Object})

    every setting, defaults filled in



105
106
107
108
109
# File 'lib/kino/configuration.rb', line 105

def to_h
  SETTINGS.to_h { |key| [key, self[key]] }.tap do |h|
    h[:workers] ||= Etc.nprocessors
  end
end