Class: String

Inherits:
Object show all
Defined in:
lib/lite/ruby/string.rb,
lib/lite/ruby/safe/string.rb

Constant Summary collapse

TRANSLITERATIONS =
YAML.load_file(
  File.expand_path('formats/string_transliterations.yml', File.dirname(__FILE__))
).freeze

Instance Method Summary collapse

Instance Method Details

#acronymObject



12
13
14
# File 'lib/lite/ruby/string.rb', line 12

def acronym
  gsub(/(([a-zA-Z0-9])([a-zA-Z0-9])*)./, '\\2') || self
end

#acronym!Object



16
17
18
# File 'lib/lite/ruby/string.rb', line 16

def acronym!
  replace(acronym)
end

#any?(*keys) ⇒ Boolean

Returns:

  • (Boolean)


20
21
22
# File 'lib/lite/ruby/string.rb', line 20

def any?(*keys)
  keys.any? { |key| include?(key) }
end

#at(position) ⇒ Object



5
6
7
# File 'lib/lite/ruby/safe/string.rb', line 5

def at(position)
  self[position]
end

#camelize(first_letter = :upper) ⇒ Object Also known as: camelcase



9
10
11
12
13
14
15
# File 'lib/lite/ruby/safe/string.rb', line 9

def camelize(first_letter = :upper)
  case first_letter
  when :upper, true then modulize.gsub(/(\A|\s)([a-z])/) { $1 + $2.upcase }
  when :lower, false then modulize.gsub(/(\A|\s)([A-Z])/) { $1 + $2.downcase }
  else modulize
  end
end

#camelize!(first_letter = :upper) ⇒ Object Also known as: camelcase!



24
25
26
# File 'lib/lite/ruby/string.rb', line 24

def camelize!(first_letter = :upper)
  replace(camelize(first_letter))
end

#capitalized?Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/lite/ruby/string.rb', line 28

def capitalized?
  capitalize == self
end

#classifyObject



17
18
19
20
21
22
# File 'lib/lite/ruby/safe/string.rb', line 17

def classify
  str = dup
  str.sub!(/.*\./, '')
  str.camelize!
  str || self
end

#classify!Object



32
33
34
# File 'lib/lite/ruby/string.rb', line 32

def classify!
  replace(classify)
end

#constantizeObject



24
25
26
# File 'lib/lite/ruby/safe/string.rb', line 24

def constantize
  Object.const_get(camelize)
end

#dasherizeObject



28
29
30
# File 'lib/lite/ruby/safe/string.rb', line 28

def dasherize
  underscore.tr('_', '-')
end

#dasherize!Object



36
37
38
# File 'lib/lite/ruby/string.rb', line 36

def dasherize!
  replace(dasherize)
end

#deconstantizeObject



32
33
34
# File 'lib/lite/ruby/safe/string.rb', line 32

def deconstantize
  [0, rindex('::') || 0]
end

#deconstantize!Object



40
41
42
# File 'lib/lite/ruby/string.rb', line 40

def deconstantize!
  replace(deconstantize)
end

#dedupe(pattern) ⇒ Object



44
45
46
# File 'lib/lite/ruby/string.rb', line 44

def dedupe(pattern)
  dup.dedupe!(pattern)
end

#dedupe!(pattern) ⇒ Object



48
49
50
51
# File 'lib/lite/ruby/string.rb', line 48

def dedupe!(pattern)
  pattern.each_char { |char| gsub!(/#{Regexp.escape(char)}{2,}/, char) }
  self
end

#demodulizeObject



36
37
38
# File 'lib/lite/ruby/safe/string.rb', line 36

def demodulize
  gsub(/^.*::/, '')
end

#demodulize!Object



53
54
55
# File 'lib/lite/ruby/string.rb', line 53

def demodulize!
  replace(demodulize)
end

#downcase?Boolean

Returns:

  • (Boolean)


57
58
59
# File 'lib/lite/ruby/string.rb', line 57

def downcase?
  downcase == self
end

#each_word(&block) ⇒ Object



61
62
63
# File 'lib/lite/ruby/string.rb', line 61

def each_word(&block)
  words.each(&block)
end

#ellipsize(ellipsize_at, options = {}) ⇒ Object



65
66
67
68
69
70
71
72
# File 'lib/lite/ruby/string.rb', line 65

def ellipsize(ellipsize_at, options = {})
  return self if length <= ellipsize_at

  separator = options[:separator] || '...'
  offset = options[:offset] || 4

  "#{self[0, offset]}#{separator}#{self[-offset, offset]}"
end

#first(limit = 1) ⇒ Object



40
41
42
43
44
45
46
47
48
# File 'lib/lite/ruby/safe/string.rb', line 40

def first(limit = 1)
  if limit.zero?
    ''
  elsif limit >= length
    self
  else
    to(limit - 1)
  end
end

#format(*args) ⇒ Object



74
75
76
# File 'lib/lite/ruby/string.rb', line 74

def format(*args)
  super(self, *args.flatten)
end

#from(position) ⇒ Object



50
51
52
# File 'lib/lite/ruby/safe/string.rb', line 50

def from(position)
  self[position..-1]
end

#headerizeObject



78
79
80
# File 'lib/lite/ruby/string.rb', line 78

def headerize
  squish.each_word(&:capitalize!).join(' ')
end

#headerize!Object



82
83
84
# File 'lib/lite/ruby/string.rb', line 82

def headerize!
  replace(headerize)
end

#humanize(capitalize: true) ⇒ Object



54
55
56
57
58
59
60
61
62
63
# File 'lib/lite/ruby/safe/string.rb', line 54

def humanize(capitalize: true)
  str = dup
  str.underscore!
  str.delete_suffix!('_id')
  str.tr!('_', ' ')
  str.squish!
  str.gsub!(/([a-z\d]*)/i, &:downcase)
  str.gsub!(/\A\w/) { |s| capitalize ? s.upcase : s }
  str || self
end

#humanize!(capitalize: true) ⇒ Object



86
87
88
# File 'lib/lite/ruby/string.rb', line 86

def humanize!(capitalize: true)
  replace(humanize(capitalize: capitalize))
end

#indent(amount, seperator = ' ') ⇒ Object



65
66
67
# File 'lib/lite/ruby/safe/string.rb', line 65

def indent(amount, seperator = ' ')
  dup.indent!(amount, seperator)
end

#indent!(amount, seperator = ' ') ⇒ Object



69
70
71
72
73
74
75
# File 'lib/lite/ruby/safe/string.rb', line 69

def indent!(amount, seperator = ' ')
  if amount >= 0
    gsub!(/^/, seperator * amount)
  else
    gsub!(/^#{Regexp.escape(seperator)}{0,#{-amount}}/, '')
  end
end

#index_all(pattern) ⇒ Object



90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/lite/ruby/string.rb', line 90

def index_all(pattern)
  pattern = pattern.to_s if pattern.is_a?(Numeric)
  arr_indexes = []
  srch_index = rindex(pattern)

  while srch_index
    temp_string = self[0..(srch_index - 1)]
    arr_indexes << srch_index
    srch_index = srch_index.zero? ? nil : temp_string.rindex(pattern)
  end

  arr_indexes.reverse
end

#labelize(capitalize: true) ⇒ Object Also known as: labelcase



104
105
106
# File 'lib/lite/ruby/string.rb', line 104

def labelize(capitalize: true)
  dup.labelize!(capitalize: capitalize)
end

#labelize!(capitalize: true) ⇒ Object Also known as: labelcase!



108
109
110
111
112
113
114
115
# File 'lib/lite/ruby/string.rb', line 108

def labelize!(capitalize: true)
  underscore!
  tr!('_', ' ')
  squish!
  gsub!(/([a-z\d]*)/i, &:downcase)
  gsub!(/\A\w/) { |str| capitalize ? str.upcase : str }
  gsub!(/ id\z/, ' ID') || self
end

#last(limit = 1) ⇒ Object



77
78
79
80
81
82
83
84
85
# File 'lib/lite/ruby/safe/string.rb', line 77

def last(limit = 1)
  if limit.zero?
    ''
  elsif limit >= length
    self
  else
    from(-limit)
  end
end

#lchomp(match) ⇒ Object



117
118
119
# File 'lib/lite/ruby/string.rb', line 117

def lchomp(match)
  dup.lchomp!(match)
end

#lchomp!(match) ⇒ Object



121
122
123
124
125
126
# File 'lib/lite/ruby/string.rb', line 121

def lchomp!(match)
  return self unless index(match)

  self[0...match.size] = ''
  self
end

#methodizeObject



128
129
130
# File 'lib/lite/ruby/string.rb', line 128

def methodize
  dup.methodize!
end

#methodize!Object



132
133
134
135
136
137
138
# File 'lib/lite/ruby/string.rb', line 132

def methodize!
  gsub!(/([A-Z]+)([A-Z])/, '\1_\2')
  gsub!(/([a-z])([A-Z])/, '\1_\2')
  gsub!('/', '__')
  gsub!('::', '__')
  downcase! || self
end

#mixedcase?Boolean

Returns:

  • (Boolean)


151
152
153
# File 'lib/lite/ruby/string.rb', line 151

def mixedcase?
  !upcase? && !downcase?
end

#modulizeObject



140
141
142
# File 'lib/lite/ruby/string.rb', line 140

def modulize
  dup.modulize!
end

#modulize!Object



144
145
146
147
148
149
# File 'lib/lite/ruby/string.rb', line 144

def modulize!
  gsub!(/__(.?)/) { "::#{$1.upcase}" }
  gsub!(%r{/(.?)}) { "::#{$1.upcase}" }
  gsub!(/(?:_+|-+)([a-z])/) { $1.upcase }
  gsub!(/(\A|\s)([a-z])/) { $1 + $2.upcase } || self
end

#non_possessiveObject



155
156
157
# File 'lib/lite/ruby/string.rb', line 155

def non_possessive
  dup.non_possessive!
end

#non_possessive!Object



159
160
161
162
163
# File 'lib/lite/ruby/string.rb', line 159

def non_possessive!
  return self unless possessive?

  chomp!("'s") || chomp!("'") || self
end

#ordinalObject



165
166
167
# File 'lib/lite/ruby/string.rb', line 165

def ordinal
  to_i.ordinal
end

#ordinalizeObject



169
170
171
# File 'lib/lite/ruby/string.rb', line 169

def ordinalize
  to_i.ordinalize
end

#parameterize(separator: '-') ⇒ Object



87
88
89
90
91
92
93
# File 'lib/lite/ruby/safe/string.rb', line 87

def parameterize(separator: '-')
  str = dup
  str.underscore!
  str.gsub!(/\s+/, separator)
  str.downcase!
  str || self
end

#parameterize!(separator: '-') ⇒ Object



173
174
175
# File 'lib/lite/ruby/string.rb', line 173

def parameterize!(separator: '-')
  replace(parameterize(separator: separator))
end

#pathizeObject



177
178
179
# File 'lib/lite/ruby/string.rb', line 177

def pathize
  dup.pathize!
end

#pathize!Object



181
182
183
184
185
186
187
188
189
# File 'lib/lite/ruby/string.rb', line 181

def pathize!
  gsub!(/([A-Z]+)([A-Z])/, '\1_\2')
  gsub!(/([a-z])([A-Z])/, '\1_\2')
  gsub!('__', '/')
  gsub!('::', '/')
  gsub!(/\s+/, '')
  gsub!(/[?%*:|"<>.]+/, '')
  downcase! || self
end

#pollute(delimiter = '^--^--^') ⇒ Object



191
192
193
# File 'lib/lite/ruby/string.rb', line 191

def pollute(delimiter = '^--^--^')
  chars.map { |chr| "#{chr}#{delimiter}" }.join
end

#pollute!(delimiter = '^--^--^') ⇒ Object



195
196
197
# File 'lib/lite/ruby/string.rb', line 195

def pollute!(delimiter = '^--^--^')
  replace(pollute(delimiter))
end

#popObject



199
200
201
# File 'lib/lite/ruby/string.rb', line 199

def pop
  self[-1]
end

#possessiveObject



203
204
205
206
207
208
# File 'lib/lite/ruby/string.rb', line 203

def possessive
  return self if possessive?

  possession = end_with?('s') ? "'" : "'s"
  "#{self}#{possession}"
end

#possessive!Object



210
211
212
# File 'lib/lite/ruby/string.rb', line 210

def possessive!
  replace(possessive)
end

#possessive?Boolean

Returns:

  • (Boolean)


214
215
216
# File 'lib/lite/ruby/string.rb', line 214

def possessive?
  %w['s s'].any? { |pos| end_with?(pos) }
end

#push(string) ⇒ Object



218
219
220
# File 'lib/lite/ruby/string.rb', line 218

def push(string)
  replace(concat(string))
end

#quote(type = :double, amount = nil) ⇒ Object

rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength



223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
# File 'lib/lite/ruby/string.rb', line 223

def quote(type = :double, amount = nil)
  if type.is_a?(Integer)
    tmp = amount
    amount = type
    type = tmp || :mixed
  else
    amount ||= 1
  end

  case type.to_s
  when "'", 'single', 's', '1'
    f = "'" * amount
    b = f
  when '"', 'double', 'd', '2'
    f = '"' * amount
    b = f
  when '`', 'back', 'backtick', 'b', '-1'
    f = '`' * amount
    b = f
  when "`'", 'bracket', 'sb'
    f = '`' * amount
    b = "'" * amount
  when "'\"", 'mixed', 'm', 'Integer'
    c = (amount.to_f / 2).to_i
    f = '"' * c
    b = f

    if amount.odd?
      f = "'#{f}"
      b += "'"
    end
  else
    raise ArgumentError, "Invalid quote type: #{type.inspect}"
  end

  "#{f}#{self}#{b}"
end

#quote!(type = :double, amount = nil) ⇒ Object

rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength



262
263
264
# File 'lib/lite/ruby/string.rb', line 262

def quote!(type = :double, amount = nil)
  replace(quote(type, amount))
end

#remove(*patterns) ⇒ Object



95
96
97
# File 'lib/lite/ruby/safe/string.rb', line 95

def remove(*patterns)
  dup.remove!(*patterns)
end

#remove!(*patterns) ⇒ Object



99
100
101
102
103
# File 'lib/lite/ruby/safe/string.rb', line 99

def remove!(*patterns)
  patterns.each_with_object(self) do |pat, str|
    pat.is_a?(Range) ? str.slice!(pat) : str.gsub!(pat, '')
  end
end

#remove_tagsObject



266
267
268
# File 'lib/lite/ruby/string.rb', line 266

def remove_tags
  dup.remove_tags!
end

#remove_tags!Object



270
271
272
# File 'lib/lite/ruby/string.rb', line 270

def remove_tags!
  gsub!(%r{</?[^>]*>}, '') || self
end

#rotate(amount = 1) ⇒ Object



274
275
276
# File 'lib/lite/ruby/string.rb', line 274

def rotate(amount = 1)
  dup.rotate!(amount)
end

#rotate!(amount = 1) ⇒ Object



278
279
280
281
# File 'lib/lite/ruby/string.rb', line 278

def rotate!(amount = 1)
  amount += size if amount.negative?
  slice!(amount, size - amount) + slice!(0, amount)
end

#safe_encode(target_encoding, replacement = '') ⇒ Object

rubocop:disable Metrics/MethodLength



284
285
286
287
288
289
290
291
292
293
294
295
296
# File 'lib/lite/ruby/string.rb', line 284

def safe_encode(target_encoding, replacement = '')
  encode(target_encoding)
rescue Encoding::InvalidByteSequenceError
  force_encoding(target_encoding).scrub!(replacement)
rescue Encoding::UndefinedConversionError
  encode(
    target_encoding,
    invalid: :replace,
    undef: :replace,
    replace: replacement,
    UNIVERSAL_NEWLINE_DECORATOR: true
  )
end

#safe_encode!(target_encoding, replacement = '') ⇒ Object

rubocop:enable Metrics/MethodLength



299
300
301
# File 'lib/lite/ruby/string.rb', line 299

def safe_encode!(target_encoding, replacement = '')
  replace(safe_encode(target_encoding, replacement))
end

#sample(separator = ' ') ⇒ Object



303
304
305
# File 'lib/lite/ruby/string.rb', line 303

def sample(separator = ' ')
  split(separator).sample
end

#sample!(separator = ' ') ⇒ Object



307
308
309
# File 'lib/lite/ruby/string.rb', line 307

def sample!(separator = ' ')
  replace(sample(separator))
end

#shift(*patterns) ⇒ Object



311
312
313
# File 'lib/lite/ruby/string.rb', line 311

def shift(*patterns)
  dup.shift!(*patterns)
end

#shift!(*patterns) ⇒ Object



315
316
317
318
319
# File 'lib/lite/ruby/string.rb', line 315

def shift!(*patterns)
  return self[0] if patterns.empty?

  patterns.each_with_object(self) { |pat, str| str.sub!(pat, '') }
end

#shuffle(separator = '') ⇒ Object



321
322
323
# File 'lib/lite/ruby/string.rb', line 321

def shuffle(separator = '')
  split(separator).shuffle.join
end

#shuffle!(separator = '') ⇒ Object



325
326
327
# File 'lib/lite/ruby/string.rb', line 325

def shuffle!(separator = '')
  replace(shuffle(separator))
end

#sift(keep) ⇒ Object



329
330
331
332
333
334
335
336
337
338
# File 'lib/lite/ruby/string.rb', line 329

def sift(keep)
  keep = case keep
         when String then keep.chars
         when Array then keep.map(&:to_s)
         when Range then keep.to_a.map(&:to_s)
         else raise TypeError, "Invalid parameter: #{keep.inspect}"
         end

  chars.keep_if { |chr| keep.include?(chr) }.join
end

#sift!(keep) ⇒ Object



340
341
342
# File 'lib/lite/ruby/string.rb', line 340

def sift!(keep)
  replace(sift(keep))
end

#slugifyObject



344
345
346
# File 'lib/lite/ruby/string.rb', line 344

def slugify
  dup.slugify!
end

#slugify!Object



348
349
350
351
352
353
354
# File 'lib/lite/ruby/string.rb', line 348

def slugify!
  gsub!(/[^\x00-\x7F]+/, '')
  gsub!(/[^\w \-]+/i, '')
  gsub!(/[ \-]+/i, '-')
  gsub!(/^-|-$/i, '')
  downcase! || self
end

#sortObject



356
357
358
# File 'lib/lite/ruby/string.rb', line 356

def sort
  chars.sort.join
end

#sort!Object



360
361
362
# File 'lib/lite/ruby/string.rb', line 360

def sort!
  replace(sort)
end

#squishObject



105
106
107
# File 'lib/lite/ruby/safe/string.rb', line 105

def squish
  dup.squish!
end

#squish!Object



109
110
111
112
# File 'lib/lite/ruby/safe/string.rb', line 109

def squish!
  strip!
  gsub!(/\s+/, ' ') || self
end

#titleizeObject Also known as: titlecase



114
115
116
117
118
119
120
# File 'lib/lite/ruby/safe/string.rb', line 114

def titleize
  str = dup
  str.underscore!
  str.humanize!
  str.gsub!(/\b(?<!['’`])[a-z]/) { $&.capitalize }
  str || self
end

#titleize!Object Also known as: titlecase!



372
373
374
# File 'lib/lite/ruby/string.rb', line 372

def titleize!
  replace(titleize)
end

#to(position) ⇒ Object



122
123
124
# File 'lib/lite/ruby/safe/string.rb', line 122

def to(position)
  self[0..position]
end

#to_time(form = :local) ⇒ Object Also known as: to_t

rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity rubocop:disable Metrics/MethodLength, Metrics/PerceivedComplexity



128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/lite/ruby/safe/string.rb', line 128

def to_time(form = :local)
  parts = Date.parse(self, false)
  used_keys = %i[year mon mday hour min sec sec_fraction offset]
  return if (parts.keys & used_keys).empty?

  now = Time.now
  time = Time.new(
    parts[:year] || now.year,
    parts[:mon] || now.month,
    parts[:mday] || now.day,
    parts[:hour] || 0,
    parts[:min] || 0,
    (parts[:sec] || 0) + (parts[:sec_fraction] || 0),
    parts[:offset] || (form == :utc ? 0 : nil)
  )

  form == :utc ? time.utc : time.to_time
end

#transliterizeObject



364
365
366
# File 'lib/lite/ruby/string.rb', line 364

def transliterize
  TRANSLITERATIONS.each_with_object(dup) { |(k, v), s| s.gsub!(k, v) }
end

#transliterize!Object



368
369
370
# File 'lib/lite/ruby/string.rb', line 368

def transliterize!
  replace(transliterize)
end

#truncate(truncate_at, options = {}) ⇒ Object

rubocop:enable Metrics/MethodLength, Metrics/PerceivedComplexity rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity



149
150
151
152
153
154
155
156
157
# File 'lib/lite/ruby/safe/string.rb', line 149

def truncate(truncate_at, options = {})
  return self unless length > truncate_at

  omission = options[:omission] || '...'
  seperator = options[:separator]
  size_with_room_for_omission = truncate_at - omission.length
  stop = rindex(seperator || '', size_with_room_for_omission) if seperator
  "#{self[0, stop || size_with_room_for_omission]}#{omission}"
end

#truncate_words(words_count, options = {}) ⇒ Object



159
160
161
162
163
164
165
# File 'lib/lite/ruby/safe/string.rb', line 159

def truncate_words(words_count, options = {})
  sep = options[:separator] || /\s+/
  sep = Regexp.escape(sep.to_s) unless sep.is_a?(Regexp)
  return dup unless self =~ /\A((?>.+?#{sep}){#{words_count - 1}}.+?)#{sep}.*/m

  $1 + (options[:omission] || '...')
end

#underscoreObject Also known as: snakecase



167
168
169
170
171
172
173
174
175
176
# File 'lib/lite/ruby/safe/string.rb', line 167

def underscore
  str = dup
  str.camelize!
  str.gsub!(/::/, '/')
  str.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2')
  str.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
  str.tr!('-', '_')
  str.downcase!
  str || self
end

#underscore!Object Also known as: snakecase!



380
381
382
# File 'lib/lite/ruby/string.rb', line 380

def underscore!
  replace(underscore)
end

#unpollute(delimiter = '^--^--^') ⇒ Object



384
385
386
# File 'lib/lite/ruby/string.rb', line 384

def unpollute(delimiter = '^--^--^')
  dup.unpollute!(delimiter)
end

#unpollute!(delimiter = '^--^--^') ⇒ Object



388
389
390
# File 'lib/lite/ruby/string.rb', line 388

def unpollute!(delimiter = '^--^--^')
  gsub!(delimiter, '') || self
end

#unquoteObject



392
393
394
# File 'lib/lite/ruby/string.rb', line 392

def unquote
  dup.unquote!
end

#unquote!Object



396
397
398
399
400
401
402
403
404
# File 'lib/lite/ruby/string.rb', line 396

def unquote!
  [0, -1].each do |i|
    case self[i, 1]
    when "'", '"', '`' then self[i] = ''
    end
  end

  self
end

#unshift(*patterns) ⇒ Object



454
455
456
457
# File 'lib/lite/ruby/string.rb', line 454

def unshift(*patterns)
  patterns.each_with_object('') { |pat, str| str << pat }
          .concat(self)
end

#unshift!(*patterns) ⇒ Object



459
460
461
# File 'lib/lite/ruby/string.rb', line 459

def unshift!(*patterns)
  replace(unshift(*patterns))
end

#upcase?Boolean

Returns:

  • (Boolean)


376
377
378
# File 'lib/lite/ruby/string.rb', line 376

def upcase?
  upcase == self
end

#uri_domainObject



406
407
408
409
410
411
412
# File 'lib/lite/ruby/string.rb', line 406

def uri_domain
  return if empty?

  URI.join(self, '/').to_s.chomp('/')
rescue URI::BadURIError, URI::InvalidURIError
  nil
end

#uri_fragmentObject



414
415
416
417
418
419
420
# File 'lib/lite/ruby/string.rb', line 414

def uri_fragment
  return if empty?

  URI.parse(self).fragment
rescue URI::BadURIError, URI::InvalidURIError
  nil
end

#uri_hostObject



422
423
424
425
426
427
428
# File 'lib/lite/ruby/string.rb', line 422

def uri_host
  return if empty?

  URI.parse(self).host
rescue URI::BadURIError, URI::InvalidURIError
  nil
end

#uri_pathObject



430
431
432
433
434
435
436
# File 'lib/lite/ruby/string.rb', line 430

def uri_path
  return if empty?

  URI.parse(self).path
rescue URI::BadURIError, URI::InvalidURIError
  nil
end

#uri_queryObject



438
439
440
441
442
443
444
# File 'lib/lite/ruby/string.rb', line 438

def uri_query
  return if empty?

  URI.parse(self).query
rescue URI::BadURIError, URI::InvalidURIError
  nil
end

#uri_schemeObject



446
447
448
449
450
451
452
# File 'lib/lite/ruby/string.rb', line 446

def uri_scheme
  return if empty?

  URI.parse(self).scheme
rescue URI::BadURIError, URI::InvalidURIError
  nil
end

#variablizeObject



476
477
478
# File 'lib/lite/ruby/string.rb', line 476

def variablize
  "@#{gsub(/\W/, '_')}"
end

#variablize!Object



480
481
482
# File 'lib/lite/ruby/string.rb', line 480

def variablize!
  replace(variablize)
end

#wordsObject



463
464
465
# File 'lib/lite/ruby/string.rb', line 463

def words
  split(/\s+/)
end

#words_without_punctuationObject



467
468
469
470
471
472
473
474
# File 'lib/lite/ruby/string.rb', line 467

def words_without_punctuation
  str = dup
  str.gsub!(%r{[.?¿¡…!,::;—"。?!、‘“”„«»〈〉《》,/\[\]]}, ' ')
  str.gsub!('- ', ' ')
  str.squeeze!(' ')
  str.strip!
  str.words
end