rename new URI validator to NilableURI and extend existing URI validator
This commit is contained in:
parent
c1e700d560
commit
416f322cc7
5 changed files with 30 additions and 55 deletions
|
|
@ -1,5 +1,6 @@
|
||||||
require "validation"
|
require "validation"
|
||||||
require "validation/rule/regular_expression"
|
require "validation/rule/regular_expression"
|
||||||
|
require "validation/rule/uri"
|
||||||
|
|
||||||
# +valid+ gem namespace
|
# +valid+ gem namespace
|
||||||
module Validation
|
module Validation
|
||||||
|
|
@ -16,10 +17,10 @@ require "diaspora_federation/validators/rules/birthday"
|
||||||
require "diaspora_federation/validators/rules/boolean"
|
require "diaspora_federation/validators/rules/boolean"
|
||||||
require "diaspora_federation/validators/rules/diaspora_id"
|
require "diaspora_federation/validators/rules/diaspora_id"
|
||||||
require "diaspora_federation/validators/rules/guid"
|
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/not_nil"
|
||||||
require "diaspora_federation/validators/rules/public_key"
|
require "diaspora_federation/validators/rules/public_key"
|
||||||
require "diaspora_federation/validators/rules/tag_count"
|
require "diaspora_federation/validators/rules/tag_count"
|
||||||
require "diaspora_federation/validators/rules/uri"
|
|
||||||
|
|
||||||
module DiasporaFederation
|
module DiasporaFederation
|
||||||
# Validators to perform basic sanity-checks on {DiasporaFederation::Entities federation entities}.
|
# Validators to perform basic sanity-checks on {DiasporaFederation::Entities federation entities}.
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ module DiasporaFederation
|
||||||
|
|
||||||
rule :diaspora_id, :diaspora_id
|
rule :diaspora_id, :diaspora_id
|
||||||
|
|
||||||
rule :url, %i(not_nil URI)
|
rule :url, %i(not_nil nilableURI)
|
||||||
|
|
||||||
rule :profile, :not_nil
|
rule :profile, :not_nil
|
||||||
|
|
||||||
|
|
|
||||||
19
lib/diaspora_federation/validators/rules/nilable_uri.rb
Normal file
19
lib/diaspora_federation/validators/rules/nilable_uri.rb
Normal 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
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -1,16 +1,12 @@
|
||||||
describe Validation::Rule::URI do
|
describe Validation::Rule::NilableURI do
|
||||||
it "has default params" do
|
|
||||||
expect(described_class.new.params).to eq(required_elements: %i(scheme host))
|
|
||||||
end
|
|
||||||
|
|
||||||
it "has an error key" 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
|
end
|
||||||
|
|
||||||
context "validation" do
|
context "validation" do
|
||||||
it "validates a valid uri" do
|
it "validates a valid uri" do
|
||||||
validator = Validation::Validator.new(OpenStruct.new(uri: "http://example.com"))
|
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).to be_valid
|
||||||
expect(validator.errors).to be_empty
|
expect(validator.errors).to be_empty
|
||||||
|
|
@ -18,7 +14,7 @@ describe Validation::Rule::URI do
|
||||||
|
|
||||||
it "validates nil" do
|
it "validates nil" do
|
||||||
validator = Validation::Validator.new(OpenStruct.new(uri: nil))
|
validator = Validation::Validator.new(OpenStruct.new(uri: nil))
|
||||||
validator.rule(:uri, :URI)
|
validator.rule(:uri, :nilableURI)
|
||||||
|
|
||||||
expect(validator).to be_valid
|
expect(validator).to be_valid
|
||||||
expect(validator.errors).to be_empty
|
expect(validator.errors).to be_empty
|
||||||
|
|
@ -26,7 +22,7 @@ describe Validation::Rule::URI do
|
||||||
|
|
||||||
it "fails when given an invalid uri" do
|
it "fails when given an invalid uri" do
|
||||||
validator = Validation::Validator.new(OpenStruct.new(uri: "foo:/%urim"))
|
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).not_to be_valid
|
||||||
expect(validator.errors).to include(:uri)
|
expect(validator.errors).to include(:uri)
|
||||||
|
|
@ -35,7 +31,7 @@ describe Validation::Rule::URI do
|
||||||
context "part validation" do
|
context "part validation" do
|
||||||
it "fails to validate when given a uri without a host" do
|
it "fails to validate when given a uri without a host" do
|
||||||
validator = Validation::Validator.new(OpenStruct.new(uri: "http:foo@"))
|
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).not_to be_valid
|
||||||
expect(validator.errors).to include(:uri)
|
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
|
it "fails to validate when given a uri without a scheme" do
|
||||||
validator = Validation::Validator.new(OpenStruct.new(uri: "example.com"))
|
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).not_to be_valid
|
||||||
expect(validator.errors).to include(:uri)
|
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
|
it "fails to validate when given a uri without a path" do
|
||||||
validator = Validation::Validator.new(OpenStruct.new(uri: "http://example.com"))
|
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).not_to be_valid
|
||||||
expect(validator.errors).to include(:uri)
|
expect(validator.errors).to include(:uri)
|
||||||
Loading…
Reference in a new issue