Sha256: 3ef6c84f0c04d4becedc4b4a6afe0eef62abc66ff22062a948e9564b1d6a68c8

Contents?: true

Size: 1.09 KB

Versions: 87

Compression:

Stored size: 1.09 KB

Contents

# frozen_string_literal: true

require 'active_support/inflector'

module EacRubyUtils
  class Inflector
    class << self
      VARIABLE_NAME_PATTERN = /[_a-z][_a-z0-9]*/i.freeze

      # Convert a string to a variable format: first character as a lowercase letter or underscore
      # and other as a lowercase letter, underscore or numbers.
      # @param string [String] The source string.
      # @param validate [Boolean] Affect the outcome when the result builded is not in a valid
      #   variable format. If `true`, it raises a {ArgumentError}. If `false`, return `nil`.
      # @return [String, nil]
      # @raise [ArgumentError]
      def variableize(string, validate = true)
        r = ::ActiveSupport::Inflector.transliterate(string).gsub(/[^_a-z0-9]/i, '_')
                                      .gsub(/_+/, '_').gsub(/_\z/, '').gsub(/\A_/, '').downcase
        m = VARIABLE_NAME_PATTERN.match(r)
        return r if m
        return nil unless validate

        raise ::ArgumentError, "Invalid variable name \"#{r}\" was generated " \
          "from string \"#{string}\""
      end
    end
  end
end

Version data entries

87 entries across 87 versions & 3 rubygems

Version Path
eac_ruby_utils-0.94.1 lib/eac_ruby_utils/inflector.rb
eac_ruby_utils-0.94.0 lib/eac_ruby_utils/inflector.rb
eac_ruby_utils-0.93.0 lib/eac_ruby_utils/inflector.rb
avm-tools-0.116.1 sub/eac_ruby_utils/lib/eac_ruby_utils/inflector.rb
avm-tools-0.116.0 sub/eac_ruby_utils/lib/eac_ruby_utils/inflector.rb
eac_ruby_utils-0.92.1 lib/eac_ruby_utils/inflector.rb
avm-tools-0.115.0 sub/eac_ruby_utils/lib/eac_ruby_utils/inflector.rb
eac_ruby_utils-0.92.0 lib/eac_ruby_utils/inflector.rb
eac_ruby_utils-0.91.0 lib/eac_ruby_utils/inflector.rb
eac_ruby_utils-0.90.0 lib/eac_ruby_utils/inflector.rb
eac_ruby_utils-0.89.0 lib/eac_ruby_utils/inflector.rb
eac_ruby_utils-0.88.0 lib/eac_ruby_utils/inflector.rb
avm-tools-0.114.2 sub/eac_ruby_utils/lib/eac_ruby_utils/inflector.rb
avm-tools-0.114.1 sub/eac_ruby_utils/lib/eac_ruby_utils/inflector.rb
eac_ruby_utils-0.87.0 lib/eac_ruby_utils/inflector.rb
eac_ruby_utils-0.86.0 lib/eac_ruby_utils/inflector.rb
avm-tools-0.114.0 sub/eac_ruby_utils/lib/eac_ruby_utils/inflector.rb
eac_ruby_utils-0.85.0 lib/eac_ruby_utils/inflector.rb
eac_ruby_utils-0.84.0 lib/eac_ruby_utils/inflector.rb
eac_ruby_utils-0.83.0 lib/eac_ruby_utils/inflector.rb