Refactor diaspora ID regex to be used in diaspora:// URL regex
This commit is contained in:
parent
92dc8b0277
commit
5e3f510a88
2 changed files with 11 additions and 9 deletions
|
|
@ -5,23 +5,25 @@ module Validation
|
||||||
# A simple rule to validate the base structure of diaspora* IDs.
|
# A simple rule to validate the base structure of diaspora* IDs.
|
||||||
class DiasporaId
|
class DiasporaId
|
||||||
# The Regex for a valid diaspora* ID
|
# The Regex for a valid diaspora* ID
|
||||||
DIASPORA_ID = begin
|
DIASPORA_ID_REGEX = begin
|
||||||
letter = "a-zA-Z"
|
letter = "a-zA-Z"
|
||||||
digit = "0-9"
|
digit = "0-9"
|
||||||
hexadecimal = "[a-fA-F#{digit}]"
|
hexadecimal = "[a-fA-F#{digit}]"
|
||||||
username = "[#{letter}#{digit}\\-\\_\\.]+"
|
username = "[#{letter}#{digit}\\-\\_\\.]+"
|
||||||
hostname_part = "[#{letter}#{digit}\\-]"
|
hostname_part = "[#{letter}#{digit}\\-]"
|
||||||
hostname = "#{hostname_part}+([.]#{hostname_part}*)*"
|
hostname = "#{hostname_part}+(?:[.]#{hostname_part}*)*"
|
||||||
ipv4 = "(?:[#{digit}]{1,3}\\.){3}[#{digit}]{1,3}"
|
ipv4 = "(?:[#{digit}]{1,3}\\.){3}[#{digit}]{1,3}"
|
||||||
ipv6 = "\\[(?:#{hexadecimal}{0,4}:){0,7}#{hexadecimal}{1,4}\\]"
|
ipv6 = "\\[(?:#{hexadecimal}{0,4}:){0,7}#{hexadecimal}{1,4}\\]"
|
||||||
ip_addr = "(?:#{ipv4}|#{ipv6})"
|
ip_addr = "(?:#{ipv4}|#{ipv6})"
|
||||||
domain = "(?:#{hostname}|#{ip_addr})"
|
domain = "(?:#{hostname}|#{ip_addr})"
|
||||||
port = "(:[#{digit}]+)?"
|
port = "(?::[#{digit}]+)?"
|
||||||
addr_spec = "(#{username}\\@#{domain}#{port})?"
|
|
||||||
|
|
||||||
/\A#{addr_spec}\z/u
|
"#{username}\\@#{domain}#{port}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# The Regex for validating a full diaspora* ID
|
||||||
|
DIASPORA_ID = /\A#{DIASPORA_ID_REGEX}\z/u
|
||||||
|
|
||||||
# The error key for this rule
|
# The error key for this rule
|
||||||
# @return [Symbol] error key
|
# @return [Symbol] error key
|
||||||
def error_key
|
def error_key
|
||||||
|
|
@ -30,7 +32,7 @@ module Validation
|
||||||
|
|
||||||
# Determines if value is a valid diaspora* ID
|
# Determines if value is a valid diaspora* ID
|
||||||
def valid_value?(value)
|
def valid_value?(value)
|
||||||
value.nil? || !DIASPORA_ID.match(value).nil?
|
value.is_a?(String) && value =~ DIASPORA_ID
|
||||||
end
|
end
|
||||||
|
|
||||||
# This rule has no params.
|
# This rule has no params.
|
||||||
|
|
|
||||||
|
|
@ -83,13 +83,13 @@ describe Validation::Rule::DiasporaId do
|
||||||
expect(validator.errors).to include(:diaspora_id)
|
expect(validator.errors).to include(:diaspora_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "allows nil and empty" do
|
it "fails for nil and empty" do
|
||||||
[nil, ""].each do |val|
|
[nil, ""].each do |val|
|
||||||
validator = Validation::Validator.new(OpenStruct.new(diaspora_id: val))
|
validator = Validation::Validator.new(OpenStruct.new(diaspora_id: val))
|
||||||
validator.rule(:diaspora_id, :diaspora_id)
|
validator.rule(:diaspora_id, :diaspora_id)
|
||||||
|
|
||||||
expect(validator).to be_valid
|
expect(validator).not_to be_valid
|
||||||
expect(validator.errors).to be_empty
|
expect(validator.errors).to include(:diaspora_id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue