rename new URI validator to NilableURI and extend existing URI validator

This commit is contained in:
Benjamin Neff 2015-07-28 00:40:04 +02:00
parent c1e700d560
commit 416f322cc7
5 changed files with 30 additions and 55 deletions

View file

@ -1,5 +1,6 @@
require "validation"
require "validation/rule/regular_expression"
require "validation/rule/uri"
# +valid+ gem namespace
module Validation
@ -16,10 +17,10 @@ require "diaspora_federation/validators/rules/birthday"
require "diaspora_federation/validators/rules/boolean"
require "diaspora_federation/validators/rules/diaspora_id"
require "diaspora_federation/validators/rules/guid"
require "diaspora_federation/validators/rules/nilable_uri"
require "diaspora_federation/validators/rules/not_nil"
require "diaspora_federation/validators/rules/public_key"
require "diaspora_federation/validators/rules/tag_count"
require "diaspora_federation/validators/rules/uri"
module DiasporaFederation
# Validators to perform basic sanity-checks on {DiasporaFederation::Entities federation entities}.

View file

@ -8,7 +8,7 @@ module DiasporaFederation
rule :diaspora_id, :diaspora_id
rule :url, %i(not_nil URI)
rule :url, %i(not_nil nilableURI)
rule :profile, :not_nil

View file

@ -0,0 +1,19 @@
module Validation
module Rule
# URI validation rule
# It allows +nil+, so maybe add an additional {Rule::NotNil} rule.
class NilableURI < Validation::Rule::URI
# The error key for this rule
# @return [Symbol] error key
def error_key
:nilableURI
end
# Determines if value is a valid URI
def valid_value?(uri_string)
uri_string.nil? || super
end
end
end
end

View file

@ -1,41 +0,0 @@
module Validation
module Rule
# URI validation rule
#
# This rule is based on https://github.com/zombor/Validator/blob/master/lib/validation/rule/uri.rb
#
# It allows +nil+, so maybe add an additional {Rule::NotNil} rule.
class URI
# @param [Array<Symbol>] parts the parts that are required
def initialize(parts=%i(scheme host))
@required_parts = parts
end
# The error key for this rule
# @return [Symbol] error key
def error_key
:URI
end
# This rule has a +required_elements+ param
# @return [Hash] params
def params
{required_elements: @required_parts}
end
# Determines if value is a valid URI
def valid_value?(uri_string)
return true if uri_string.nil?
uri = URI(uri_string)
@required_parts.each do |part|
return false if uri.public_send(part).nil? || uri.public_send(part).empty?
end
true
rescue ::URI::InvalidURIError
false
end
end
end
end

View file

@ -1,16 +1,12 @@
describe Validation::Rule::URI do
it "has default params" do
expect(described_class.new.params).to eq(required_elements: %i(scheme host))
end
describe Validation::Rule::NilableURI do
it "has an error key" do
expect(described_class.new.error_key).to eq(:URI)
expect(described_class.new.error_key).to eq(:nilableURI)
end
context "validation" do
it "validates a valid uri" do
validator = Validation::Validator.new(OpenStruct.new(uri: "http://example.com"))
validator.rule(:uri, :URI)
validator.rule(:uri, :nilableURI)
expect(validator).to be_valid
expect(validator.errors).to be_empty
@ -18,7 +14,7 @@ describe Validation::Rule::URI do
it "validates nil" do
validator = Validation::Validator.new(OpenStruct.new(uri: nil))
validator.rule(:uri, :URI)
validator.rule(:uri, :nilableURI)
expect(validator).to be_valid
expect(validator.errors).to be_empty
@ -26,7 +22,7 @@ describe Validation::Rule::URI do
it "fails when given an invalid uri" do
validator = Validation::Validator.new(OpenStruct.new(uri: "foo:/%urim"))
validator.rule(:uri, :URI)
validator.rule(:uri, :nilableURI)
expect(validator).not_to be_valid
expect(validator.errors).to include(:uri)
@ -35,7 +31,7 @@ describe Validation::Rule::URI do
context "part validation" do
it "fails to validate when given a uri without a host" do
validator = Validation::Validator.new(OpenStruct.new(uri: "http:foo@"))
validator.rule(:uri, :URI)
validator.rule(:uri, :nilableURI)
expect(validator).not_to be_valid
expect(validator.errors).to include(:uri)
@ -43,7 +39,7 @@ describe Validation::Rule::URI do
it "fails to validate when given a uri without a scheme" do
validator = Validation::Validator.new(OpenStruct.new(uri: "example.com"))
validator.rule(:uri, :URI)
validator.rule(:uri, :nilableURI)
expect(validator).not_to be_valid
expect(validator.errors).to include(:uri)
@ -51,7 +47,7 @@ describe Validation::Rule::URI do
it "fails to validate when given a uri without a path" do
validator = Validation::Validator.new(OpenStruct.new(uri: "http://example.com"))
validator.rule(:uri, URI: %i(host path))
validator.rule(:uri, nilableURI: %i(host path))
expect(validator).not_to be_valid
expect(validator.errors).to include(:uri)