Module: NameTamer

Defined in:
lib/name_tamer/strings/bad_encoding.rb,
lib/name_tamer.rb,
lib/name_tamer/name.rb,
lib/name_tamer/text.rb,
lib/name_tamer/version.rb,
lib/name_tamer/constants.rb,
lib/name_tamer/strings/core.rb,
lib/name_tamer/name/utilities.rb,
lib/name_tamer/strings/spacing.rb,
lib/name_tamer/strings/approximations.rb,
lib/name_tamer/strings/capitalization.rb,
lib/name_tamer/strings/compound_names.rb,
lib/name_tamer/strings/name_modifiers.rb,
lib/name_tamer/name/private_methods_nice_name.rb,
lib/name_tamer/name/private_methods_simple_name.rb

Overview

Defined Under Namespace

Modules: Strings Classes: Name, Text

Constant Summary collapse

VERSION =
'1.0.0'
NONBREAKING_SPACE =
"\u00a0"
ASCII_SPACE =
' '
ADFIX_JOINERS =
"[#{ASCII_SPACE}-]".freeze
SLUG_DELIMITER =
'-'
ZERO_WIDTH_FILTER =
/[\u180E\u200B\u200C\u200D\u2063\uFEFF]/
ALPHA =

Constants for parameterizing Unicode strings for IRIs

Allowed characters in an IRI segment are defined by RFC 3987 (https://tools.ietf.org/html/rfc3987#section-2.2) as follows:

isegment-nz-nc = 1*( iunreserved / pct-encoded / sub-delims
                    / "@" )
              ; non-zero-length segment without any colon ":"

iunreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~" / ucschar

pct-encoded    = "%" HEXDIG HEXDIG

sub-delims     = "!" / "$" / "&" / "'" / "(" / ")"
              / "*" / "+" / "," / ";" / "="

ucschar        = %xA0-D7FF / %xF900-FDCF / %xFDF0-FFEF
              / %x10000-1FFFD / %x20000-2FFFD / %x30000-3FFFD
              / %x40000-4FFFD / %x50000-5FFFD / %x60000-6FFFD
              / %x70000-7FFFD / %x80000-8FFFD / %x90000-9FFFD
              / %xA0000-AFFFD / %xB0000-BFFFD / %xC0000-CFFFD
              / %xD0000-DFFFD / %xE1000-EFFFD

Note that we can't use Unicode code points above \uFFFF because of regex limitations, so we'll ignore ucschar above that point.

We're using the most restrictive segment definition (isegment-nz-nc) to avoid any possible problems with the IRI that it one day might get placed in.

'A-Za-z'
DIGIT =
'0-9'
UCSCHAR =
'\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF'
IUNRESERVED =
"#{ALPHA}#{DIGIT}\\-\\._~#{UCSCHAR}".freeze
SUBDELIMS =
'!$&\'\(\)\*+,;='
ISEGMENT_NZ_NC =

pct-encoded not needed

"#{IUNRESERVED}#{SUBDELIMS}@".freeze
FILTER_RFC3987 =
/[^#{ISEGMENT_NZ_NC}]/
FILTER_COMPAT =
/[^#{ALPHA}#{DIGIT}\-_#{UCSCHAR}]/
ADFIXES =
{
  prefix: {
    person: get_constants_from('adfixes_prefix_person'),
    organization: [
      'Fa.',
      'P.T. Tbk.',
      'P.T.',
      'U.D.',
    ],
    before: '\\A', after: ADFIX_JOINERS
  },
  suffix: {
    person: get_constants_from('adfixes_suffix_person'),
    organization: get_constants_from('adfixes_suffix_organization'),
    before: ADFIX_JOINERS, after: '\\z'
  },
}.freeze
CONTACT_TYPES =
%i[person organization].freeze
ADFIX_PATTERNS =
%i[prefix suffix].to_h do |adfix_type|
  patterns = {}
  adfix = ADFIXES[adfix_type]

  CONTACT_TYPES.each do |ct|
    with_optional_spaces = adfix[ct].map { |p| p.gsub(ASCII_SPACE, ' *') }
    pattern_string = with_optional_spaces.join('|').gsub('.', '\.*')
    patterns[ct] = /#{adfix[:before]}\(*(?:#{pattern_string})[®™)]*#{adfix[:after]}/i
  end

  [adfix_type, patterns]
end

Class Method Summary collapse

Class Method Details

.[](name, args = {}) ⇒ Object



12
13
14
# File 'lib/name_tamer.rb', line 12

def [](name, args = {})
  NameTamer::Name.new name, args
end

.parameterize(string, args = {}) ⇒ Object

Make a slug from a string



17
18
19
# File 'lib/name_tamer.rb', line 17

def parameterize(string, args = {})
  NameTamer::Text.new(string, args).parameterize
end