module Doorkeeper::Config::Option
def extended(base)
def extended(base) base.send(:private, :option) end
def option(name, options = {})
option :scopes :builder_class => ScopesBuilder
option :name, :default => "My Name"
option :name, :as => :set_name
option :name
==== Examples
* [+:default+] The default value in case no option was set
* [:+as+] Set the builder method that goes inside +configure+ block
==== Options
that returns the value of the config attribute.
Builder should take a block as the initializer parameter and respond to function +build+
define +builder_class+ parameter.
If you want to introduce another level of config DSL you can
option while the config attribute will be the +name+ parameter.
If the +:as+ option is defined, the builder method will be the specified
The +name+ parameter will set both builder method and config attribute.
+Builder+ class.
in the +Config+ class and the other method will take place in the
When you call option, it defines two methods. One method will take place
Defines configuration option
def option(name, options = {}) attribute = options[:as] || name attribute_builder = options[:builder_class] Builder.instance_eval do define_method name do |*args, &block| # TODO: is builder_class option being used? value = unless attribute_builder block ? block : args.first else attribute_builder.new(&block).build end @config.instance_variable_set(:"@#{attribute}", value) end end define_method attribute do |*args| if instance_variable_defined?(:"@#{attribute}") instance_variable_get(:"@#{attribute}") else options[:default] end end public attribute end