gems.coercible-1.0.0.lib.coercible.coercer.configurable.rb Maven / Gradle / Ivy
The newest version!
module Coercible
class Coercer
module Configurable
# Add configuration-specific option keys to the descendant
#
# @return [self]
#
# @api private
def self.extended(coercer)
coercer.accept_options :config_keys
super
end
# Build configuration object for the coercer class
#
# @example
#
# coercer_class = Class.new(Coercer::Object) do
# extend Configurable
#
# config_keys [ :foo, :bar ]
# end
#
# coercer_class.config do |config|
# config.foo = '1'
# config.bar = '2'
# end
#
# @yieldparam [Configuration]
#
# @return [Configuration]
#
# @api public
def config(&block)
configuration = configuration_class.build(config_keys)
yield configuration
configuration
end
# Return configuration name in the global config
#
# @return [Symbol]
#
# @api private
def config_name
name.downcase.split('::').last.to_sym
end
# Return configuration class
#
# @return [Class:Configuration]
#
# @api private
def configuration_class
Configuration
end
end # module Configurable
end # class Coercer
end # module Coercible