lite-ruby 1.0.29 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +4 -0
- data/CHANGELOG.md +32 -2
- data/Gemfile.lock +45 -43
- data/README.md +1 -0
- data/docs/ARRAY.md +12 -10
- data/docs/HASH.md +4 -4
- data/docs/NUMERIC.md +0 -10
- data/docs/TIME.md +17 -17
- data/lib/lite/ruby.rb +4 -1
- data/lib/lite/ruby/array.rb +14 -100
- data/lib/lite/ruby/boolean.rb +4 -4
- data/lib/lite/ruby/enumerable.rb +15 -49
- data/lib/lite/ruby/hash.rb +34 -108
- data/lib/lite/ruby/helpers/time_helper.rb +21 -21
- data/lib/lite/ruby/numeric.rb +13 -36
- data/lib/lite/ruby/object.rb +4 -38
- data/lib/lite/ruby/open_struct.rb +1 -2
- data/lib/lite/ruby/range.rb +2 -4
- data/lib/lite/ruby/safe/array.rb +101 -0
- data/lib/lite/ruby/safe/enumerable.rb +42 -0
- data/lib/lite/ruby/safe/hash.rb +83 -0
- data/lib/lite/ruby/safe/object.rb +41 -0
- data/lib/lite/ruby/safe/range.rb +9 -0
- data/lib/lite/ruby/safe/string.rb +184 -0
- data/lib/lite/ruby/string.rb +45 -191
- data/lib/lite/ruby/version.rb +1 -1
- metadata +8 -2
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Object
|
4
|
+
|
5
|
+
def blank?
|
6
|
+
object = self
|
7
|
+
object = object.strip if respond_to?(:strip)
|
8
|
+
return object.empty? if respond_to?(:empty?)
|
9
|
+
|
10
|
+
!object
|
11
|
+
end
|
12
|
+
|
13
|
+
def deep_dup
|
14
|
+
duplicable? ? dup : self
|
15
|
+
end
|
16
|
+
|
17
|
+
def duplicable?
|
18
|
+
true
|
19
|
+
end
|
20
|
+
|
21
|
+
def present?
|
22
|
+
!blank?
|
23
|
+
end
|
24
|
+
|
25
|
+
def presence
|
26
|
+
self if present?
|
27
|
+
end
|
28
|
+
|
29
|
+
def try(*obj, &block)
|
30
|
+
try!(*obj, &block) if obj.empty? || respond_to?(obj.first)
|
31
|
+
end
|
32
|
+
|
33
|
+
def try!(*obj, &block)
|
34
|
+
if obj.empty? && defined?(yield)
|
35
|
+
block.arity.zero? ? instance_eval(&block) : yield(self)
|
36
|
+
else
|
37
|
+
public_send(*obj, &block)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,184 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class String
|
4
|
+
|
5
|
+
def at(position)
|
6
|
+
self[position]
|
7
|
+
end
|
8
|
+
|
9
|
+
def camelize(first_letter = :upper)
|
10
|
+
case first_letter
|
11
|
+
when :upper, true then modulize.gsub(/(\A|\s)([a-z])/) { $1 + $2.upcase }
|
12
|
+
when :lower, false then modulize.gsub(/(\A|\s)([A-Z])/) { $1 + $2.downcase }
|
13
|
+
else modulize
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def classify
|
18
|
+
str = dup
|
19
|
+
str.sub!(/.*\./, '')
|
20
|
+
str.camelize!
|
21
|
+
str || self
|
22
|
+
end
|
23
|
+
|
24
|
+
def constantize
|
25
|
+
Object.const_get(camelize)
|
26
|
+
end
|
27
|
+
|
28
|
+
def dasherize
|
29
|
+
underscore.tr('_', '-')
|
30
|
+
end
|
31
|
+
|
32
|
+
def deconstantize
|
33
|
+
[0, rindex('::') || 0]
|
34
|
+
end
|
35
|
+
|
36
|
+
def demodulize
|
37
|
+
gsub(/^.*::/, '')
|
38
|
+
end
|
39
|
+
|
40
|
+
def first(limit = 1)
|
41
|
+
if limit.zero?
|
42
|
+
''
|
43
|
+
elsif limit >= length
|
44
|
+
self
|
45
|
+
else
|
46
|
+
to(limit - 1)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def from(position)
|
51
|
+
self[position..-1]
|
52
|
+
end
|
53
|
+
|
54
|
+
def humanize(capitalize: true)
|
55
|
+
str = dup
|
56
|
+
str.underscore!
|
57
|
+
str.delete_suffix!('_id')
|
58
|
+
str.tr!('_', ' ')
|
59
|
+
str.squish!
|
60
|
+
str.gsub!(/([a-z\d]*)/i, &:downcase)
|
61
|
+
str.gsub!(/\A\w/) { |s| capitalize ? s.upcase : s }
|
62
|
+
str || self
|
63
|
+
end
|
64
|
+
|
65
|
+
def indent(amount, seperator = ' ')
|
66
|
+
dup.indent!(amount, seperator)
|
67
|
+
end
|
68
|
+
|
69
|
+
def indent!(amount, seperator = ' ')
|
70
|
+
if amount >= 0
|
71
|
+
gsub!(/^/, seperator * amount)
|
72
|
+
else
|
73
|
+
gsub!(/^#{Regexp.escape(seperator)}{0,#{-amount}}/, '')
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def last(limit = 1)
|
78
|
+
if limit.zero?
|
79
|
+
''
|
80
|
+
elsif limit >= length
|
81
|
+
self
|
82
|
+
else
|
83
|
+
from(-limit)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def parameterize(separator: '-')
|
88
|
+
str = dup
|
89
|
+
str.underscore!
|
90
|
+
str.gsub!(/\s+/, separator)
|
91
|
+
str.downcase!
|
92
|
+
str || self
|
93
|
+
end
|
94
|
+
|
95
|
+
def remove(*patterns)
|
96
|
+
dup.remove!(*patterns)
|
97
|
+
end
|
98
|
+
|
99
|
+
def remove!(*patterns)
|
100
|
+
patterns.each_with_object(self) do |pat, str|
|
101
|
+
pat.is_a?(Range) ? str.slice!(pat) : str.gsub!(pat, '')
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def squish
|
106
|
+
dup.squish!
|
107
|
+
end
|
108
|
+
|
109
|
+
def squish!
|
110
|
+
strip!
|
111
|
+
gsub!(/\s+/, ' ') || self
|
112
|
+
end
|
113
|
+
|
114
|
+
def titleize
|
115
|
+
str = dup
|
116
|
+
str.underscore!
|
117
|
+
str.humanize!
|
118
|
+
str.gsub!(/\b(?<!['’`])[a-z]/) { $&.capitalize }
|
119
|
+
str || self
|
120
|
+
end
|
121
|
+
|
122
|
+
def to(position)
|
123
|
+
self[0..position]
|
124
|
+
end
|
125
|
+
|
126
|
+
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
|
127
|
+
# rubocop:disable Metrics/MethodLength, Metrics/PerceivedComplexity
|
128
|
+
def to_time(form = :local)
|
129
|
+
parts = Date.parse(self, false)
|
130
|
+
used_keys = %i[year mon mday hour min sec sec_fraction offset]
|
131
|
+
return if (parts.keys & used_keys).empty?
|
132
|
+
|
133
|
+
now = Time.now
|
134
|
+
time = Time.new(
|
135
|
+
parts[:year] || now.year,
|
136
|
+
parts[:mon] || now.month,
|
137
|
+
parts[:mday] || now.day,
|
138
|
+
parts[:hour] || 0,
|
139
|
+
parts[:min] || 0,
|
140
|
+
(parts[:sec] || 0) + (parts[:sec_fraction] || 0),
|
141
|
+
parts[:offset] || (form == :utc ? 0 : nil)
|
142
|
+
)
|
143
|
+
|
144
|
+
form == :utc ? time.utc : time.to_time
|
145
|
+
end
|
146
|
+
# rubocop:enable Metrics/MethodLength, Metrics/PerceivedComplexity
|
147
|
+
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
|
148
|
+
|
149
|
+
def truncate(truncate_at, options = {})
|
150
|
+
return self unless length > truncate_at
|
151
|
+
|
152
|
+
omission = options[:omission] || '...'
|
153
|
+
seperator = options[:separator]
|
154
|
+
|
155
|
+
size_with_room_for_omission = truncate_at - omission.length
|
156
|
+
|
157
|
+
stop = if seperator
|
158
|
+
rindex(seperator || '', size_with_room_for_omission) || size_with_room_for_omission
|
159
|
+
else
|
160
|
+
size_with_room_for_omission
|
161
|
+
end
|
162
|
+
|
163
|
+
"#{self[0, stop]}#{omission}"
|
164
|
+
end
|
165
|
+
|
166
|
+
def underscore
|
167
|
+
str = dup
|
168
|
+
str.camelize!
|
169
|
+
str.gsub!(/::/, '/')
|
170
|
+
str.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2')
|
171
|
+
str.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
|
172
|
+
str.tr!('-', '_')
|
173
|
+
str.downcase!
|
174
|
+
str || self
|
175
|
+
end
|
176
|
+
|
177
|
+
alias camelcase camelize
|
178
|
+
alias ends_with? end_with?
|
179
|
+
alias snakecase underscore
|
180
|
+
alias starts_with? start_with?
|
181
|
+
alias titlecase titleize
|
182
|
+
alias to_t to_time unless defined?(to_t)
|
183
|
+
|
184
|
+
end
|
data/lib/lite/ruby/string.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# frozen_string_literal: false
|
2
2
|
|
3
3
|
if Lite::Ruby.configuration.monkey_patches.include?('string')
|
4
|
+
require 'lite/ruby/safe/string' unless defined?(ActiveSupport)
|
5
|
+
|
4
6
|
class String
|
5
7
|
|
6
8
|
TRANSLITERATIONS ||= {
|
@@ -34,65 +36,33 @@ if Lite::Ruby.configuration.monkey_patches.include?('string')
|
|
34
36
|
}.freeze
|
35
37
|
|
36
38
|
def acronym
|
37
|
-
|
39
|
+
gsub(/(([a-zA-Z0-9])([a-zA-Z0-9])*)./, '\\2') || self
|
38
40
|
end
|
39
41
|
|
40
42
|
def acronym!
|
41
|
-
|
43
|
+
replace(acronym)
|
42
44
|
end
|
43
45
|
|
44
46
|
def any?(*keys)
|
45
47
|
keys.any? { |key| include?(key) }
|
46
48
|
end
|
47
49
|
|
48
|
-
def at(position)
|
49
|
-
self[position]
|
50
|
-
end
|
51
|
-
|
52
|
-
def camelize(first_letter = :upper)
|
53
|
-
case first_letter
|
54
|
-
when :upper, true then modulize.gsub(/(\A|\s)([a-z])/) { $1 + $2.upcase }
|
55
|
-
when :lower, false then modulize.gsub(/(\A|\s)([A-Z])/) { $1 + $2.downcase }
|
56
|
-
end || modulize
|
57
|
-
end
|
58
|
-
|
59
|
-
alias camelcase camelize
|
60
|
-
|
61
50
|
def camelize!(first_letter = :upper)
|
62
51
|
replace(camelize(first_letter))
|
63
52
|
end
|
64
53
|
|
65
|
-
alias camelcase! camelize!
|
66
|
-
|
67
54
|
def capitalized?
|
68
55
|
capitalize == self
|
69
56
|
end
|
70
57
|
|
71
|
-
def classify
|
72
|
-
dup.classify!
|
73
|
-
end
|
74
|
-
|
75
58
|
def classify!
|
76
|
-
|
77
|
-
camelize!
|
78
|
-
end
|
79
|
-
|
80
|
-
def constantize
|
81
|
-
Object.const_get(camelize)
|
82
|
-
end
|
83
|
-
|
84
|
-
def dasherize
|
85
|
-
underscore.tr('_', '-')
|
59
|
+
replace(classify)
|
86
60
|
end
|
87
61
|
|
88
62
|
def dasherize!
|
89
63
|
replace(dasherize)
|
90
64
|
end
|
91
65
|
|
92
|
-
def deconstantize
|
93
|
-
[0, rindex('::') || 0]
|
94
|
-
end
|
95
|
-
|
96
66
|
def deconstantize!
|
97
67
|
replace(deconstantize)
|
98
68
|
end
|
@@ -106,10 +76,6 @@ if Lite::Ruby.configuration.monkey_patches.include?('string')
|
|
106
76
|
self
|
107
77
|
end
|
108
78
|
|
109
|
-
def demodulize
|
110
|
-
gsub(/^.*::/, '')
|
111
|
-
end
|
112
|
-
|
113
79
|
def demodulize!
|
114
80
|
replace(demodulize)
|
115
81
|
end
|
@@ -137,24 +103,10 @@ if Lite::Ruby.configuration.monkey_patches.include?('string')
|
|
137
103
|
"#{self[0, offset]}#{separator}#{self[-offset, offset]}"
|
138
104
|
end
|
139
105
|
|
140
|
-
def first(limit = 1)
|
141
|
-
if limit.zero?
|
142
|
-
''
|
143
|
-
elsif limit >= length
|
144
|
-
self
|
145
|
-
else
|
146
|
-
to(limit - 1)
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
106
|
def format(*args)
|
151
107
|
super(self, *args.flatten)
|
152
108
|
end
|
153
109
|
|
154
|
-
def from(position)
|
155
|
-
self[position..-1]
|
156
|
-
end
|
157
|
-
|
158
110
|
def headerize
|
159
111
|
squish.each_word(&:capitalize!).join(' ')
|
160
112
|
end
|
@@ -163,29 +115,8 @@ if Lite::Ruby.configuration.monkey_patches.include?('string')
|
|
163
115
|
replace(headerize)
|
164
116
|
end
|
165
117
|
|
166
|
-
def humanize(options = {})
|
167
|
-
dup.humanize!(options)
|
168
|
-
end
|
169
|
-
|
170
118
|
def humanize!(capitalize: true)
|
171
|
-
|
172
|
-
gsub!(/_id\z/, '')
|
173
|
-
tr!('_', ' ')
|
174
|
-
squish!
|
175
|
-
gsub!(/([a-z\d]*)/i, &:downcase)
|
176
|
-
gsub!(/\A\w/) { |str| capitalize ? str.upcase : str } || self
|
177
|
-
end
|
178
|
-
|
179
|
-
def indent(amount, seperator = ' ')
|
180
|
-
dup.indent!(amount, seperator)
|
181
|
-
end
|
182
|
-
|
183
|
-
def indent!(amount, seperator = ' ')
|
184
|
-
if amount >= 0
|
185
|
-
gsub!(/^/, seperator * amount)
|
186
|
-
else
|
187
|
-
gsub!(/^#{Regexp.escape(seperator)}{0,#{-amount}}/, '')
|
188
|
-
end
|
119
|
+
replace(humanize(capitalize: capitalize))
|
189
120
|
end
|
190
121
|
|
191
122
|
def index_all(pattern)
|
@@ -206,8 +137,6 @@ if Lite::Ruby.configuration.monkey_patches.include?('string')
|
|
206
137
|
dup.labelize!(capitalize: capitalize)
|
207
138
|
end
|
208
139
|
|
209
|
-
alias labelcase labelize
|
210
|
-
|
211
140
|
def labelize!(capitalize: true)
|
212
141
|
underscore!
|
213
142
|
tr!('_', ' ')
|
@@ -217,18 +146,6 @@ if Lite::Ruby.configuration.monkey_patches.include?('string')
|
|
217
146
|
gsub!(/ id\z/, ' ID') || self
|
218
147
|
end
|
219
148
|
|
220
|
-
alias labelcase! labelize!
|
221
|
-
|
222
|
-
def last(limit = 1)
|
223
|
-
if limit.zero?
|
224
|
-
''
|
225
|
-
elsif limit >= length
|
226
|
-
self
|
227
|
-
else
|
228
|
-
from(-limit)
|
229
|
-
end
|
230
|
-
end
|
231
|
-
|
232
149
|
def lchomp(match)
|
233
150
|
dup.lchomp!(match)
|
234
151
|
end
|
@@ -267,6 +184,16 @@ if Lite::Ruby.configuration.monkey_patches.include?('string')
|
|
267
184
|
!upcase? && !downcase?
|
268
185
|
end
|
269
186
|
|
187
|
+
def non_possessive
|
188
|
+
dup.non_possessive!
|
189
|
+
end
|
190
|
+
|
191
|
+
def non_possessive!
|
192
|
+
return self unless possessive?
|
193
|
+
|
194
|
+
chomp!("'s") || chomp!("'") || self
|
195
|
+
end
|
196
|
+
|
270
197
|
def ordinal
|
271
198
|
to_i.ordinal
|
272
199
|
end
|
@@ -275,14 +202,8 @@ if Lite::Ruby.configuration.monkey_patches.include?('string')
|
|
275
202
|
to_i.ordinalize
|
276
203
|
end
|
277
204
|
|
278
|
-
def parameterize(separator: '-')
|
279
|
-
dup.parameterize!(separator: separator)
|
280
|
-
end
|
281
|
-
|
282
205
|
def parameterize!(separator: '-')
|
283
|
-
|
284
|
-
gsub!(/\s+/, separator)
|
285
|
-
downcase! || self
|
206
|
+
replace(parameterize(separator: separator))
|
286
207
|
end
|
287
208
|
|
288
209
|
def pathize
|
@@ -311,16 +232,6 @@ if Lite::Ruby.configuration.monkey_patches.include?('string')
|
|
311
232
|
self[-1]
|
312
233
|
end
|
313
234
|
|
314
|
-
def non_possessive
|
315
|
-
dup.non_possessive!
|
316
|
-
end
|
317
|
-
|
318
|
-
def non_possessive!
|
319
|
-
return self unless possessive?
|
320
|
-
|
321
|
-
chomp!("'s") || chomp!("'") || self
|
322
|
-
end
|
323
|
-
|
324
235
|
def possessive
|
325
236
|
return self if possessive?
|
326
237
|
|
@@ -369,7 +280,7 @@ if Lite::Ruby.configuration.monkey_patches.include?('string')
|
|
369
280
|
b = f
|
370
281
|
|
371
282
|
if amount.odd?
|
372
|
-
f = "'"
|
283
|
+
f = "'#{f}"
|
373
284
|
b += "'"
|
374
285
|
end
|
375
286
|
else
|
@@ -384,16 +295,6 @@ if Lite::Ruby.configuration.monkey_patches.include?('string')
|
|
384
295
|
replace(quote(type, amount))
|
385
296
|
end
|
386
297
|
|
387
|
-
def remove(*patterns)
|
388
|
-
dup.remove!(*patterns)
|
389
|
-
end
|
390
|
-
|
391
|
-
def remove!(*patterns)
|
392
|
-
patterns.each_with_object(self) do |pat, str|
|
393
|
-
pat.is_a?(Range) ? str.slice!(pat) : str.gsub!(pat, '')
|
394
|
-
end
|
395
|
-
end
|
396
|
-
|
397
298
|
def remove_tags
|
398
299
|
dup.remove_tags!
|
399
300
|
end
|
@@ -484,15 +385,6 @@ if Lite::Ruby.configuration.monkey_patches.include?('string')
|
|
484
385
|
downcase! || self
|
485
386
|
end
|
486
387
|
|
487
|
-
def squish
|
488
|
-
dup.squish!
|
489
|
-
end
|
490
|
-
|
491
|
-
def squish!
|
492
|
-
strip!
|
493
|
-
gsub!(/\s+/, ' ') || self
|
494
|
-
end
|
495
|
-
|
496
388
|
def sort
|
497
389
|
chars.sort.join
|
498
390
|
end
|
@@ -501,73 +393,36 @@ if Lite::Ruby.configuration.monkey_patches.include?('string')
|
|
501
393
|
replace(sort)
|
502
394
|
end
|
503
395
|
|
504
|
-
def titleize
|
505
|
-
dup.titleize!
|
506
|
-
end
|
507
|
-
|
508
|
-
alias titlecase titleize
|
509
|
-
|
510
|
-
def titleize!
|
511
|
-
underscore!
|
512
|
-
humanize!
|
513
|
-
gsub!(/\b(?<!['’`])[a-z]/) { $&.capitalize } || self
|
514
|
-
end
|
515
|
-
|
516
|
-
alias titlecase! titleize!
|
517
|
-
|
518
|
-
def to(position)
|
519
|
-
self[0..position]
|
520
|
-
end
|
521
|
-
|
522
396
|
def transliterize
|
523
|
-
dup.
|
397
|
+
TRANSLITERATIONS.each_with_object(dup) { |(k, v), s| s.gsub!(k, v) }
|
524
398
|
end
|
525
399
|
|
526
400
|
def transliterize!
|
527
|
-
|
401
|
+
replace(transliterize)
|
528
402
|
end
|
529
403
|
|
530
|
-
def
|
531
|
-
|
404
|
+
def titleize!
|
405
|
+
replace(titleize)
|
406
|
+
end
|
532
407
|
|
533
|
-
|
408
|
+
def truncate_words(word_count, options = {})
|
534
409
|
omission = options[:omission] || '...'
|
535
|
-
|
536
|
-
|
537
|
-
stop = if seperator
|
538
|
-
rindex(seperator || '', size_with_room_for_omission) || size_with_room_for_omission
|
539
|
-
else
|
540
|
-
size_with_room_for_omission
|
541
|
-
end
|
410
|
+
seperator = options[:separator] || /\s+/
|
542
411
|
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
def truncate_words(words_count, options = {})
|
547
|
-
sep = options[:separator] || /\s+/
|
548
|
-
sep = Regexp.escape(sep.to_s) unless sep.is_a(Regexp)
|
549
|
-
return self unless /\A((?:.+?#{sep}){#{words_count - 1}}.+?)#{sep}.*/m.match?(self)
|
412
|
+
seperator = Regexp.escape(seperator.to_s) unless seperator.is_a(Regexp)
|
413
|
+
return self unless /\A((?:.+?#{seperator}){#{word_count - 1}}.+?)#{seperator}.*/m.match?(self)
|
550
414
|
|
551
|
-
"#{::Regexp.last_match(1)}#{
|
415
|
+
"#{::Regexp.last_match(1)}#{omission}"
|
552
416
|
end
|
553
417
|
|
554
|
-
def
|
555
|
-
|
418
|
+
def upcase?
|
419
|
+
upcase == self
|
556
420
|
end
|
557
421
|
|
558
|
-
alias snakecase underscore
|
559
|
-
|
560
422
|
def underscore!
|
561
|
-
|
562
|
-
gsub!(/::/, '/')
|
563
|
-
gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2')
|
564
|
-
gsub!(/([a-z\d])([A-Z])/, '\1_\2')
|
565
|
-
tr!('-', '_')
|
566
|
-
downcase! || self
|
423
|
+
replace(underscore)
|
567
424
|
end
|
568
425
|
|
569
|
-
alias snakecase! underscore!
|
570
|
-
|
571
426
|
def unpollute(delimiter = '^--^--^')
|
572
427
|
dup.unpollute!(delimiter)
|
573
428
|
end
|
@@ -576,19 +431,6 @@ if Lite::Ruby.configuration.monkey_patches.include?('string')
|
|
576
431
|
gsub!(delimiter, '') || self
|
577
432
|
end
|
578
433
|
|
579
|
-
def upcase?
|
580
|
-
upcase == self
|
581
|
-
end
|
582
|
-
|
583
|
-
def unshift(*patterns)
|
584
|
-
patterns.each_with_object('') { |pat, str| str << pat }
|
585
|
-
.concat(self)
|
586
|
-
end
|
587
|
-
|
588
|
-
def unshift!(*patterns)
|
589
|
-
replace(unshift(*patterns))
|
590
|
-
end
|
591
|
-
|
592
434
|
def unquote
|
593
435
|
dup.unquote!
|
594
436
|
end
|
@@ -603,6 +445,15 @@ if Lite::Ruby.configuration.monkey_patches.include?('string')
|
|
603
445
|
self
|
604
446
|
end
|
605
447
|
|
448
|
+
def unshift(*patterns)
|
449
|
+
patterns.each_with_object('') { |pat, str| str << pat }
|
450
|
+
.concat(self)
|
451
|
+
end
|
452
|
+
|
453
|
+
def unshift!(*patterns)
|
454
|
+
replace(unshift(*patterns))
|
455
|
+
end
|
456
|
+
|
606
457
|
def words
|
607
458
|
split(/\s+/)
|
608
459
|
end
|
@@ -624,8 +475,11 @@ if Lite::Ruby.configuration.monkey_patches.include?('string')
|
|
624
475
|
replace(variablize)
|
625
476
|
end
|
626
477
|
|
627
|
-
alias
|
628
|
-
alias
|
478
|
+
alias camelcase! camelize!
|
479
|
+
alias labelcase labelize
|
480
|
+
alias labelcase! labelize!
|
481
|
+
alias snakecase! underscore!
|
482
|
+
alias titlecase! titleize!
|
629
483
|
|
630
484
|
end
|
631
485
|
end
|