Project

General

Profile

Download (1.92 KB) Statistics
| Branch: | Tag: | Revision:
module ::Proxy::PluginValidators
class Base
def initialize(plugin, setting_name, params, predicate)
@plugin = plugin
@setting_name = setting_name.to_sym
@params = params
@predicate = predicate
end

def required_setting?
@plugin.plugin_default_settings.has_key?(@setting_name)
end

def evaluate_predicate(settings)
return true if @predicate.nil?
@predicate.call(settings)
end

def evaluate_predicate_and_validate!(settings)
return true unless evaluate_predicate(settings)
validate!(settings)
end
end

class FileReadable < Base
def validate!(settings)
setting_value = settings[@setting_name]
return true if !required_setting? && setting_value.nil? # validate optional settings only if they aren't nil
raise ::Proxy::Error::ConfigurationError, "File at '#{setting_value}' defined in '#{@setting_name}' parameter doesn't exist or is unreadable" unless File.readable?(setting_value)
true
end
end

class Presence < Base
def validate!(settings)
setting_value = settings[@setting_name]

empty_value = setting_value.nil?
empty_value ||= setting_value.empty? if setting_value.is_a?(String)

raise ::Proxy::Error::ConfigurationError, "Parameter '#{@setting_name}' is expected to have a non-empty value" if empty_value
true
end
end

class Url < Base
def validate!(settings)
setting_value = settings[@setting_name]
raise ::Proxy::Error::ConfigurationError, "Setting '#{@setting_name}' is expected to contain a url" if setting_value.to_s.empty?

parsed = URI.parse(setting_value)
raise ::Proxy::Error::ConfigurationError, "Setting '#{@setting_name}' is missing a scheme" if parsed.scheme.nil? || parsed.scheme.empty?

true
rescue URI::InvalidURIError
raise ::Proxy::Error::ConfigurationError.new("Setting '#{@setting_name}' contains an invalid url")
end
end
end
(15-15/26)