Class: Kino::Configuration
- Inherits:
-
Object
- Object
- Kino::Configuration
- 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 Kino.available_parallelism 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, on_error: nil, after_boot: nil, after_worker_boot: nil, after_request_complete: nil, on_worker_exit: nil, shutdown_timeout: 30, tokio_threads: nil, tls: nil, environment: nil, pidfile: nil, control_bind: nil, control_token: nil, quarantine_timeout: nil, quarantine_max: nil, rackup: nil }.freeze
- SETTINGS =
The known setting names.
DEFAULTS.keys.freeze
- SAMPLE_TEMPLATE =
Source template for sample.
File.("templates/kino.rb.tt", __dir__)
- DEFAULT_PATHS =
Where the
kinoCLI and the Rack handler look for a config file when none is named: the project root first, then the Rails-style config/. %w[kino.rb config/kino.rb].freeze
- DEFAULT_SERVING_PORT =
The port the CLI and the Rack handler serve on when neither a flag nor the file chose one (Server.new itself defaults to an ephemeral port, for embedding).
9292
Class Method Summary collapse
-
.default_path ⇒ String?
The first of DEFAULT_PATHS that exists in the working directory.
-
.sample ⇒ String
The fully-commented sample config (see
kino --init). -
.write_sample(path, force: false) ⇒ String
Write the sample config to
path.
Instance Method Summary collapse
-
#[](key) ⇒ Object
The explicit value, or the default.
-
#initialize ⇒ Configuration
constructor
A new instance of Configuration.
-
#load_file(path) ⇒ self
Load a config file (Ruby DSL) into this configuration.
-
#merge!(options) ⇒ self
Explicit kwargs win over everything already set.
-
#server_options ⇒ Hash{Symbol => Object}
The settings Server.new accepts: everything except the keys only the CLI consumes (rackup file selection, RACK_ENV).
- #set(key, value) ⇒ Object
-
#set?(key) ⇒ Boolean
Whether the key was explicitly set.
-
#to_h ⇒ Hash{Symbol => Object}
Every setting, defaults filled in.
Constructor Details
#initialize ⇒ Configuration
Returns a new instance of Configuration.
83 84 85 |
# File 'lib/kino/configuration.rb', line 83 def initialize @values = {} end |
Class Method Details
.default_path ⇒ String?
The first of DEFAULT_PATHS that exists in the working directory.
57 58 59 |
# File 'lib/kino/configuration.rb', line 57 def self.default_path DEFAULT_PATHS.find { |path| File.exist?(path) } end |
.sample ⇒ String
The fully-commented sample config (see kino --init).
63 64 65 |
# File 'lib/kino/configuration.rb', line 63 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.
74 75 76 77 78 79 80 81 |
# File 'lib/kino/configuration.rb', line 74 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.
89 90 91 |
# File 'lib/kino/configuration.rb', line 89 def [](key) @values.fetch(key) { DEFAULTS.fetch(key) } end |
#load_file(path) ⇒ self
Load a config file (Ruby DSL) into this configuration.
111 112 113 114 115 116 |
# File 'lib/kino/configuration.rb', line 111 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.
121 122 123 124 |
# File 'lib/kino/configuration.rb', line 121 def merge!() .each { |key, value| set(key, value) } self end |
#server_options ⇒ Hash{Symbol => Object}
The settings Server.new accepts: everything except the keys only the CLI consumes (rackup file selection, RACK_ENV).
136 137 138 |
# File 'lib/kino/configuration.rb', line 136 def to_h.except(:rackup, :environment) end |
#set(key, value) ⇒ Object
96 97 98 99 100 |
# File 'lib/kino/configuration.rb', line 96 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.
103 104 105 |
# File 'lib/kino/configuration.rb', line 103 def set?(key) @values.key?(key) end |
#to_h ⇒ Hash{Symbol => Object}
Returns every setting, defaults filled in.
127 128 129 130 131 |
# File 'lib/kino/configuration.rb', line 127 def to_h SETTINGS.to_h { |key| [key, self[key]] }.tap do |h| h[:workers] ||= Kino.available_parallelism end end |