diff --git a/lib/diaspora_federation/validators.rb b/lib/diaspora_federation/validators.rb index 8fea8c3..310c078 100644 --- a/lib/diaspora_federation/validators.rb +++ b/lib/diaspora_federation/validators.rb @@ -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}. diff --git a/lib/diaspora_federation/validators/person_validator.rb b/lib/diaspora_federation/validators/person_validator.rb index 4ccd12a..f344f9e 100644 --- a/lib/diaspora_federation/validators/person_validator.rb +++ b/lib/diaspora_federation/validators/person_validator.rb @@ -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 diff --git a/lib/diaspora_federation/validators/rules/nilable_uri.rb b/lib/diaspora_federation/validators/rules/nilable_uri.rb new file mode 100644 index 0000000..727d460 --- /dev/null +++ b/lib/diaspora_federation/validators/rules/nilable_uri.rb @@ -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 diff --git a/lib/diaspora_federation/validators/rules/uri.rb b/lib/diaspora_federation/validators/rules/uri.rb deleted file mode 100644 index 97d9a06..0000000 --- a/lib/diaspora_federation/validators/rules/uri.rb +++ /dev/null @@ -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] 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 diff --git a/spec/lib/diaspora_federation/validators/rules/uri_spec.rb b/spec/lib/diaspora_federation/validators/rules/nilable_uri_spec.rb similarity index 77% rename from spec/lib/diaspora_federation/validators/rules/uri_spec.rb rename to spec/lib/diaspora_federation/validators/rules/nilable_uri_spec.rb index 47cdd03..691e4fd 100644 --- a/spec/lib/diaspora_federation/validators/rules/uri_spec.rb +++ b/spec/lib/diaspora_federation/validators/rules/nilable_uri_spec.rb @@ -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)