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
Transliterations (like the i18n defaults) see https://github.com/svenfuchs/i18n/blob/master/lib/i18n/backend/transliterator.rb
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-EFFFDNote 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
- .[](name, args = {}) ⇒ Object
-
.parameterize(string, args = {}) ⇒ Object
Make a slug from a string.
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 |