Sha256: 384a9e5b3fd774861585add681d09829792aedbb3628415a4d02526df276bc9c

Contents?: true

Size: 813 Bytes

Versions: 12

Compression:

Stored size: 813 Bytes

Contents

module Mocktail
  class CreatesIdentifier
    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)
      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
    end

    private

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

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

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
mocktail-1.2.3 lib/mocktail/share/creates_identifier.rb
mocktail-1.2.2 lib/mocktail/share/creates_identifier.rb
mocktail-1.2.1 lib/mocktail/share/creates_identifier.rb
mocktail-1.2.0 lib/mocktail/share/creates_identifier.rb
mocktail-1.1.3 lib/mocktail/share/creates_identifier.rb
mocktail-1.1.2 lib/mocktail/share/creates_identifier.rb
mocktail-1.1.1 lib/mocktail/share/creates_identifier.rb
mocktail-1.1.0 lib/mocktail/share/creates_identifier.rb
mocktail-1.0.0 lib/mocktail/share/creates_identifier.rb
mocktail-0.0.6 lib/mocktail/share/creates_identifier.rb
mocktail-0.0.5 lib/mocktail/share/creates_identifier.rb
mocktail-0.0.4 lib/mocktail/share/creates_identifier.rb