sigterm_extensions 0.0.4

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.
Files changed (116) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +17 -0
  3. data/Gemfile +6 -0
  4. data/LICENSE.md +0 -0
  5. data/README.md +0 -0
  6. data/bin/ctxirb +156 -0
  7. data/lib/git.rb +166 -0
  8. data/lib/git/LICENSE +21 -0
  9. data/lib/git/author.rb +14 -0
  10. data/lib/git/base.rb +551 -0
  11. data/lib/git/base/factory.rb +75 -0
  12. data/lib/git/branch.rb +126 -0
  13. data/lib/git/branches.rb +71 -0
  14. data/lib/git/config.rb +22 -0
  15. data/lib/git/diff.rb +159 -0
  16. data/lib/git/index.rb +5 -0
  17. data/lib/git/lib.rb +1041 -0
  18. data/lib/git/log.rb +128 -0
  19. data/lib/git/object.rb +312 -0
  20. data/lib/git/path.rb +31 -0
  21. data/lib/git/remote.rb +36 -0
  22. data/lib/git/repository.rb +6 -0
  23. data/lib/git/stash.rb +27 -0
  24. data/lib/git/stashes.rb +55 -0
  25. data/lib/git/status.rb +199 -0
  26. data/lib/git/version.rb +5 -0
  27. data/lib/git/working_directory.rb +4 -0
  28. data/lib/sigterm_extensions.rb +75 -0
  29. data/lib/sigterm_extensions/all.rb +12 -0
  30. data/lib/sigterm_extensions/backtrace_cleaner.rb +129 -0
  31. data/lib/sigterm_extensions/callbacks.rb +847 -0
  32. data/lib/sigterm_extensions/concern.rb +169 -0
  33. data/lib/sigterm_extensions/configurable.rb +38 -0
  34. data/lib/sigterm_extensions/core_ext.rb +4 -0
  35. data/lib/sigterm_extensions/core_ext/array.rb +3 -0
  36. data/lib/sigterm_extensions/core_ext/array/extract.rb +19 -0
  37. data/lib/sigterm_extensions/core_ext/array/extract_options.rb +29 -0
  38. data/lib/sigterm_extensions/core_ext/class.rb +3 -0
  39. data/lib/sigterm_extensions/core_ext/class/attribute.rb +139 -0
  40. data/lib/sigterm_extensions/core_ext/class/attribute_accessors.rb +4 -0
  41. data/lib/sigterm_extensions/core_ext/class/subclasses.rb +52 -0
  42. data/lib/sigterm_extensions/core_ext/custom.rb +12 -0
  43. data/lib/sigterm_extensions/core_ext/digest.rb +3 -0
  44. data/lib/sigterm_extensions/core_ext/digest/uuid.rb +51 -0
  45. data/lib/sigterm_extensions/core_ext/enumerable.rb +232 -0
  46. data/lib/sigterm_extensions/core_ext/file.rb +3 -0
  47. data/lib/sigterm_extensions/core_ext/file/atomic.rb +68 -0
  48. data/lib/sigterm_extensions/core_ext/hash.rb +3 -0
  49. data/lib/sigterm_extensions/core_ext/hash/deep_merge.rb +41 -0
  50. data/lib/sigterm_extensions/core_ext/hash/deep_transform_values.rb +44 -0
  51. data/lib/sigterm_extensions/core_ext/hash/except.rb +22 -0
  52. data/lib/sigterm_extensions/core_ext/hash/keys.rb +141 -0
  53. data/lib/sigterm_extensions/core_ext/hash/reverse_merge.rb +23 -0
  54. data/lib/sigterm_extensions/core_ext/hash/slice.rb +24 -0
  55. data/lib/sigterm_extensions/core_ext/kernel.rb +3 -0
  56. data/lib/sigterm_extensions/core_ext/kernel/concern.rb +12 -0
  57. data/lib/sigterm_extensions/core_ext/kernel/reporting.rb +43 -0
  58. data/lib/sigterm_extensions/core_ext/kernel/singleton_class.rb +6 -0
  59. data/lib/sigterm_extensions/core_ext/load_error.rb +7 -0
  60. data/lib/sigterm_extensions/core_ext/module.rb +3 -0
  61. data/lib/sigterm_extensions/core_ext/module/aliasing.rb +29 -0
  62. data/lib/sigterm_extensions/core_ext/module/anonymous.rb +28 -0
  63. data/lib/sigterm_extensions/core_ext/module/attr_internal.rb +36 -0
  64. data/lib/sigterm_extensions/core_ext/module/attribute_accessors.rb +208 -0
  65. data/lib/sigterm_extensions/core_ext/module/attribute_accessors_per_thread.rb +146 -0
  66. data/lib/sigterm_extensions/core_ext/module/concerning.rb +132 -0
  67. data/lib/sigterm_extensions/core_ext/module/delegation.rb +319 -0
  68. data/lib/sigterm_extensions/core_ext/module/redefine_method.rb +38 -0
  69. data/lib/sigterm_extensions/core_ext/module/remove_method.rb +15 -0
  70. data/lib/sigterm_extensions/core_ext/name_error.rb +36 -0
  71. data/lib/sigterm_extensions/core_ext/object.rb +3 -0
  72. data/lib/sigterm_extensions/core_ext/object/blank.rb +153 -0
  73. data/lib/sigterm_extensions/core_ext/object/colors.rb +39 -0
  74. data/lib/sigterm_extensions/core_ext/object/duplicable.rb +47 -0
  75. data/lib/sigterm_extensions/core_ext/object/inclusion.rb +27 -0
  76. data/lib/sigterm_extensions/core_ext/object/instance_variables.rb +28 -0
  77. data/lib/sigterm_extensions/core_ext/object/methods.rb +61 -0
  78. data/lib/sigterm_extensions/core_ext/object/with_options.rb +80 -0
  79. data/lib/sigterm_extensions/core_ext/range.rb +3 -0
  80. data/lib/sigterm_extensions/core_ext/range/compare_range.rb +74 -0
  81. data/lib/sigterm_extensions/core_ext/range/conversions.rb +39 -0
  82. data/lib/sigterm_extensions/core_ext/range/overlaps.rb +8 -0
  83. data/lib/sigterm_extensions/core_ext/securerandom.rb +43 -0
  84. data/lib/sigterm_extensions/core_ext/string.rb +3 -0
  85. data/lib/sigterm_extensions/core_ext/string/access.rb +93 -0
  86. data/lib/sigterm_extensions/core_ext/string/filters.rb +143 -0
  87. data/lib/sigterm_extensions/core_ext/string/starts_ends_with.rb +4 -0
  88. data/lib/sigterm_extensions/core_ext/string/strip.rb +25 -0
  89. data/lib/sigterm_extensions/core_ext/tryable.rb +132 -0
  90. data/lib/sigterm_extensions/descendants_tracker.rb +108 -0
  91. data/lib/sigterm_extensions/gem_methods.rb +47 -0
  92. data/lib/sigterm_extensions/hash_binding.rb +16 -0
  93. data/lib/sigterm_extensions/inflector.rb +339 -0
  94. data/lib/sigterm_extensions/inflector/acronyms.rb +42 -0
  95. data/lib/sigterm_extensions/inflector/inflections.rb +249 -0
  96. data/lib/sigterm_extensions/inflector/inflections/defaults.rb +117 -0
  97. data/lib/sigterm_extensions/inflector/rules.rb +37 -0
  98. data/lib/sigterm_extensions/inflector/version.rb +8 -0
  99. data/lib/sigterm_extensions/interactive_editor.rb +120 -0
  100. data/lib/sigterm_extensions/lazy.rb +34 -0
  101. data/lib/sigterm_extensions/lazy_load_hooks.rb +79 -0
  102. data/lib/sigterm_extensions/option_merger.rb +32 -0
  103. data/lib/sigterm_extensions/ordered_hash.rb +48 -0
  104. data/lib/sigterm_extensions/ordered_options.rb +83 -0
  105. data/lib/sigterm_extensions/paths.rb +235 -0
  106. data/lib/sigterm_extensions/per_thread_registry.rb +58 -0
  107. data/lib/sigterm_extensions/proxy_object.rb +14 -0
  108. data/lib/sigterm_extensions/staging/boot.rb +31 -0
  109. data/lib/sigterm_extensions/staging/boot/bundler_patch.rb +24 -0
  110. data/lib/sigterm_extensions/staging/boot/command.rb +26 -0
  111. data/lib/sigterm_extensions/staging/boot/gemfile_next_auto_sync.rb +79 -0
  112. data/lib/sigterm_extensions/version.rb +4 -0
  113. data/lib/sigterm_extensions/wrappable.rb +16 -0
  114. data/sigterm_extensions.gemspec +42 -0
  115. data/templates/dotpryrc.rb.erb +124 -0
  116. metadata +315 -0
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SigtermExtensions
4
+ class Inflector
5
+ # A set of acronyms
6
+ #
7
+ # @since 0.1.2
8
+ # @api private
9
+ class Acronyms
10
+ attr_reader :regex
11
+
12
+ # @since 0.1.2
13
+ # @api private
14
+ def initialize
15
+ @rules = {}
16
+ define_regex_patterns
17
+ end
18
+
19
+ # @since 0.1.2
20
+ # @api private
21
+ def apply_to(word, capitalize = true)
22
+ @rules[word.downcase] || (capitalize ? word.capitalize : word)
23
+ end
24
+
25
+ # @since 0.1.2
26
+ # @api private
27
+ def add(rule, replacement)
28
+ @rules[rule] = replacement
29
+ define_regex_patterns
30
+ end
31
+
32
+ private
33
+
34
+ # @since 0.1.2
35
+ # @api private
36
+ def define_regex_patterns
37
+ regex = @rules.empty? ? /(?=a)b/ : /#{@rules.values.join("|")}/
38
+ @regex = /(?:(?<=([A-Za-z\d]))|\b)(#{regex})(?=\b|[^a-z])/
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,249 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "set"
4
+ require_relative "rules"
5
+ require_relative "acronyms"
6
+
7
+ module SigtermExtensions
8
+ class Inflector
9
+ # Inflections
10
+ #
11
+ # @since 0.1.0
12
+ class Inflections
13
+ require_relative "inflections/defaults"
14
+
15
+ # Instantiate a set of inflection rules.
16
+ # It adds the default rules and the optional customizations, passed as a block.
17
+ #
18
+ # @param blk [Proc] the optional, custom rules
19
+ #
20
+ # @since 0.1.0
21
+ # @api private
22
+ def self.build(&blk)
23
+ new do |inflect|
24
+ Defaults.call(inflect)
25
+ blk.call(inflect) if block_given?
26
+ end
27
+ end
28
+
29
+ # Pluralization rules
30
+ #
31
+ # @return [Dry::Inflector::Rules]
32
+ #
33
+ # @since 0.1.0
34
+ # @api private
35
+ attr_reader :plurals
36
+
37
+ # Singularization rules
38
+ #
39
+ # @return [Dry::Inflector::Rules]
40
+ #
41
+ # @since 0.1.0
42
+ # @api private
43
+ attr_reader :singulars
44
+
45
+ # Uncountable rules
46
+ #
47
+ # @return [Set]
48
+ #
49
+ # @since 0.1.0
50
+ # @api private
51
+ attr_reader :uncountables
52
+
53
+ # Human rules
54
+ #
55
+ # @return [Dry::Inflector::Rules]
56
+ #
57
+ # @since 0.1.0
58
+ # @api private
59
+ attr_reader :humans
60
+
61
+ # Acronyms
62
+ #
63
+ # @return [Dry::Inflector::Acronyms]
64
+ #
65
+ # @since 0.1.2
66
+ # @api private
67
+ attr_reader :acronyms
68
+
69
+ # Instantiate the rules
70
+ #
71
+ # @return [Dry::Inflector::Inflections]
72
+ # @yieldparam [self]
73
+ #
74
+ # @since 0.1.0
75
+ # @api private
76
+ def initialize
77
+ @plurals = Rules.new
78
+ @singulars = Rules.new
79
+ @humans = Rules.new
80
+ @uncountables = Set[]
81
+ @acronyms = Acronyms.new
82
+
83
+ yield(self) if block_given?
84
+ end
85
+
86
+ # Add a custom pluralization rule
87
+ #
88
+ # Specifies a new pluralization rule and its replacement.
89
+ # The rule can either be a string or a regular expression.
90
+ # The replacement should always be a string that may include references to the matched data from the rule.
91
+ #
92
+ # @param rule [String, Regexp] the rule
93
+ # @param replacement [String] the replacement
94
+ #
95
+ # @since 0.1.0
96
+ #
97
+ # @example
98
+ # require "dry/inflector"
99
+ #
100
+ # inflector = Dry::Inflector.new do |inflections|
101
+ # inflections.plural "virus", "viruses"
102
+ # end
103
+ def plural(rule, replacement)
104
+ rule(rule, replacement, plurals)
105
+ end
106
+
107
+ # Add a custom singularization rule
108
+ #
109
+ # Specifies a new singularization rule and its replacement.
110
+ # The rule can either be a string or a regular expression.
111
+ # The replacement should always be a string that may include references to the matched data from the rule.
112
+ #
113
+ # @param rule [String, Regexp] the rule
114
+ # @param replacement [String] the replacement
115
+ #
116
+ # @since 0.1.0
117
+ #
118
+ # @example
119
+ # require "dry/inflector"
120
+ #
121
+ # inflector = Dry::Inflector.new do |inflections|
122
+ # inflections.singular "thieves", "thief"
123
+ # end
124
+ def singular(rule, replacement)
125
+ rule(rule, replacement, singulars)
126
+ end
127
+
128
+ # Add a custom pluralization rule
129
+ #
130
+ # Specifies a new irregular that applies to both pluralization and singularization at the same time.
131
+ # This can only be used for strings, not regular expressions.
132
+ # You simply pass the irregular in singular and plural form.
133
+ #
134
+ # @param singular [String] the singular
135
+ # @param plural [String] the plural
136
+ #
137
+ # @since 0.1.0
138
+ #
139
+ # @example
140
+ # require "dry/inflector"
141
+ #
142
+ # inflector = Dry::Inflector.new do |inflections|
143
+ # inflections.singular "octopus", "octopi"
144
+ # end
145
+ def irregular(singular, plural)
146
+ uncountables.delete(singular)
147
+ uncountables.delete(plural)
148
+
149
+ add_irregular(singular, plural, plurals)
150
+ add_irregular(plural, singular, singulars)
151
+ end
152
+
153
+ # Add a custom rule for uncountable words
154
+ #
155
+ # Uncountable will not be inflected
156
+ #
157
+ # @param [Enumerable<String>] words
158
+ #
159
+ # @since 0.1.0
160
+ #
161
+ # @example
162
+ # require "dry/inflector"
163
+ #
164
+ # inflector = Dry::Inflector.new do |inflections|
165
+ # inflections.uncountable "money"
166
+ # inflections.uncountable "money", "information"
167
+ # inflections.uncountable %w(money information rice)
168
+ # end
169
+ def uncountable(*words)
170
+ uncountables.merge(words.flatten)
171
+ end
172
+
173
+ # Add one or more acronyms
174
+ #
175
+ # Acronyms affect how basic operations are performed, such
176
+ # as camelize/underscore.
177
+ #
178
+ # @param words [Array<String>] a list of acronyms
179
+ #
180
+ # @since 0.1.2
181
+ #
182
+ # @example
183
+ # require "dry/inflector"
184
+ #
185
+ # inflector = Dry::Inflector.new do |inflections|
186
+ # inflections.acronym "HTML"
187
+ # end
188
+ #
189
+ # inflector.camelize("html") # => "HTML"
190
+ # inflector.underscore("HTMLIsFun") # => "html_is_fun"
191
+ def acronym(*words)
192
+ words.each { |word| @acronyms.add(word.downcase, word) }
193
+ end
194
+
195
+ # Add a custom humanize rule
196
+ #
197
+ # Specifies a humanized form of a string by a regular expression rule or by a string mapping.
198
+ # When using a regular expression based replacement, the normal humanize formatting is called after the replacement.
199
+ # When a string is used, the human form should be specified as desired (example: `"The name"`, not `"the_name"`)
200
+ #
201
+ # @param rule [String, Regexp] the rule
202
+ # @param replacement [String] the replacement
203
+ #
204
+ # @since 0.1.0
205
+ #
206
+ # @example
207
+ # require "dry/inflector"
208
+ #
209
+ # inflector = Dry::Inflector.new do |inflections|
210
+ # inflections.human(/_cnt$/i, '\1_count')
211
+ # inflections.human("legacy_col_person_name", "Name")
212
+ # end
213
+ def human(rule, replacement)
214
+ humans.insert(0, [rule, replacement])
215
+ end
216
+
217
+ private
218
+
219
+ # Add irregular inflection
220
+ #
221
+ # @param rule [String] the rule
222
+ # @param replacement [String] the replacement
223
+ #
224
+ # @return [undefined]
225
+ #
226
+ # @since 0.1.0
227
+ # @api private
228
+ def add_irregular(rule, replacement, target)
229
+ head, *tail = rule.chars.to_a
230
+ rule(/(#{head})#{tail.join}\z/i, '\1' + replacement[1..-1], target)
231
+ end
232
+
233
+ # Add a new rule
234
+ #
235
+ # @param rule [String, Regexp] the rule
236
+ # @param replacement [String, Regexp] the replacement
237
+ # @param target [Dry::Inflector::Rules] the target
238
+ #
239
+ # @since 0.1.0
240
+ # @api private
241
+ def rule(rule, replacement, target)
242
+ uncountables.delete(rule)
243
+ uncountables.delete(replacement)
244
+
245
+ target.insert(0, [rule, replacement])
246
+ end
247
+ end
248
+ end
249
+ end
@@ -0,0 +1,117 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SigtermExtensions
4
+ class Inflector
5
+ class Inflections
6
+ # Default inflections
7
+ #
8
+ # @since 0.1.0
9
+ # @api private
10
+ #
11
+ # rubocop:disable Metrics/AbcSize
12
+ # rubocop:disable Metrics/MethodLength
13
+ module Defaults
14
+ # @since 0.1.0
15
+ # @api private
16
+ def self.call(inflect)
17
+ plural(inflect)
18
+ singular(inflect)
19
+ irregular(inflect)
20
+ uncountable(inflect)
21
+ acronyms(inflect)
22
+ end
23
+
24
+ # @since 0.1.0
25
+ # @api private
26
+ def self.plural(inflect)
27
+ inflect.plural(/\z/, "s")
28
+ inflect.plural(/s\z/i, "s")
29
+ inflect.plural(/(ax|test)is\z/i, '\1es')
30
+ inflect.plural(/(.*)us\z/i, '\1uses')
31
+ inflect.plural(/(octop|vir|cact)us\z/i, '\1i')
32
+ inflect.plural(/(octop|vir)i\z/i, '\1i')
33
+ inflect.plural(/(alias|status)\z/i, '\1es')
34
+ inflect.plural(/(buffal|domin|ech|embarg|her|mosquit|potat|tomat)o\z/i, '\1oes')
35
+ inflect.plural(/(?<!b)um\z/i, '\1a')
36
+ inflect.plural(/([ti])a\z/i, '\1a')
37
+ inflect.plural(/sis\z/i, "ses")
38
+ inflect.plural(/(.*)(?:([^f]))f[e]*\z/i, '\1\2ves')
39
+ inflect.plural(/(hive|proof)\z/i, '\1s') # TODO: proof can be moved in the above regexp
40
+ inflect.plural(/([^aeiouy]|qu)y\z/i, '\1ies')
41
+ inflect.plural(/(x|ch|ss|sh)\z/i, '\1es')
42
+ inflect.plural(/(stoma|epo)ch\z/i, '\1chs')
43
+ inflect.plural(/(matr|vert|ind)(?:ix|ex)\z/i, '\1ices')
44
+ inflect.plural(/([m|l])ouse\z/i, '\1ice')
45
+ inflect.plural(/([m|l])ice\z/i, '\1ice')
46
+ inflect.plural(/^(ox)\z/i, '\1en')
47
+ inflect.plural(/^(oxen)\z/i, '\1')
48
+ inflect.plural(/(quiz)\z/i, '\1zes')
49
+ inflect.plural(/(.*)non\z/i, '\1na')
50
+ inflect.plural(/(.*)ma\z/i, '\1mata')
51
+ inflect.plural(/(.*)(eau|eaux)\z/, '\1eaux')
52
+ end
53
+
54
+ # @since 0.1.0
55
+ # @api private
56
+ def self.singular(inflect)
57
+ inflect.singular(/s\z/i, "")
58
+ inflect.singular(/(n)ews\z/i, '\1ews')
59
+ inflect.singular(/([ti])a\z/i, '\1um')
60
+ inflect.singular(/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)(sis|ses)\z/i, '\1\2sis')
61
+ inflect.singular(/(^analy)(sis|ses)\z/i, '\1sis')
62
+ inflect.singular(/([^f])ves\z/i, '\1fe')
63
+ inflect.singular(/(hive)s\z/i, '\1')
64
+ inflect.singular(/(tive)s\z/i, '\1')
65
+ inflect.singular(/([lr])ves\z/i, '\1f')
66
+ inflect.singular(/([^aeiouy]|qu)ies\z/i, '\1y')
67
+ inflect.singular(/(s)eries\z/i, '\1eries')
68
+ inflect.singular(/(m)ovies\z/i, '\1ovie')
69
+ inflect.singular(/(ss)\z/i, '\1')
70
+ inflect.singular(/(x|ch|ss|sh)es\z/i, '\1')
71
+ inflect.singular(/([m|l])ice\z/i, '\1ouse')
72
+ inflect.singular(/(bus)(es)?\z/i, '\1')
73
+ inflect.singular(/(o)es\z/i, '\1')
74
+ inflect.singular(/(shoe)s\z/i, '\1')
75
+ inflect.singular(/(cris|ax|test)(is|es)\z/i, '\1is')
76
+ inflect.singular(/(octop|vir)(us|i)\z/i, '\1us')
77
+ inflect.singular(/(alias|status)(es)?\z/i, '\1')
78
+ inflect.singular(/^(ox)en/i, '\1')
79
+ inflect.singular(/(vert|ind)ices\z/i, '\1ex')
80
+ inflect.singular(/(matr)ices\z/i, '\1ix')
81
+ inflect.singular(/(quiz)zes\z/i, '\1')
82
+ inflect.singular(/(database)s\z/i, '\1')
83
+ end
84
+
85
+ # @since 0.1.0
86
+ # @api private
87
+ def self.irregular(inflect)
88
+ inflect.irregular("person", "people")
89
+ inflect.irregular("man", "men")
90
+ inflect.irregular("human", "humans") # NOTE: this is here only to override the previous rule
91
+ inflect.irregular("child", "children")
92
+ inflect.irregular("sex", "sexes")
93
+ inflect.irregular("foot", "feet")
94
+ inflect.irregular("tooth", "teeth")
95
+ inflect.irregular("goose", "geese")
96
+ inflect.irregular("forum", "forums") # FIXME: this is here because I need to fix the "um" regexp
97
+ end
98
+
99
+ # @since 0.1.0
100
+ # @api private
101
+ def self.uncountable(inflect)
102
+ inflect.uncountable(%w[hovercraft moose deer milk rain Swiss grass equipment information rice money species series fish sheep jeans])
103
+ end
104
+
105
+ # @since 0.1.2
106
+ # @api private
107
+ def self.acronyms(inflect)
108
+ inflect.acronym(*%w[JSON HTTP OpenSSL HMAC])
109
+ end
110
+
111
+ private_class_method :plural, :singular, :irregular, :uncountable, :acronyms
112
+ end
113
+ # rubocop:enable Metrics/MethodLength
114
+ # rubocop:enable Metrics/AbcSize
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SigtermExtensions
4
+ class Inflector
5
+ # A set of inflection rules
6
+ #
7
+ # @since 0.1.0
8
+ # @api private
9
+ class Rules
10
+ # @since 0.1.0
11
+ # @api private
12
+ def initialize
13
+ @rules = []
14
+ end
15
+
16
+ # @since 0.1.0
17
+ # @api private
18
+ def apply_to(word)
19
+ result = word.dup
20
+ each { |rule, replacement| break if result.gsub!(rule, replacement) }
21
+ result
22
+ end
23
+
24
+ # @since 0.1.0
25
+ # @api private
26
+ def insert(index, array)
27
+ @rules.insert(index, array)
28
+ end
29
+
30
+ # @since 0.1.0
31
+ # @api private
32
+ def each(&blk)
33
+ @rules.each(&blk)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SigtermExtensions
4
+ class Inflector
5
+ # @since 0.1.0
6
+ VERSION = "0.2.0"
7
+ end
8
+ end