Sha256: cb5d0935295a9aa67c6ca0de2abadfd372a4abdce7c556174df3487fa1b86304

Contents?: true

Size: 930 Bytes

Versions: 1

Compression:

Stored size: 930 Bytes

Contents

module Mocktail
  class CreatesIdentifier
    extend T::Sig

    KEYWORDS = %w[__FILE__ __LINE__ alias and begin BEGIN break case class def defined? do else elsif end END ensure false for if in module next nil not or redo rescue retry return self super then true undef unless until when while yield]

    def create(s, default: "identifier", max_length: 24)
      case s
      when Kernel
        id = (s.to_s.downcase
          .gsub(/:0x[0-9a-f]+/, "") # Lazy attempt to wipe any Object:0x802beef identifiers
          .gsub(/[^\w\s]/, "")
          .gsub(/^\d+/, "")[0...max_length] || "")
          .strip
          .gsub(/\s+/, "_") # snake_case

        if id.empty?
          default
        else
          unreserved(id, default)
        end
      else
        default
      end
    end

    private

    def unreserved(id, default)
      return id unless KEYWORDS.include?(id)

      "#{id}_#{default}"
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mocktail-2.0.0 lib/mocktail/share/creates_identifier.rb