strings-case 0.2.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +27 -1
- data/LICENSE.txt +1 -1
- data/README.md +231 -131
- data/lib/strings/case/acronyms.rb +111 -0
- data/lib/strings/case/configuration.rb +55 -0
- data/lib/strings/case/extensions.rb +56 -6
- data/lib/strings/case/version.rb +4 -4
- data/lib/strings/case.rb +248 -145
- metadata +17 -40
- data/Rakefile +0 -8
- data/spec/spec_helper.rb +0 -39
- data/spec/unit/camelcase_spec.rb +0 -51
- data/spec/unit/constcase_spec.rb +0 -44
- data/spec/unit/extensions_spec.rb +0 -75
- data/spec/unit/headercase_spec.rb +0 -50
- data/spec/unit/kebabcase_spec.rb +0 -48
- data/spec/unit/pascalcase_spec.rb +0 -51
- data/spec/unit/pathcase_spec.rb +0 -51
- data/spec/unit/sentencecase_spec.rb +0 -51
- data/spec/unit/snakecase_spec.rb +0 -51
- data/spec/unit/titlecase_spec.rb +0 -51
- data/strings-case.gemspec +0 -32
- data/tasks/console.rake +0 -11
- data/tasks/coverage.rake +0 -11
- data/tasks/spec.rake +0 -29
data/lib/strings/case.rb
CHANGED
@@ -1,304 +1,407 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "forwardable"
|
4
|
+
require "strscan"
|
5
|
+
|
6
|
+
require_relative "case/acronyms"
|
7
|
+
require_relative "case/configuration"
|
3
8
|
require_relative "case/version"
|
4
9
|
|
5
10
|
module Strings
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
11
|
+
# Responsible for converting strings to common cases
|
12
|
+
#
|
13
|
+
# @api public
|
14
|
+
class Case
|
15
|
+
# The word delimiters
|
16
|
+
#
|
17
|
+
# @return [Array<String>]
|
18
|
+
#
|
19
|
+
# @api private
|
10
20
|
DELIMITERS = [" ", "\n", "\t", "_", ".", "-", "#", "?", "!"].freeze
|
11
|
-
|
12
|
-
|
13
|
-
|
21
|
+
private_constant :DELIMITERS
|
22
|
+
|
23
|
+
# The pattern to detect word delimiters
|
24
|
+
#
|
25
|
+
# @return [Regexp]
|
26
|
+
#
|
27
|
+
# @api private
|
28
|
+
DELIMS = Regexp.union(DELIMITERS)
|
29
|
+
private_constant :DELIMS
|
30
|
+
|
31
|
+
# The pattern to detect uppercase characters
|
32
|
+
#
|
33
|
+
# @return [Regexp]
|
34
|
+
#
|
35
|
+
# @api private
|
36
|
+
UPPERCASE = /^(\p{Ll}|\p{Digit})\p{Lu}/.freeze
|
37
|
+
private_constant :UPPERCASE
|
38
|
+
|
39
|
+
# The pattern to detect lowercase characters
|
40
|
+
#
|
41
|
+
# @return [Regexp]
|
42
|
+
#
|
43
|
+
# @api private
|
14
44
|
LOWERCASE = /\p{Lu}(?=\p{Ll})/.freeze
|
45
|
+
private_constant :LOWERCASE
|
15
46
|
|
16
47
|
class Error < StandardError; end
|
17
48
|
|
18
|
-
#
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
49
|
+
# Global instance
|
50
|
+
#
|
51
|
+
# @return [Strings::Case]
|
52
|
+
#
|
53
|
+
# @api private
|
54
|
+
def self.__instance__
|
55
|
+
@__instance__ ||= Case.new
|
25
56
|
end
|
57
|
+
private_class_method :__instance__
|
58
|
+
|
59
|
+
class << self
|
60
|
+
extend Forwardable
|
26
61
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
62
|
+
delegate %i[camelcase constcase constantcase dashcase
|
63
|
+
headercase kebabcase lower_camelcase
|
64
|
+
pascalcase pathcase sentencecase snakecase
|
65
|
+
titlecase underscore upper_camelcase] => :__instance__
|
66
|
+
end
|
67
|
+
|
68
|
+
# Create a Strings::Case instance
|
31
69
|
#
|
32
70
|
# @example
|
33
|
-
#
|
71
|
+
# strings = Strings::Case.new(acronyms: %w[HTTP XML])
|
34
72
|
#
|
35
|
-
# @param [String]
|
36
|
-
# the string to camelcase
|
37
|
-
# @param [Array[String]] acronyms
|
73
|
+
# @param [Array<String>] acronyms
|
38
74
|
# the acronyms to use to prevent modifications
|
39
|
-
# @param [String] separator
|
40
|
-
# the separator for linking words, by default none
|
41
75
|
#
|
42
76
|
# @api public
|
43
|
-
def
|
44
|
-
|
77
|
+
def initialize(acronyms: nil)
|
78
|
+
configure(acronyms: acronyms)
|
79
|
+
end
|
45
80
|
|
46
|
-
|
81
|
+
# Access configuration
|
82
|
+
#
|
83
|
+
# @example
|
84
|
+
# strings.config
|
85
|
+
#
|
86
|
+
# @return [Strings::Case::Configuration]
|
87
|
+
#
|
88
|
+
# @api public
|
89
|
+
def config
|
90
|
+
@config ||= Configuration.new
|
91
|
+
end
|
47
92
|
|
48
|
-
|
49
|
-
|
50
|
-
|
93
|
+
# Configure acronyms
|
94
|
+
#
|
95
|
+
# @example
|
96
|
+
# strings = Strings::Case.new
|
97
|
+
# strings.configure do |config|
|
98
|
+
# config.acronym "HTTP"
|
99
|
+
# end
|
100
|
+
#
|
101
|
+
# @example
|
102
|
+
# strings = Strings::Case.new
|
103
|
+
# strings.configure(acronyms: %w[HTTP XML])
|
104
|
+
#
|
105
|
+
# @param [Array<String>] acronyms
|
106
|
+
# the acronyms to use to prevent modifications
|
107
|
+
#
|
108
|
+
# @yield [Strings::Case::Configuration]
|
109
|
+
#
|
110
|
+
# @return [void]
|
111
|
+
#
|
112
|
+
# @api public
|
113
|
+
def configure(acronyms: nil)
|
114
|
+
if block_given?
|
115
|
+
yield config
|
51
116
|
else
|
52
|
-
|
117
|
+
config.acronym(*acronyms)
|
53
118
|
end
|
54
119
|
end
|
55
|
-
module_function :camelcase
|
56
120
|
|
121
|
+
# Convert string to camel case
|
122
|
+
#
|
123
|
+
# @example
|
124
|
+
# camelcase("foo bar baz") # => "fooBarBaz"
|
125
|
+
#
|
126
|
+
# @param [String] string
|
127
|
+
# the string to convert to camel case
|
128
|
+
# @param [Array<String>] acronyms
|
129
|
+
# the acronyms to use to prevent modifications
|
130
|
+
# @param [String] separator
|
131
|
+
# the words separator, by default an empty string
|
132
|
+
#
|
133
|
+
# @return [String]
|
134
|
+
#
|
135
|
+
# @api public
|
136
|
+
def camelcase(string, acronyms: config.acronyms, separator: "")
|
137
|
+
acronyms = Acronyms.from(acronyms)
|
138
|
+
parsecase(string, acronyms: acronyms, sep: separator) do |word, i|
|
139
|
+
acronyms.fetch(word) || (i.zero? ? word.downcase : word.capitalize)
|
140
|
+
end
|
141
|
+
end
|
57
142
|
alias lower_camelcase camelcase
|
58
|
-
module_function :lower_camelcase
|
59
143
|
|
60
|
-
#
|
144
|
+
# Convert string to constant case
|
61
145
|
#
|
62
146
|
# @example
|
63
147
|
# constantcase("foo bar baz") # => "FOO_BAR_BAZ"
|
64
148
|
#
|
65
149
|
# @param [String] string
|
66
|
-
# the string to
|
67
|
-
# @param [Array
|
150
|
+
# the string to convert to constant case
|
151
|
+
# @param [Array<String>] acronyms
|
68
152
|
# the acronyms to use to prevent modifications
|
69
153
|
# @param [String] separator
|
70
|
-
# the words separator, by default "_"
|
154
|
+
# the words separator, by default an underscore "_"
|
155
|
+
#
|
156
|
+
# @return [String]
|
71
157
|
#
|
72
158
|
# @api public
|
73
|
-
def constcase(string, separator: "_")
|
74
|
-
|
159
|
+
def constcase(string, acronyms: config.acronyms, separator: "_")
|
160
|
+
acronyms = Acronyms.from(acronyms)
|
161
|
+
parsecase(string, acronyms: acronyms, sep: separator, &:upcase)
|
75
162
|
end
|
76
|
-
module_function :constcase
|
77
|
-
|
78
163
|
alias constantcase constcase
|
79
|
-
module_function :constantcase
|
80
164
|
|
81
|
-
# Convert string to
|
165
|
+
# Convert string to header case
|
82
166
|
#
|
83
167
|
# @example
|
84
168
|
# headercase("foo bar baz") # = "Foo-Bar-Baz"
|
85
169
|
#
|
86
170
|
# @param [String] string
|
87
|
-
# the string to
|
88
|
-
# @param [Array
|
171
|
+
# the string to convert to header case
|
172
|
+
# @param [Array<String>] acronyms
|
89
173
|
# the acronyms to use to prevent modifications
|
90
174
|
# @param [String] separator
|
91
|
-
# the words separator, by default "-"
|
175
|
+
# the words separator, by default a hyphen "-"
|
176
|
+
#
|
177
|
+
# @return [String]
|
92
178
|
#
|
93
179
|
# @api public
|
94
|
-
def headercase(string, acronyms:
|
95
|
-
|
180
|
+
def headercase(string, acronyms: config.acronyms, separator: "-")
|
181
|
+
acronyms = Acronyms.from(acronyms)
|
182
|
+
parsecase(string, acronyms: acronyms, sep: separator) do |word|
|
183
|
+
(acronym = acronyms.fetch(word)) ? acronym : word.capitalize
|
184
|
+
end
|
96
185
|
end
|
97
|
-
module_function :headercase
|
98
186
|
|
99
|
-
#
|
187
|
+
# Convert string to kebab case
|
100
188
|
#
|
101
189
|
# @example
|
102
190
|
# kebabcase("fooBarBaz") # => "foo-bar-baz"
|
103
191
|
#
|
192
|
+
# @example
|
104
193
|
# kebabcase("__FOO_BAR__") # => "foo-bar"
|
105
194
|
#
|
106
195
|
# @param [String] string
|
107
|
-
# the string to convert to
|
108
|
-
# @param [Array
|
196
|
+
# the string to convert to kebab case
|
197
|
+
# @param [Array<String>] acronyms
|
109
198
|
# the acronyms to use to prevent modifications
|
110
199
|
# @param [String] separator
|
111
|
-
# the separator
|
200
|
+
# the words separator, by default a hyphen "-"
|
112
201
|
#
|
113
202
|
# @return [String]
|
114
203
|
#
|
115
204
|
# @api public
|
116
|
-
def kebabcase(string, acronyms:
|
117
|
-
|
205
|
+
def kebabcase(string, acronyms: config.acronyms, separator: "-")
|
206
|
+
acronyms = Acronyms.from(acronyms)
|
207
|
+
parsecase(string, acronyms: acronyms, sep: separator, &:downcase)
|
118
208
|
end
|
119
|
-
module_function :kebabcase
|
120
|
-
|
121
209
|
alias dashcase kebabcase
|
122
|
-
module_function :dashcase
|
123
210
|
|
124
|
-
# Convert string to
|
125
|
-
# * every word has its first character uppercased
|
126
|
-
# * all words are compounded together
|
211
|
+
# Convert string to Pascal case
|
127
212
|
#
|
128
213
|
# @example
|
129
214
|
# pascalcase("foo bar baz") # => "FooBarBaz"
|
130
215
|
#
|
131
216
|
# @param [String] string
|
132
|
-
# the string to convert to
|
133
|
-
# @param [Array
|
217
|
+
# the string to convert to Pascal case
|
218
|
+
# @param [Array<String>] acronyms
|
134
219
|
# the acronyms to use to prevent modifications
|
135
220
|
# @param [String] separator
|
136
|
-
# the separator
|
221
|
+
# the words separator, by default an empty string
|
222
|
+
#
|
223
|
+
# @return [String]
|
137
224
|
#
|
138
225
|
# @api public
|
139
|
-
def pascalcase(string, acronyms:
|
140
|
-
|
226
|
+
def pascalcase(string, acronyms: config.acronyms, separator: "")
|
227
|
+
acronyms = Acronyms.from(acronyms)
|
228
|
+
parsecase(string, acronyms: acronyms, sep: separator) do |word|
|
229
|
+
acronyms.fetch(word) || word.capitalize
|
230
|
+
end
|
141
231
|
end
|
142
|
-
module_function :pascalcase
|
143
|
-
|
144
232
|
alias upper_camelcase pascalcase
|
145
|
-
module_function :upper_camelcase
|
146
233
|
|
147
|
-
# Convert string
|
148
|
-
#
|
149
|
-
# By default uses `/` as a path separator.
|
234
|
+
# Convert string to path case
|
150
235
|
#
|
151
236
|
# @example
|
152
237
|
# pathcase("foo bar baz") # => "foo/bar/baz"
|
153
238
|
#
|
239
|
+
# @example
|
154
240
|
# pathcase("FooBarBaz") # => "foo/bar/baz"
|
155
241
|
#
|
156
242
|
# @param [String] string
|
157
|
-
# the string to convert to
|
158
|
-
# @param [Array
|
243
|
+
# the string to convert to path case
|
244
|
+
# @param [Array<String>] acronyms
|
159
245
|
# the acronyms to use to prevent modifications
|
160
246
|
# @param [String] separator
|
161
|
-
# the separator
|
247
|
+
# the words separator, by default a forward slash "/"
|
248
|
+
#
|
249
|
+
# @return [String]
|
162
250
|
#
|
163
251
|
# @api public
|
164
|
-
def pathcase(string, acronyms:
|
165
|
-
|
252
|
+
def pathcase(string, acronyms: config.acronyms, separator: "/")
|
253
|
+
acronyms = Acronyms.from(acronyms)
|
254
|
+
parsecase(string, acronyms: acronyms, sep: separator, &:downcase)
|
166
255
|
end
|
167
|
-
module_function :pathcase
|
168
256
|
|
169
|
-
# Convert string
|
257
|
+
# Convert string to sentence case
|
170
258
|
#
|
171
259
|
# @example
|
172
260
|
# sentencecase("foo bar baz") # => "Foo bar baz"
|
173
261
|
#
|
174
262
|
# @param [String] string
|
175
|
-
# the string to convert to sentence
|
176
|
-
# @param [Array
|
263
|
+
# the string to convert to sentence case
|
264
|
+
# @param [Array<String>] acronyms
|
177
265
|
# the acronyms to use to prevent modifications
|
178
266
|
# @param [String] separator
|
179
|
-
# the separator
|
267
|
+
# the words separator, by default a space
|
268
|
+
#
|
269
|
+
# @return [String]
|
180
270
|
#
|
181
271
|
# @api public
|
182
|
-
def sentencecase(string, acronyms:
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
res[0].upcase + res[1..-1]
|
272
|
+
def sentencecase(string, acronyms: config.acronyms, separator: " ")
|
273
|
+
acronyms = Acronyms.from(acronyms)
|
274
|
+
parsecase(string, acronyms: acronyms, sep: separator) do |word, i|
|
275
|
+
acronyms.fetch(word) || (i.zero? ? word.capitalize : word.downcase)
|
276
|
+
end
|
188
277
|
end
|
189
|
-
module_function :sentencecase
|
190
278
|
|
191
|
-
# Convert string
|
279
|
+
# Convert string to snake case
|
192
280
|
#
|
193
281
|
# @example
|
194
282
|
# snakecase("foo bar baz") # => "foo_bar_baz"
|
195
283
|
#
|
284
|
+
# @example
|
196
285
|
# snakecase("ЗдравствуйтеПривет") # => "здравствуйте_привет"
|
197
286
|
#
|
287
|
+
# @example
|
198
288
|
# snakecase("HTTPResponse") # => "http_response"
|
199
289
|
#
|
200
290
|
# @param [String] string
|
201
291
|
# the string to convert to snake case
|
202
|
-
# @param [Array
|
292
|
+
# @param [Array<String>] acronyms
|
203
293
|
# the acronyms to use to prevent modifications
|
204
294
|
# @param [String] separator
|
205
|
-
# the separator
|
295
|
+
# the words separator, by default an underscore "_"
|
296
|
+
#
|
297
|
+
# @return [String]
|
206
298
|
#
|
207
299
|
# @api public
|
208
|
-
def snakecase(string, acronyms:
|
209
|
-
|
300
|
+
def snakecase(string, acronyms: config.acronyms, separator: "_")
|
301
|
+
acronyms = Acronyms.from(acronyms)
|
302
|
+
parsecase(string, acronyms: acronyms, sep: separator, &:downcase)
|
210
303
|
end
|
211
|
-
module_function :snakecase
|
212
|
-
|
213
304
|
alias underscore snakecase
|
214
|
-
module_function :underscore
|
215
305
|
|
216
|
-
# Convert string
|
306
|
+
# Convert string to title case
|
217
307
|
#
|
218
308
|
# @example
|
219
309
|
# titlecase("foo bar baz") # => "Foo Bar Baz"
|
220
310
|
#
|
221
311
|
# @param [String] string
|
222
312
|
# the string to convert to title case
|
223
|
-
# @param [Array
|
313
|
+
# @param [Array<String>] acronyms
|
224
314
|
# the acronyms to use to prevent modifications
|
225
315
|
# @param [String] separator
|
226
|
-
# the separator
|
316
|
+
# the words separator, by default a space
|
317
|
+
#
|
318
|
+
# @return [String]
|
227
319
|
#
|
228
320
|
# @api public
|
229
|
-
def titlecase(string, acronyms:
|
230
|
-
|
321
|
+
def titlecase(string, acronyms: config.acronyms, separator: " ")
|
322
|
+
acronyms = Acronyms.from(acronyms)
|
323
|
+
parsecase(string, acronyms: acronyms, sep: separator) do |word|
|
324
|
+
acronyms.fetch(word) || word.capitalize
|
325
|
+
end
|
231
326
|
end
|
232
|
-
|
327
|
+
|
328
|
+
private
|
233
329
|
|
234
330
|
# Parse string and transform to desired case
|
235
331
|
#
|
332
|
+
# @param [String] string
|
333
|
+
# the string to convert to a given case
|
334
|
+
# @param [Strings::Case::Acronyms] acronyms
|
335
|
+
# the acronyms to use to parse words
|
336
|
+
# @param [String] sep
|
337
|
+
# the words separator, by default an underscore "_"
|
338
|
+
#
|
339
|
+
# @yield [word, index]
|
340
|
+
#
|
341
|
+
# @return [String]
|
342
|
+
#
|
236
343
|
# @api private
|
237
|
-
def parsecase(string, acronyms:
|
344
|
+
def parsecase(string, acronyms: nil, sep: "_", &conversion)
|
238
345
|
return if string.nil?
|
239
346
|
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
words
|
245
|
-
.map(&no_case)
|
246
|
-
.map(&casing)
|
247
|
-
.join(sep)
|
347
|
+
none_or_index = conversion.arity <= 1 ? :map : :with_index
|
348
|
+
split_into_words(string, acronyms: acronyms, sep: sep)
|
349
|
+
.map.send(none_or_index, &conversion).join(sep)
|
248
350
|
end
|
249
|
-
module_function :parsecase
|
250
|
-
private_class_method :parsecase
|
251
351
|
|
252
352
|
# Split string into words
|
253
353
|
#
|
254
|
-
# @
|
354
|
+
# @param [String] string
|
355
|
+
# the string to split into words
|
356
|
+
# @param [Strings::Case::Acronyms] acronyms
|
357
|
+
# the acronyms to use to split words
|
358
|
+
# @param [String] sep
|
359
|
+
# the separator to use to split words
|
360
|
+
#
|
361
|
+
# @return [Array<String>]
|
255
362
|
# the split words
|
256
363
|
#
|
257
364
|
# @api private
|
258
|
-
def split_into_words(string, sep: nil)
|
365
|
+
def split_into_words(string, acronyms: nil, sep: nil)
|
259
366
|
words = []
|
260
367
|
word = []
|
261
|
-
|
262
|
-
|
263
|
-
string.each_char.with_index do |char, i|
|
264
|
-
combine = word[-1].to_s + char
|
368
|
+
scanner = StringScanner.new(string)
|
265
369
|
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
else
|
370
|
+
while !scanner.eos?
|
371
|
+
if scanner.match?(acronyms.pattern)
|
372
|
+
unless word.empty?
|
270
373
|
words << word.join
|
271
|
-
word
|
374
|
+
word.clear
|
272
375
|
end
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
376
|
+
scanner.scan(acronyms.pattern)
|
377
|
+
words << scanner.matched
|
378
|
+
elsif scanner.match?(UPPERCASE)
|
379
|
+
char = scanner.getch
|
380
|
+
word << char
|
381
|
+
words << word.join
|
382
|
+
word.clear
|
383
|
+
elsif scanner.match?(LOWERCASE)
|
384
|
+
char = scanner.getch
|
282
385
|
words << word.join unless word.empty?
|
283
|
-
|
386
|
+
word = [char]
|
387
|
+
elsif scanner.match?(DELIMS)
|
388
|
+
char = scanner.getch
|
389
|
+
words << word.join unless word.empty?
|
390
|
+
if scanner.pos == 1 && char == sep
|
284
391
|
words << ""
|
392
|
+
elsif scanner.eos? && char == sep
|
393
|
+
word = [""]
|
285
394
|
else
|
286
|
-
word
|
395
|
+
word.clear
|
287
396
|
end
|
288
|
-
elsif NONALPHANUMERIC.include?(char)
|
289
|
-
# noop
|
290
397
|
else
|
291
|
-
word <<
|
292
|
-
end
|
293
|
-
|
294
|
-
if last == i
|
295
|
-
word = [""] if char == sep
|
296
|
-
words << word.join unless word.empty?
|
398
|
+
word << scanner.getch
|
297
399
|
end
|
298
400
|
end
|
299
401
|
|
402
|
+
words << word.join unless word.empty?
|
403
|
+
|
300
404
|
words
|
301
405
|
end
|
302
|
-
module_function :split_into_words
|
303
406
|
end # Case
|
304
407
|
end # Strings
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: strings-case
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Murach
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-11-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: bundler
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.5'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '1.5'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: rake
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -42,56 +28,47 @@ dependencies:
|
|
42
28
|
name: rspec
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
|
-
- - "
|
31
|
+
- - ">="
|
46
32
|
- !ruby/object:Gem::Version
|
47
33
|
version: '3.0'
|
48
34
|
type: :development
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
|
-
- - "
|
38
|
+
- - ">="
|
53
39
|
- !ruby/object:Gem::Version
|
54
40
|
version: '3.0'
|
55
41
|
description: Convert strings to different cases
|
56
42
|
email:
|
57
|
-
-
|
43
|
+
- piotr@piotrmurach.com
|
58
44
|
executables: []
|
59
45
|
extensions: []
|
60
|
-
extra_rdoc_files:
|
46
|
+
extra_rdoc_files:
|
47
|
+
- README.md
|
48
|
+
- CHANGELOG.md
|
49
|
+
- LICENSE.txt
|
61
50
|
files:
|
62
51
|
- CHANGELOG.md
|
63
52
|
- LICENSE.txt
|
64
53
|
- README.md
|
65
|
-
- Rakefile
|
66
54
|
- lib/strings-case.rb
|
67
55
|
- lib/strings/case.rb
|
56
|
+
- lib/strings/case/acronyms.rb
|
57
|
+
- lib/strings/case/configuration.rb
|
68
58
|
- lib/strings/case/extensions.rb
|
69
59
|
- lib/strings/case/version.rb
|
70
|
-
- spec/spec_helper.rb
|
71
|
-
- spec/unit/camelcase_spec.rb
|
72
|
-
- spec/unit/constcase_spec.rb
|
73
|
-
- spec/unit/extensions_spec.rb
|
74
|
-
- spec/unit/headercase_spec.rb
|
75
|
-
- spec/unit/kebabcase_spec.rb
|
76
|
-
- spec/unit/pascalcase_spec.rb
|
77
|
-
- spec/unit/pathcase_spec.rb
|
78
|
-
- spec/unit/sentencecase_spec.rb
|
79
|
-
- spec/unit/snakecase_spec.rb
|
80
|
-
- spec/unit/titlecase_spec.rb
|
81
|
-
- strings-case.gemspec
|
82
|
-
- tasks/console.rake
|
83
|
-
- tasks/coverage.rake
|
84
|
-
- tasks/spec.rake
|
85
60
|
homepage: https://github.com/piotrmurach/strings-case
|
86
61
|
licenses:
|
87
62
|
- MIT
|
88
63
|
metadata:
|
89
64
|
allowed_push_host: https://rubygems.org
|
65
|
+
bug_tracker_uri: https://github.com/piotrmurach/strings-case/issues
|
90
66
|
changelog_uri: https://github.com/piotrmurach/strings-case/blob/master/CHANGELOG.md
|
91
67
|
documentation_uri: https://www.rubydoc.info/gems/strings-case
|
92
68
|
homepage_uri: https://github.com/piotrmurach/strings-case
|
69
|
+
rubygems_mfa_required: 'true'
|
93
70
|
source_code_uri: https://github.com/piotrmurach/strings-case
|
94
|
-
post_install_message:
|
71
|
+
post_install_message:
|
95
72
|
rdoc_options: []
|
96
73
|
require_paths:
|
97
74
|
- lib
|
@@ -106,8 +83,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
83
|
- !ruby/object:Gem::Version
|
107
84
|
version: '0'
|
108
85
|
requirements: []
|
109
|
-
rubygems_version: 3.
|
110
|
-
signing_key:
|
86
|
+
rubygems_version: 3.4.10
|
87
|
+
signing_key:
|
111
88
|
specification_version: 4
|
112
89
|
summary: Convert strings to different cases
|
113
90
|
test_files: []
|