class Seahorse::Client::Configuration
#=> raises an ArgumentError, :price was not added as an option
configuration.build!(price: 100)
configuration.add_option(:category)
configuration.add_option(:size)
configuration.add_option(:color)
configuration = Configuration.new
option, an ‘ArgumentError` is raised.
If you try to {#build!} a {Configuration} object with an unknown
## Accepted Options
cfg2.color #=> ’blue’
cfg2 = configuration.build!(color: ‘blue’)
# supplied color
cfg1.color #=> ‘red’
cfg1 = configuration.build!
# default
configuration.add_option(:color, ‘red’)
configuration = Configuration.new
on top of any default options.
a read-only (frozen) struct. Options passed to {#build!} are merged
Calling {#build!} on a {Configuration} object causes it to return
## Building Configuration Objects
#=> #<struct max_retires=3 use_ssl=true>
cfg = configuration.build!
configuration.add_option(:use_ssl, true)
configuration.add_option(:max_retries, 3)
configuration = Configuration.new
when building configuration objects.
Add configuration options with optional default values. These are used
## Adding Configuration Options
then build read-only structures with user-supplied data.
Configuration is used to define possible configuration options and
def add_option(name, default = nil, &block)
-
(self)
-
Parameters:
-
default
() -- The default value for this option. You can specify
-
name
(Symbol
) -- The name of the configuration option. This will
def add_option(name, default = nil, &block) default = DynamicDefault.new(Proc.new) if block_given? @defaults[name.to_sym] << default self end
def apply_defaults(struct, options)
def apply_defaults(struct, options) @defaults.each do |opt_name, defaults| unless options.key?(opt_name) struct[opt_name] = defaults end end DefaultResolver.new(struct).resolve end
def apply_options(struct, options)
def apply_options(struct, options) options.each do |opt, value| begin struct[opt] = value rescue NameError msg = "invalid configuration option `#{opt.inspect}'" raise ArgumentError, msg end end end
def build!(options = {})
-
(Struct)
- Returns a frozen configuration `Struct`.
Parameters:
-
options
(Hash
) -- ({}) A hash of configuration options.
def build!(options = {}) struct = empty_struct apply_options(struct, options) apply_defaults(struct, options) struct end
def empty_struct
def empty_struct Struct.new(*@defaults.keys.sort).new end
def initialize
- Api: - private
def initialize @defaults = Hash.new { |h,k| h[k] = Defaults.new } end