Sha256: 671b13233494171e47368462538345628af02d9f0d8e5999ad25e4d2e7e129d8

Contents?: true

Size: 850 Bytes

Versions: 3

Compression:

Stored size: 850 Bytes

Contents

# frozen_string_literal: true

begin
  require "dry/inflector"
rescue LoadError
  # noop
end

begin
  require "active_support/inflector"
rescue LoadError
  # noop
end

module SiteMaps::Primitives
  class String < ::String
    def classify
      new_str = if defined?(Dry::Inflector)
        Dry::Inflector.new.classify(self)
      elsif defined?(ActiveSupport::Inflector)
        ActiveSupport::Inflector.classify(self)
      else
        split("_").map(&:capitalize).join
      end

      self.class.new(new_str)
    end

    def underscore
      new_str = sub(/^::/, "")
        .gsub("::", "/")
        .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
        .gsub(/([a-z\d])([A-Z])/, '\1_\2')
        .tr("-", "_")
        .tr(".", "_")
        .gsub(/\s/, "_")
        .gsub(/__+/, "_")
        .downcase

      self.class.new(new_str)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
site_maps-0.0.1.beta3 lib/site_maps/primitives/string.rb
site_maps-0.0.1.beta2 lib/site_maps/primitives/string.rb
site_maps-0.0.1.beta1 lib/site_maps/primitives/string.rb