def attr_configurable *args, &block
      opts = args.last.is_a?(Hash) ? args.pop : {}
      args.each do |attr_name|
        init_config_attribute attr_name, opts
        attr_reader attr_name
        define_method :"#{attr_name}=" do |v|
          instance_variable_set(:"@#{attr_name}", (block ? block.call(v) : v))
        end
      end
    end
def attr_configurable *args, &block
      opts = args.last.is_a?(Hash) ? args.pop : {}
      args.each do |attr_name|
        init_config_attribute attr_name, opts
        attr_reader attr_name
        define_method :"#{attr_name}=" do |v|
          instance_variable_set(:"@#{attr_name}", (block ? block.call(v) : v))
        end
      end
    end
Creates a group readable and writeable attributes that can be set
 by a URI query parameter sharing the same name, a property of a URI or
 a default value. The value of this attribute will be transformed by
 invoking the given block, if one has been provided.