strings-case 0.2.0 → 0.4.0
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/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
@@ -0,0 +1,111 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Strings
|
4
|
+
class Case
|
5
|
+
# A collection of acronyms
|
6
|
+
#
|
7
|
+
# @api private
|
8
|
+
class Acronyms
|
9
|
+
# Create instance from an array of acronyms
|
10
|
+
#
|
11
|
+
# @example
|
12
|
+
# acronyms = Strings::Case::Acronyms.new(%w[HTTP XML])
|
13
|
+
#
|
14
|
+
# @param [Array<String>, Strings::Case::Acronyms] acronyms
|
15
|
+
# the acronyms to add
|
16
|
+
#
|
17
|
+
# @return [Strings::Case::Acronyms]
|
18
|
+
#
|
19
|
+
# @api public
|
20
|
+
def self.from(acronyms = [])
|
21
|
+
return acronyms if acronyms.is_a?(self)
|
22
|
+
|
23
|
+
new(acronyms)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Mappings of downcased string to an acronym
|
27
|
+
#
|
28
|
+
# @example
|
29
|
+
# acronyms.entries
|
30
|
+
# # => {"http" => "HTTP"}
|
31
|
+
#
|
32
|
+
# @return [Hash{String => String}]
|
33
|
+
#
|
34
|
+
# @api private
|
35
|
+
attr_reader :entries
|
36
|
+
|
37
|
+
# A pattern
|
38
|
+
#
|
39
|
+
# @example
|
40
|
+
# acronyms.pattern
|
41
|
+
#
|
42
|
+
# @return [Regexp]
|
43
|
+
#
|
44
|
+
# @api public
|
45
|
+
attr_reader :pattern
|
46
|
+
|
47
|
+
# Create an Acronyms instance
|
48
|
+
#
|
49
|
+
# @example
|
50
|
+
# acronyms = Strings::Case::Acronyms.new(%w[HTTP XML])
|
51
|
+
#
|
52
|
+
# @param [Array<String>] acronyms
|
53
|
+
# an array of acronyms
|
54
|
+
#
|
55
|
+
# @api public
|
56
|
+
def initialize(acronyms = [])
|
57
|
+
@entries = {}
|
58
|
+
@pattern = /(?!)/ # match nothing
|
59
|
+
|
60
|
+
acronyms.each { |acronym| add(acronym) }
|
61
|
+
end
|
62
|
+
|
63
|
+
# Add an acronym
|
64
|
+
#
|
65
|
+
# @example
|
66
|
+
# acronyms.add("HTTP")
|
67
|
+
#
|
68
|
+
# @example
|
69
|
+
# acronyms << "HTTP"
|
70
|
+
#
|
71
|
+
# @param [String] string
|
72
|
+
# the string name to add to the acronyms
|
73
|
+
#
|
74
|
+
# @return [void]
|
75
|
+
#
|
76
|
+
# @api public
|
77
|
+
def add(string)
|
78
|
+
@entries[string.downcase] = string
|
79
|
+
@pattern = /#{Regexp.union(to_a)}(?=\b|[^\p{Ll}])/
|
80
|
+
end
|
81
|
+
alias << add
|
82
|
+
|
83
|
+
# Find an acronym
|
84
|
+
#
|
85
|
+
# @example
|
86
|
+
# acronyms.fetch("http")
|
87
|
+
#
|
88
|
+
# @param [String] string
|
89
|
+
# the string to search for an acronym
|
90
|
+
#
|
91
|
+
# @return [String]
|
92
|
+
#
|
93
|
+
# @api public
|
94
|
+
def fetch(string)
|
95
|
+
@entries[string.downcase]
|
96
|
+
end
|
97
|
+
|
98
|
+
# Convert to an array of all acronyms
|
99
|
+
#
|
100
|
+
# @example
|
101
|
+
# acronyms.to_a
|
102
|
+
#
|
103
|
+
# @return [Array<String>]
|
104
|
+
#
|
105
|
+
# @api public
|
106
|
+
def to_a
|
107
|
+
@entries.values
|
108
|
+
end
|
109
|
+
end # Acronyms
|
110
|
+
end # Case
|
111
|
+
end # Strings
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "acronyms"
|
4
|
+
|
5
|
+
module Strings
|
6
|
+
class Case
|
7
|
+
# Responsible for storing acronyms configuration
|
8
|
+
#
|
9
|
+
# @api private
|
10
|
+
class Configuration
|
11
|
+
# All the registered acronyms
|
12
|
+
#
|
13
|
+
# @example
|
14
|
+
# configuration.acronyms
|
15
|
+
#
|
16
|
+
# @return [Strings::Case::Acronyms]
|
17
|
+
#
|
18
|
+
# @api public
|
19
|
+
attr_reader :acronyms
|
20
|
+
|
21
|
+
# Create a Configuration instance
|
22
|
+
#
|
23
|
+
# @example
|
24
|
+
# configuration = Strings::Case::Cofiguration.new
|
25
|
+
#
|
26
|
+
# @api public
|
27
|
+
def initialize
|
28
|
+
@acronyms = Acronyms.new
|
29
|
+
end
|
30
|
+
|
31
|
+
# Add an acronym
|
32
|
+
#
|
33
|
+
# @example
|
34
|
+
# strings = Strings::Case.new
|
35
|
+
# strings.configure do |config|
|
36
|
+
# config.acronym "HTTP"
|
37
|
+
# end
|
38
|
+
# strings.pascalcase("http_response") # => "HTTPResponse"
|
39
|
+
# strings.camelcase("http_response") # => "HTTPResponse"
|
40
|
+
# strings.snakecase("HTTPResponse") # => "http_response"
|
41
|
+
# strings.titlecase("http_response") # => "HTTP Response"
|
42
|
+
# strings.sentencecase("http_response") # => "HTTP response"
|
43
|
+
#
|
44
|
+
# @param [Array<String>] names
|
45
|
+
# the names to add to the acronyms list
|
46
|
+
#
|
47
|
+
# @return [void]
|
48
|
+
#
|
49
|
+
# @api public
|
50
|
+
def acronym(*names)
|
51
|
+
names.each { |name| @acronyms << name }
|
52
|
+
end
|
53
|
+
end # Configuration
|
54
|
+
end # Case
|
55
|
+
end # Strings
|
@@ -1,46 +1,96 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative "../case"
|
4
|
+
|
3
5
|
module Strings
|
4
|
-
|
6
|
+
class Case
|
7
|
+
# Responsible for refining the String class with case conversions
|
8
|
+
#
|
9
|
+
# @api public
|
5
10
|
module Extensions
|
6
11
|
refine String do
|
12
|
+
# Convert string to camel case
|
13
|
+
#
|
14
|
+
# @see Strings::Case#camelcase
|
15
|
+
#
|
16
|
+
# @api public
|
7
17
|
def camelcase(*args, **options)
|
8
18
|
Strings::Case.camelcase(self, *args, **options)
|
9
19
|
end
|
10
|
-
|
20
|
+
alias_method :lower_camelcase, :camelcase
|
11
21
|
|
22
|
+
# Convert string to constant case
|
23
|
+
#
|
24
|
+
# @see Strings::Case#constcase
|
25
|
+
#
|
26
|
+
# @api public
|
12
27
|
def constcase(*args, **options)
|
13
28
|
Strings::Case.constcase(self, *args, **options)
|
14
29
|
end
|
15
|
-
|
30
|
+
alias_method :constantcase, :constcase
|
16
31
|
|
32
|
+
# Convert string to an HTTP header
|
33
|
+
#
|
34
|
+
# @see Strings::Case#headercase
|
35
|
+
#
|
36
|
+
# @api public
|
17
37
|
def headercase(*args, **options)
|
18
38
|
Strings::Case.headercase(self, *args, **options)
|
19
39
|
end
|
20
40
|
|
41
|
+
# Convert string to lowercase words linked by hyphens
|
42
|
+
#
|
43
|
+
# @see Strings::Case#kebabcase
|
44
|
+
#
|
45
|
+
# @api public
|
21
46
|
def kebabcase(*args, **options)
|
22
47
|
Strings::Case.kebabcase(self, *args, **options)
|
23
48
|
end
|
24
|
-
|
49
|
+
alias_method :dashcase, :kebabcase
|
25
50
|
|
51
|
+
# Convert string to pascal case
|
52
|
+
#
|
53
|
+
# @see Strings::Case#pascalcase
|
54
|
+
#
|
55
|
+
# @api public
|
26
56
|
def pascalcase(*args, **options)
|
27
57
|
Strings::Case.pascalcase(self, *args, **options)
|
28
58
|
end
|
29
|
-
|
59
|
+
alias_method :upper_camelcase, :pascalcase
|
30
60
|
|
61
|
+
# Convert string to file path case
|
62
|
+
#
|
63
|
+
# @see Strings::Case#pathcase
|
64
|
+
#
|
65
|
+
# @api public
|
31
66
|
def pathcase(*args, **options)
|
32
67
|
Strings::Case.pathcase(self, *args, **options)
|
33
68
|
end
|
34
69
|
|
70
|
+
# Convert string to sentence case
|
71
|
+
#
|
72
|
+
# @see Strings::Case#sentencecase
|
73
|
+
#
|
74
|
+
# @api public
|
35
75
|
def sentencecase(*args, **options)
|
36
76
|
Strings::Case.sentencecase(self, *args, **options)
|
37
77
|
end
|
38
78
|
|
79
|
+
# Convert string to snake case
|
80
|
+
#
|
81
|
+
# @see Strings::Case#snakecase
|
82
|
+
#
|
83
|
+
# @api public
|
39
84
|
def snakecase(*args, **options)
|
40
85
|
Strings::Case.snakecase(self, *args, **options)
|
41
86
|
end
|
42
|
-
|
87
|
+
alias_method :underscore, :snakecase
|
43
88
|
|
89
|
+
# Convert string to title case
|
90
|
+
#
|
91
|
+
# @see Strings::Case#titlecase
|
92
|
+
#
|
93
|
+
# @api public
|
44
94
|
def titlecase(*args, **options)
|
45
95
|
Strings::Case.titlecase(self, *args, **options)
|
46
96
|
end
|
data/lib/strings/case/version.rb
CHANGED