From 457f06d1da848bfe99c3c42f52bf93427c8dfc89 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Mon, 4 Sep 2017 01:41:32 +0200 Subject: [PATCH] Extract regex for entity names --- lib/diaspora_federation/entity.rb | 5 ++++- lib/diaspora_federation/federation/fetcher.rb | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/diaspora_federation/entity.rb b/lib/diaspora_federation/entity.rb index 2ba9aa6..30549b3 100644 --- a/lib/diaspora_federation/entity.rb +++ b/lib/diaspora_federation/entity.rb @@ -40,6 +40,9 @@ module DiasporaFederation # @see https://www.w3.org/TR/REC-xml/#charsets "Extensible Markup Language (XML) 1.0" INVALID_XML_REGEX = /[^\x09\x0A\x0D\x20-\uD7FF\uE000-\uFFFD\u{10000}-\u{10FFFF}]/ + # Regex to validate and find entity names + ENTITY_NAME_REGEX = "[a-z]*(?:_[a-z]*)*".freeze + # Initializes the Entity with the given attribute hash and freezes the created # instance it returns. # @@ -145,7 +148,7 @@ module DiasporaFederation # @param [String] entity_name "snake_case" class name # @return [Class] entity class def self.entity_class(entity_name) - raise InvalidEntityName, "'#{entity_name}' is invalid" unless entity_name =~ /\A[a-z]*(_[a-z]*)*\z/ + raise InvalidEntityName, "'#{entity_name}' is invalid" unless entity_name =~ /\A#{ENTITY_NAME_REGEX}\z/ class_name = entity_name.sub(/\A[a-z]/, &:upcase) class_name.gsub!(/_([a-z])/) { Regexp.last_match[1].upcase } diff --git a/lib/diaspora_federation/federation/fetcher.rb b/lib/diaspora_federation/federation/fetcher.rb index bce97df..76cf530 100644 --- a/lib/diaspora_federation/federation/fetcher.rb +++ b/lib/diaspora_federation/federation/fetcher.rb @@ -21,7 +21,7 @@ module DiasporaFederation end private_class_method def self.entity_name(class_name) - return class_name if class_name =~ /\A[a-z]*(_[a-z]*)*\z/ + return class_name if class_name =~ /\A#{Entity::ENTITY_NAME_REGEX}\z/ raise DiasporaFederation::Entity::UnknownEntity, class_name unless Entities.const_defined?(class_name)