Sha256: 43312d0d5e03aa00ac8531a90a17de71f5b7f4bf34885c1608746806c2250c66
Contents?: true
Size: 1.74 KB
Versions: 3
Compression:
Stored size: 1.74 KB
Contents
# frozen_string_literal: true module Refinements # Refinements for Strings. module Strings refine String.singleton_class do def delimiters %r([a-z][A-Z]|\s*\-\s*|\s*\/\s*|\s*\:+\s*|\s*\_\s*|\s+) end end # rubocop:disable Metrics/BlockLength refine String do def blank? !match(/\A\s*\z/).nil? end def up return self if empty? self[0].upcase + self[1, size] end def down return self if empty? self[0].downcase + self[1, size] end def camelcase if self =~ self.class.delimiters result = up_and_join split(%r(\s*\-\s*|\s*\/\s*|\s*\:+\s*)), delimiter: "::" up_and_join result.split(/\s*\_\s*|\s+/) else up end end def snakecase if self =~ self.class.delimiters result = down_and_join split(%r(\s*\-\s*|\s*\/\s*|\s*\:+\s*)), delimiter: "/" down_and_join result.split(/(?=[A-Z])|\s*\_\s*|\s+/), delimiter: "_" else downcase end end def titleize if self =~ self.class.delimiters result = up_and_join split(/(?=[A-Z])|\s*\_\s*|\s*\-\s*|\s+/), delimiter: " " up_and_join result.split(%r(\s*\/\s*|\s*\:+\s*)), delimiter: "/" else capitalize end end private def up_and_join parts, delimiter: "" parts.reduce "" do |result, part| next part.up if result.empty? "#{result}#{delimiter}#{part.up}" end end def down_and_join parts, delimiter: "" parts.reduce "" do |result, part| next part.down if result.empty? "#{result}#{delimiter}#{part.down}" end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
refinements-3.2.0 | lib/refinements/strings.rb |
refinements-3.1.0 | lib/refinements/strings.rb |
refinements-3.0.0 | lib/refinements/strings.rb |