def lookup(setting, *args)
      setting = SettingPath.new setting if setting.is_a? String
      @provider.each do |provider|
        begin
          return special_value_or_string(provider.lookup(setting.clone, *args))
        rescue SettingNotFoundError; end
      end

      nil
    end
def lookup(setting, *args)
      setting = SettingPath.new setting if setting.is_a? String
      @provider.each do |provider|
        begin
          return special_value_or_string(provider.lookup(setting.clone, *args))
        rescue SettingNotFoundError; end
      end

      nil
    end
Tries all providers in the order they were added to provide a response
 for setting.

 @param setting [SettingPath,String] nested settings as strings should
   be separated by a dot
 @param ... further args passed to the provider
 @return [Array,Hash,String,Boolean,nil] whatever the responding
   provider provides is casted to a {String}, except for some special values