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