Sha256: 30b464da7c24decd0ab60a63e0c0dbdb2a8ee0e9b14eb2d56b636589d200328d

Contents?: true

Size: 1.44 KB

Versions: 6

Compression:

Stored size: 1.44 KB

Contents

# frozen_string_literal: true

module Zeitwerk
  class Inflector
    # Very basic snake case -> camel case conversion.
    #
    #   inflector = Zeitwerk::Inflector.new
    #   inflector.camelize("post", ...)             # => "Post"
    #   inflector.camelize("users_controller", ...) # => "UsersController"
    #   inflector.camelize("api", ...)              # => "Api"
    #
    # Takes into account hard-coded mappings configured with `inflect`.
    #
    # @param basename [String]
    # @param _abspath [String]
    # @return [String]
    def camelize(basename, _abspath)
      overrides[basename] || basename.split('_').map!(&:capitalize).join
    end

    # Configures hard-coded inflections:
    #
    #   inflector = Zeitwerk::Inflector.new
    #   inflector.inflect(
    #     "html_parser"   => "HTMLParser",
    #     "mysql_adapter" => "MySQLAdapter"
    #   )
    #
    #   inflector.camelize("html_parser", abspath)      # => "HTMLParser"
    #   inflector.camelize("mysql_adapter", abspath)    # => "MySQLAdapter"
    #   inflector.camelize("users_controller", abspath) # => "PostsController"
    #
    # @param inflections [{String => String}]
    # @return [void]
    def inflect(inflections)
      overrides.merge!(inflections)
    end

    private

    # Hard-coded basename to constant name user maps that override the default
    # inflection logic.
    #
    # @return [{String => String}]
    def overrides
      @overrides ||= {}
    end
  end
end

Version data entries

6 entries across 6 versions & 3 rubygems

Version Path
zuora_connect_ui-0.10.0 vendor/ruby/2.6.0/gems/zeitwerk-2.2.0/lib/zeitwerk/inflector.rb
zuora_connect_ui-0.9.2 vendor/ruby/2.6.0/gems/zeitwerk-2.2.0/lib/zeitwerk/inflector.rb
chatops-rpc-0.0.2 fixtures/chatops-controller-example/vendor/bundle/ruby/2.5.0/gems/zeitwerk-2.2.0/lib/zeitwerk/inflector.rb
chatops-rpc-0.0.1 fixtures/chatops-controller-example/vendor/bundle/ruby/2.5.0/gems/zeitwerk-2.2.0/lib/zeitwerk/inflector.rb
zuora_connect_ui-0.9.1 vendor/ruby/2.6.0/gems/zeitwerk-2.2.0/lib/zeitwerk/inflector.rb
zeitwerk-2.2.0 lib/zeitwerk/inflector.rb