lib/doorkeeper/config.rb
# Defines configuration option
#
# When you call option, it defines two methods. One method will take place
# in the +Config+ class and the other method will take place in the
# +Builder+ class.
#
# The +name+ parameter will set both builder method and config attribute.
# If the +:as+ option is defined, the builder method will be the specified
# option while the config attribute will be the +name+ parameter.
#
# If you want to introduce another level of config DSL you can
# define +builder_class+ parameter.
# Builder should take a block as the initializer parameter and respond to function +build+
# that returns the value of the config attribute.
#
# ==== Options
#
# * [:+as+] Set the builder method that goes inside +configure+ block
# * [+:default+] The default value in case no option was set
#
# ==== Examples
#
#    option :name
#    option :name, :as => :set_name
#    option :name, :default => "My Name"
#    option :scopes :builder_class => ScopesBuilder
#
Defines configuration option
When you call option, it defines two methods. One method will take place
in the +Config+ class and the other method will take place in the
+Builder+ class.

The +name+ parameter will set both builder method and config attribute.
If the +:as+ option is defined, the builder method will be the specified
option while the config attribute will be the +name+ parameter.

If you want to introduce another level of config DSL you can
define +builder_class+ parameter.
Builder should take a block as the initializer parameter and respond to function +build+
that returns the value of the config attribute.

Options



Examples


Defines configuration option When you call option it defines two methods . One method will take place in the + Config + class and the other method will take place in the + Builder + class . The + name + parameter will set both builder method and config attribute . If the + : as + option is defined the builder method will be the specified option while the config attribute will be the + name + parameter . If you want to introduce another level of config DSL you can define + builder_class + parameter . Builder should take a block as the initializer parameter and respond to function + build + that returns the value of the config attribute . Options Examples
def option(name, options = {})
        attribute = options[:as] || name
        attribute_builder = options[:builder_class]
        Builder.instance_eval do
          define_method name do |*args, &block|
            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
def option ( name , options = { } ) attribute = options [ :as ] || name attribute_builder = options [ :builder_class ] Builder . instance_eval do define_method name do | * args , & block | 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
Defines configuration option
When you call option, it defines two methods.
Defines configuration option When you call option it defines two methods .
# TODO: is builder_class option being used?
name
<not_specific>
options
<not_specific>