active_object 2.2.5 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,7 +6,7 @@ class Hash
6
6
  each_key do |k|
7
7
  unless valid_keys.include?(k)
8
8
  raise ArgumentError,
9
- "Unknown key: #{k.inspect}. Valid keys are: #{valid_keys.map(&:inspect).join(', ')}"
9
+ "Unknown key: #{k.inspect}. Valid keys are: #{valid_keys.map(&:inspect).join(', '.freeze)}"
10
10
  end
11
11
  end
12
12
  end
@@ -41,6 +41,7 @@ class Hash
41
41
  block_given? && key?(current_key) ? block.call(current_key, this_value, other_value) : other_value
42
42
  end
43
43
  end
44
+
44
45
  self
45
46
  end
46
47
  end
@@ -59,11 +60,7 @@ class Hash
59
60
  end
60
61
 
61
62
  def nillify!
62
- each do |k, v|
63
- if !v.nil? && ((v.respond_to?(:blank?) && v.blank?) || (v.respond_to?(:to_s) && v.to_s.blank?))
64
- self[k] = nil
65
- end
66
- end
63
+ each { |k, v| self[k] = nil if !v.nil? && (v.try(:blank?) || v.try(:to_s).blank?) }
67
64
  end
68
65
 
69
66
  def only(*keys)
@@ -165,8 +162,8 @@ class Hash
165
162
 
166
163
  unless defined?(Rails)
167
164
  def stringify_keys!
168
- inject({}) do |options,(k, v)|
169
- options[k.to_s] = v
165
+ inject({}) do |options, (key, value)|
166
+ options[key.to_s] = value
170
167
  options
171
168
  end
172
169
  end
@@ -188,8 +185,8 @@ class Hash
188
185
 
189
186
  unless defined?(Rails)
190
187
  def symbolize_keys!
191
- inject({}) do |options, (k, v)|
192
- options[(k.to_sym rescue k) || k] = v
188
+ inject({}) do |options, (key, value)|
189
+ options[(key.to_sym rescue key) || key] = value
193
190
  options
194
191
  end
195
192
  end
@@ -200,8 +197,8 @@ class Hash
200
197
  end
201
198
 
202
199
  def symbolize_and_underscore_keys!
203
- inject({}) do |options, (k, v)|
204
- options[(k.to_s.gsub(" ", "_").underscore.to_sym rescue k) || k] = v
200
+ inject({}) do |options, (key, value)|
201
+ options[(key.to_s.gsub(' '.freeze, '_'.freeze).underscore.to_sym rescue key) || key] = value
205
202
  options
206
203
  end
207
204
  end
@@ -215,6 +212,7 @@ class Hash
215
212
  unless defined?(Rails)
216
213
  def transform_keys!(&block)
217
214
  return(enum_for(:transform_keys!)) unless block_given?
215
+
218
216
  keys.each { |k| self[yield(k)] = delete(k) }
219
217
  self
220
218
  end
@@ -229,6 +227,7 @@ class Hash
229
227
  unless defined?(Rails)
230
228
  def transform_values!(&block)
231
229
  return(enum_for(:transform_values!)) unless block_given?
230
+
232
231
  each { |k, v| self[k] = yield(v) }
233
232
  end
234
233
  end
@@ -1,24 +1,24 @@
1
1
  class Integer
2
2
 
3
3
  ROMAN_VALUES = {
4
- "M" => 1000,
5
- "CM" => 900,
6
- "D" => 500,
7
- "CD" => 400,
8
- "C" => 100,
9
- "XC" => 90,
10
- "L" => 50,
11
- "XL" => 40,
12
- "X" => 10,
13
- "IX" => 9,
14
- "V" => 5,
15
- "IV" => 4,
16
- "I" => 1
17
- }
4
+ 'M' => 1000,
5
+ 'CM' => 900,
6
+ 'D' => 500,
7
+ 'CD' => 400,
8
+ 'C' => 100,
9
+ 'XC' => 90,
10
+ 'L' => 50,
11
+ 'XL' => 40,
12
+ 'X' => 10,
13
+ 'IX' => 9,
14
+ 'V' => 5,
15
+ 'IV' => 4,
16
+ 'I' => 1
17
+ }.freeze
18
18
 
19
19
  def factorial
20
20
  return(1) if zero?
21
- 2.upto(self).inject(1) { |product, n| product * n }
21
+ 2.upto(self).inject(1) { |p, n| p * n }
22
22
  end
23
23
 
24
24
  def of(&block)
@@ -26,12 +26,10 @@ class Integer
26
26
  end
27
27
 
28
28
  def roman
29
- return("") if zero?
29
+ return(''.freeze) if zero?
30
30
  return("-#{(-self).roman}") if self < 0
31
31
 
32
- ROMAN_VALUES.each do |key, value|
33
- return(key + (self - value).roman) if value <= self
34
- end
32
+ ROMAN_VALUES.each { |k, v| return("#{k}#{(self - v).roman}") if v <= self }
35
33
  end
36
34
 
37
35
  def time
@@ -131,6 +131,14 @@ class Numeric
131
131
 
132
132
  alias_method :gram_in_grams, :grams_in_grams
133
133
 
134
+ def greater_than?(n)
135
+ self > n
136
+ end
137
+
138
+ def greater_than_or_equal_to?(n)
139
+ self >= n
140
+ end
141
+
134
142
  def hectograms_in_grams
135
143
  self * HECTO
136
144
  end
@@ -155,6 +163,10 @@ class Numeric
155
163
 
156
164
  alias_method :inch_in_inches, :inches_in_inches
157
165
 
166
+ def inside?(start, finish)
167
+ (start < self) && (self < finish)
168
+ end
169
+
158
170
  def kilobytes_in_bytes
159
171
  self * KILOBYTE
160
172
  end
@@ -173,6 +185,14 @@ class Numeric
173
185
 
174
186
  alias_method :kilogram_in_grams, :kilograms_in_grams
175
187
 
188
+ def less_than?(n)
189
+ self < n
190
+ end
191
+
192
+ def less_than_or_equal_to?(n)
193
+ self <= n
194
+ end
195
+
176
196
  def metric_tons_in_grams
177
197
  self * METRIC_TON
178
198
  end
@@ -245,14 +265,14 @@ class Numeric
245
265
  def ordinal
246
266
  abs_number = abs
247
267
 
248
- if (11..13).include?(abs_number % 100)
249
- "th"
268
+ if (11..13).cover?(abs_number % 100)
269
+ 'th'.freeze
250
270
  else
251
271
  case abs_number % 10
252
- when 1; "st"
253
- when 2; "nd"
254
- when 3; "rd"
255
- else "th"
272
+ when 1; 'st'.freeze
273
+ when 2; 'nd'.freeze
274
+ when 3; 'rd'.freeze
275
+ else 'th'.freeze
256
276
  end
257
277
  end
258
278
  end
@@ -270,6 +290,10 @@ class Numeric
270
290
 
271
291
  alias_method :ounce_in_ounces, :ounces_in_ounces
272
292
 
293
+ def outside?(start, finish)
294
+ (self < start) || (finish < self)
295
+ end
296
+
273
297
  def pad(options={})
274
298
  pad_number = options.fetch(:pad_number, 0)
275
299
  precision = options.fetch(:precision, 3)
@@ -280,13 +304,13 @@ class Numeric
280
304
  def pad_precision(options={})
281
305
  pad_number = options.fetch(:pad_number, 0)
282
306
  precision = options.fetch(:precision, 2)
283
- separator = options.fetch(:separator, ".")
307
+ separator = options.fetch(:separator, '.'.freeze)
284
308
  string = to_s
285
309
 
286
- string << separator unless string.include?(separator)
287
- ljust_count = string.split(separator).first.size
310
+ string << separator unless string.include?(separator)
311
+ ljust_count = string.split(separator).first.size
288
312
  ljust_count += (string.count(separator) + precision) if precision > 0
289
- num_count = string.size
313
+ num_count = string.size
290
314
  ljust_count >= num_count ? string.ljust(ljust_count, pad_number.to_s) : string[0..(ljust_count - 1)]
291
315
  end
292
316
 
@@ -345,18 +369,18 @@ class Numeric
345
369
  :terabyte, :terabytes,
346
370
  :petabyte, :petabytes,
347
371
  :exabyte, :exabytes
348
- ]
372
+ ].freeze
349
373
 
350
374
  unless valid_keys.include?(from) && valid_keys.include?(to)
351
375
  raise ArgumentError,
352
- "Unknown key(s): from: #{from.inspect} and to: #{to.inspect}. Valid keys are: #{valid_keys.map(&:inspect).join(', ')}"
376
+ "Unknown key(s): from: #{from.inspect} and to: #{to.inspect}. Valid keys are: #{valid_keys.map(&:inspect).join(', '.freeze)}"
353
377
  end
354
378
 
355
- to_f * 1.send("#{from}_in_bytes") / 1.send("#{to}_in_bytes")
379
+ to_f * 1.send("#{from}_in_bytes").to_f / 1.send("#{to}_in_bytes").to_f
356
380
  end
357
381
 
358
382
  def to_currency(options={})
359
- unit = options.fetch(:unit, "$")
383
+ unit = options.fetch(:unit, '$'.freeze)
360
384
 
361
385
  "#{unit}#{pad_precision(options.only(:precision))}"
362
386
  end
@@ -375,11 +399,11 @@ class Numeric
375
399
  :yard, :yards,
376
400
  :mile, :miles,
377
401
  :nautical_mile, :nautical_miles
378
- ]
402
+ ].freeze
379
403
 
380
404
  unless valid_keys.include?(from) && valid_keys.include?(to)
381
405
  raise ArgumentError,
382
- "Unknown key(s): from: #{from.inspect} and to: #{to.inspect}. Valid keys are: #{valid_keys.map(&:inspect).join(', ')}"
406
+ "Unknown key(s): from: #{from.inspect} and to: #{to.inspect}. Valid keys are: #{valid_keys.map(&:inspect).join(', '.freeze)}"
383
407
  end
384
408
 
385
409
  case to
@@ -387,15 +411,15 @@ class Numeric
387
411
  self
388
412
  when :meter, :meters, :millimeter, :millimeters, :centimeter, :centimeters, :decimeter, :decimeters, :decameter, :decameters, :hectometer, :hectometers, :kilometer, :kilometers
389
413
  if valid_keys.first(14).include?(from)
390
- to_f * 1.send("#{from}_in_meters") / 1.send("#{to}_in_meters")
414
+ to_f * 1.send("#{from}_in_meters").to_f / 1.send("#{to}_in_meters").to_f
391
415
  else
392
- to_f * ((1.send("#{from}_in_inches") * 0.0254) / 1.send("#{to}_in_meters"))
416
+ to_f * ((1.send("#{from}_in_inches").to_f * 0.0254) / 1.send("#{to}_in_meters").to_f)
393
417
  end
394
418
  when :inch, :inches, :foot, :feet, :yard, :yards, :mile, :miles, :nautical_mile, :nautical_miles
395
419
  if valid_keys.first(14).include?(from)
396
- to_f * ((1.send("#{from}_in_meters") * 39.3701) / 1.send("#{to}_in_inches"))
420
+ to_f * ((1.send("#{from}_in_meters").to_f * 39.3701) / 1.send("#{to}_in_inches").to_f)
397
421
  else
398
- to_f * 1.send("#{from}_in_inches") / 1.send("#{to}_in_inches")
422
+ to_f * 1.send("#{from}_in_inches").to_f / 1.send("#{to}_in_inches").to_f
399
423
  end
400
424
  end
401
425
  end
@@ -414,11 +438,11 @@ class Numeric
414
438
  :pound, :pounds,
415
439
  :stone, :stones,
416
440
  :ton, :tons
417
- ]
441
+ ].freeze
418
442
 
419
443
  unless valid_keys.include?(from) && valid_keys.include?(to)
420
444
  raise ArgumentError,
421
- "Unknown key(s): from: #{from.inspect} and to: #{to.inspect}. Valid keys are: #{valid_keys.map(&:inspect).join(', ')}"
445
+ "Unknown key(s): from: #{from.inspect} and to: #{to.inspect}. Valid keys are: #{valid_keys.map(&:inspect).join(', '.freeze)}"
422
446
  end
423
447
 
424
448
  case to
@@ -426,21 +450,22 @@ class Numeric
426
450
  self
427
451
  when :gram, :grams, :milligram, :milligrams, :centigram, :centigrams, :decigram, :decigrams, :decagram, :decagrams, :hectogram, :hectograms, :kilogram, :kilograms, :metric_ton, :metric_tons
428
452
  if valid_keys.first(16).include?(from)
429
- to_f * 1.send("#{from}_in_grams") / 1.send("#{to}_in_grams")
453
+ to_f * 1.send("#{from}_in_grams").to_f / 1.send("#{to}_in_grams").to_f
430
454
  else
431
- to_f * ((1.send("#{from}_in_ounces") * 28.3495) / 1.send("#{to}_in_grams"))
455
+ to_f * ((1.send("#{from}_in_ounces") * 28.3495).to_f / 1.send("#{to}_in_grams").to_f)
432
456
  end
433
457
  when :ounce, :ounces, :pound, :pounds, :stone, :stones, :ton, :tons
434
458
  if valid_keys.first(16).include?(from)
435
- to_f * ((1.send("#{from}_in_grams") * 0.035274) / 1.send("#{to}_in_ounces"))
459
+ to_f * ((1.send("#{from}_in_grams") * 0.035274).to_f / 1.send("#{to}_in_ounces").to_f)
436
460
  else
437
- to_f * 1.send("#{from}_in_ounces") / 1.send("#{to}_in_ounces")
461
+ to_f * 1.send("#{from}_in_ounces").to_f / 1.send("#{to}_in_ounces").to_f
438
462
  end
439
463
  end
440
464
  end
441
465
 
442
466
  def to_nearest_value(values=[])
443
467
  return(self) if values.size.zero?
468
+
444
469
  value = values.first
445
470
  difference = (self - value).abs
446
471
 
@@ -450,32 +475,35 @@ class Numeric
450
475
  value = v
451
476
  end
452
477
  end
478
+
453
479
  value
454
480
  end
455
481
 
456
482
  def to_percentage(options={})
457
- unit = options.fetch(:unit, "%")
483
+ unit = options.fetch(:unit, '%'.freeze)
458
484
 
459
485
  "#{pad_precision(options.only(:precision))}#{unit}"
460
486
  end
461
487
 
462
488
  def to_temperature(from, to)
463
- valid_keys = [:celsius, :fahrenheit, :kelvin]
489
+ valid_keys = [:celsius, :fahrenheit, :kelvin].freeze
464
490
 
465
491
  unless valid_keys.include?(from) && valid_keys.include?(to)
466
492
  raise ArgumentError,
467
- "Unknown key(s): from: #{from.inspect} and to: #{to.inspect}. Valid keys are: #{valid_keys.map(&:inspect).join(', ')}"
493
+ "Unknown key(s): from: #{from.inspect} and to: #{to.inspect}. Valid keys are: #{valid_keys.map(&:inspect).join(', '.freeze)}"
468
494
  end
469
495
 
496
+ number = to_f
497
+
470
498
  case to
471
499
  when from
472
500
  self
473
501
  when :celsius
474
- from == :kelvin ? (to_f - 273.15) : ((to_f - 32.0) * 5.0 / 9.0)
502
+ from == :kelvin ? (number - 273.15) : ((number - 32.0) * 5.0 / 9.0)
475
503
  when :fahrenheit
476
- from == :kelvin ? (1.8 * (to_f - 273.15) + 32.0) : ((to_f * 9.0 / 5.0) + 32.0)
504
+ from == :kelvin ? (1.8 * (number - 273.15) + 32.0) : ((number * 9.0 / 5.0) + 32.0)
477
505
  when :kelvin
478
- from == :celsius ? (to_f + 273.15) : (((to_f - 32.0) * 5.0 / 9.0) + 273.15)
506
+ from == :celsius ? (number + 273.15) : (((number - 32.0) * 5.0 / 9.0) + 273.15)
479
507
  end
480
508
  end
481
509
 
@@ -490,14 +518,14 @@ class Numeric
490
518
  :decade, :decades,
491
519
  :century, :centuries,
492
520
  :millennium, :millenniums
493
- ]
521
+ ].freeze
494
522
 
495
523
  unless valid_keys.include?(from) && valid_keys.include?(to)
496
524
  raise ArgumentError,
497
- "Unknown key(s): from: #{from.inspect} and to: #{to.inspect}. Valid keys are: #{valid_keys.map(&:inspect).join(', ')}"
525
+ "Unknown key(s): from: #{from.inspect} and to: #{to.inspect}. Valid keys are: #{valid_keys.map(&:inspect).join(', '.freeze)}"
498
526
  end
499
527
 
500
- to_f * 1.send("#{from}_in_seconds") / 1.send("#{to}_in_seconds")
528
+ to_f * 1.send("#{from}_in_seconds").to_f / 1.send("#{to}_in_seconds").to_f
501
529
  end
502
530
 
503
531
  def tons_in_ounces
@@ -517,7 +545,7 @@ class Numeric
517
545
 
518
546
  a, b = to_f, number.to_f
519
547
 
520
- (a.zero? || b.zero?) ? (a - b).abs < epsilon : (a / b - 1).abs < epsilon
548
+ (a.zero? || b.zero?) ? ((a - b).abs < epsilon) : ((a / b - 1).abs < epsilon)
521
549
  end
522
550
 
523
551
  def yards_in_inches
@@ -8,12 +8,12 @@ class Object
8
8
  def blank?
9
9
  object = self
10
10
  object = object.strip if respond_to?(:strip)
11
- respond_to?(:empty?) ? !!object.empty? : !object
11
+ respond_to?(:empty?) ? object.empty? : !object
12
12
  end
13
13
  end
14
14
 
15
15
  def boolean?
16
- [false, true, nil, 0, 1].include?(self)
16
+ [false, true, nil, 0, 1].freeze.include?(self)
17
17
  end
18
18
 
19
19
  def false?
@@ -21,7 +21,7 @@ class Object
21
21
  end
22
22
 
23
23
  def falsey?
24
- [false, nil, 0].include?(self)
24
+ [false, nil, 0].freeze.include?(self)
25
25
  end
26
26
 
27
27
  def float?
@@ -2,13 +2,8 @@ class String
2
2
 
3
3
  def any?(*keys)
4
4
  included = false
5
-
6
- keys.flatten.each do |key|
7
- (included = true) if include?(key)
8
- break if included
9
- end
10
-
11
- return(included)
5
+ keys.flatten.each { |k| break if included = include?(k) }
6
+ included
12
7
  end
13
8
 
14
9
  unless defined?(Rails)
@@ -19,10 +14,12 @@ class String
19
14
 
20
15
  unless defined?(Rails)
21
16
  def camelize(first_letter=:upper)
22
- if first_letter != :lower
23
- to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
17
+ if first_letter.to_sym != :lower
18
+ to_s.
19
+ gsub(/\/(.?)/) { "::#{$1.upcase}" }.
20
+ gsub(/(?:^|_)(.)/) { $1.upcase }
24
21
  else
25
- to_s.first.chr.downcase + camelize(self)[1..-1]
22
+ "#{to_s.first.chr.downcase}#{camelize(self)[1..-1]}"
26
23
  end
27
24
  end
28
25
 
@@ -39,7 +36,9 @@ class String
39
36
 
40
37
  unless defined?(Rails)
41
38
  def classify
42
- to_s.sub(/.*\./, "").camelize
39
+ to_s.
40
+ sub(/.*\./, ''.freeze).
41
+ camelize
43
42
  end
44
43
  end
45
44
 
@@ -57,7 +56,7 @@ class String
57
56
 
58
57
  unless defined?(Rails)
59
58
  def dasherize
60
- gsub(/_/, "-")
59
+ gsub(/_/, '-'.freeze)
61
60
  end
62
61
  end
63
62
 
@@ -69,7 +68,7 @@ class String
69
68
 
70
69
  unless defined?(Rails)
71
70
  def deconstantize
72
- to_s[0, rindex('::') || 0]
71
+ to_s[0, rindex('::'.freeze) || 0]
73
72
  end
74
73
  end
75
74
 
@@ -81,7 +80,7 @@ class String
81
80
 
82
81
  unless defined?(Rails)
83
82
  def demodulize
84
- to_s.gsub(/^.*::/, "")
83
+ to_s.gsub(/^.*::/, ''.freeze)
85
84
  end
86
85
  end
87
86
 
@@ -102,10 +101,11 @@ class String
102
101
 
103
102
  def ellipsize(ellipsize_at, options={})
104
103
  return(self)if size <= ellipsize_at
105
- separator = options.fetch(:separator, "...")
104
+
105
+ separator = options.fetch(:separator, '...'.freeze)
106
106
  offset = options.fetch(:offset, 4)
107
107
 
108
- "#{self[0,offset]}#{separator}#{self[-offset,offset]}"
108
+ "#{self[0, offset]}#{separator}#{self[-offset, offset]}"
109
109
  end
110
110
 
111
111
  unless defined?(Rails)
@@ -116,7 +116,8 @@ class String
116
116
 
117
117
  unless defined?(Rails)
118
118
  def first(limit=1)
119
- return("") if limit.zero?
119
+ return(''.freeze) if limit.zero?
120
+
120
121
  limit >= size ? self.dup : to(limit - 1)
121
122
  end
122
123
  end
@@ -130,8 +131,8 @@ class String
130
131
  unless defined?(Rails)
131
132
  def humanize(options = {})
132
133
  underscore.
133
- gsub(/_id\z/, "").
134
- tr("_", " ").
134
+ gsub(/_id\z/, ''.freeze).
135
+ tr('_'.freeze, ' '.freeze).
135
136
  gsub(/([a-z\d]*)/i) { |s| s.downcase }.
136
137
  gsub(/\A\w/) { |s| options.fetch(:capitalize, true) ? s.upcase : s }
137
138
  end
@@ -145,8 +146,9 @@ class String
145
146
 
146
147
  unless defined?(Rails)
147
148
  def indent(amount, indent_string=nil, indent_empty_lines=false)
148
- indent_string = indent_string || self[/^[ \t]/] || " "
149
+ indent_string = indent_string || self[/^[ \t]/] || ' '.freeze
149
150
  substitutes = indent_empty_lines ? /^/ : /^(?!$)/
151
+
150
152
  gsub(substitutes, indent_string * amount)
151
153
  end
152
154
  end
@@ -159,7 +161,8 @@ class String
159
161
 
160
162
  unless defined?(Rails)
161
163
  def last(limit=1)
162
- return("") if limit.zero?
164
+ return(''.freeze) if limit.zero?
165
+
163
166
  limit >= size ? self.dup : from(-limit)
164
167
  end
165
168
  end
@@ -181,30 +184,32 @@ class String
181
184
  end
182
185
 
183
186
  unless defined?(Rails)
184
- def parameterize(sep="-")
187
+ def parameterize(seperator='-'.freeze)
185
188
  underscore.
186
- gsub(/\s+/, "_").
187
- gsub("_", sep).
189
+ gsub(/\s+/, '_'.freeze).
190
+ gsub('_'.freeze, seperator).
188
191
  downcase
189
192
  end
190
193
  end
191
194
 
192
195
  unless defined?(Rails)
193
- def parameterize!(sep="-")
194
- replace(parameterize(sep))
196
+ def parameterize!(seperator='-'.freeze)
197
+ replace(parameterize(seperator))
195
198
  end
196
199
  end
197
200
 
198
- def pollute(delimiter="^--^--^")
199
- split('').map { |c| "#{c}#{delimiter}" }.join
201
+ def pollute(delimiter='^--^--^'.freeze)
202
+ split(''.freeze).map { |c| "#{c}#{delimiter}" }.join
203
+ end
204
+
205
+ def pollute!(delimiter='^--^--^'.freeze)
206
+ replace(pollute(delimiter))
200
207
  end
201
208
 
202
209
  unless defined?(Rails)
203
210
  def remove(*patterns)
204
211
  string = dup
205
- patterns.flatten.each do |pattern|
206
- string.gsub!(pattern, "")
207
- end
212
+ patterns.flatten.each { |p| string.gsub!(p, ''.freeze) }
208
213
  string
209
214
  end
210
215
  end
@@ -216,26 +221,24 @@ class String
216
221
  end
217
222
 
218
223
  def remove_tags
219
- gsub(/<\/?[^>]*>/, "")
224
+ gsub(/<\/?[^>]*>/, ''.freeze)
220
225
  end
221
226
 
222
227
  def remove_tags!
223
228
  replace(remove_tags)
224
229
  end
225
230
 
226
- def sample(separator=' ')
231
+ def sample(separator=' '.freeze)
227
232
  split(separator).sample
228
233
  end
229
234
 
230
- def sample!(separator=' ')
235
+ def sample!(separator=' '.freeze)
231
236
  replace(sample(separator))
232
237
  end
233
238
 
234
239
  def shift(*patterns)
235
240
  string = dup
236
- patterns.flatten.each do |pattern|
237
- string.sub!(pattern, "")
238
- end
241
+ patterns.flatten.each { |p| string.sub!(p, ''.freeze) }
239
242
  string
240
243
  end
241
244
 
@@ -243,19 +246,19 @@ class String
243
246
  replace(shift(*patterns))
244
247
  end
245
248
 
246
- def shuffle(separator='')
249
+ def shuffle(separator=''.freeze)
247
250
  split(separator).shuffle.join
248
251
  end
249
252
 
250
- def shuffle!(separator='')
253
+ def shuffle!(separator=''.freeze)
251
254
  replace(shuffle(separator))
252
255
  end
253
256
 
254
257
  def slugify
255
- gsub(/[^\x00-\x7F]+/, '').
256
- gsub(/[^\w_ \-]+/i, '').
257
- gsub(/[ \-]+/i, '-').
258
- gsub(/^\-|\-$/i, '').
258
+ gsub(/[^\x00-\x7F]+/, ''.freeze).
259
+ gsub(/[^\w_ \-]+/i, ''.freeze).
260
+ gsub(/[ \-]+/i, '-'.freeze).
261
+ gsub(/^\-|\-$/i, ''.freeze).
259
262
  downcase
260
263
  end
261
264
 
@@ -265,7 +268,8 @@ class String
265
268
 
266
269
  unless defined?(Rails)
267
270
  def squish
268
- strip.gsub(/\s+/, ' ')
271
+ strip.
272
+ gsub(/\s+/, ' '.freeze)
269
273
  end
270
274
  end
271
275
 
@@ -303,14 +307,14 @@ class String
303
307
  def truncate(truncate_at, options={})
304
308
  return(dup) unless size > truncate_at
305
309
 
306
- omission = options.fetch(:omission, "...")
310
+ omission = options.fetch(:omission, '...'.freeze)
307
311
  size_with_room_for_omission = truncate_at - omission.size
308
312
 
309
313
  stop = if options.fetch(:separator, false)
310
- rindex(options.fetch(:separator, ''), size_with_room_for_omission) || size_with_room_for_omission
311
- else
312
- size_with_room_for_omission
313
- end
314
+ rindex(options.fetch(:separator, ''.freeze), size_with_room_for_omission) || size_with_room_for_omission
315
+ else
316
+ size_with_room_for_omission
317
+ end
314
318
 
315
319
  "#{self[0, stop]}#{omission}"
316
320
  end
@@ -318,11 +322,11 @@ class String
318
322
 
319
323
  unless defined?(Rails)
320
324
  def truncate_words(words_count, options={})
321
- sep = options[:separator] || /\s+/
325
+ sep = options.fetch(:separator, /\s+/)
322
326
  sep = Regexp.escape(sep.to_s) unless Regexp === sep
323
327
 
324
328
  if self =~ /\A((?:.+?#{sep}){#{words_count - 1}}.+?)#{sep}.*/m
325
- $1 + (options[:omission] || '...')
329
+ "#{$1}#{options.fetch(:omission, '...'.freeze)}"
326
330
  else
327
331
  dup
328
332
  end
@@ -331,10 +335,10 @@ class String
331
335
 
332
336
  unless defined?(Rails)
333
337
  def underscore
334
- gsub(/::/, '/').
335
- gsub(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2').
336
- gsub(/([a-z\d])([A-Z])/,'\1_\2').
337
- tr("-", "_").
338
+ gsub(/::/, '/'.freeze).
339
+ gsub(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2'.freeze).
340
+ gsub(/([a-z\d])([A-Z])/, '\1_\2'.freeze).
341
+ tr('-'.freeze, '_'.freeze).
338
342
  downcase
339
343
  end
340
344
  end
@@ -345,8 +349,12 @@ class String
345
349
  end
346
350
  end
347
351
 
348
- def unpollute(delimiter="^--^--^")
349
- gsub(delimiter, "")
352
+ def unpollute(delimiter='^--^--^'.freeze)
353
+ gsub(delimiter, ''.freeze)
354
+ end
355
+
356
+ def unpollute!(delimiter='^--^--^'.freeze)
357
+ replace(unpollute(delimiter))
350
358
  end
351
359
 
352
360
  def upcase?