Sha256: 263d4527f3532acda3d1ff0069149e682f7c090dd507afa0aed18eb46acf8570

Contents?: true

Size: 1.53 KB

Versions: 2

Compression:

Stored size: 1.53 KB

Contents

# frozen_string_literal: true

class Serega
  module SeregaValidations
    module Attribute
      #
      # Attribute `name` parameter validator
      #
      class CheckName
        # Regexp for valid one-char attribute name
        FORMAT_ONE_CHAR = /\A[a-zA-Z0-9]\z/

        # Regexp for valid multi-chars attribute name
        FORMAT_MANY_CHARS = /\A[a-zA-Z0-9][a-zA-Z0-9_-]*?[a-zA-Z0-9]\z/ # allow '-' and '_' in the middle

        private_constant :FORMAT_ONE_CHAR, :FORMAT_MANY_CHARS

        class << self
          #
          # Checks allowed characters.
          # Globally allowed characters: "a-z", "A-Z", "0-9".
          # Minus and low line "-", "_" also allowed except as the first or last character.
          #
          # @param name [String, Symbol] Attribute name
          #
          # @raise [SeregaError] when name has invalid format
          # @return [void]
          #
          def call(name)
            name = SeregaUtils::SymbolName.call(name)

            valid =
              case name.size
              when 0 then false
              when 1 then name.match?(FORMAT_ONE_CHAR)
              else name.match?(FORMAT_MANY_CHARS)
              end

            return if valid

            raise SeregaError, message(name)
          end

          private

          def message(name)
            %(Invalid attribute name = #{name.inspect}. Globally allowed characters: "a-z", "A-Z", "0-9". Minus and low line "-", "_" also allowed except as the first or last character)
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
serega-0.9.0 lib/serega/validations/attribute/check_name.rb
serega-0.8.3 lib/serega/validations/attribute/check_name.rb